From e649d4a4022d7290bed36cce254205cb04da509b Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 25 Sep 2026 20:02:15 +0000 Subject: [PATCH 01/14] Code review: fix TTS response-pipe bug, dedupe transcription finishing, trim hot-path I/O Bug fixes - Response pipes (FIFO responders) were bound to a TTS worker that startup created without callbacks and then shut down, so pipe replies were silently dropped; disabling TTS also left a worker running for them. Responders now look up the current worker per line, and startup creates a single worker. - Config saves are now atomic (temp file + rename): a crash mid-write used to leave a truncated config.json that loaded back as all-defaults. - Tray/status target label no longer shows an empty string for a target with no label, and get_status handles multi-target ids. - Inference errors keep the utterance's target and hotkey ids. Performance - The per-utterance path no longer re-reads config.json (Config::load also ran migrations and a filesystem migration each time); the in-memory config is already kept current by save_config. - Voice-command parsing uses the in-memory targets cache instead of re-reading and re-parsing targets.toml on every final and interim pass. - Hotkey OpenAI rewrites no longer do a GET /models probe before every request; a 2s connect timeout keeps the fast-fail on a dead server. - Config load writes the file at most once instead of once per migration. - Command-trigger fuzzy matching uses voxctrl-text's allocation-free Levenshtein instead of a full-table copy. Reuse / cleanup - New voxctrl_inference::finalize module shared by the local worker and the remote streaming path (noise gate, prompt, post-processing, hallucination filter, per-hotkey OpenAI overrides), replacing two ~150-line copies. - InferenceOutput::empty/failed constructors; OpenAiMode::from_key. - One start_tts_worker helper replaces three copies of the callback wiring. - routing::targets_display_label replaces four label-resolution copies. - One write_private helper shared by config and routing. - Overlay styles share onLevelFrame (listener + smoothing loop), which also stops leaking the audio-level listener on a fast unmount. - Removed a redundant desktop-integration pass at startup, dead OpenAiClient availability cache, and hand-written Default impls. - dist/ rebuilt. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_015v84hAqhDBdwy7Q49gAWBR --- Cargo.lock | 1 + crates/voxctrl-config/src/lib.rs | 132 ++++---- crates/voxctrl-inference/src/finalize.rs | 222 ++++++++++++ crates/voxctrl-inference/src/lib.rs | 316 +++++------------- crates/voxctrl-llm/src/lib.rs | 37 +- crates/voxctrl-routing/Cargo.toml | 1 + crates/voxctrl-routing/src/lib.rs | 3 +- crates/voxctrl-routing/src/loader.rs | 24 +- crates/voxctrl-routing/src/models.rs | 23 ++ crates/voxctrl-routing/src/targets.rs | 21 +- crates/voxctrl-routing/src/tests.rs | 20 ++ crates/voxctrl-tts/src/fifo.rs | 21 +- dist/assets/index-B0930YBK.js | 156 +++++++++ dist/assets/index-C_ftghkx.js | 155 --------- ...{index-DzCsKclX.css => index-Cu0DrSZY.css} | 2 +- dist/index.html | 4 +- src-tauri/src/commands.rs | 62 +--- src-tauri/src/lib.rs | 31 +- src-tauri/src/pipeline.rs | 226 +++---------- src-tauri/src/services.rs | 83 +++-- src-tauri/src/state.rs | 20 +- src-tauri/src/tray.rs | 24 +- src/lib/Overlay/BlueWave.svelte | 26 +- src/lib/Overlay/MonoBars.svelte | 26 +- src/lib/Overlay/Pulse.svelte | 27 +- src/lib/Overlay/Spectrum.svelte | 26 +- src/lib/Overlay/Terminal.svelte | 26 +- src/lib/Overlay/Vinyl.svelte | 26 +- src/lib/Overlay/VoiceCard.svelte | 26 +- src/lib/Overlay/Waveform.svelte | 26 +- src/lib/Overlay/audio-level.ts | 40 +++ 31 files changed, 814 insertions(+), 1019 deletions(-) create mode 100644 crates/voxctrl-inference/src/finalize.rs create mode 100644 dist/assets/index-B0930YBK.js delete mode 100644 dist/assets/index-C_ftghkx.js rename dist/assets/{index-DzCsKclX.css => index-Cu0DrSZY.css} (56%) create mode 100644 src/lib/Overlay/audio-level.ts diff --git a/Cargo.lock b/Cargo.lock index 40051222..18e0522c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6910,6 +6910,7 @@ dependencies = [ "toml 0.8.23", "tracing", "voxctrl-config", + "voxctrl-text", "voxctrl-winput", "zbus 4.4.0", ] diff --git a/crates/voxctrl-config/src/lib.rs b/crates/voxctrl-config/src/lib.rs index 06825fb5..ef3c4e8d 100644 --- a/crates/voxctrl-config/src/lib.rs +++ b/crates/voxctrl-config/src/lib.rs @@ -1,4 +1,4 @@ -use std::path::PathBuf; +use std::path::{Path, PathBuf}; use serde::{Deserialize, Serialize}; use thiserror::Error; @@ -108,13 +108,14 @@ impl Default for RemoteOpenAiConfig { } } -#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "kebab-case")] pub enum BackendChoice { /// `alias = "auto"` migrates configs written when the backend could be /// left unset: auto-selection always resolved to whisper.cpp anyway, so /// those installs keep the backend they were already running. #[serde(alias = "auto")] + #[default] WhisperCpp, Moonshine, Parakeet, @@ -122,12 +123,6 @@ pub enum BackendChoice { RemoteOpenAi, } -impl Default for BackendChoice { - fn default() -> Self { - Self::WhisperCpp - } -} - fn default_s1_mini_styling() -> String { "semi-formal".into() } @@ -314,9 +309,10 @@ impl Default for FeaturesConfig { // ── OpenAI API ──────────────────────────────────────────────────────────────────── -#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "snake_case")] pub enum OpenAiMode { + #[default] Clean, Formal, Casual, @@ -325,9 +321,19 @@ pub enum OpenAiMode { Custom, } -impl Default for OpenAiMode { - fn default() -> Self { - Self::Clean +impl OpenAiMode { + /// Parse the snake_case name a mode is stored under (as in a hotkey + /// binding's `openai_mode`), or `None` for a name no mode has. + pub fn from_key(key: &str) -> Option { + Some(match key { + "clean" => Self::Clean, + "formal" => Self::Formal, + "casual" => Self::Casual, + "bullet" => Self::Bullet, + "concise" => Self::Concise, + "custom" => Self::Custom, + _ => return None, + }) } } @@ -385,9 +391,10 @@ impl Default for OpenAiConfig { // ── TTS ─────────────────────────────────────────────────────────────────────── -#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "snake_case")] pub enum TtsEngine { + #[default] Piper, Espeak, PocketTts, @@ -398,12 +405,6 @@ pub enum TtsEngine { VoxCpm2, } -impl Default for TtsEngine { - fn default() -> Self { - Self::Piper - } -} - /// How the TTS engine manages the memory of model-backed engines (currently /// Inflect-Micro-v2; Piper, eSpeak, and the audio.cpp-backed engines /// (Pocket-TTS, Breeze-TTS-2, VoxCPM2) all shell out to a subprocess per @@ -906,38 +907,27 @@ impl Config { AppConfig::default() }; + // Every migration below rewrites the file so it runs only once; they + // share a single save at the end rather than each writing it again. + let mut migrated = false; + // Migrate show_notification from legacy features to ui struct if present - if let Some(legacy_notif) = data.features.show_notification { + if let Some(legacy_notif) = data.features.show_notification.take() { data.ui.show_notification = legacy_notif; - data.features.show_notification = None; - // Instantly persist the migrated clean configuration to clean up the JSON - let clean_config = Self { data: data.clone(), path: path.clone() }; - if let Err(e) = clean_config.save() { - tracing::error!("Failed to save clean migrated config: {e}"); - } + migrated = true; } // Migrate legacy "KEY_ESCAPE" → "KEY_ESC" (evdev crate uses KEY_ESC as the // canonical debug name via stringify!(KEY_ESC)). - let needs_escape_fix = data.tts.stop_key.iter().any(|k| k == "KEY_ESCAPE"); - if needs_escape_fix { - data.tts.stop_key = data.tts.stop_key - .into_iter() - .map(|k| if k == "KEY_ESCAPE" { "KEY_ESC".to_string() } else { k }) - .collect(); - let clean_config = Self { data: data.clone(), path: path.clone() }; - if let Err(e) = clean_config.save() { - tracing::error!("Failed to save migrated stop_key: {e}"); - } + for key in data.tts.stop_key.iter_mut().filter(|k| k.as_str() == "KEY_ESCAPE") { + *key = "KEY_ESC".to_string(); + migrated = true; } // Migrate legacy default OpenAI timeout (8s) to the new default (30s) to prevent timeouts if data.openai.timeout_secs == 8 { data.openai.timeout_secs = 30; - let clean_config = Self { data: data.clone(), path: path.clone() }; - if let Err(e) = clean_config.save() { - tracing::error!("Failed to save migrated OpenAI timeout: {e}"); - } + migrated = true; } // Migrate the legacy single `custom_prompt` (used when mode == Custom) into the @@ -949,18 +939,17 @@ impl Config { // default grammar-fix system prompt to preserve the old behavior. data.openai.system_prompt = String::new(); } - let clean_config = Self { data: data.clone(), path: path.clone() }; - if let Err(e) = clean_config.save() { - tracing::error!("Failed to save migrated OpenAI custom prompt: {e}"); - } + migrated = true; } // One token now serves every gated model; older configs carry a copy // per engine. Rewrite the file so the duplicates go away for good. - if migrate_hf_token(&mut data) { - let migrated = Self { data: data.clone(), path: path.clone() }; - if let Err(e) = migrated.save() { - tracing::error!("Failed to save migrated HuggingFace token: {e}"); + migrated |= migrate_hf_token(&mut data); + + let config = Self { data, path }; + if migrated { + if let Err(e) = config.save() { + tracing::error!("Failed to save migrated config: {e}"); } } @@ -968,7 +957,7 @@ impl Config { // though every cloning engine uses it; rename it on disk once. migrate_cloned_voices_dir(); - Self { data, path } + config } pub fn save(&self) -> Result<(), ConfigError> { @@ -976,20 +965,7 @@ impl Config { std::fs::create_dir_all(parent)?; } let json = serde_json::to_string_pretty(&self.data)?; - #[cfg(unix)] - { - use std::io::Write; - use std::os::unix::fs::OpenOptionsExt; - let mut f = std::fs::OpenOptions::new() - .write(true) - .create(true) - .truncate(true) - .mode(0o600) - .open(&self.path)?; - f.write_all(json.as_bytes())?; - } - #[cfg(not(unix))] - std::fs::write(&self.path, json)?; + write_private(&self.path, &json)?; Ok(()) } @@ -1023,6 +999,36 @@ impl Default for Config { /// `.exe` and nothing else when searching, so a `.bat` or `.cmd` found by name /// alone could not be spawned anyway, and reporting it as reachable would trade /// one wrong answer for its mirror image. +/// Replace `path` with `content`, readable only by the owner on Unix (the +/// config holds API keys and tokens). +/// +/// Written to a sibling temporary file and renamed into place, so a crash or a +/// full disk mid-write leaves the previous file intact rather than a truncated +/// one — which the tolerant loader would read back as "all defaults", silently +/// discarding every setting. +pub fn write_private(path: &Path, content: &str) -> std::io::Result<()> { + let mut tmp_name = path.file_name().unwrap_or_default().to_os_string(); + tmp_name.push(".tmp"); + let tmp = path.with_file_name(tmp_name); + // A leftover from an interrupted write would keep its old permissions + // through the truncating open below. + let _ = std::fs::remove_file(&tmp); + { + use std::io::Write; + let mut opts = std::fs::OpenOptions::new(); + opts.write(true).create(true).truncate(true); + #[cfg(unix)] + { + use std::os::unix::fs::OpenOptionsExt; + opts.mode(0o600); + } + let mut f = opts.open(&tmp)?; + f.write_all(content.as_bytes())?; + f.sync_all()?; + } + std::fs::rename(&tmp, path) +} + pub fn find_in_path(name: &str) -> Option { // "If the file name does not contain an extension, .exe is appended." let search_name: std::borrow::Cow = if cfg!(target_os = "windows") && !name.contains('.') { diff --git a/crates/voxctrl-inference/src/finalize.rs b/crates/voxctrl-inference/src/finalize.rs new file mode 100644 index 00000000..91104877 --- /dev/null +++ b/crates/voxctrl-inference/src/finalize.rs @@ -0,0 +1,222 @@ +//! What happens to a transcript between the speech engine and delivery: the +//! noise gate, the recognition prompt, text post-processing, the silence +//! hallucination filter and the per-hotkey OpenAI rewrite settings. +//! +//! Both transcription paths use this — the local worker in this crate and the +//! remote streaming session finished in the app's pipeline — so a tuning +//! change or a fix lands in one place and the two cannot drift apart. + +use voxctrl_config::{AppConfig, OpenAiConfig, OpenAiMode}; +use voxctrl_routing::{HotkeyBinding, OutputTarget}; + +use crate::postprocess::{is_silence_hallucination, run_pipeline, PostProcessConfig}; + +/// Below this RMS the room is silent, so a stock hallucination ("Thank you.") +/// is discarded rather than delivered. A genuinely spoken "thank you" is far +/// louder than this. +pub const SILENCE_RMS: f32 = 0.003; + +/// The recognition prompt every engine that accepts one is given. +const BASE_PROMPT: &str = + "VoxCtrl is a voice control assistant application. VoxCtrl commands start with Vox Control or Hey Vox."; + +/// Root-mean-square energy of `audio`; 0 for an empty buffer. +pub fn rms(audio: &[f32]) -> f32 { + if audio.is_empty() { + return 0.0; + } + let sum_sq: f32 = audio.iter().map(|&s| s * s).sum(); + (sum_sq / audio.len() as f32).sqrt() +} + +/// The RMS below which a recording is dropped by the noise gate. +/// +/// `vad_threshold` is a sensitivity (0–1): 1.0 opens the gate completely, 0.0 +/// sets the highest gate (0.006 RMS). The default 0.5 maps to 0.003, which lets +/// speech through while filtering silence. +pub fn noise_gate_threshold(vad_threshold: f32) -> f32 { + (1.0 - vad_threshold) * 0.006 +} + +/// The initial prompt for recognition: the trigger phrases plus the user's +/// custom vocabulary, so both are spelled the way the user expects. +pub fn initial_prompt(custom_vocabulary: &[String]) -> String { + if custom_vocabulary.is_empty() { + BASE_PROMPT.to_string() + } else { + format!("{BASE_PROMPT} Vocabulary: {}.", custom_vocabulary.join(", ")) + } +} + +/// The first id of a comma-separated target list, which decides the +/// processing overrides for the whole utterance. +fn primary_target_id(target_id: &str) -> &str { + target_id + .split(',') + .map(str::trim) + .find(|s| !s.is_empty()) + .unwrap_or("default") +} + +/// Post-processing settings for `target_id`: the target's own overrides where +/// it has them, the global feature settings otherwise. +pub fn post_process_config<'a>( + target_id: &str, + app: &'a AppConfig, + targets: &[OutputTarget], +) -> PostProcessConfig<'a> { + let primary = primary_target_id(target_id); + let processing = targets.iter().find(|t| t.id == primary).map(|t| &t.processing); + let features = &app.features; + + PostProcessConfig { + remove_fillers: processing + .and_then(|p| p.remove_fillers) + .unwrap_or(features.remove_fillers), + spoken_punctuation: processing + .and_then(|p| p.spoken_punctuation) + .unwrap_or(features.spoken_punctuation), + auto_format_lists: processing + .and_then(|p| p.auto_format_lists) + .unwrap_or(features.auto_format_lists), + // Snippets always expand; the only thing that turns them off is having + // none defined. + apply_snippets: !features.snippets.is_empty(), + snippets: &features.snippets, + code_mode: processing.and_then(|p| p.code_mode).unwrap_or(false), + custom_vocabulary: &features.custom_vocabulary, + } +} + +/// Run the text pipeline over a raw transcript, then drop it if it is a known +/// silence hallucination and the audio (energy `rms`) really was silence. +pub fn post_process( + raw_text: &str, + rms: f32, + target_id: &str, + app: &AppConfig, + targets: &[OutputTarget], +) -> String { + let processed = run_pipeline(raw_text, &post_process_config(target_id, app, targets)); + if !processed.is_empty() && rms < SILENCE_RMS && is_silence_hallucination(&processed) { + tracing::info!("Discarded silence hallucination '{processed}' (audio RMS: {rms:.5})"); + return String::new(); + } + processed +} + +/// The OpenAI settings a hotkey's rewrite runs with, or `None` when the +/// binding does not ask for one. +/// +/// The global settings are the base; the binding may override the model, pick +/// a preset (which replaces the system prompt), give its own system prompt +/// (which wins over the preset) and its own user-prompt template. +pub fn binding_openai_config( + binding: Option<&HotkeyBinding>, + base: &OpenAiConfig, +) -> Option { + let binding = binding.filter(|b| b.openai_enabled == Some(true))?; + let non_empty = |s: &Option| s.as_deref().filter(|s| !s.is_empty()).map(str::to_string); + + let mut cfg = base.clone(); + cfg.enabled = true; + if let Some(model) = non_empty(&binding.openai_model) { + cfg.model = model; + } + if let Some(ref key) = binding.openai_mode { + // An unknown preset name falls back to the default, as it always has. + let mode = OpenAiMode::from_key(key).unwrap_or_default(); + if mode != OpenAiMode::Custom { + cfg.system_prompt = voxctrl_llm::preset_system_prompt(&mode).to_string(); + cfg.mode = mode; + } + } + if let Some(system_prompt) = non_empty(&binding.openai_system_prompt) { + cfg.system_prompt = system_prompt; + } + if let Some(prompt) = non_empty(&binding.openai_prompt) { + cfg.user_prompt = prompt; + } + Some(cfg) +} + +#[cfg(test)] +mod tests { + use super::*; + + fn binding() -> HotkeyBinding { + serde_json::from_value(serde_json::json!({ + "id": "b", "keys": ["KEY_F9"], "gesture": "hold", "target_id": "default", + })) + .unwrap() + } + + #[test] + fn noise_gate_maps_sensitivity_to_rms() { + assert_eq!(noise_gate_threshold(1.0), 0.0); + assert!((noise_gate_threshold(0.5) - 0.003).abs() < 1e-9); + assert!((noise_gate_threshold(0.0) - 0.006).abs() < 1e-9); + } + + #[test] + fn rms_of_nothing_is_zero() { + assert_eq!(rms(&[]), 0.0); + assert_eq!(rms(&[0.5, -0.5]), 0.5); + } + + #[test] + fn prompt_carries_the_vocabulary_only_when_there_is_one() { + assert_eq!(initial_prompt(&[]), BASE_PROMPT); + assert_eq!( + initial_prompt(&["Tauri".into(), "Svelte".into()]), + format!("{BASE_PROMPT} Vocabulary: Tauri, Svelte.") + ); + } + + #[test] + fn target_overrides_come_from_the_first_listed_target() { + let mut app = AppConfig::default(); + app.features.remove_fillers = false; + let mut target: OutputTarget = serde_json::from_value(serde_json::json!({ + "id": "notes", "label": "Notes", "delivery": "inject", + })) + .unwrap(); + target.processing.remove_fillers = Some(true); + let targets = [target]; + + assert!(post_process_config(" notes , other", &app, &targets).remove_fillers); + assert!(!post_process_config("other,notes", &app, &targets).remove_fillers); + } + + #[test] + fn a_binding_without_openai_gets_no_rewrite() { + assert!(binding_openai_config(None, &OpenAiConfig::default()).is_none()); + assert!(binding_openai_config(Some(&binding()), &OpenAiConfig::default()).is_none()); + } + + #[test] + fn binding_overrides_layer_over_the_global_settings() { + let mut b = binding(); + b.openai_enabled = Some(true); + b.openai_mode = Some("formal".into()); + let cfg = binding_openai_config(Some(&b), &OpenAiConfig::default()).unwrap(); + assert!(cfg.enabled); + assert_eq!(cfg.mode, OpenAiMode::Formal); + assert_eq!(cfg.system_prompt, voxctrl_llm::preset_system_prompt(&OpenAiMode::Formal)); + + b.openai_system_prompt = Some("Be terse.".into()); + b.openai_model = Some(String::new()); + let cfg = binding_openai_config(Some(&b), &OpenAiConfig::default()).unwrap(); + assert_eq!(cfg.system_prompt, "Be terse."); + assert_eq!(cfg.model, OpenAiConfig::default().model, "an empty model must not override"); + } + + #[test] + fn a_custom_preset_keeps_the_global_system_prompt() { + let mut b = binding(); + b.openai_enabled = Some(true); + b.openai_mode = Some("custom".into()); + let base = OpenAiConfig { system_prompt: "Global.".into(), ..Default::default() }; + assert_eq!(binding_openai_config(Some(&b), &base).unwrap().system_prompt, "Global."); + } +} diff --git a/crates/voxctrl-inference/src/lib.rs b/crates/voxctrl-inference/src/lib.rs index c2fe0f1c..0325cc05 100644 --- a/crates/voxctrl-inference/src/lib.rs +++ b/crates/voxctrl-inference/src/lib.rs @@ -1,4 +1,5 @@ pub mod backend; +pub mod finalize; #[cfg(feature = "moonshine")] pub mod moonshine; #[cfg(feature = "parakeet")] @@ -208,7 +209,6 @@ use tracing::{error, info}; use voxctrl_config::{AppConfig, BackendChoice}; use backend::{TranscribeRequest, TranscriptionBackend}; -use postprocess::{run_pipeline, PostProcessConfig, is_silence_hallucination}; use whisper_cpp::WhisperCppBackend; // ── Audio chunk type (must match voxctrl-audio) ──────────────────────────────── @@ -247,6 +247,42 @@ pub struct InferenceOutput { pub session_id: u64, } +impl InferenceOutput { + /// An utterance that produced no text (silence, or nothing to transcribe). + pub fn empty( + target_id: String, + binding_id: Option, + is_interim: bool, + session_id: u64, + ) -> Self { + Self { + text: String::new(), + target_id, + binding_id, + raw_text: String::new(), + inference_ms: 0, + language: String::new(), + error: None, + is_interim, + session_id, + } + } + + /// An utterance whose transcription failed with `error`. + pub fn failed( + target_id: String, + binding_id: Option, + error: &anyhow::Error, + is_interim: bool, + session_id: u64, + ) -> Self { + Self { + error: Some(format!("{error:#}")), + ..Self::empty(target_id, binding_id, is_interim, session_id) + } + } +} + // ── Engine ──────────────────────────────────────────────────────────────────── pub struct InferenceEngine { @@ -302,26 +338,23 @@ impl InferenceEngine { let is_interim = req.is_interim; let session_id = req.session_id; - if req.audio.is_empty() { - return Ok(InferenceOutput { - text: String::new(), - target_id: req.target_id, - binding_id: req.binding_id, - raw_text: String::new(), - inference_ms: 0, - language: "en".into(), - error: None, - is_interim, - session_id, - }); - } - - // Use the in-memory config that was passed to this engine — no disk I/O on - // the hot path, no TOCTOU race with concurrent save_config writes, and - // no copy of the whole config (snippets, vocabulary, prompts) per - // utterance: nothing below mutates it. + // The in-memory config: no disk I/O on the hot path, and it is current — + // `save_config` pushes every change here through `update_config`. let app_config = &*self.config; + // ── Noise Gate (VAD) ────────────────────────────────────────────────── + let rms = finalize::rms(&req.audio); + let rms_threshold = finalize::noise_gate_threshold(app_config.audio.vad_threshold); + if req.audio.is_empty() || rms < rms_threshold { + if !req.audio.is_empty() { + info!( + "Audio skipped by noise gate: RMS is {rms:.5} (threshold is {rms_threshold:.5}, vad_threshold={:.2})", + app_config.audio.vad_threshold + ); + } + return Ok(InferenceOutput::empty(req.target_id, req.binding_id, is_interim, session_id)); + } + // Moonshine, Parakeet and Remote-OpenAI backends read their language // setting straight from their own config, ignoring this field; only // whisper.cpp consults it, treating "auto"/empty as auto-detect. @@ -330,166 +363,39 @@ impl InferenceEngine { .filter(|lang| !lang.is_empty() && *lang != "auto") .map(str::to_string); - // ── Noise Gate (VAD) ────────────────────────────────────────────────── - // Compute RMS energy of the entire audio request to implement a robust noise gate. - let sum_sq: f32 = req.audio.iter().map(|&s| s * s).sum(); - let rms = (sum_sq / req.audio.len() as f32).sqrt(); - - // Map vad_threshold (0.0 - 1.0) to physical RMS threshold. - // Invert so that 1.0 represents MAXIMUM sensitivity (completely open gate / 0.0 RMS threshold). - // 0.0 represents MINIMUM sensitivity (highest gate / 0.006 RMS threshold). - // A default slider value of 0.5 maps to 0.003 RMS, which easily lets speech through while filtering silence. - let rms_threshold = (1.0 - app_config.audio.vad_threshold) * 0.006; - - if rms < rms_threshold { - info!( - "Audio skipped by noise gate: RMS is {:.5} (threshold is {:.5}, vad_threshold={:.2})", - rms, - rms_threshold, - app_config.audio.vad_threshold - ); - return Ok(InferenceOutput { - text: String::new(), - target_id: req.target_id, - binding_id: req.binding_id, - raw_text: String::new(), - inference_ms: 0, - language: "en".into(), - error: None, - is_interim, - session_id, - }); - } - - let dir = voxctrl_routing::config_dir(); - let targets = voxctrl_routing::load_targets(&dir).unwrap_or_default(); - - let mut merged_prompt = String::from("VoxCtrl is a voice control assistant application. VoxCtrl commands start with Vox Control or Hey Vox. "); - - // Custom vocabulary words from features config - if !app_config.features.custom_vocabulary.is_empty() { - // Append as: "Vocabulary: word1, word2, word3..." - merged_prompt.push_str("Vocabulary: "); - merged_prompt.push_str(&app_config.features.custom_vocabulary.join(", ")); - merged_prompt.push_str(". "); - } - - let initial_prompt = { - let end = merged_prompt.trim_end().len(); - merged_prompt.truncate(end); - (!merged_prompt.is_empty()).then_some(merged_prompt) - }; - let t_req = TranscribeRequest { audio: req.audio, language, word_timestamps: false, - initial_prompt, + initial_prompt: Some(finalize::initial_prompt(&app_config.features.custom_vocabulary)), }; - let result = self.backend.transcribe(&t_req)?; - let post_cfg = self.build_post_config_with_app_config(&req.target_id, app_config, &targets); - let mut processed = run_pipeline(&result.text, &post_cfg); - // The pipeline is done reading it, so the raw transcript moves into the - // output rather than being copied for it. - let raw_text = result.text; - - // ── Silence Hallucination Filter ────────────────────────────────────── - // If Whisper returned a known silence hallucination (like "Thank you"), check if the audio energy - // was extremely low (e.g. below 0.003 RMS, which is absolute background room silence). - // This ensures the user can still say a genuine, spoken "Thank you" (which has much higher energy), - // while perfectly discarding silence-induced hallucinations when sensitivity is set high. - if !processed.is_empty() && is_silence_hallucination(&processed) && rms < 0.003 { - info!("Discarded silence hallucination '{}' (audio RMS: {:.5})", processed, rms); - processed = String::new(); - } + // Targets and bindings are read per utterance so edits apply at once. + let dir = voxctrl_routing::config_dir(); + let targets = voxctrl_routing::load_targets(&dir).unwrap_or_default(); + let mut processed = + finalize::post_process(&result.text, rms, &req.target_id, app_config, &targets); // ── Hotkey-Specific OpenAI Post-Processing ──────────────────────────── - let bindings = voxctrl_routing::load_bindings(&dir).unwrap_or_default(); - let binding = req.binding_id.as_ref().and_then(|bid| bindings.iter().find(|b| &b.id == bid)); - - let binding_wants_openai = binding - .and_then(|b| b.openai_enabled) - .unwrap_or(false); - // Interim passes only feed the voice-command trigger check and are // thrown away; running the hotkey's (billed, slow) OpenAI rewrite on // every one of them would cost a request per pass for nothing. - if binding_wants_openai && !is_interim && !processed.is_empty() { - // Re-read the OpenAI settings from disk so changes made in the - // Settings UI (model, endpoint, API key, prompts) take effect without - // restarting the app. Targets and bindings above are already hot-read - // from disk per request; the global AppConfig held by this worker is - // frozen at startup (intentional for the Whisper backend), so using - // its `openai` section here would ignore the user's latest settings. - let mut openai_cfg = voxctrl_config::Config::load().data.openai; - openai_cfg.enabled = true; - - if let Some(ref b) = binding { - if let Some(ref model) = b.openai_model { - if !model.is_empty() { - openai_cfg.model = model.clone(); - } - } - if let Some(ref mode_str) = b.openai_mode { - let mode = match mode_str.as_str() { - "clean" => voxctrl_config::OpenAiMode::Clean, - "formal" => voxctrl_config::OpenAiMode::Formal, - "casual" => voxctrl_config::OpenAiMode::Casual, - "bullet" => voxctrl_config::OpenAiMode::Bullet, - "concise" => voxctrl_config::OpenAiMode::Concise, - "custom" => voxctrl_config::OpenAiMode::Custom, - _ => voxctrl_config::OpenAiMode::Clean, - }; - // A non-custom preset overrides the system prompt for this hotkey. - if mode != voxctrl_config::OpenAiMode::Custom { - openai_cfg.mode = mode.clone(); - openai_cfg.system_prompt = - voxctrl_llm::preset_system_prompt(&mode).to_string(); - } - } - // An explicit per-hotkey system prompt overrides the global default - // (and any preset selected above). - if let Some(ref system_prompt) = b.openai_system_prompt { - if !system_prompt.is_empty() { - openai_cfg.system_prompt = system_prompt.clone(); - } - } - if let Some(ref prompt) = b.openai_prompt { - if !prompt.is_empty() { - // The per-hotkey prompt template overrides the user prompt - // (it already requires the "{text}" placeholder). - openai_cfg.user_prompt = prompt.clone(); - } + if !is_interim && !processed.is_empty() { + if let Some(bid) = req.binding_id.as_deref() { + let bindings = voxctrl_routing::load_bindings(&dir).unwrap_or_default(); + let binding = bindings.iter().find(|b| b.id == bid); + if let Some(openai_cfg) = finalize::binding_openai_config(binding, &app_config.openai) { + processed = run_llm_rewrite(voxctrl_llm::OpenAiClient::new(openai_cfg), processed); } } - - let client = voxctrl_llm::OpenAiClient::new(openai_cfg); - let processed_res = match tokio::runtime::Handle::try_current() { - Ok(handle) => { - let c = client.clone(); - let text = processed.clone(); - std::thread::spawn(move || { - handle.block_on(async { c.process(&text).await }) - }).join().unwrap_or(processed) - } - Err(_) => { - if let Ok(rt) = tokio::runtime::Builder::new_current_thread().enable_all().build() { - rt.block_on(async { client.process(&processed).await }) - } else { - processed - } - } - }; - processed = processed_res; } Ok(InferenceOutput { text: processed, target_id: req.target_id, binding_id: req.binding_id, - raw_text, + raw_text: result.text, inference_ms: result.inference_ms, language: result.language, error: None, @@ -497,44 +403,23 @@ impl InferenceEngine { session_id, }) } +} - fn build_post_config_with_app_config<'a>( - &self, - target_id: &str, - app_config: &'a voxctrl_config::AppConfig, - targets: &[voxctrl_routing::OutputTarget], - ) -> PostProcessConfig<'a> { - let target_ids: Vec<&str> = target_id.split(',').map(|s| s.trim()).filter(|s| !s.is_empty()).collect(); - let first_target_id = target_ids.first().copied().unwrap_or("default"); - let target = targets.iter().find(|t| t.id == first_target_id); - - let remove_fillers = target - .and_then(|t| t.processing.remove_fillers) - .unwrap_or(app_config.features.remove_fillers); - - let spoken_punctuation = target - .and_then(|t| t.processing.spoken_punctuation) - .unwrap_or(app_config.features.spoken_punctuation); - - let auto_format_lists = target - .and_then(|t| t.processing.auto_format_lists) - .unwrap_or(app_config.features.auto_format_lists); - - let code_mode = target - .and_then(|t| t.processing.code_mode) - .unwrap_or(false); - - PostProcessConfig { - remove_fillers, - spoken_punctuation, - auto_format_lists, - // Snippets always expand; the only thing that turns them off is - // having none defined. - apply_snippets: !app_config.features.snippets.is_empty(), - snippets: &app_config.features.snippets, - code_mode, - custom_vocabulary: &app_config.features.custom_vocabulary, +/// Run the (async) LLM rewrite from this synchronous worker, returning `text` +/// unchanged if it cannot run. +fn run_llm_rewrite(client: voxctrl_llm::OpenAiClient, text: String) -> String { + match tokio::runtime::Handle::try_current() { + // Blocking on a runtime thread would stall it, so block on a fresh one. + Ok(handle) => { + let fallback = text.clone(); + std::thread::spawn(move || handle.block_on(async { client.process(&text).await })) + .join() + .unwrap_or(fallback) } + Err(_) => match tokio::runtime::Builder::new_current_thread().enable_all().build() { + Ok(rt) => rt.block_on(async { client.process(&text).await }), + Err(_) => text, + }, } } @@ -661,41 +546,22 @@ pub fn run_worker_with_config( } Err(e) => { error!("Inference backend still not loadable: {e:#}"); - let _ = tx.send(InferenceOutput { - text: String::new(), - target_id: req.target_id, - binding_id: req.binding_id, - raw_text: String::new(), - inference_ms: 0, - language: String::new(), - error: Some(format!("{e:#}")), - is_interim, - session_id, - }); + let _ = tx.send(InferenceOutput::failed( + req.target_id, req.binding_id, &e, is_interim, session_id, + )); continue; } } } - match engine.process(req) { - Ok(output) => { - let _ = tx.send(output); - } - Err(e) => { - error!("Inference error: {:?}", e); - let _ = tx.send(InferenceOutput { - text: "".to_string(), - target_id: "".to_string(), - binding_id: None, - raw_text: "".to_string(), - inference_ms: 0, - language: "".to_string(), - error: Some(format!("{e:#}")), - is_interim, - session_id, - }); - } - } + // Kept for the error report, which would otherwise lose + // which target and hotkey the failed utterance was for. + let (target_id, binding_id) = (req.target_id.clone(), req.binding_id.clone()); + let output = engine.process(req).unwrap_or_else(|e| { + error!("Inference error: {e:?}"); + InferenceOutput::failed(target_id, binding_id, &e, is_interim, session_id) + }); + let _ = tx.send(output); } recv(config_rx) -> new_cfg_res => { let new_cfg = match new_cfg_res { diff --git a/crates/voxctrl-llm/src/lib.rs b/crates/voxctrl-llm/src/lib.rs index ecb0a067..630cf152 100644 --- a/crates/voxctrl-llm/src/lib.rs +++ b/crates/voxctrl-llm/src/lib.rs @@ -72,24 +72,26 @@ fn api_base(endpoint: &str) -> String { // ── Client ──────────────────────────────────────────────────────────────────── +/// How long to wait for the API server to accept a connection. +const CONNECT_TIMEOUT: Duration = Duration::from_secs(2); + #[derive(Clone)] pub struct OpenAiClient { config: OpenAiConfig, http: reqwest::Client, - available: std::sync::Arc>>, } impl OpenAiClient { pub fn new(config: OpenAiConfig) -> Self { let http = reqwest::Client::builder() + // An unreachable server fails fast here rather than after the full + // request timeout, which is what lets `process` skip a separate + // reachability probe (a whole extra round trip per rewrite). + .connect_timeout(CONNECT_TIMEOUT) .timeout(Duration::from_secs(config.timeout_secs)) .build() .expect("reqwest client"); - Self { - config, - http, - available: std::sync::Arc::new(std::sync::Mutex::new(None)), - } + Self { config, http } } /// Attach the configured API key as a Bearer token, if one is set. @@ -100,23 +102,16 @@ impl OpenAiClient { } } - /// Lazily probe if the API server is reachable. Cached after first check. + /// Probe whether the API server is reachable (used by the Settings test). pub async fn is_available(&self) -> bool { - { - let guard = self.available.lock().unwrap(); - if let Some(v) = *guard { - return v; - } - } let url = format!("{}/models", api_base(&self.config.endpoint)); let ok = self .with_auth(self.http.get(&url)) - .timeout(Duration::from_secs(2)) + .timeout(CONNECT_TIMEOUT) .send() .await .map(|r| r.status().is_success()) .unwrap_or(false); - *self.available.lock().unwrap() = Some(ok); if ok { info!("OpenAI API reachable at {}", self.config.endpoint); } else { @@ -126,13 +121,14 @@ impl OpenAiClient { } /// Post-process text through the OpenAI API. Returns original text on any failure. + /// + /// No reachability probe first: an unreachable server already fails within + /// [`CONNECT_TIMEOUT`] and falls back to the original text below, so a + /// probe would only add a round trip to every rewrite that succeeds. pub async fn process(&self, text: &str) -> String { if !self.config.enabled { return text.to_string(); } - if !self.is_available().await { - return text.to_string(); - } // Build the user message from the configured template, substituting the // dictated text into the "{text}" placeholder. @@ -217,11 +213,6 @@ impl OpenAiClient { } } - /// Reset the availability cache (e.g., user changed endpoint in settings). - pub fn reset_availability(&self) { - *self.available.lock().unwrap() = None; - } - /// Retrieve the list of available models from the OpenAI-compatible server. pub async fn list_models(&self) -> Result, String> { let url = format!("{}/models", api_base(&self.config.endpoint)); diff --git a/crates/voxctrl-routing/Cargo.toml b/crates/voxctrl-routing/Cargo.toml index 0be5c0ca..01e9b617 100644 --- a/crates/voxctrl-routing/Cargo.toml +++ b/crates/voxctrl-routing/Cargo.toml @@ -6,6 +6,7 @@ edition.workspace = true [dependencies] # `find_in_path`: one implementation of "can this be spawned?", shared with the # rest of the app rather than a second, subtly different copy here. +voxctrl-text = { workspace = true } voxctrl-config = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } diff --git a/crates/voxctrl-routing/src/lib.rs b/crates/voxctrl-routing/src/lib.rs index f65b52fb..b31e185c 100644 --- a/crates/voxctrl-routing/src/lib.rs +++ b/crates/voxctrl-routing/src/lib.rs @@ -7,7 +7,8 @@ pub mod timestamp; pub use loader::{config_dir, load_bindings, load_targets, save_bindings, save_targets}; pub use models::{ DeliveryResult, DeliveryType, GestureType, HotkeyBinding, OutputTarget, - TargetProcessingConfig, TestResult, TTS_STOP_BINDING_ID, + TargetProcessingConfig, TestResult, TTS_STOP_BINDING_ID, DEFAULT_TARGET_LABEL, + targets_display_label, }; pub use router::OutputTargetRouter; pub use targets::{ diff --git a/crates/voxctrl-routing/src/loader.rs b/crates/voxctrl-routing/src/loader.rs index 57eaa113..a836955f 100644 --- a/crates/voxctrl-routing/src/loader.rs +++ b/crates/voxctrl-routing/src/loader.rs @@ -490,26 +490,6 @@ fn prune_backups(filename: &str, config_dir: &Path) { // ── Private file write ──────────────────────────────────────────────────────── -fn write_private(path: impl AsRef, content: &str) -> std::io::Result<()> { - #[cfg(unix)] - { - use std::io::Write; - use std::os::unix::fs::OpenOptionsExt; - let mut f = std::fs::OpenOptions::new() - .write(true) - .create(true) - .truncate(true) - .mode(0o600) - .open(path)?; - f.write_all(content.as_bytes())?; - } - #[cfg(not(unix))] - { - std::fs::write(path, content)?; - } - Ok(()) -} - // ── Public API ──────────────────────────────────────────────────────────────── pub fn load_targets(config_dir: &Path) -> Result, LoaderError> { @@ -550,7 +530,7 @@ pub fn save_targets(targets: &[OutputTarget], config_dir: &Path) -> Result<(), L targets: targets.iter().map(target_to_raw).collect(), }; let text = toml::to_string_pretty(&file)?; - write_private(config_dir.join("targets.toml"), &text)?; + voxctrl_config::write_private(&config_dir.join("targets.toml"), &text)?; Ok(()) } @@ -562,6 +542,6 @@ pub fn save_bindings(bindings: &[HotkeyBinding], config_dir: &Path) -> Result<() bindings: bindings.iter().map(binding_to_raw).collect(), }; let text = toml::to_string_pretty(&file)?; - write_private(config_dir.join("bindings.toml"), &text)?; + voxctrl_config::write_private(&config_dir.join("bindings.toml"), &text)?; Ok(()) } diff --git a/crates/voxctrl-routing/src/models.rs b/crates/voxctrl-routing/src/models.rs index c18b1c21..498c996f 100644 --- a/crates/voxctrl-routing/src/models.rs +++ b/crates/voxctrl-routing/src/models.rs @@ -116,6 +116,29 @@ pub enum DeliveryType { Command, } +/// What the UI calls the built-in `default` target when it has no label. +pub const DEFAULT_TARGET_LABEL: &str = "Focused Window"; + +/// A human-readable name for a comma-separated list of target ids, as shown in +/// the overlay, tray and command notices: each target's label (falling back to +/// its id, or [`DEFAULT_TARGET_LABEL`] for `default`), joined with " + ". +pub fn targets_display_label(target_ids: &str, targets: &[OutputTarget]) -> String { + target_ids + .split(',') + .map(str::trim) + .filter(|id| !id.is_empty()) + .map(|id| { + targets + .iter() + .find(|t| t.id == id) + .map(|t| t.label.as_str()) + .filter(|label| !label.is_empty()) + .unwrap_or(if id == "default" { DEFAULT_TARGET_LABEL } else { id }) + }) + .collect::>() + .join(" + ") +} + // ── Per-target processing overrides ────────────────────────────────────────── /// None = inherit global config; Some(x) = override for this target. diff --git a/crates/voxctrl-routing/src/targets.rs b/crates/voxctrl-routing/src/targets.rs index d79afd86..d8c8a954 100644 --- a/crates/voxctrl-routing/src/targets.rs +++ b/crates/voxctrl-routing/src/targets.rs @@ -8,6 +8,7 @@ use crate::models::{DeliveryResult, DeliveryType, OutputTarget, TestResult}; use std::sync::Arc; use std::sync::OnceLock; +use voxctrl_text::levenshtein_distance; pub type SpeakCallback = Arc; static SPEAK_CALLBACK: OnceLock = OnceLock::new(); @@ -1305,26 +1306,6 @@ fn clean_payload(post: &str) -> String { text_without_punct.to_string() } -fn levenshtein_distance(s1: &str, s2: &str) -> usize { - let s1_chars: Vec = s1.chars().collect(); - let s2_chars: Vec = s2.chars().collect(); - let len1 = s1_chars.len(); - let len2 = s2_chars.len(); - let mut dp = vec![vec![0; len2 + 1]; len1 + 1]; - for i in 0..=len1 { dp[i][0] = i; } - for j in 0..=len2 { dp[0][j] = j; } - for i in 1..=len1 { - for j in 1..=len2 { - if s1_chars[i - 1] == s2_chars[j - 1] { - dp[i][j] = dp[i - 1][j - 1]; - } else { - dp[i][j] = 1 + std::cmp::min(dp[i - 1][j - 1], std::cmp::min(dp[i - 1][j], dp[i][j - 1])); - } - } - } - dp[len1][len2] -} - /// Lowercase `s` without changing any character's byte length, so byte offsets /// found in the result are valid in `s` too. The few characters whose lowercase /// form is longer or shorter in UTF-8 (e.g. `İ`, `ẞ`) are left as they are, diff --git a/crates/voxctrl-routing/src/tests.rs b/crates/voxctrl-routing/src/tests.rs index 3d092930..2661b6ed 100644 --- a/crates/voxctrl-routing/src/tests.rs +++ b/crates/voxctrl-routing/src/tests.rs @@ -2349,3 +2349,23 @@ fn test_parse_voice_command_non_ascii_text_and_targets() { // must be skipped without slicing mid-character. assert!(parse_voice_command("Hey Vox, xÜberblick hallo", &targets).is_none()); } + +#[cfg(test)] +mod display_label_tests { + use crate::{targets_display_label, OutputTarget}; + + fn target(id: &str, label: &str) -> OutputTarget { + serde_json::from_value(serde_json::json!({ "id": id, "label": label, "delivery": "inject" })) + .unwrap() + } + + #[test] + fn labels_fall_back_to_ids_and_the_default_name() { + let targets = [target("notes", "My Notes"), target("blank", ""), target("default", "")]; + assert_eq!(targets_display_label("notes", &targets), "My Notes"); + assert_eq!(targets_display_label("blank", &targets), "blank"); + assert_eq!(targets_display_label("default", &targets), "Focused Window"); + assert_eq!(targets_display_label("default", &[]), "Focused Window"); + assert_eq!(targets_display_label(" notes, ,missing ", &targets), "My Notes + missing"); + } +} diff --git a/crates/voxctrl-tts/src/fifo.rs b/crates/voxctrl-tts/src/fifo.rs index e4b1b302..103ac8c9 100644 --- a/crates/voxctrl-tts/src/fifo.rs +++ b/crates/voxctrl-tts/src/fifo.rs @@ -2,13 +2,22 @@ //! arrives. Used to let external tools/scripts trigger TTS without going //! through the MCP server. +use std::sync::Arc; use std::time::Duration; -use tracing::{info, warn}; +use tokio::sync::Mutex; +use tracing::{debug, info, warn}; use crate::engine::TtsEngineHandle; -pub async fn run_fifo_responder(fifo_path: String, tts: TtsEngineHandle) { +/// Speak every line written to `fifo_path` through whichever TTS worker is +/// current when the line arrives. +/// +/// The slot is looked up per line rather than a handle being captured once: +/// the worker is replaced whenever TTS is turned off and on again (and once at +/// startup), and a responder bound to the handle it was spawned with would keep +/// speaking into a worker that had already shut down — silently. +pub async fn run_fifo_responder(fifo_path: String, tts: Arc>>) { use tokio::io::{AsyncBufReadExt, BufReader}; info!("FIFO responder watching {fifo_path}"); @@ -22,8 +31,12 @@ pub async fn run_fifo_responder(fifo_path: String, tts: TtsEngineHandle) { let mut lines = BufReader::new(file).lines(); while let Ok(Some(line)) = lines.next_line().await { let line = line.trim().to_string(); - if !line.is_empty() { - tts.speak(line); + if line.is_empty() { + continue; + } + match tts.lock().await.as_ref() { + Some(tts) => tts.speak(line), + None => debug!("TTS is disabled; dropping line from {fifo_path}"), } } } diff --git a/dist/assets/index-B0930YBK.js b/dist/assets/index-B0930YBK.js new file mode 100644 index 00000000..b79284f6 --- /dev/null +++ b/dist/assets/index-B0930YBK.js @@ -0,0 +1,156 @@ +var sc=Object.defineProperty;var Sl=a=>{throw TypeError(a)};var ac=(a,s,t)=>s in a?sc(a,s,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[s]=t;var Hs=(a,s,t)=>ac(a,typeof s!="symbol"?s+"":s,t),Sr=(a,s,t)=>s.has(a)||Sl("Cannot "+t);var $=(a,s,t)=>(Sr(a,s,"read from private field"),t?t.call(a):s.get(a)),vt=(a,s,t)=>s.has(a)?Sl("Cannot add the same private member more than once"):s instanceof WeakSet?s.add(a):s.set(a,t),mt=(a,s,t,r)=>(Sr(a,s,"write to private field"),r?r.call(a,t):s.set(a,t),t),jt=(a,s,t)=>(Sr(a,s,"access private method"),t);(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const d of o)if(d.type==="childList")for(const u of d.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&r(u)}).observe(document,{childList:!0,subtree:!0});function t(o){const d={};return o.integrity&&(d.integrity=o.integrity),o.referrerPolicy&&(d.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?d.credentials="include":o.crossOrigin==="anonymous"?d.credentials="omit":d.credentials="same-origin",d}function r(o){if(o.ep)return;o.ep=!0;const d=t(o);fetch(o.href,d)}})();const nc="5";var Hl,Kl,Gl;typeof window<"u"&&((Gl=(Kl=(Hl=window.__svelte)!=null?Hl:window.__svelte={}).v)!=null?Gl:Kl.v=new Set).add(nc);let ti=!1,ic=!1;function rc(){ti=!0}rc();const lc=1,oc=2,Zl=4,cc=8,dc=16,vc=1,uc=2,pc=4,fc=8,_c=16,hc=1,gc=2,Ss=Symbol("uninitialized"),Xl="http://www.w3.org/1999/xhtml",mc="http://www.w3.org/2000/svg",bc="http://www.w3.org/1998/Math/MathML",Ql=!1;var nl=Array.isArray,yc=Array.prototype.indexOf,Yn=Array.prototype.includes,pr=Array.from,eo=Object.defineProperty,Fn=Object.getOwnPropertyDescriptor,wc=Object.getOwnPropertyDescriptors,kc=Object.prototype,xc=Array.prototype,to=Object.getPrototypeOf,El=Object.isExtensible;const Wa=()=>{};function so(a){for(var s=0;s{a=r,s=o});return{promise:t,resolve:a,reject:s}}function Cl(a,s){if(Array.isArray(a))return a;if(!(Symbol.iterator in a))return Array.from(a);const t=[];for(const r of a)if(t.push(r),t.length===s)break;return t}const zs=2,Jn=4,fr=8,no=1<<24,Sa=16,Aa=32,nn=64,Nr=128,pa=512,Es=1024,As=2048,La=4096,js=8192,fa=16384,Mn=32768,Fr=1<<25,Zn=65536,ar=1<<17,Tc=1<<18,si=1<<19,Sc=1<<20,Ia=1<<25,Sn=65536,nr=1<<21,Vn=1<<22,tn=1<<23,wn=Symbol("$state"),Ec=Symbol("legacy props"),Cc=Symbol(""),Ki=Symbol("attributes"),Vr=Symbol("class"),$r=Symbol("style"),ii=Symbol("text"),Gi=Symbol("form reset"),_r=new class extends Error{constructor(){super(...arguments);Hs(this,"name","StaleReactionError");Hs(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}};var Yl;const Ac=!!((Yl=globalThis.document)!=null&&Yl.contentType)&&globalThis.document.contentType.includes("xml");function io(a){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function Mc(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function Pc(a,s,t){throw new Error("https://svelte.dev/e/each_key_duplicate")}function Dc(a){throw new Error("https://svelte.dev/e/effect_in_teardown")}function zc(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function Ic(a){throw new Error("https://svelte.dev/e/effect_orphan")}function Oc(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function Rc(a){throw new Error("https://svelte.dev/e/props_invalid_value")}function Lc(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function Nc(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function Fc(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function Vc(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}function $c(){console.warn("https://svelte.dev/e/derived_inert")}function Bc(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function qc(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function ro(a){return a===this.v}function lo(a,s){return a!=a?s==s:a!==s||a!==null&&typeof a=="object"||typeof a=="function"}function oo(a){return!lo(a,this.v)}let ms=null;function Xn(a){ms=a}function Ot(a,s=!1,t){ms={p:ms,i:!1,c:null,e:null,s:a,x:null,r:Ct,l:ti&&!s?{s:null,u:null,$:[]}:null}}function Rt(a){var s=ms,t=s.e;if(t!==null){s.e=null;for(var r of t)Po(r)}return s.i=!0,ms=s.p,{}}function Ri(){return!ti||ms!==null&&ms.l===null}let pn=[];function co(){var a=pn;pn=[],so(a)}function sn(a){if(pn.length===0&&!vi){var s=pn;queueMicrotask(()=>{s===pn&&co()})}pn.push(a)}function jc(){for(;pn.length>0;)co()}function vo(a){var s=Ct;if(s===null)return It.f|=tn,a;if(!(s.f&Mn)&&!(s.f&Jn))throw a;Qa(a,s)}function Qa(a,s){for(;s!==null;){if(s.f&Nr){if(!(s.f&Mn))throw a;try{s.b.error(a);return}catch(t){a=t}}s=s.parent}throw a}const Wc=-7169;function hs(a,s){a.f=a.f&Wc|s}function il(a){a.f&pa||a.deps===null?hs(a,Es):hs(a,La)}function uo(a){if(a!==null)for(const s of a)!(s.f&zs)||!(s.f&Sn)||(s.f^=Sn,uo(s.deps))}function po(a,s,t){a.f&As?s.add(a):a.f&La&&t.add(a),uo(a.deps),hs(a,Es)}function rl(a,s,t){if(a==null)return s(void 0),t&&t(void 0),Wa;const r=Fa(()=>a.subscribe(s,t));return r.unsubscribe?()=>r.unsubscribe():r}const Pn=[];function Uc(a,s){return{subscribe:Li(a,s).subscribe}}function Li(a,s=Wa){let t=null;const r=new Set;function o(v){if(lo(a,v)&&(a=v,t)){const f=!Pn.length;for(const _ of r)_[1](),Pn.push(_,a);if(f){for(let _=0;_{r.delete(_),r.size===0&&t&&(t(),t=null)}}return{set:o,update:d,subscribe:u}}function Ni(a,s,t){const r=!Array.isArray(a),o=r?[a]:a;if(!o.every(Boolean))throw new Error("derived() expects stores as input, got a falsy value");const d=s.length<2;return Uc(t,(u,v)=>{let f=!1;const _=[];let b=0,m=Wa;const g=()=>{if(b)return;m();const A=s(r?_[0]:_,u,v);d?u(A):m=typeof A=="function"?A:Wa},M=o.map((A,H)=>rl(A,E=>{_[H]=E,b&=~(1<{b|=1<s=t)(),s}let Br=!1,ri=!1,qr=Symbol("unmounted");function ls(a,s,t){var d;const r=(d=t[s])!=null?d:t[s]={store:null,source:xo(void 0),unsubscribe:Wa};if(r.store!==a&&!(qr in t))if(r.unsubscribe(),r.store=a!=null?a:null,a==null)r.source.v=void 0,r.unsubscribe=Wa;else{var o=!0;r.unsubscribe=rl(a,u=>{o?r.source.v=u:l(r.source,u)}),o=!1}return a&&qr in t?Ln(a):e(r.source)}function vn(a,s){return Hc(a,s),s}function Ms(){const a={};function s(){gr(()=>{for(var t in a)a[t].unsubscribe();eo(a,qr,{enumerable:!1,value:!0})})}return[a,s]}function Hc(a,s){Br=!0;try{a.set(s)}finally{Br=!1}}function un(){ri=!0}function Kc(a){var s=ri;try{return ri=!1,[a(),ri]}finally{ri=s}}let Er=null,Dn=null,ut=null,di=null,Ds=null,jr=null,vi=!1,Cr=!1,Nn=null,Yi=null;var Al=0;let Gc=1;var qn,Ja,hn,jn,Wn,gn,Un,$a,mi,sa,bi,Za,Pa,Da,Hn,Kn,Zt,Wr,li,Ur,fo,_o,Ji,Yc,Hr,On;const dr=class dr{constructor(){vt(this,Zt);Hs(this,"id",Gc++);vt(this,qn,!1);Hs(this,"linked",!0);vt(this,Ja,null);vt(this,hn,null);Hs(this,"async_deriveds",new Map);Hs(this,"current",new Map);Hs(this,"previous",new Map);Hs(this,"unblocked",new Set);vt(this,jn,new Set);vt(this,Wn,new Set);vt(this,gn,new Set);vt(this,Un,0);vt(this,$a,new Map);vt(this,mi,null);vt(this,sa,[]);vt(this,bi,[]);vt(this,Za,new Set);vt(this,Pa,new Set);vt(this,Da,new Map);vt(this,Hn,new Set);Hs(this,"is_fork",!1);vt(this,Kn,!1)}skip_effect(s){$(this,Da).has(s)||$(this,Da).set(s,{d:[],m:[]}),$(this,Hn).delete(s)}unskip_effect(s,t=r=>this.schedule(r)){var r=$(this,Da).get(s);if(r){$(this,Da).delete(s);for(var o of r.d)hs(o,As),t(o);for(o of r.m)hs(o,La),t(o)}$(this,Hn).add(s)}capture(s,t,r=!1){s.v!==Ss&&!this.previous.has(s)&&this.previous.set(s,s.v),s.f&tn||(this.current.set(s,[t,r]),Ds==null||Ds.set(s,t)),this.is_fork||(s.v=t)}activate(){ut=this}deactivate(){ut=null,Ds=null}flush(){try{Cr=!0,ut=this,jt(this,Zt,li).call(this)}finally{Al=0,jr=null,Nn=null,Yi=null,Cr=!1,ut=null,Ds=null,kn.clear()}}discard(){for(const s of $(this,Wn))s(this);$(this,Wn).clear(),$(this,gn).clear(),jt(this,Zt,On).call(this)}register_created_effect(s){$(this,bi).push(s)}increment(s,t){var r;if(mt(this,Un,$(this,Un)+1),s){let o=(r=$(this,$a).get(t))!=null?r:0;$(this,$a).set(t,o+1)}}decrement(s,t){var r;if(mt(this,Un,$(this,Un)-1),s){let o=(r=$(this,$a).get(t))!=null?r:0;o===1?$(this,$a).delete(t):$(this,$a).set(t,o-1)}$(this,Kn)||(mt(this,Kn,!0),sn(()=>{mt(this,Kn,!1),this.linked&&this.flush()}))}transfer_effects(s,t){for(const r of s)$(this,Za).add(r);for(const r of t)$(this,Pa).add(r);s.clear(),t.clear()}oncommit(s){$(this,jn).add(s)}ondiscard(s){$(this,Wn).add(s)}on_fork_commit(s){$(this,gn).add(s)}run_fork_commit_callbacks(){for(const s of $(this,gn))s(this);$(this,gn).clear()}settled(){var s;return((s=$(this,mi))!=null?s:mt(this,mi,ao())).promise}static ensure(){var s;if(ut===null){const t=ut=new dr;jt(s=t,Zt,Hr).call(s),!Cr&&!vi&&sn(()=>{$(t,qn)||t.flush()})}return ut}apply(){{Ds=null;return}}schedule(s){var o;if(jr=s,(o=s.b)!=null&&o.is_pending&&s.f&(Jn|fr|no)&&!(s.f&Mn)){s.b.defer_effect(s);return}for(var t=s;t.parent!==null;){t=t.parent;var r=t.f;if(Nn!==null&&t===Ct&&(It===null||!(It.f&zs))&&!Br)return;if(r&(nn|Aa)){if(!(r&Es))return;t.f^=Es}}$(this,sa).push(t)}};qn=new WeakMap,Ja=new WeakMap,hn=new WeakMap,jn=new WeakMap,Wn=new WeakMap,gn=new WeakMap,Un=new WeakMap,$a=new WeakMap,mi=new WeakMap,sa=new WeakMap,bi=new WeakMap,Za=new WeakMap,Pa=new WeakMap,Da=new WeakMap,Hn=new WeakMap,Kn=new WeakMap,Zt=new WeakSet,Wr=function(){if(this.is_fork)return!0;for(const r of $(this,$a).keys()){for(var s=r,t=!1;s.parent!==null;){if($(this,Da).has(s)){t=!0;break}s=s.parent}if(!t)return!0}return!1},li=function(){var f,_,b,m;if(mt(this,qn,!0),Al++>1e3&&(jt(this,Zt,On).call(this),Zc()),!jt(this,Zt,Wr).call(this)){for(const g of $(this,Za))$(this,Pa).delete(g),hs(g,As),this.schedule(g);for(const g of $(this,Pa))hs(g,La),this.schedule(g)}const s=$(this,sa);mt(this,sa,[]),this.apply();var t=Nn=[],r=[],o=Yi=[];for(const g of s)try{jt(this,Zt,Ur).call(this,g,t,r)}catch(M){throw mo(g),M}if(ut=null,o.length>0){var d=dr.ensure();for(const g of o)d.schedule(g)}if(Nn=null,Yi=null,jt(this,Zt,Wr).call(this)){jt(this,Zt,Ji).call(this,r),jt(this,Zt,Ji).call(this,t);for(const[g,M]of $(this,Da))go(g,M);o.length>0&&jt(f=ut,Zt,li).call(f);return}const u=jt(this,Zt,fo).call(this);if(u){jt(_=u,Zt,_o).call(_,this);return}$(this,Za).clear(),$(this,Pa).clear();for(const g of $(this,jn))g(this);$(this,jn).clear(),di=this,Ml(r),Ml(t),di=null,(b=$(this,mi))==null||b.resolve();var v=ut;if(this.linked&&$(this,Un)===0&&jt(this,Zt,On).call(this),$(this,sa).length>0){v===null&&(v=this,jt(this,Zt,Hr).call(this));const g=v;$(g,sa).push(...$(this,sa).filter(M=>!$(g,sa).includes(M)))}v!==null&&jt(m=v,Zt,li).call(m)},Ur=function(s,t,r){s.f^=Es;for(var o=s.first;o!==null;){var d=o.f,u=(d&(Aa|nn))!==0,v=u&&(d&Es)!==0,f=v||(d&js)!==0||$(this,Da).has(o);if(!f&&o.fn!==null){u?o.f^=Es:d&Jn?t.push(o):Vi(o)&&(d&Sa&&$(this,Pa).add(o),ei(o));var _=o.first;if(_!==null){o=_;continue}}for(;o!==null;){var b=o.next;if(b!==null){o=b;break}o=o.parent}}},fo=function(){for(var s=$(this,Ja);s!==null;){if(!s.is_fork){for(const[t,[,r]]of this.current)if(s.current.has(t)&&!r)return s}s=$(s,Ja)}return null},_o=function(s){var r;for(const[o,d]of s.current)!this.previous.has(o)&&s.previous.has(o)&&this.previous.set(o,s.previous.get(o)),this.current.set(o,d);for(const[o,d]of s.async_deriveds){const u=this.async_deriveds.get(o);u&&d.promise.then(u.resolve)}const t=o=>{var d=o.reactions;if(d!==null)for(const f of d){var u=f.f;if(u&zs)t(f);else{var v=f;u&(Vn|Sa)&&!this.async_deriveds.has(v)&&($(this,Pa).delete(v),hs(v,As),this.schedule(v))}}};for(const o of this.current.keys())t(o);this.oncommit(()=>s.discard()),jt(r=s,Zt,On).call(r),ut=this,jt(this,Zt,li).call(this)},Ji=function(s){for(var t=0;t!this.current.has(g));if(o.length===0)s&&m.discard();else if(t.length>0){if(s)for(const g of $(this,Hn))m.unskip_effect(g,M=>{var A;M.f&(Sa|Vn)?m.schedule(M):jt(A=m,Zt,Ji).call(A,[M])});m.activate();var d=new Set,u=new Map;for(var v of t)ho(v,o,d,u);u=new Map;var f=[...m.current.keys()].filter(g=>this.current.has(g)?this.current.get(g)[0]!==g.v:!0);if(f.length>0)for(const g of $(this,bi))!(g.f&(fa|js|ar))&&ll(g,f,u)&&(g.f&(Vn|Sa)?(hs(g,As),m.schedule(g)):$(m,Za).add(g));if($(m,sa).length>0){m.apply();for(var _ of $(m,sa))jt(b=m,Zt,Ur).call(b,_,[],[]);mt(m,sa,[])}m.deactivate()}}}},Hr=function(){Dn===null?Er=Dn=this:(mt(Dn,hn,this),mt(this,Ja,Dn)),Dn=this},On=function(){var s=$(this,Ja),t=$(this,hn);s===null?Er=t:mt(s,hn,t),t===null?Dn=s:mt(t,Ja,s),this.linked=!1};let En=dr;function Jc(a){var s=vi;vi=!0;try{for(var t;;){if(jc(),ut===null)return t;ut.flush()}}finally{vi=s}}function Zc(){try{Oc()}catch(a){Qa(a,jr)}}let wa=null;function Ml(a){var s=a.length;if(s!==0){for(var t=0;t0)){kn.clear();for(const o of wa){if(o.f&(fa|js))continue;const d=[o];let u=o.parent;for(;u!==null;)wa.has(u)&&(wa.delete(u),d.push(u)),u=u.parent;for(let v=d.length-1;v>=0;v--){const f=d[v];f.f&(fa|js)||ei(f)}}wa.clear()}}wa=null}}function ho(a,s,t,r){if(!t.has(a)&&(t.add(a),a.reactions!==null))for(const o of a.reactions){const d=o.f;d&zs?ho(o,s,t,r):d&(Vn|Sa)&&!(d&As)&&ll(o,s,r)&&(hs(o,As),ol(o))}}function ll(a,s,t){const r=t.get(a);if(r!==void 0)return r;if(a.deps!==null)for(const o of a.deps){if(Yn.call(s,o))return!0;if(o.f&zs&&ll(o,s,t))return t.set(o,!0),!0}return t.set(a,!1),!1}function ol(a){ut.schedule(a)}function go(a,s){if(!(a.f&Aa&&a.f&Es)){a.f&As?s.d.push(a):a.f&La&&s.m.push(a),hs(a,Es);for(var t=a.first;t!==null;)go(t,s),t=t.next}}function mo(a){hs(a,Es);for(var s=a.first;s!==null;)mo(s),s=s.next}function Xc(a){let s=0,t=Cn(0),r;return()=>{ul()&&(e(t),mr(()=>(s===0&&(r=Fa(()=>a(()=>ui(t)))),s+=1,()=>{sn(()=>{s-=1,s===0&&(r==null||r(),r=void 0,ui(t))})})))}}var Qc=Zn|si;function ed(a,s,t,r){new td(a,s,t,r)}var oa,al,ca,mn,Ks,da,Bs,aa,Ba,bn,Xa,Gn,yi,wi,qa,vr,bs,sd,ad,nd,Kr,Zi,Xi,Gr,Yr;class td{constructor(s,t,r,o){vt(this,bs);Hs(this,"parent");Hs(this,"is_pending",!1);Hs(this,"transform_error");vt(this,oa);vt(this,al,null);vt(this,ca);vt(this,mn);vt(this,Ks);vt(this,da,null);vt(this,Bs,null);vt(this,aa,null);vt(this,Ba,null);vt(this,bn,0);vt(this,Xa,0);vt(this,Gn,!1);vt(this,yi,new Set);vt(this,wi,new Set);vt(this,qa,null);vt(this,vr,Xc(()=>(mt(this,qa,Cn($(this,bn))),()=>{mt(this,qa,null)})));var d,u;mt(this,oa,s),mt(this,ca,t),mt(this,mn,v=>{var f=Ct;f.b=this,f.f|=Nr,r(v)}),this.parent=Ct.b,this.transform_error=(u=o!=null?o:(d=this.parent)==null?void 0:d.transform_error)!=null?u:v=>v,mt(this,Ks,pl(()=>{jt(this,bs,Kr).call(this)},Qc))}defer_effect(s){po(s,$(this,yi),$(this,wi))}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!$(this,ca).pending}update_pending_count(s,t){jt(this,bs,Gr).call(this,s,t),mt(this,bn,$(this,bn)+s),!(!$(this,qa)||$(this,Gn))&&(mt(this,Gn,!0),sn(()=>{mt(this,Gn,!1),$(this,qa)&&Qn($(this,qa),$(this,bn))}))}get_effect_pending(){return $(this,vr).call(this),e($(this,qa))}error(s){if(!$(this,ca).onerror&&!$(this,ca).failed)throw s;ut!=null&&ut.is_fork?($(this,da)&&ut.skip_effect($(this,da)),$(this,Bs)&&ut.skip_effect($(this,Bs)),$(this,aa)&&ut.skip_effect($(this,aa)),ut.on_fork_commit(()=>{jt(this,bs,Yr).call(this,s)})):jt(this,bs,Yr).call(this,s)}}oa=new WeakMap,al=new WeakMap,ca=new WeakMap,mn=new WeakMap,Ks=new WeakMap,da=new WeakMap,Bs=new WeakMap,aa=new WeakMap,Ba=new WeakMap,bn=new WeakMap,Xa=new WeakMap,Gn=new WeakMap,yi=new WeakMap,wi=new WeakMap,qa=new WeakMap,vr=new WeakMap,bs=new WeakSet,sd=function(){try{mt(this,da,va(()=>$(this,mn).call(this,$(this,oa))))}catch(s){this.error(s)}},ad=function(s){const t=$(this,ca).failed;t&&mt(this,aa,va(()=>{t($(this,oa),()=>s,()=>()=>{})}))},nd=function(){const s=$(this,ca).pending;s&&(this.is_pending=!0,mt(this,Bs,va(()=>s($(this,oa)))),sn(()=>{var t=mt(this,Ba,document.createDocumentFragment()),r=Ua();t.append(r),mt(this,da,jt(this,bs,Xi).call(this,()=>va(()=>$(this,mn).call(this,r)))),$(this,Xa)===0&&($(this,oa).before(t),mt(this,Ba,null),xn($(this,Bs),()=>{mt(this,Bs,null)}),jt(this,bs,Zi).call(this,ut))}))},Kr=function(){try{if(this.is_pending=this.has_pending_snippet(),mt(this,Xa,0),mt(this,bn,0),mt(this,da,va(()=>{$(this,mn).call(this,$(this,oa))})),$(this,Xa)>0){var s=mt(this,Ba,document.createDocumentFragment());hl($(this,da),s);const t=$(this,ca).pending;mt(this,Bs,va(()=>t($(this,oa))))}else jt(this,bs,Zi).call(this,ut)}catch(t){this.error(t)}},Zi=function(s){this.is_pending=!1,s.transfer_effects($(this,yi),$(this,wi))},Xi=function(s){var t=Ct,r=It,o=ms;Na($(this,Ks)),ha($(this,Ks)),Xn($(this,Ks).ctx);try{return En.ensure(),s()}catch(d){return vo(d),null}finally{Na(t),ha(r),Xn(o)}},Gr=function(s,t){var r;if(!this.has_pending_snippet()){this.parent&&jt(r=this.parent,bs,Gr).call(r,s,t);return}mt(this,Xa,$(this,Xa)+s),$(this,Xa)===0&&(jt(this,bs,Zi).call(this,t),$(this,Bs)&&xn($(this,Bs),()=>{mt(this,Bs,null)}),$(this,Ba)&&($(this,oa).before($(this,Ba)),mt(this,Ba,null)))},Yr=function(s){$(this,da)&&(Ys($(this,da)),mt(this,da,null)),$(this,Bs)&&(Ys($(this,Bs)),mt(this,Bs,null)),$(this,aa)&&(Ys($(this,aa)),mt(this,aa,null));var t=$(this,ca).onerror;let r=$(this,ca).failed;var o=!1,d=!1;const u=()=>{if(o){qc();return}o=!0,d&&Vc(),$(this,aa)!==null&&xn($(this,aa),()=>{mt(this,aa,null)}),jt(this,bs,Xi).call(this,()=>{jt(this,bs,Kr).call(this)})},v=f=>{try{d=!0,t==null||t(f,u),d=!1}catch(_){Qa(_,$(this,Ks)&&$(this,Ks).parent)}r&&mt(this,aa,jt(this,bs,Xi).call(this,()=>{try{return va(()=>{var _=Ct;_.b=this,_.f|=Nr,r($(this,oa),()=>f,()=>u)})}catch(_){return Qa(_,$(this,Ks).parent),null}}))};sn(()=>{var f;try{f=this.transform_error(s)}catch(_){Qa(_,$(this,Ks)&&$(this,Ks).parent);return}f!==null&&typeof f=="object"&&typeof f.then=="function"?f.then(v,_=>Qa(_,$(this,Ks)&&$(this,Ks).parent)):v(f)})};function id(a,s,t,r){const o=Ri()?_i:cl;var d=a.filter(g=>!g.settled);if(t.length===0&&d.length===0){r(s.map(o));return}var u=Ct,v=rd(),f=d.length===1?d[0].promise:d.length>1?Promise.all(d.map(g=>g.promise)):null;function _(g){if(!(u.f&fa)){v();try{r(g)}catch(M){Qa(M,u)}ir()}}var b=bo();if(t.length===0){f.then(()=>_(s.map(o))).finally(b);return}function m(){Promise.all(t.map(g=>ld(g))).then(g=>_([...s.map(o),...g])).catch(g=>Qa(g,u)).finally(b)}f?f.then(()=>{v(),m(),ir()}):m()}function rd(){var a=Ct,s=It,t=ms,r=ut;return function(d=!0){Na(a),ha(s),Xn(t),d&&!(a.f&fa)&&(r==null||r.activate(),r==null||r.apply())}}function ir(a=!0){Na(null),ha(null),Xn(null),a&&(ut==null||ut.deactivate())}function bo(){var a=Ct,s=a.b,t=ut,r=s.is_rendered();return s.update_pending_count(1,t),t.increment(r,a),()=>{s.update_pending_count(-1,t),t.decrement(r,a)}}function _i(a){var s=zs|As;return Ct!==null&&(Ct.f|=si),{ctx:ms,deps:null,effects:null,equals:ro,f:s,fn:a,reactions:null,rv:0,v:Ss,wv:0,parent:Ct,ac:null}}const qi=Symbol("obsolete");function ld(a,s,t){let r=Ct;r===null&&Mc();var o=void 0,d=Cn(Ss),u=!It,v=new Set;return md(()=>{var M;var f=Ct,_=ao();o=_.promise;try{Promise.resolve(a()).then(_.resolve,A=>{A!==_r&&_.reject(A)}).finally(ir)}catch(A){_.reject(A),ir()}var b=ut;if(u){if(f.f&Mn)var m=bo();if(r.b.is_rendered())(M=b.async_deriveds.get(f))==null||M.reject(qi);else for(const A of v.values())A.reject(qi);v.add(_),b.async_deriveds.set(f,_)}const g=(A,H=void 0)=>{m==null||m(),v.delete(_),H!==qi&&(b.activate(),H?(d.f|=tn,Qn(d,H)):(d.f&tn&&(d.f^=tn),Qn(d,A)),b.deactivate())};_.promise.then(g,A=>g(null,A||"unknown"))}),gr(()=>{for(const f of v)f.reject(qi)}),new Promise(f=>{function _(b){function m(){b===o?f(d):_(o)}b.then(m,m)}_(o)})}function ue(a){const s=_i(a);return Lo(s),s}function cl(a){const s=_i(a);return s.equals=oo,s}function od(a){var s=a.effects;if(s!==null){a.effects=null;for(var t=0;t0&&!ko&&dd()}return s}function dd(){ko=!1;for(const a of rr){a.f&Es&&hs(a,La);let s;try{s=Vi(a)}catch{s=!0}s&&ei(a)}rr.clear()}function ui(a){l(a,a.v+1)}function To(a,s,t){var r=a.reactions;if(r!==null)for(var o=Ri(),d=r.length,u=0;u{if(Tn===d)return v();var f=It,_=Tn;ha(null),Il(d);var b=v();return ha(f),Il(_),b};return r&&t.set("length",T(a.length)),new Proxy(a,{defineProperty(v,f,_){(!("value"in _)||_.configurable===!1||_.enumerable===!1||_.writable===!1)&&Lc();var b=t.get(f);return b===void 0?u(()=>{var m=T(_.value);return t.set(f,m),m}):l(b,_.value,!0),!0},deleteProperty(v,f){var _=t.get(f);if(_===void 0){if(f in v){const b=u(()=>T(Ss));t.set(f,b),ui(o)}}else l(_,Ss),ui(o);return!0},get(v,f,_){var M;if(f===wn)return a;var b=t.get(f),m=f in v;if(b===void 0&&(!m||(M=Fn(v,f))!=null&&M.writable)&&(b=u(()=>{var A=kt(m?v[f]:Ss),H=T(A);return H}),t.set(f,b)),b!==void 0){var g=e(b);return g===Ss?void 0:g}return Reflect.get(v,f,_)},getOwnPropertyDescriptor(v,f){var _=Reflect.getOwnPropertyDescriptor(v,f);if(_&&"value"in _){var b=t.get(f);b&&(_.value=e(b))}else if(_===void 0){var m=t.get(f),g=m==null?void 0:m.v;if(m!==void 0&&g!==Ss)return{enumerable:!0,configurable:!0,value:g,writable:!0}}return _},has(v,f){var g;if(f===wn)return!0;var _=t.get(f),b=_!==void 0&&_.v!==Ss||Reflect.has(v,f);if(_!==void 0||Ct!==null&&(!b||(g=Fn(v,f))!=null&&g.writable)){_===void 0&&(_=u(()=>{var M=b?kt(v[f]):Ss,A=T(M);return A}),t.set(f,_));var m=e(_);if(m===Ss)return!1}return b},set(v,f,_,b){var ce;var m=t.get(f),g=f in v;if(r&&f==="length")for(var M=_;MT(Ss)),t.set(M+"",A))}if(m===void 0)(!g||(ce=Fn(v,f))!=null&&ce.writable)&&(m=u(()=>T(void 0)),l(m,kt(_)),t.set(f,m));else{g=m.v!==Ss;var H=u(()=>kt(_));l(m,H)}var E=Reflect.getOwnPropertyDescriptor(v,f);if(E!=null&&E.set&&E.set.call(b,_),!g){if(r&&typeof f=="string"){var O=t.get("length"),ve=Number(f);Number.isInteger(ve)&&ve>=O.v&&l(O,ve+1)}ui(o)}return!0},ownKeys(v){e(o);var f=Reflect.ownKeys(v).filter(m=>{var g=t.get(m);return g===void 0||g.v!==Ss});for(var[_,b]of t)b.v!==Ss&&!(_ in v)&&f.push(_);return f},setPrototypeOf(){Nc()}})}function Pl(a){try{if(a!==null&&typeof a=="object"&&wn in a)return a[wn]}catch{}return a}function vd(a,s){return Object.is(Pl(a),Pl(s))}var Jr,So,Eo,Co;function ud(){if(Jr===void 0){Jr=window,So=/Firefox/.test(navigator.userAgent);var a=Element.prototype,s=Node.prototype,t=Text.prototype;Eo=Fn(s,"firstChild").get,Co=Fn(s,"nextSibling").get,El(a)&&(a[Vr]=void 0,a[Ki]=null,a[$r]=void 0,a.__e=void 0),El(t)&&(t[ii]=void 0)}}function Ua(a=""){return document.createTextNode(a)}function Oa(a){return Eo.call(a)}function Fi(a){return Co.call(a)}function n(a,s){return Oa(a)}function wt(a,s=!1){{var t=Oa(a);return t instanceof Comment&&t.data===""?Fi(t):t}}function i(a,s=1,t=!1){let r=a;for(;s--;)r=Fi(r);return r}function pd(a){a.textContent=""}function Ao(){return!1}function Mo(a,s,t){return document.createElementNS(s!=null?s:Xl,a,void 0)}let Dl=!1;function fd(){Dl||(Dl=!0,document.addEventListener("reset",a=>{Promise.resolve().then(()=>{var s;if(!a.defaultPrevented)for(const t of a.target.elements)(s=t[Gi])==null||s.call(t)})},{capture:!0}))}function hr(a){var s=It,t=Ct;ha(null),Na(null);try{return a()}finally{ha(s),Na(t)}}function vl(a,s,t,r=t){a.addEventListener(s,()=>hr(t));const o=a[Gi];o?a[Gi]=()=>{o(),r(!0)}:a[Gi]=()=>r(!0),fd()}function _d(a){Ct===null&&(It===null&&Ic(),zc()),Ha&&Dc()}function hd(a,s){var t=s.last;t===null?s.last=s.first=a:(t.next=a,a.prev=t,s.last=a)}function Ka(a,s){var u;var t=Ct;t!==null&&t.f&js&&(a|=js);var r={ctx:ms,deps:null,nodes:null,f:a|As|pa,first:null,fn:s,last:null,next:null,parent:t,b:t&&t.b,prev:null,teardown:null,wv:0,ac:null};ut==null||ut.register_created_effect(r);var o=r;if(a&Jn)Nn!==null?Nn.push(r):En.ensure().schedule(r);else if(s!==null){try{ei(r)}catch(v){throw Ys(r),v}o.deps===null&&o.teardown===null&&o.nodes===null&&o.first===o.last&&!(o.f&si)&&(o=o.first,a&Sa&&a&Zn&&o!==null&&(o.f|=Zn))}if(o!==null&&(o.parent=t,t!==null&&hd(o,t),It!==null&&It.f&zs&&!(a&nn))){var d=It;((u=d.effects)!=null?u:d.effects=[]).push(o)}return r}function ul(){return It!==null&&!Ea}function gr(a){const s=Ka(fr,null);return hs(s,Es),s.teardown=a,s}function gs(a){var o;_d();var s=Ct.f,t=!It&&(s&Aa)!==0&&(s&Mn)===0;if(t){var r=ms;((o=r.e)!=null?o:r.e=[]).push(a)}else return Po(a)}function Po(a){return Ka(Jn|Sc,a)}function gd(a){En.ensure();const s=Ka(nn|si,a);return(t={})=>new Promise(r=>{t.outro?xn(s,()=>{Ys(s),r(void 0)}):(Ys(s),r(void 0))})}function ja(a){return Ka(Jn,a)}function md(a){return Ka(Vn|si,a)}function mr(a,s=0){return Ka(fr|s,a)}function w(a,s=[],t=[],r=[]){id(r,s,t,o=>{Ka(fr,()=>a(...o.map(e)))})}function pl(a,s=0){var t=Ka(Sa|s,a);return t}function va(a){return Ka(Aa|si,a)}function Do(a){var s=a.teardown;if(s!==null){const t=Ha,r=It;zl(!0),ha(null);try{s.call(null)}finally{zl(t),ha(r)}}}function fl(a,s=!1){var t=a.first;for(a.first=a.last=null;t!==null;){const o=t.ac;o!==null&&hr(()=>{o.abort(_r)});var r=t.next;t.f&nn?t.parent=null:Ys(t,s),t=r}}function bd(a){for(var s=a.first;s!==null;){var t=s.next;s.f&Aa||Ys(s),s=t}}function Ys(a,s=!0){var t=!1;(s||a.f&Tc)&&a.nodes!==null&&a.nodes.end!==null&&(zo(a.nodes.start,a.nodes.end),t=!0),hs(a,Fr),fl(a,s&&!t),hi(a,0);var r=a.nodes&&a.nodes.t;if(r!==null)for(const d of r)d.stop();Do(a),a.f^=Fr,a.f|=fa;var o=a.parent;o!==null&&o.first!==null&&Io(a),a.next=a.prev=a.teardown=a.ctx=a.deps=a.fn=a.nodes=a.ac=a.b=null}function zo(a,s){for(;a!==null;){var t=a===s?null:Fi(a);a.remove(),a=t}}function Io(a){var s=a.parent,t=a.prev,r=a.next;t!==null&&(t.next=r),r!==null&&(r.prev=t),s!==null&&(s.first===a&&(s.first=r),s.last===a&&(s.last=t))}function xn(a,s,t=!0){var r=[];Oo(a,r,!0);var o=()=>{t&&Ys(a),s&&s()},d=r.length;if(d>0){var u=()=>--d||o();for(var v of r)v.out(u)}else o()}function Oo(a,s,t){if(!(a.f&js)){a.f^=js;var r=a.nodes&&a.nodes.t;if(r!==null)for(const v of r)(v.is_global||t)&&s.push(v);for(var o=a.first;o!==null;){var d=o.next;if(!(o.f&nn)){var u=(o.f&Zn)!==0||(o.f&Aa)!==0&&(a.f&Sa)!==0;Oo(o,s,u?t:!1)}o=d}}}function _l(a){Ro(a,!0)}function Ro(a,s){if(a.f&js){a.f^=js,a.f&Es||(hs(a,As),En.ensure().schedule(a));for(var t=a.first;t!==null;){var r=t.next,o=(t.f&Zn)!==0||(t.f&Aa)!==0;Ro(t,o?s:!1),t=r}var d=a.nodes&&a.nodes.t;if(d!==null)for(const u of d)(u.is_global||s)&&u.in()}}function hl(a,s){if(a.nodes)for(var t=a.nodes.start,r=a.nodes.end;t!==null;){var o=t===r?null:Fi(t);s.append(t),t=o}}let Qi=!1,Ha=!1;function zl(a){Ha=a}let It=null,Ea=!1;function ha(a){It=a}let Ct=null;function Na(a){Ct=a}let _a=null;function Lo(a){It!==null&&(_a===null?_a=[a]:_a.push(a))}let Gs=null,ea=0,la=null;function yd(a){la=a}let No=1,fn=0,Tn=fn;function Il(a){Tn=a}function Fo(){return++No}function Vi(a){var s=a.f;if(s&As)return!0;if(s&zs&&(a.f&=~Sn),s&La){for(var t=a.deps,r=t.length,o=0;oa.wv)return!0}s&pa&&Ds===null&&hs(a,Es)}return!1}function Vo(a,s,t=!0){var r=a.reactions;if(r!==null&&!(_a!==null&&Yn.call(_a,a)))for(var o=0;o{a.ac.abort(_r)}),a.ac=null);try{a.f|=nr;var b=a.fn,m=b();a.f|=Mn;var g=a.deps,M=ut==null?void 0:ut.is_fork;if(Gs!==null){var A;if(M||hi(a,ea),g!==null&&ea>0)for(g.length=ea+Gs.length,A=0;At==null?void 0:t.call(this,d))}return a.startsWith("pointer")||a.startsWith("touch")||a==="wheel"?sn(()=>{s.addEventListener(a,o,r)}):s.addEventListener(a,o,r),o}function Ra(a,s,t,r,o){var d={capture:r,passive:o},u=xd(a,s,t,d);(s===document.body||s===window||s===document||s instanceof HTMLMediaElement)&&gr(()=>{s.removeEventListener(a,u,d)})}function z(a,s,t){var r;((r=s[_n])!=null?r:s[_n]={})[a]=t}function us(a){for(var s=0;s{throw ve});throw g}}finally{a[_n]=s,delete a.currentTarget,ha(b),Na(m)}}}var Jl;const Ar=((Jl=globalThis==null?void 0:globalThis.window)==null?void 0:Jl.trustedTypes)&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:a=>a});function Td(a){var s;return(s=Ar==null?void 0:Ar.createHTML(a))!=null?s:a}function Wo(a){var s=Mo("template");return s.innerHTML=Td(a.replaceAll("","")),s.content}function An(a,s){var t=Ct;t.nodes===null&&(t.nodes={start:a,end:s,a:null,t:null})}function p(a,s){var t=(s&hc)!==0,r=(s&gc)!==0,o,d=!a.startsWith("");return()=>{o===void 0&&(o=Wo(d?a:""+a),t||(o=Oa(o)));var u=r||So?document.importNode(o,!0):o.cloneNode(!0);if(t){var v=Oa(u),f=u.lastChild;An(v,f)}else An(u,u);return u}}function Sd(a,s,t="svg"){var r=!a.startsWith(""),o=`<${t}>${r?a:""+a}`,d;return()=>{if(!d){var u=Wo(o),v=Oa(u);d=Oa(v)}var f=d.cloneNode(!0);return An(f,f),f}}function Uo(a,s){return Sd(a,s,"svg")}function qe(a=""){{var s=Ua(a+"");return An(s,s),s}}function $i(){var a=document.createDocumentFragment(),s=document.createComment(""),t=Ua();return a.append(s,t),An(s,t),a}function c(a,s){a!==null&&a.before(s)}const Ed=["touchstart","touchmove"];function Cd(a){return Ed.includes(a)}function y(a,s){var r;var t=s==null?"":typeof s=="object"?`${s}`:s;t!==((r=a[ii])!=null?r:a[ii]=a.nodeValue)&&(a[ii]=t,a.nodeValue=`${t}`)}function Ad(a,s){return Md(a,s)}const ji=new Map;function Md(a,{target:s,anchor:t,props:r={},events:o,context:d,intro:u=!0,transformError:v}){ud();var f=void 0,_=gd(()=>{var b=t!=null?t:s.appendChild(Ua());ed(b,{pending:()=>{}},M=>{Ot({});var A=ms;d&&(A.c=d),o&&(r.$$events=o),f=a(M,r)||{},Rt()},v);var m=new Set,g=M=>{for(var A=0;A{var E;for(var M of m)for(const O of[s,document]){var A=ji.get(O),H=A.get(M);--H==0?(O.removeEventListener(M,Xr),A.delete(M),A.size===0&&ji.delete(O)):A.set(M,H)}Zr.delete(g),b!==t&&((E=b.parentNode)==null||E.removeChild(b))}});return Pd.set(f,_),f}let Pd=new WeakMap;var Ta,za,na,yn,ki,xi,ur;class Dd{constructor(s,t=!0){Hs(this,"anchor");vt(this,Ta,new Map);vt(this,za,new Map);vt(this,na,new Map);vt(this,yn,new Set);vt(this,ki,!0);vt(this,xi,s=>{if($(this,Ta).has(s)){var t=$(this,Ta).get(s),r=$(this,za).get(t);if(r)_l(r),$(this,yn).delete(t);else{var o=$(this,na).get(t);o&&($(this,za).set(t,o.effect),$(this,na).delete(t),o.fragment.lastChild.remove(),this.anchor.before(o.fragment),r=o.effect)}for(const[d,u]of $(this,Ta)){if($(this,Ta).delete(d),d===s)break;const v=$(this,na).get(u);v&&(Ys(v.effect),$(this,na).delete(u))}for(const[d,u]of $(this,za)){if(d===t||$(this,yn).has(d))continue;const v=()=>{if(Array.from($(this,Ta).values()).includes(d)){var _=document.createDocumentFragment();hl(u,_),_.append(Ua()),$(this,na).set(d,{effect:u,fragment:_})}else Ys(u);$(this,yn).delete(d),$(this,za).delete(d)};$(this,ki)||!r?($(this,yn).add(d),xn(u,v,!1)):v()}}});vt(this,ur,s=>{$(this,Ta).delete(s);const t=Array.from($(this,Ta).values());for(const[r,o]of $(this,na))t.includes(r)||(Ys(o.effect),$(this,na).delete(r))});this.anchor=s,mt(this,ki,t)}ensure(s,t){var r=ut,o=Ao();if(t&&!$(this,za).has(s)&&!$(this,na).has(s))if(o){var d=document.createDocumentFragment(),u=Ua();d.append(u),$(this,na).set(s,{effect:va(()=>t(u)),fragment:d})}else $(this,za).set(s,va(()=>t(this.anchor)));if($(this,Ta).set(r,s),o){for(const[v,f]of $(this,za))v===s?r.unskip_effect(f):r.skip_effect(f);for(const[v,f]of $(this,na))v===s?r.unskip_effect(f.effect):r.skip_effect(f.effect);r.oncommit($(this,xi)),r.ondiscard($(this,ur))}else $(this,xi).call(this,r)}}Ta=new WeakMap,za=new WeakMap,na=new WeakMap,yn=new WeakMap,ki=new WeakMap,xi=new WeakMap,ur=new WeakMap;function Xt(a){ms===null&&io(),ti&&ms.l!==null?zd(ms).m.push(a):gs(()=>{const s=Fa(a);if(typeof s=="function")return s})}function br(a){ms===null&&io(),Xt(()=>()=>Fa(a))}function zd(a){var t;var s=a.l;return(t=s.u)!=null?t:s.u={a:[],b:[],m:[]}}function k(a,s,t=!1){var r=new Dd(a),o=t?Zn:0;function d(u,v){r.ensure(u,v)}pl(()=>{var u=!1;s((v,f=0)=>{u=!0,d(f,v)}),u||d(-1,null)},o)}function ht(a,s){return s}function Id(a,s,t){var m;for(var r=[],o=s.length,d,u=s.length,v=0;v{if(d){if(d.pending.delete(g),d.done.add(g),d.pending.size===0){var M=a.outrogroups;Qr(a,pr(d.done)),M.delete(d),M.size===0&&(a.outrogroups=null)}}else u-=1},!1)}if(u===0){var f=r.length===0&&t!==null;if(f){var _=t,b=_.parentNode;pd(b),b.append(_),a.items.clear()}Qr(a,s,!f)}else d={pending:new Set(s),done:new Set},((m=a.outrogroups)!=null?m:a.outrogroups=new Set).add(d)}function Qr(a,s,t=!0){var r;if(a.pending.size>0){r=new Set;for(const u of a.pending.values())for(const v of u)r.add(a.items.get(v).e)}for(var o=0;o{var ce=t();return nl(ce)?ce:ce==null?[]:pr(ce)}),g,M=new Map,A=!0;function H(ce){ve.effect.f&fa||(ve.pending.delete(ce),ve.fallback=b,Od(ve,g,u,s,r),b!==null&&(g.length===0?b.f&Ia?(b.f^=Ia,oi(b,null,u)):_l(b):xn(b,()=>{b=null})))}function E(ce){ve.pending.delete(ce)}var O=pl(()=>{g=e(m);for(var ce=g.length,me=new Set,ie=ut,I=Ao(),V=0;Vd(u)):(b=va(()=>d(zn!=null?zn:zn=Ua())),b.f|=Ia)),ce>me.size&&Pc(),!A)if(M.set(ie,me),I){for(const[D,P]of v)me.has(D)||ie.skip_effect(P.e);ie.oncommit(H),ie.ondiscard(E)}else H(ie);e(m)}),ve={effect:O,items:v,pending:M,outrogroups:null,fallback:b};A=!1}function ni(a){for(;a!==null&&!(a.f&Aa);)a=a.next;return a}function Od(a,s,t,r,o){var ke,D,P,he,B,L,ge,De,fe;var d=(r&cc)!==0,u=s.length,v=a.items,f=ni(a.effect.first),_,b=null,m,g=[],M=[],A,H,E,O;if(d)for(O=0;O0){var be=r&Zl&&u===0?t:null;if(d){for(O=0;O{var G,J;if(m!==void 0)for(E of m)(J=(G=E.nodes)==null?void 0:G.a)==null||J.apply()})}function Rd(a,s,t,r,o,d,u,v){var f=u&lc?u&dc?Cn(t):xo(t,!1,!1):null,_=u&oc?Cn(o):null;return{v:f,i:_,e:va(()=>(d(s,f!=null?f:t,_!=null?_:o,v),()=>{a.delete(r)}))}}function oi(a,s,t){if(a.nodes)for(var r=a.nodes.start,o=a.nodes.end,d=s&&!(s.f&Ia)?s.nodes.start:t;r!==null;){var u=Fi(r);if(d.before(r),r===o)return;r=u}}function Ya(a,s,t){s===null?a.effect.first=t:s.next=t,t===null?a.effect.last=s:t.prev=s}function Rl(a,s,t=!1,r=!1,o=!1,d=!1){var u=a,v="";if(t)var f=a;w(()=>{var M;var _=Ct;if(v!==(v=(M=s())!=null?M:"")){if(t){_.nodes=null,f.innerHTML=v,v!==""&&An(Oa(f),f.lastChild);return}if(_.nodes!==null&&(zo(_.nodes.start,_.nodes.end),_.nodes=null),v!==""){var b=r?mc:o?bc:void 0,m=Mo(r?"svg":o?"math":"template",b);m.innerHTML=v;var g=r||o?m:m.content;if(An(Oa(g),g.lastChild),r||o)for(;Oa(g);)u.before(Oa(g));else u.before(g)}}})}function en(a,s,t){ja(()=>{var r=Fa(()=>s(a,t==null?void 0:t())||{});if(r!=null&&r.destroy)return()=>r.destroy()})}function Ho(a){var s,t,r="";if(typeof a=="string"||typeof a=="number")r+=a;else if(typeof a=="object")if(Array.isArray(a)){var o=a.length;for(s=0;s=0;){var v=u+d;(u===0||Ll.includes(r[u-1]))&&(v===r.length||Ll.includes(r[v]))?r=(u===0?"":r.substring(0,u))+r.substring(v+1):u=v}}return r===""?null:r}function Nl(a,s=!1){var t=s?" !important;":";",r="";for(var o of Object.keys(a)){var d=a[o];d!=null&&d!==""&&(r+=" "+o+": "+d+t)}return r}function Mr(a){return a[0]!=="-"||a[1]!=="-"?a.toLowerCase():a}function Fd(a,s){if(s){var t="",r,o;if(Array.isArray(s)?(r=s[0],o=s[1]):r=s,a){a=String(a).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var d=!1,u=0,v=!1,f=[];r&&f.push(...Object.keys(r).map(Mr)),o&&f.push(...Object.keys(o).map(Mr));var _=0,b=-1;const H=a.length;for(var m=0;m{Ko(a,a.__value)});s.observe(a,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),gr(()=>{s.disconnect()})}function Fl(a,s,t=s){var r=new WeakSet,o=!0;vl(a,"change",d=>{var _;var u=d?"[selected]":":checked",v;if(a.multiple)v=[].map.call(a.querySelectorAll(u),pi);else{var f=(_=a.querySelector(u))!=null?_:a.querySelector("option:not([disabled])");v=f&&pi(f)}t(v),a.__value=v,ut!==null&&r.add(ut)}),ja(()=>{var d=s();if(a===document.activeElement){var u=ut;if(r.has(u))return}if(Ko(a,d,o),o&&d===void 0){var v=a.querySelector(":checked");v!==null&&(d=pi(v),t(d))}a.__value=d,o=!1}),Vd(a)}function pi(a){return"__value"in a?a.__value:a.value}const $d=Symbol("is custom element"),Bd=Symbol("is html"),qd=Ac?"progress":"PROGRESS";function yr(a,s){var t=gl(a);t.value===(t.value=s!=null?s:void 0)||a.value===s&&(s!==0||a.nodeName!==qd)||(a.value=s!=null?s:"")}function jd(a,s){var t=gl(a);t.checked!==(t.checked=s!=null?s:void 0)&&(a.checked=s)}function St(a,s,t,r){var o=gl(a);o[s]!==(o[s]=t)&&(s==="loading"&&(a[Cc]=t),t==null?a.removeAttribute(s):typeof t!="string"&&Wd(a).includes(s)?a[s]=t:a.setAttribute(s,t))}function gl(a){var s;return(s=a[Ki])!=null?s:a[Ki]={[$d]:a.nodeName.includes("-"),[Bd]:a.namespaceURI===Xl}}var Vl=new Map;function Wd(a){var s=a.getAttribute("is")||a.nodeName,t=Vl.get(s);if(t)return t;Vl.set(s,t=[]);for(var r,o=a,d=Element.prototype;d!==o;){r=wc(o);for(var u in r)r[u].set&&u!=="innerHTML"&&u!=="textContent"&&u!=="innerText"&&t.push(u);o=to(o)}return t}function Ze(a,s,t=s){var r=new WeakSet;vl(a,"input",async o=>{var d=o?a.defaultValue:a.value;if(d=Dr(a)?zr(d):d,t(d),ut!==null&&r.add(ut),await kd(),d!==(d=s())){var u=a.selectionStart,v=a.selectionEnd,f=a.value.length;if(a.value=d!=null?d:"",v!==null){var _=a.value.length;u===v&&v===f&&_>f?(a.selectionStart=_,a.selectionEnd=_):(a.selectionStart=u,a.selectionEnd=Math.min(v,_))}}}),Fa(s)==null&&a.value&&(t(Dr(a)?zr(a.value):a.value),ut!==null&&r.add(ut)),mr(()=>{var o=s();if(a===document.activeElement){var d=ut;if(r.has(d))return}Dr(a)&&o===zr(a.value)||a.type==="date"&&!o&&!a.value||o!==a.value&&(a.value=o!=null?o:"")})}function is(a,s,t=s){vl(a,"change",r=>{var o=r?a.defaultChecked:a.checked;t(o)}),Fa(s)==null&&t(a.checked),mr(()=>{var r=s();a.checked=!!r})}function Dr(a){var s=a.type;return s==="number"||s==="range"}function zr(a){return a===""?null:+a}function Ir(a,s){return a===s||(a==null?void 0:a[wn])===s}function ml(a={},s,t,r){var o=ms.r,d=Ct;return ja(()=>{var u,v;return mr(()=>{u=v,v=[],Fa(()=>{Ir(t(...v),a)||(s(a,...v),u&&Ir(t(...u),a)&&s(null,...u))})}),()=>{let f=d;for(;f!==o&&f.parent!==null&&f.parent.f&Fr;)f=f.parent;const _=()=>{v&&Ir(t(...v),a)&&s(null,...v)},b=f.teardown;f.teardown=()=>{_(),b==null||b()}}}),a}function Nt(a,s,t,r){var me,ie;var o=!ti||(t&uc)!==0,d=(t&fc)!==0,u=(t&_c)!==0,v=r,f=!0,_=void 0,b=()=>u&&o?(_!=null||(_=_i(r)),e(_)):(f&&(f=!1,v=u?Fa(r):r),v);let m;if(d){var g=wn in a||Ec in a;m=(ie=(me=Fn(a,s))==null?void 0:me.set)!=null?ie:g&&s in a?I=>a[s]=I:void 0}var M,A=!1;d?[M,A]=Kc(()=>a[s]):M=a[s],M===void 0&&r!==void 0&&(M=b(),m&&(o&&Rc(),m(M)));var H;if(o?H=()=>{var I=a[s];return I===void 0?b():(f=!0,I)}:H=()=>{var I=a[s];return I!==void 0&&(v=void 0),I===void 0?v:I},o&&!(t&pc))return H;if(m){var E=a.$$legacy;return function(I,V){return arguments.length>0?((!o||!V||E||A)&&m(V?H():I),I):H()}}var O=!1,ve=(t&vc?_i:cl)(()=>(O=!1,H()));d&&e(ve);var ce=Ct;return function(I,V){if(arguments.length>0){const Y=V?e(ve):o&&d?kt(I):I;return l(ve,Y),O=!0,v!==void 0&&(v=Y),I}return Ha&&O||ce.f&fa?ve.v:e(ve)}}const Ud="modulepreload",Hd=function(a){return"/"+a},$l={},Kd=function(s,t,r){let o=Promise.resolve();if(t&&t.length>0){document.getElementsByTagName("link");const u=document.querySelector("meta[property=csp-nonce]"),v=(u==null?void 0:u.nonce)||(u==null?void 0:u.getAttribute("nonce"));o=Promise.allSettled(t.map(f=>{if(f=Hd(f),f in $l)return;$l[f]=!0;const _=f.endsWith(".css"),b=_?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${f}"]${b}`))return;const m=document.createElement("link");if(m.rel=_?"stylesheet":Ud,_||(m.as="script"),m.crossOrigin="",m.href=f,v&&m.setAttribute("nonce",v),document.head.appendChild(m),_)return new Promise((g,M)=>{m.addEventListener("load",g),m.addEventListener("error",()=>M(new Error(`Unable to preload CSS for ${f}`)))})}))}function d(u){const v=new Event("vite:preloadError",{cancelable:!0});if(v.payload=u,window.dispatchEvent(v),!v.defaultPrevented)throw u}return o.then(u=>{for(const v of u||[])v.status==="rejected"&&d(v.reason);return s().catch(d)})},wr="/assets/app_icon-CfHainhY.png";function Gd(a,s,t,r){if(typeof s=="function"?a!==s||!r:!s.has(a))throw new TypeError("Cannot read private member from an object whose class did not declare it");return t==="m"?r:t==="a"?r.call(a):r?r.value:s.get(a)}function Yd(a,s,t,r,o){if(typeof s=="function"?a!==s||!0:!s.has(a))throw new TypeError("Cannot write private member to an object whose class did not declare it");return s.set(a,t),t}var er;const ga="__TAURI_TO_IPC_KEY__";function Jd(a,s=!1){return window.__TAURI_INTERNALS__.transformCallback(a,s)}async function S(a,s={},t){return window.__TAURI_INTERNALS__.invoke(a,s,t)}class Zd{get rid(){return Gd(this,er,"f")}constructor(s){er.set(this,void 0),Yd(this,er,s)}async close(){return S("plugin:resources|close",{rid:this.rid})}}er=new WeakMap;var ta;(function(a){a.WINDOW_RESIZED="tauri://resize",a.WINDOW_MOVED="tauri://move",a.WINDOW_CLOSE_REQUESTED="tauri://close-requested",a.WINDOW_DESTROYED="tauri://destroyed",a.WINDOW_FOCUS="tauri://focus",a.WINDOW_BLUR="tauri://blur",a.WINDOW_SCALE_FACTOR_CHANGED="tauri://scale-change",a.WINDOW_THEME_CHANGED="tauri://theme-changed",a.WINDOW_CREATED="tauri://window-created",a.WINDOW_SUSPENDED="tauri://suspended",a.WINDOW_RESUMED="tauri://resumed",a.WEBVIEW_CREATED="tauri://webview-created",a.DRAG_ENTER="tauri://drag-enter",a.DRAG_OVER="tauri://drag-over",a.DRAG_DROP="tauri://drag-drop",a.DRAG_LEAVE="tauri://drag-leave"})(ta||(ta={}));async function Go(a,s){window.__TAURI_EVENT_PLUGIN_INTERNALS__.unregisterListener(a,s),await S("plugin:event|unlisten",{event:a,eventId:s})}async function ks(a,s,t){var r;const o=typeof(t==null?void 0:t.target)=="string"?{kind:"AnyLabel",label:t.target}:(r=t==null?void 0:t.target)!==null&&r!==void 0?r:{kind:"Any"};return S("plugin:event|listen",{event:a,target:o,handler:Jd(s)}).then(d=>async()=>Go(a,d))}async function Xd(a,s,t){return ks(a,r=>{Go(a,r.id),s(r)},t)}async function Yo(a,s){await S("plugin:event|emit",{event:a,payload:s})}async function Qd(a,s,t){await S("plugin:event|emit_to",{target:typeof a=="string"?{kind:"AnyLabel",label:a}:a,event:s,payload:t})}const ev={engine:{backend:"whisper-cpp",whisper_cpp:{model_dir:"",model_size:"tiny",device:"auto",threads:0,language:"auto"},moonshine:{model_size:"base",language:"en"},parakeet:{model_size:"tdt-0.6b-v3",language:"auto"},remote_openai:{endpoint:"http://localhost:8000/v1",api_key:null,model:"whisper-1",language:"",timeout_secs:30},s1_mini:{enabled:!1,styling:"semi-formal"}},audio:{vad_threshold:.5,input_device_index:null,evdev_device:null,noise_suppression:!1,gain:1,dynamic_stream:!0},ui:{show_overlay:!0,overlay_style:"mono_bars",overlay_position:"center",overlay_monitor:"primary",auto_show_settings:!1,show_notification:!1,show_command_overlay:!0,command_overlay_duration_secs:3},features:{remove_fillers:!0,custom_vocabulary:["VoxCtrl","Hey Vox"],spoken_punctuation:!0,auto_format_lists:!0,snippets:{},early_command_detection:!0},openai:{enabled:!1,model:"llama3.2:1b",mode:"clean",custom_prompt:null,system_prompt:"Fix grammar and punctuation only. Return only the corrected text, no commentary.",user_prompt:"{text}",endpoint:"http://localhost:11434",api_key:null,timeout_secs:8},tts:{enabled:!1,engine:"espeak",voice:"en-us-lessac-medium",voice_dir:"",stop_key:["KEY_ESCAPE"],response_overlay:!0,speed:1,gpu:!1,hf_token:null,pocket_tts:{voice:"alba",prewarm:!1,voice_dir:"",gpu:!1},inflect_micro:{model_dir:"",seed:0,noise_scale:.667,prewarm:!1},breeze_tts_2:{voice_mode:"prompt",cloned_voice:"alba",speaker_prompt:"A calm and clear female voice speaking at a natural pace",model_dir:"",prewarm:!1,gpu:!1},vox_cpm_2:{voice_mode:"prompt",cloned_voice:"alba",voice_dir:"",speaker_prompt:"A calm young female voice speaking clearly with a gentle tone.",ultimate_cloning:!1,model_dir:"",prewarm:!1,gpu:!1},memory_mode:"always_loaded",idle_unload_secs:900,snippets:{VoxCtrl:"Vox Control"}},mcp:{server_enabled:!1,record_timeout:15,visual_feedback:!0}},Lt=Li(ev),Va=Li(!1),lr=Li(!1);let gi=!1,Or=null;async function tv(){try{const a=await S("get_config");Lt.set(a),Va.set(!1),lr.set(!0),setTimeout(()=>{gi=!0},0)}catch(a){console.error("loadConfig:",a),lr.set(!0),setTimeout(()=>{gi=!0},0)}}async function bl(a){await S("save_config",{newConfig:a}),Va.set(!1)}Lt.subscribe(a=>{gi&&(Or&&clearTimeout(Or),Or=setTimeout(async()=>{try{await bl(a),console.log("Config auto-saved successfully!")}catch(s){console.error("Auto-saving config failed:",s)}},400))});tv();ks("config-changed",a=>{gi=!1,Lt.set(a.payload),setTimeout(()=>{gi=!0},0)}).catch(a=>{console.error("Failed to setup config-changed listener:",a)});const xs=Li({recording:!1,processing:!1,speaking:!1,mcp_recording:!1,audio_ready:!0,word_count:0,active_target_id:"default",active_target_label:"Focused Window"}),sv=Ni(xs,a=>a.recording),av=Ni(xs,a=>a.speaking),nv=Ni(xs,a=>a.mcp_recording);Ni(xs,a=>a.word_count);Ni(xs,a=>{var s;return(s=a.active_target_label)!=null?s:"Focused Window"});let Jo=0;ks("status-tick",a=>{Jo=Date.now(),xs.set(a.payload)});S("get_status").then(xs.set).catch(console.error);const iv=2e3,rv=1e3;setInterval(()=>{Date.now()-Jo{})},rv);var lv=p('

'),ov=p(`

Using the HF_TOKEN environment variable. It takes precedence over a saved + token and is not written to your config.

`),cv=p('

'),dv=p(`

`),vv=p('

'),uv=p(`

General

Setup

Run the first-launch setup wizard again

Walks through the engine, model, hotkey, overlay and voice choices in one flow, and downloads + whatever it needs. Your current settings stay in place until you change them in the wizard.

Hugging Face Access Token

Hugging Face access token

Used by every gated model VoxCtrl can download — Pocket-TTS, Breeze-TTS-2, and VoxCPM2 in + the TTS tab. Create a token at huggingface.co/settings/tokens and accept each + model's license on its Hugging Face page before downloading. Enter it once here; the setup + wizard reads and writes the same token, so the two always match.

Updates

VoxCtrl never checks for updates on its own. Press "Check now" to ask GitHub whether a newer + release has been published — that request carries nothing about you or your machine.

Check now

MCP Server

How long transcribe_voice listens when the calling agent does not ask for a + specific timeout. An explicit timeout_seconds in the tool call still wins.

Socket: /tmp/voxctrl-mcp.sock (Linux) / \\\\.\\pipe\\voxctrl-mcp (Windows)

`);function pv(a,s){Ot(s,!0);let t=Nt(s,"cfg",15);function r(){Lt.set(t()),Va.set(!0)}let o=T(null);const d=ue(()=>!!e(o)),u=ue(()=>{var R,ee;return(ee=(R=e(o))!=null?R:t().tts.hf_token)!=null?ee:""});function v(R){if(e(d))return;const ee=R.target.value;t(t().tts.hf_token=ee.trim()?ee.trim():null,!0),r()}let f=T(null),_=T(!1),b=T(null),m=T(null);async function g(){l(_,!0),l(m,null),l(b,null);try{l(b,await S("check_for_update"),!0)}catch(R){l(m,`${R}`)}finally{l(_,!1)}}async function M(){try{await S("open_update_window")}catch(R){l(m,`${R}`)}}async function A(){l(f,null);try{await S("open_setup_wizard")}catch(R){l(f,`${R}`)}}Xt(()=>{S("hf_token_env").then(R=>l(o,R&&R.trim()?R.trim():null,!0)).catch(()=>l(o,null))});var H=uv(),E=i(n(H),2),O=i(n(E),2),ve=i(n(O),2),ce=i(O,4);{var me=R=>{var ee=lv(),Oe=n(ee);w(()=>{var je;return y(Oe,`Could not open the wizard: ${(je=e(f))!=null?je:""}`)}),c(R,ee)};k(ce,R=>{e(f)&&R(me)})}var ie=i(E,2),I=i(n(ie),2),V=i(n(I),2),Y=i(I,2);{var be=R=>{var ee=ov();c(R,ee)};k(Y,R=>{e(d)&&R(be)})}var ke=i(ie,2),D=i(n(ke),4),P=i(n(D),2),he=n(P),B=i(D,2);{var L=R=>{var ee=cv(),Oe=n(ee);w(()=>{var je;return y(Oe,`VoxCtrl ${(je=e(b).current_version)!=null?je:""} is the latest release.`)}),c(R,ee)},ge=R=>{var ee=dv(),Oe=n(ee),je=i(Oe);w(()=>{var Ke,_e;return y(Oe,`Version ${(Ke=e(b).update.version)!=null?Ke:""} is available (you have + ${(_e=e(b).update.current_version)!=null?_e:""}). `)}),z("click",je,M),c(R,ee)};k(B,R=>{var ee;e(b)&&!e(b).update?R(L):(ee=e(b))!=null&&ee.update&&R(ge,1)})}var De=i(B,2);{var fe=R=>{var ee=vv(),Oe=n(ee);w(()=>{var je;return y(Oe,`Could not check for updates: ${(je=e(m))!=null?je:""}`)}),c(R,ee)};k(De,R=>{e(m)&&R(fe)})}var G=i(ke,2),J=i(n(G),2),xe=i(n(J),2),Ie=i(J,2),re=i(n(Ie),2),W=i(Ie,2),le=i(n(W),2);w(()=>{yr(V,e(u)),V.readOnly=e(d),St(V,"title",e(d)?"Set by the HF_TOKEN environment variable":void 0),P.disabled=e(_),y(he,e(_)?"Checking…":"Check for updates")}),z("click",ve,A),z("input",V,v),z("click",P,g),z("change",xe,r),is(xe,()=>t().mcp.server_enabled,R=>t(t().mcp.server_enabled=R,!0)),z("change",re,r),is(re,()=>t().mcp.visual_feedback,R=>t(t().mcp.visual_feedback=R,!0)),z("change",le,r),Ze(le,()=>t().mcp.record_timeout,R=>t(t().mcp.record_timeout=R,!0)),c(a,H),Rt()}us(["click","input","change"]);var fv=p(''),_v=p('
'),hv=p('
');function cs(a,s){Ot(s,!0);let t=Nt(s,"value",15),r=Nt(s,"options",19,()=>[]),o=Nt(s,"disabled",3,!1),d=Nt(s,"defaultToFirst",3,!1),u=T(!1),v=T(null),f=T("");const _=4,b=8;function m(I){let V=I.parentElement;for(;V&&V!==document.body&&V!==document.documentElement;){const Y=window.getComputedStyle(V);if(Y.transform&&Y.transform!=="none"||Y.perspective&&Y.perspective!=="none"||Y.filter&&Y.filter!=="none"||Y.contain==="paint"||Y.contain==="layout"||Y.contain==="strict"||Y.contain==="content"||Y.willChange==="transform")return V;V=V.parentElement}return null}function g(){if(!e(v))return;const I=e(v).getBoundingClientRect(),V=m(e(v)),Y=V?V.getBoundingClientRect():null,be=Y?Y.left:0,ke=Y?Y.top:0,D=Y?Y.bottom:window.innerHeight,P=window.innerHeight-I.bottom-_-b,he=I.top-_-b,B=P<160&&he>P,L=Math.max(120,Math.floor(B?he:P));l(f,B?`position: fixed; left: ${I.left-be}px; width: ${I.width}px; bottom: ${D-I.top+_}px; max-height: ${L}px;`:`position: fixed; left: ${I.left-be}px; width: ${I.width}px; top: ${I.bottom+_-ke}px; max-height: ${L}px;`,!0)}function M(){l(u,!e(u)),e(u)&&g()}let A=ue(()=>r().map(I=>typeof I=="string"?{value:I,label:I,disabled:!1}:{value:I.value,label:I.label,disabled:!!I.disabled}));gs(()=>{if(d()&&e(A).length>0&&!e(A).find(V=>V.value===t())){const V=e(A).find(Y=>!Y.disabled)||e(A)[0];V&&t()!==V.value&&(t(V.value),s.onchange&&s.onchange(V.value))}});let H=ue(()=>{const I=e(A).find(V=>V.value===t());if(I)return I.label;if(d()&&e(A).length>0){const V=e(A).find(Y=>!Y.disabled)||e(A)[0];if(V)return V.label}return t()!==void 0&&t()!==null?String(t()):""});gs(()=>{if(!e(u))return;const I=Y=>{e(v)&&!e(v).contains(Y.target)&&l(u,!1)},V=()=>g();return document.addEventListener("click",I),window.addEventListener("scroll",V,!0),window.addEventListener("resize",V),()=>{document.removeEventListener("click",I),window.removeEventListener("scroll",V,!0),window.removeEventListener("resize",V)}});function E(I){t(I),l(u,!1),s.onchange&&s.onchange(I)}var O=hv(),ve=n(O),ce=n(ve),me=i(ve,2);{var ie=I=>{var V=_v();_t(V,21,()=>e(A),ht,(Y,be)=>{var ke=fv();let D;var P=n(ke);w(()=>{D=Se(ke,1,"custom-dropdown-item svelte-1heock4",null,D,{selected:e(be).value===t()}),ke.disabled=e(be).disabled,y(P,e(be).label)}),z("click",ke,he=>{he.preventDefault(),he.stopPropagation(),E(e(be).value)}),c(Y,ke)}),w(()=>ds(V,e(f))),c(I,V)};k(me,I=>{e(u)&&!o()&&I(ie)})}ml(O,I=>l(v,I),()=>e(v)),w(()=>{ve.disabled=o(),y(ce,e(H))}),z("click",ve,M),c(a,O),Rt()}us(["click"]);var gv=p(''),mv=p('
'),bv=p(`

Design your own overlay style by adding a folder with an index.html and style.css to the folder below — it + shows up here as a selectable style automatically. A working example + (a copy of Voice Card, ready to duplicate) and a README covering the + format live there already.

Custom overlay styles:

`,1),yv=p('

Visual & Feedback

Overlay & HUD

Alerts & OS Integration

Application Window

');function wv(a,s){Ot(s,!0);let t=Nt(s,"cfg",15),r=T(kt([])),o=T(kt([])),d=T(""),u=ue(()=>[{value:"voice_card",label:"Voice Card"},{value:"waveform",label:"Waveform"},{value:"pulse",label:"Pulse Ring"},{value:"blue_wave",label:"Ocean Wave"},{value:"mono_bars",label:"Mono Bars"},{value:"spectrum",label:"Neon Spectrum"},{value:"terminal",label:"Retro Terminal"},{value:"vinyl",label:"Analog VU"},...e(r).map(J=>({value:J.name,label:J.name}))]);const v=[{value:"top",label:"Top of screen"},{value:"center",label:"Center of screen"},{value:"bottom",label:"Bottom of screen"}];let f=ue(()=>[{value:"primary",label:"Primary Monitor"},...e(o).filter(J=>J.name).map(J=>({value:J.name,label:`${J.name} (${J.width}x${J.height})${J.is_primary?" [Primary]":""}`}))]);Xt(async()=>{try{l(r,await S("get_custom_overlays"),!0)}catch(J){console.error("Failed to fetch custom overlays:",J)}try{l(o,await S("get_available_monitors"),!0)}catch(J){console.error("Failed to fetch available monitors:",J)}try{l(d,await S("get_custom_overlays_dir"),!0)}catch(J){console.error("Failed to fetch custom overlays directory:",J)}});function _(){Lt.set(t()),Va.set(!0)}function b(J){_(),Yo("overlay-style-selected",J)}var m=yv(),g=i(n(m),2),M=i(n(g),2),A=i(n(M),2),H=i(M,2),E=i(n(H),2),O=i(H,2);{var ve=J=>{var xe=gv(),Ie=i(n(xe),2);z("change",Ie,_),Ze(Ie,()=>t().ui.command_overlay_duration_secs,re=>t(t().ui.command_overlay_duration_secs=re,!0)),c(J,xe)};k(O,J=>{t().ui.show_command_overlay&&J(ve)})}var ce=i(O,2),me=i(n(ce),2);cs(me,{get options(){return e(u)},onchange:b,get value(){return t().ui.overlay_style},set value(J){t(t().ui.overlay_style=J,!0)}});var ie=i(ce,2),I=i(n(ie),2);cs(I,{get options(){return v},onchange:_,get value(){return t().ui.overlay_position},set value(J){t(t().ui.overlay_position=J,!0)}});var V=i(ie,2),Y=i(n(V),2);cs(Y,{get options(){return e(f)},onchange:_,get value(){return t().ui.overlay_monitor},set value(J){t(t().ui.overlay_monitor=J,!0)}});var be=i(V,2);{var ke=J=>{var xe=mv(),Ie=n(xe),re=n(Ie);w(()=>{var W;return y(re,`⚠️ Configured monitor "${(W=t().ui.overlay_monitor)!=null?W:""}" is disconnected. Using Primary Monitor.`)}),c(J,xe)},D=ue(()=>t().ui.overlay_monitor!=="primary"&&e(o).length>0&&!e(o).some(J=>J.name===t().ui.overlay_monitor));k(be,J=>{e(D)&&J(ke)})}var P=i(be,2);{var he=J=>{var xe=bv(),Ie=i(wt(xe),2),re=i(n(Ie)),W=n(re);w(()=>y(W,e(d))),c(J,xe)};k(P,J=>{e(d)&&J(he)})}var B=i(g,2),L=i(n(B),2),ge=i(n(L),2),De=i(B,2),fe=i(n(De),2),G=i(n(fe),2);z("change",A,_),is(A,()=>t().ui.show_overlay,J=>t(t().ui.show_overlay=J,!0)),z("change",E,_),is(E,()=>t().ui.show_command_overlay,J=>t(t().ui.show_command_overlay=J,!0)),z("change",ge,_),is(ge,()=>t().ui.show_notification,J=>t(t().ui.show_notification=J,!0)),z("change",G,_),is(G,()=>t().ui.auto_show_settings,J=>t(t().ui.auto_show_settings=J,!0)),c(a,m),Rt()}us(["change"]);var kv=p(`
⚠️
Voice Model Not Downloaded

The configuration specifies a voice model ( ) that is not currently downloaded. Please select the model size to + use and download it below, or choose another model.

`),xv=p('⏳ Checking local model files...'),Tv=p(' '),Sv=p('✔ Model downloaded and ready'),Ev=p('
❌ Model file missing
'),Cv=p('

'),Av=p(`

Whisper.cpp Settings

Model directory (leave blank for default)

Language code (e.g. en, da, fr) to force transcription in that + language, or auto to let whisper.cpp detect it. Forcing a language helps short phrases + that auto-detect sometimes misidentifies.

Default model directory: ~/.local/share/voxctrl/models/

`),Mv=p(`
⚠️
Moonshine backend not included in this build

This build was compiled without Moonshine, so selecting it will fall + back to Whisper.cpp (using the Whisper model configured above). + Rebuild with --features moonshine to enable it.

`),Pv=p(`
🖥️
Moonshine runs on the CPU in this build

ONNX Runtime, which Moonshine uses, has no Vulkan backend, so the + Device setting above applies to Whisper.cpp only. Moonshine holds + its weights in RAM as fp32 — roughly 530 MB for base, 240 MB for tiny

`),Dv=p('⏳ Checking local model files...'),zv=p(' '),Iv=p('✔ Model downloaded'),Ov=p('
Model not downloaded
'),Rv=p('
'),Lv=p('

Moonshine Settings

'),Nv=p(`
⚠️
Parakeet backend not included in this build

This build was compiled without Parakeet, so selecting it will fall + back to Whisper.cpp. Rebuild with --features parakeet to enable it.

`),Fv=p('⏳ Checking local model files...'),Vv=p(' '),$v=p('✔ Model downloaded and ready'),Bv=p('
Model not downloaded
'),qv=p('
'),jv=p('

Parakeet Settings

NVIDIA FastConformer TDT 0.6B with 128-mel ONNX preprocessor and INT8 quantization (~665 MB total).

'),Wv=p(''),Uv=p('
Discovered models from server:
'),Hv=p("
"),Kv=p(`

Remote Speech Engine Settings

Connect to a network speech-to-text service supporting the OpenAI /v1/audio/transcriptions API (e.g., Faster-Whisper-Server, vLLM, LocalAI, Whisper-standalone, or OpenAI Whisper). + Audio will begin streaming to the endpoint as soon as your keybind is triggered.

Base URL or full transcriptions path (e.g. http://192.168.1.50:8000/v1 or https://api.openai.com/v1).

Leave blank if your local network server does not require authentication.

Language code (e.g. en, es, fr) or leave blank/auto for automatic detection.

`),Gv=p('

Inference Engine

Backend

');function Yv(a,s){Ot(s,!0);let t=Nt(s,"cfg",15);function r(){Lt.set(t()),Va.set(!0)}const o=["tiny","tiny.en","base","base.en","small","small.en","medium","medium.en","large-v2","large-v3","large-v3-turbo"];let d=T(null),u=T(null),v=T(null);const f={cuda:"CUDA (NVIDIA)",vulkan:"Vulkan (AMD/Intel/NVIDIA)",coreml:"CoreML (Apple)",webgpu:"WebGPU (AMD/Intel/NVIDIA)"},_=C=>{var X;return(X=f[C])!=null?X:C};let b=ue(()=>[{value:"whisper-cpp",label:"Whisper.cpp"},{value:"moonshine",label:e(u)?`Moonshine (${_(e(u))})`:"Moonshine (CPU only)"},{value:"parakeet",label:e(v)?`Parakeet TDT (${_(e(v))})`:"Parakeet TDT (CPU only)"},{value:"remote-openai",label:"Remote Speech Engine (OpenAI API)"}]),m=ue(()=>o.map(C=>({value:C,label:`${C}${e(H)[C]?" ✔":""}`}))),g=ue(()=>[{value:"auto",label:e(d)?`Auto (${_(e(d))})`:"Auto"},...e(d)?[{value:e(d),label:_(e(d))}]:[],{value:"cpu",label:"CPU"}]);const M=[{value:"base",label:"Base"},{value:"tiny",label:"Tiny"}],A=[{value:"tdt-0.6b-v3",label:"TDT 0.6B v3 (INT8, ~665 MB)"}];let H=T(kt({})),E=T(!1),O=T(!1),ve=T(null),ce=T(!0),me=T(kt({})),ie=T(!1),I=T(!1),V=T(!0),Y=T(kt({})),be=T(!1),ke=T(!1);async function D(){l(be,!0);const C={};for(const X of A)try{C[X.value]=await S("check_parakeet_downloaded",{modelSize:X.value})}catch(de){console.error("Failed to check Parakeet download status for "+X.value,de),C[X.value]=!1}l(Y,C,!0),l(be,!1)}async function P(C){if(!e(ke)){l(ke,!0);try{await S("download_parakeet_model",{modelSize:C}),e(Y)[C]=!0}catch(X){alert(`Failed to download Parakeet model: ${X}`)}finally{l(ke,!1)}}}async function he(){var X,de;r();const C=(de=(X=t().engine.parakeet)==null?void 0:X.model_size)!=null?de:"tdt-0.6b-v3";e(V)&&!e(Y)[C]&&await P(C)}let B=T(!1),L=T(null),ge=T(kt([]));function De(){t().engine.remote_openai||t(t().engine.remote_openai={endpoint:"http://localhost:8000/v1",api_key:null,model:"whisper-1",language:"",timeout_secs:30},!0)}async function fe(){if(De(),!e(B)){l(B,!0),l(L,null);try{const C=await S("test_remote_stt",{endpoint:t().engine.remote_openai.endpoint||"http://localhost:8000/v1",apiKey:t().engine.remote_openai.api_key||null,model:t().engine.remote_openai.model||"whisper-1",timeoutSecs:t().engine.remote_openai.timeout_secs||30});l(L,{success:C.success,message:C.message},!0),C.models&&C.models.length>0&&(l(ge,C.models,!0),t().engine.remote_openai.model||(t(t().engine.remote_openai.model=C.models[0],!0),r()))}catch(C){l(L,{success:!1,message:C.toString()},!0)}finally{l(B,!1)}}}async function G(){l(ie,!0);const C={};for(const X of M)try{C[X.value]=await S("check_moonshine_downloaded",{modelSize:X.value})}catch(de){console.error("Failed to check Moonshine download status for "+X.value,de),C[X.value]=!1}l(me,C,!0),l(ie,!1)}async function J(C){if(!e(I)){l(I,!0);try{await S("download_moonshine_model",{modelSize:C}),e(me)[C]=!0}catch(X){alert(`Failed to download Moonshine model: ${X}`)}finally{l(I,!1)}}}async function xe(){r();const C=t().engine.moonshine.model_size;e(ce)&&!e(me)[C]&&await J(C)}async function Ie(){l(E,!0);const C={};for(const X of o)try{C[X]=await S("check_model_downloaded",{modelSize:X,modelDir:t().engine.whisper_cpp.model_dir})}catch(de){console.error("Failed to check download status for model "+X,de),C[X]=!1}l(H,C,!0),l(E,!1)}async function re(C){if(!e(O)){l(O,!0);try{await S("download_model",{modelSize:C,modelDir:t().engine.whisper_cpp.model_dir}),e(H)[C]=!0}catch(X){alert(`Failed to download model: ${X}`)}finally{l(O,!1)}}}async function W(){r();const C=t().engine.whisper_cpp.model_size;e(H)[C]||await re(C)}async function le(){const C=t().engine.whisper_cpp.model_dir;if(!C){l(ve,null);return}const X=await S("check_directory_exists",{path:C});l(ve,X?null:"This folder does not exist. Please create it first or leave blank for the default location.",!0),e(ve)||await Ie()}function R(){r()}function ee(C){C.key==="Enter"&&C.currentTarget.blur()}Xt(async()=>{var X,de,oe;Ie();try{l(ce,await S("moonshine_available"),!0)}catch(Ae){console.error("Failed to query Moonshine availability",Ae)}G();try{l(V,await S("parakeet_available"),!0)}catch(Ae){console.error("Failed to query Parakeet availability",Ae)}D();try{const Ae=await S("accelerator_support");l(d,(X=Ae.whisper_gpu)!=null?X:null,!0),l(u,(de=Ae.moonshine_gpu)!=null?de:null,!0),l(v,(oe=Ae.parakeet_gpu)!=null?oe:null,!0)}catch(Ae){console.error("Failed to query GPU support",Ae)}const C=t().engine.whisper_cpp.device;C!=="auto"&&C!=="cpu"&&C!==e(d)&&(t(t().engine.whisper_cpp.device="auto",!0),r())});var Oe=Gv(),je=i(n(Oe),2);{var Ke=C=>{var X=kv(),de=i(n(X),2),oe=i(n(de),2),Ae=i(n(oe)),$e=n(Ae);w(()=>y($e,t().engine.whisper_cpp.model_size)),c(C,X)};k(je,C=>{t().engine.backend==="whisper-cpp"&&!e(E)&&!e(H)[t().engine.whisper_cpp.model_size]&&C(Ke)})}var _e=i(je,2),se=i(n(_e),2),ye=i(n(se),2);cs(ye,{get options(){return e(b)},onchange:r,get value(){return t().engine.backend},set value(C){t(t().engine.backend=C,!0)}});var et=i(_e,2);{var te=C=>{var X=Av(),de=i(n(X),2),oe=i(n(de),2);cs(oe,{get options(){return e(m)},onchange:W,get value(){return t().engine.whisper_cpp.model_size},set value(Me){t(t().engine.whisper_cpp.model_size=Me,!0)}});var Ae=i(de,2),$e=n(Ae);{var tt=Me=>{var Ye=xv();c(Me,Ye)},st=Me=>{var Ye=Tv(),rt=n(Ye);w(()=>{var Z;return y(rt,`⏳ Downloading ${(Z=t().engine.whisper_cpp.model_size)!=null?Z:""} (GGUF format)...`)}),c(Me,Ye)},U=Me=>{var Ye=Sv();c(Me,Ye)},Q=Me=>{var Ye=Ev(),rt=i(n(Ye),2);z("click",rt,()=>re(t().engine.whisper_cpp.model_size)),c(Me,Ye)};k($e,Me=>{e(E)?Me(tt):e(O)?Me(st,1):e(H)[t().engine.whisper_cpp.model_size]?Me(U,2):Me(Q,-1)})}var ne=i(Ae,2),Re=i(n(ne),2);cs(Re,{get options(){return e(g)},onchange:r,get value(){return t().engine.whisper_cpp.device},set value(Me){t(t().engine.whisper_cpp.device=Me,!0)}});var at=i(ne,2),lt=i(n(at),2);let Ee;var Ge=i(lt,2);{var nt=Me=>{var Ye=Cv(),rt=n(Ye);w(()=>y(rt,e(ve))),c(Me,Ye)};k(Ge,Me=>{e(ve)&&Me(nt)})}var Ne=i(at,2),it=i(n(Ne),2),dt=i(Ne,2),ot=i(n(dt),2);w(()=>Ee=Se(lt,1,"svelte-nfi4ak",null,Ee,{"field-input-error":!!e(ve)})),z("change",lt,R),Ra("blur",lt,le),z("keydown",lt,ee),Ze(lt,()=>t().engine.whisper_cpp.model_dir,Me=>t(t().engine.whisper_cpp.model_dir=Me,!0)),z("change",it,r),Ze(it,()=>t().engine.whisper_cpp.threads,Me=>t(t().engine.whisper_cpp.threads=Me,!0)),z("change",ot,r),Ze(ot,()=>t().engine.whisper_cpp.language,Me=>t(t().engine.whisper_cpp.language=Me,!0)),c(C,X)},j=C=>{var X=Lv(),de=i(n(X),2);{var oe=at=>{var lt=Mv();c(at,lt)};k(de,at=>{e(ce)||at(oe)})}var Ae=i(de,2);{var $e=at=>{var lt=Pv(),Ee=i(n(lt),2),Ge=i(n(Ee),2),nt=i(n(Ge),8);w(Ne=>y(nt,` — + where Whisper.cpp${Ne!=null?Ne:""}. Pick Whisper.cpp if memory + matters more than Moonshine's latency.`),[()=>e(d)?` puts a quantized model in VRAM via ${_(e(d))}`:" uses a smaller quantized model"]),c(at,lt)};k(Ae,at=>{e(ce)&&!e(u)&&at($e)})}var tt=i(Ae,2),st=i(n(tt),2);cs(st,{get options(){return M},onchange:xe,get value(){return t().engine.moonshine.model_size},set value(at){t(t().engine.moonshine.model_size=at,!0)}});var U=i(tt,2);{var Q=at=>{var lt=Rv(),Ee=n(lt);{var Ge=dt=>{var ot=Dv();c(dt,ot)},nt=dt=>{var ot=zv(),Me=n(ot);w(()=>{var Ye;return y(Me,`⏳ Downloading Moonshine ${(Ye=t().engine.moonshine.model_size)!=null?Ye:""} (ONNX)...`)}),c(dt,ot)},Ne=dt=>{var ot=Iv();c(dt,ot)},it=dt=>{var ot=Ov(),Me=i(n(ot),2),Ye=n(Me);w(()=>{var rt;return y(Ye,`Download ${(rt=t().engine.moonshine.model_size)!=null?rt:""}`)}),z("click",Me,()=>J(t().engine.moonshine.model_size)),c(dt,ot)};k(Ee,dt=>{e(ie)?dt(Ge):e(I)?dt(nt,1):e(me)[t().engine.moonshine.model_size]?dt(Ne,2):dt(it,-1)})}c(at,lt)};k(U,at=>{e(ce)&&at(Q)})}var ne=i(U,2),Re=i(n(ne),2);z("change",Re,r),Ze(Re,()=>t().engine.moonshine.language,at=>t(t().engine.moonshine.language=at,!0)),c(C,X)},F=C=>{var X=jv(),de=i(n(X),2);{var oe=ne=>{var Re=Nv();c(ne,Re)};k(de,ne=>{e(V)||ne(oe)})}var Ae=i(de,2),$e=i(n(Ae),2);cs($e,{get options(){return A},onchange:he,get value(){return t().engine.parakeet.model_size},set value(ne){t(t().engine.parakeet.model_size=ne,!0)}});var tt=i(Ae,2);{var st=ne=>{var Re=qv(),at=n(Re);{var lt=Ne=>{var it=Fv();c(Ne,it)},Ee=Ne=>{var it=Vv(),dt=n(it);w(()=>{var ot;return y(dt,`⏳ Downloading Parakeet ${(ot=t().engine.parakeet.model_size)!=null?ot:""} (ONNX INT8)...`)}),c(Ne,it)},Ge=Ne=>{var it=$v();c(Ne,it)},nt=Ne=>{var it=Bv(),dt=i(n(it),2),ot=n(dt);w(()=>{var Me;return y(ot,`Download ${(Me=t().engine.parakeet.model_size)!=null?Me:""}`)}),z("click",dt,()=>P(t().engine.parakeet.model_size)),c(Ne,it)};k(at,Ne=>{e(be)?Ne(lt):e(ke)?Ne(Ee,1):e(Y)[t().engine.parakeet.model_size]?Ne(Ge,2):Ne(nt,-1)})}c(ne,Re)};k(tt,ne=>{e(V)&&ne(st)})}var U=i(tt,2),Q=i(n(U),2);z("change",Q,r),Ze(Q,()=>t().engine.parakeet.language,ne=>t(t().engine.parakeet.language=ne,!0)),c(C,X)},ae=C=>{var X=Kv(),de=i(n(X),4),oe=i(n(de),2),Ae=i(de,4),$e=i(n(Ae),2),tt=i(Ae,4),st=i(n(tt),2),U=i(tt,2);{var Q=Me=>{var Ye=Uv(),rt=i(n(Ye),2);_t(rt,21,()=>e(ge),ht,(Z,K)=>{var pe=Wv();let We;var Ve=n(pe);w(()=>{We=Se(pe,1,"tag-btn svelte-nfi4ak",null,We,{active:t().engine.remote_openai.model===e(K)}),y(Ve,e(K))}),z("click",pe,()=>{t(t().engine.remote_openai.model=e(K),!0),r()}),c(Z,pe)}),c(Me,Ye)};k(U,Me=>{e(ge).length>0&&Me(Q)})}var ne=i(U,2),Re=i(n(ne),2),at=i(ne,4),lt=i(n(at),2),Ee=i(at,2),Ge=n(Ee),nt=n(Ge);{var Ne=Me=>{var Ye=qe("⏳ Testing Connection...");c(Me,Ye)},it=Me=>{var Ye=qe("🧪 Test Connection");c(Me,Ye)};k(nt,Me=>{e(B)?Me(Ne):Me(it,-1)})}var dt=i(Ge,2);{var ot=Me=>{var Ye=Hv();let rt;var Z=n(Ye);{var K=We=>{var Ve=qe();w(()=>{var gt;return y(Ve,`✔ ${(gt=e(L).message)!=null?gt:""}`)}),c(We,Ve)},pe=We=>{var Ve=qe();w(()=>{var gt;return y(Ve,`⚠️ ${(gt=e(L).message)!=null?gt:""}`)}),c(We,Ve)};k(Z,We=>{e(L).success?We(K):We(pe,-1)})}w(()=>rt=Se(Ye,1,"status-pill svelte-nfi4ak",null,rt,{success:e(L).success,error:!e(L).success})),c(Me,Ye)};k(dt,Me=>{e(L)&&Me(ot)})}w(()=>Ge.disabled=e(B)),z("change",oe,r),Ze(oe,()=>t().engine.remote_openai.endpoint,Me=>t(t().engine.remote_openai.endpoint=Me,!0)),z("change",$e,r),Ze($e,()=>t().engine.remote_openai.api_key,Me=>t(t().engine.remote_openai.api_key=Me,!0)),z("change",st,r),Ze(st,()=>t().engine.remote_openai.model,Me=>t(t().engine.remote_openai.model=Me,!0)),z("change",Re,r),Ze(Re,()=>t().engine.remote_openai.language,Me=>t(t().engine.remote_openai.language=Me,!0)),z("change",lt,r),Ze(lt,()=>t().engine.remote_openai.timeout_secs,Me=>t(t().engine.remote_openai.timeout_secs=Me,!0)),z("click",Ge,fe),c(C,X)};k(et,C=>{t().engine.backend==="whisper-cpp"?C(te):t().engine.backend==="moonshine"?C(j,1):t().engine.backend==="parakeet"?C(F,2):t().engine.backend==="remote-openai"&&C(ae,3)})}c(a,Oe),Rt()}us(["click","change","keydown"]);var Jv=p("
"),Zv=p('
'),Xv=p(`

Audio

Input Device

Microphone Monitor

Only opens the microphone stream when recording is triggered, which saves power but cannot capture anything spoken while the microphone is still opening. Turn this off to keep the stream open: the last 300ms before you trigger recording is then kept and included, so a first word spoken early — the one carrying a voice command's "Hey Vox" or "Vox Control" — is not lost.

Voice Activity Detection

Processing

Removes steady background noise (fans, hiss, hum) from the microphone before + transcription, keeping speech intact. Takes effect on the next recording — no restart needed.

`);function Qv(a,s){Ot(s,!0);let t=Nt(s,"cfg",15);function r(){Lt.set(t()),Va.set(!0)}let o=T(kt([])),d=ue(()=>[{value:-1,label:"Default system device"},...e(o).map(R=>({value:R.index,label:R.name}))]),u=T(0),v=T(0),f=T(0),_=0,b=T(null),m;function g(){const R=e(u);R>e(v)?l(v,e(v)+(R-e(v))*.45):l(v,e(v)+(R-e(v))*.12),e(v)>e(f)?(l(f,e(v),!0),_=25):_>0?_--:l(f,Math.max(0,e(f)-.012),!0),m=requestAnimationFrame(g)}Xt(async()=>{l(o,await S("list_audio_devices"),!0);try{await S("start_monitoring_audio"),l(b,await ks("audio-level",R=>{l(u,R.payload,!0)}),!0)}catch(R){console.error("Failed to start audio monitoring:",R)}m=requestAnimationFrame(g)}),br(async()=>{m&&cancelAnimationFrame(m),e(b)&&e(b)();try{await S("stop_monitoring_audio")}catch(R){console.error("Failed to stop audio monitoring:",R)}});var M=Xv(),A=i(n(M),2),H=i(n(A),2),E=i(n(H),2);{let R=ue(()=>{var ee;return(ee=t().audio.input_device_index)!=null?ee:-1});cs(E,{get value(){return e(R)},get options(){return e(d)},onchange:ee=>{t(t().audio.input_device_index=ee<0?null:ee,!0),r()}})}var O=i(H,2),ve=n(O),ce=i(n(ve),2);let me;var ie=i(ce,2),I=n(ie),V=i(ve,2),Y=n(V),be=n(Y);_t(be,16,()=>Array(24),ht,(R,ee,Oe)=>{const je=ue(()=>Oe/24),Ke=ue(()=>e(v)>=e(je)),_e=ue(()=>Oe>=17);var se=Jv();let ye;w(()=>ye=Se(se,1,"vu-segment svelte-1msnq7i",null,ye,{active:e(Ke),orange:e(_e)})),c(R,se)});var ke=i(be,2);{var D=R=>{var ee=Zv();w(Oe=>ds(ee,`left: ${Oe!=null?Oe:""}%;`),[()=>Math.min(.99,e(f))*100]),c(R,ee)};k(ke,R=>{e(f)>.01&&R(D)})}var P=i(O,2),he=i(n(P),2),B=i(A,2),L=i(n(B),2),ge=i(n(L),2),De=i(ge,2),fe=n(De),G=i(B,2),J=i(n(G),2),xe=i(n(J),2),Ie=i(J,4),re=i(n(Ie),2),W=i(re,2),le=n(W);w((R,ee)=>{me=Se(ce,1,"vu-status-dot svelte-1msnq7i",null,me,{active:e(u)>.005}),y(I,e(u)>.005?"Signal Detected":"Listening..."),y(fe,R),y(le,`${ee!=null?ee:""}×`)},[()=>t().audio.vad_threshold.toFixed(2),()=>t().audio.gain.toFixed(1)]),z("change",he,r),is(he,()=>t().audio.dynamic_stream,R=>t(t().audio.dynamic_stream=R,!0)),z("change",ge,r),Ze(ge,()=>t().audio.vad_threshold,R=>t(t().audio.vad_threshold=R,!0)),z("change",xe,r),is(xe,()=>t().audio.noise_suppression,R=>t(t().audio.noise_suppression=R,!0)),z("change",re,r),Ze(re,()=>t().audio.gain,R=>t(t().audio.gain=R,!0)),c(a,M),Rt()}us(["change"]);var eu=p(''),tu=p('
Voice Command Router Settings

Types dictated text into your active application by default. If your dictation contains Hey Vox <target_name> <text> or Vox Control <target_name> <text> (for example, "Hey Vox, Notes Hello world" or "Vox Control Notes Hello world"), VoxCtrl dynamically reroutes the text to that target instead.

'),su=p(' '),au=p('
Shell Executor Settings
Terminal Command Shell command

Use inside the command string as a placeholder to substitute transcribed speech.

'),nu=p(' '),iu=p('

Each line starts with:

'),ru=p(`

A strftime pattern, written in UTC. Common pieces: %Y year (2026), %m month (09), %d day (04), %H hour (17), %M minute, %S second, %b month name (Sep), %a weekday (Fri), %p AM/PM, %Z zone (UTC), %% a literal percent. Anything else is written as typed. + Default:

`,1),lu=p('
Local File Writer Settings
'),ou=p('
Network Socket settings
'),cu=p('
FIFO Named Pipe settings
'),du=p('
Linux DBus emitter settings
'),vu=p(''),uu=p(''),pu=p(' '),fu=p('
Method
Custom Post Body JSON Template

Must be valid JSON. Use to substitute transcribed speech.

',1),_u=p(' '),hu=p('
Webhook Secret Token (HMAC)
Custom Webhook Body JSON Template

Must be valid JSON. Use to substitute transcribed speech.

',1),gu=p('
API Endpoint Client settings
REST endpoint URL
'),mu=p(' '),bu=p('
MCP Server Client settings
Custom Socket/Pipe Path Optional override

Leave empty to use defaults (/tmp/voxctrl-mcp.sock on Linux, \\\\.\\pipe\\voxctrl-mcp on Windows).

MCP Tool Name
Custom Tool Arguments JSON Template

Must be valid JSON. Use to substitute transcribed speech.

'),yu=p(' '),wu=p(''),ku=p(' '),xu=p(" "),Tu=p(`

Discards this target's stored conversation so the next dictation starts a new + thread. History is in-memory only and is never written to disk.

`),Su=p(`
Conversational LLM settings

Sends each dictation to an OpenAI-compatible /v1/chat/completions endpoint — Hermes, Ollama, llama.cpp — + carrying the running conversation so the model keeps its context between turns.

Server Base URL

The /v1 suffix is optional — it is added automatically.

Model

Press Test & fetch models to confirm the server is reachable and + pick from the ids it reports.

API Key Optional
System Prompt

Sent ahead of every turn and never trimmed from the history window.

Reply Handling

Speaking the reply requires TTS to be enabled in the TTS tab.

Conversation Memory Messages

Most recent messages sent with each turn. 0 sends the whole conversation.

Request Timeout Seconds
Spoken Reset Phrase Optional

Saying exactly this clears the conversation instead of sending it to the model. + Casing and punctuation are ignored.

`),Eu=p('
Output
'),Cu=p(`
`);function Zo(a,s){Ot(s,!0);let t=Nt(s,"editingTarget",15),r=Nt(s,"isNested",3,!1),o=T(""),d=T(""),u=T(""),v=T(kt([])),f=T(!1),_=T(""),b=T(!1);const m="%Y-%m-%dT%H:%M:%SZ";let g=T(""),M=T(null);gs(()=>{var he,B;const D=(B=(he=t())==null?void 0:he.file_timestamp_format)!=null?B:"";if(!t()||t().delivery!=="file"||!t().file_timestamp){l(M,null),l(g,"");return}let P=!1;return S("preview_timestamp_format",{format:D}).then(L=>{P||(l(g,L,!0),l(M,null))}).catch(L=>{P||(l(g,""),l(M,`${L}`))}),()=>{P=!0}});let A=ue(()=>!t()||t().delivery!=="exec"||(t().command||"").includes("{text}")?null:"Command must contain '{text}' placeholder."),H=ue(()=>{if(!e(o).trim())return null;try{JSON.parse(e(o))}catch(D){return"Invalid JSON format: "+D.message}return e(o).includes("{text}")?null:"Arguments must contain '{text}' placeholder."}),E=ue(()=>{if(!e(d).trim())return null;try{JSON.parse(e(d))}catch(D){return"Invalid JSON format: "+D.message}return e(d).includes("{text}")?null:"JSON template must contain '{text}' placeholder."}),O=ue(()=>{if(!e(u).trim())return null;try{JSON.parse(e(u))}catch(D){return"Invalid JSON format: "+D.message}return e(u).includes("{text}")?null:"JSON template must contain '{text}' placeholder."}),ve=ue(()=>{if(!t()||t().delivery!=="chat")return null;const D=(t().chat_url||"").trim();return D?/^https?:\/\//i.test(D)?null:"URL must start with http:// or https://":"A server base URL is required."}),ce=ue(()=>!t()||t().delivery!=="chat"||(t().chat_model||"").trim()?null:"A model name is required.");async function me(){if(t()){l(f,!0);try{const D=await S("test_chat_target",{target:t()});l(v,D.models,!0),l(_,D.message,!0),l(b,D.success,!0),D.success&&!t().chat_model&&D.models.length>0&&t(t().chat_model=D.models[0],!0)}catch(D){l(v,[],!0),l(_,String(D),!0),l(b,!1)}finally{l(f,!1)}}}async function ie(){if(t())try{const D=await S("reset_chat_conversation",{targetId:t().id});l(_,`Conversation cleared (${D} message(s) discarded).`),l(b,!0)}catch(D){l(_,String(D),!0),l(b,!1)}}function I(D){function P(){D.style.height="auto",D.style.height=`${D.scrollHeight}px`}D.addEventListener("input",P);const he=setTimeout(P,0);return{update(){P()},destroy(){clearTimeout(he),D.removeEventListener("input",P)}}}Xt(()=>{var D,P,he,B,L;t()&&(t().processing||t(t().processing={},!0),t().file_mode||t(t().file_mode="append",!0),t().file_timestamp_format||t(t().file_timestamp_format=m,!0),t((P=(D=t()).chat_max_history)!=null?P:D.chat_max_history=20,!0),t((B=(he=t()).chat_timeout_secs)!=null?B:he.chat_timeout_secs=120,!0),t((L=t()).chat_reply_mode||(L.chat_reply_mode="speak"),!0),l(o,t().mcp_args?JSON.stringify(t().mcp_args,null,2):`{ + "text": "{text}" +}`,!0),l(d,t().http_json_template?JSON.stringify(t().http_json_template,null,2):`{ + "text": "{text}" +}`,!0),l(u,t().webhook_json_template?JSON.stringify(t().webhook_json_template,null,2):`{ + "text": "{text}" +}`,!0))});function V(){if(t()){if(t().id.trim()===""){alert("Target ID cannot be empty.");return}if(t().delivery==="file"&&t().file_timestamp&&e(M)){alert("Validation Error: "+e(M));return}if(t().delivery==="exec"&&e(A)){alert("Validation Error: "+e(A));return}if(t().delivery==="mcp"){if(e(H)){alert("Validation Error: "+e(H));return}try{t(t().mcp_args=JSON.parse(e(o)),!0)}catch{alert("Invalid JSON format in MCP Custom Tool Arguments.");return}}if(t().delivery==="http"){if(e(E)){alert("Validation Error: "+e(E));return}try{t(t().http_json_template=JSON.parse(e(d)),!0)}catch{alert("Invalid JSON format in HTTP Custom Post Body.");return}}if(t().delivery==="webhook"){if(e(O)){alert("Validation Error: "+e(O));return}try{t(t().webhook_json_template=JSON.parse(e(u)),!0)}catch{alert("Invalid JSON format in Webhook Custom Post Body.");return}}if(t().delivery==="chat"){const D=e(ve)||e(ce);if(D){alert("Validation Error: "+D);return}t(t().chat_max_history=Number(t().chat_max_history)||0,!0),t(t().chat_timeout_secs=Number(t().chat_timeout_secs)||120,!0)}s.onSave()}}var Y=$i(),be=wt(Y);{var ke=D=>{var P=Cu(),he=n(P),B=n(he),L=n(B),ge=n(L),De=i(L,2),fe=i(B,2),G=n(fe);{var J=Ee=>{var Ge=eu(),nt=i(n(Ge),2);w(()=>nt.disabled=!s.isNew),Ze(nt,()=>t().id,Ne=>t(t().id=Ne,!0)),c(Ee,Ge)};k(G,Ee=>{r()||Ee(J)})}var xe=i(G,2),Ie=i(n(xe),2),re=i(xe,2),W=i(n(re)),le=n(W),R=i(W,2),ee=n(R),Oe=i(re,2),je=i(n(Oe),2);cs(je,{options:[{value:"command",label:"Voice Command Router (Hey Vox / Vox Control keyword)"},{value:"inject",label:"Inject Text Directly (Simulate keyboard)"},{value:"clipboard",label:"Save to Clipboard"},{value:"exec",label:"Execute Command"},{value:"file",label:"Write to File"},{value:"pipe",label:"FIFO Named Pipe"},{value:"socket",label:"TCP / Unix Socket"},{value:"dbus",label:"DBus Signal"},{value:"http",label:"HTTP Custom Client"},{value:"webhook",label:"Send Webhook Event"},{value:"mcp",label:"Call MCP Server Tool"},{value:"speak",label:"Speak Text Aloud (TTS)"},{value:"chat",label:"Chat with a Local LLM (Hermes / OpenAI-compatible)"}],get value(){return t().delivery},set value(Ee){t(t().delivery=Ee,!0)}});var Ke=i(Oe,2);{var _e=Ee=>{var Ge=tu();c(Ee,Ge)};k(Ke,Ee=>{t().delivery==="command"&&Ee(_e)})}var se=i(Ke,2);{var ye=Ee=>{var Ge=au(),nt=i(n(Ge),2),Ne=i(n(nt),2);St(Ne,"placeholder","e.g. xdg-open {text}");var it=i(Ne,2),dt=i(n(it));dt.textContent="{text}";var ot=i(it,2);{var Me=Ye=>{var rt=su(),Z=n(rt);w(()=>{var K;return y(Z,`⚠️ ${(K=e(A))!=null?K:""}`)}),c(Ye,rt)};k(ot,Ye=>{e(A)&&Ye(Me)})}w(()=>Se(Ne,1,`full-width-input ${e(A)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""}`,"svelte-oc07pw")),Ze(Ne,()=>t().command,Ye=>t(t().command=Ye,!0)),c(Ee,Ge)};k(se,Ee=>{t().delivery==="exec"&&Ee(ye)})}var et=i(se,2);{var te=Ee=>{var Ge=lu(),nt=i(n(Ge),2),Ne=i(n(nt),2),it=i(nt,2),dt=i(n(it),2);cs(dt,{options:[{value:"append",label:"Append (Add to end of file)"},{value:"prepend",label:"Prepend (Add to beginning of file)"}],get value(){return t().file_mode},set value(pe){t(t().file_mode=pe,!0)}});var ot=i(it,2),Me=i(n(ot),2),Ye=i(ot,2),rt=n(Ye),Z=i(Ye,2);{var K=pe=>{var We=ru(),Ve=wt(We),gt=i(n(Ve),2);St(gt,"placeholder",m);var as=i(Ve,2),Ht=i(n(as),25);Ht.textContent="%Y-%m-%dT%H:%M:%SZ";var Kt=i(as,2);{var ft=At=>{var Et=nu(),ze=n(Et);w(()=>{var Je;return y(ze,`⚠️ ${(Je=e(M))!=null?Je:""}`)}),c(At,Et)},Ft=At=>{var Et=iu(),ze=i(n(Et)),Je=n(ze);w(()=>{var q;return y(Je,`[${(q=e(g))!=null?q:""}]`)}),c(At,Et)};k(Kt,At=>{e(M)?At(ft):e(g)&&At(Ft,1)})}w(()=>Se(gt,1,qs(e(M)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""))),Ze(gt,()=>t().file_timestamp_format,At=>t(t().file_timestamp_format=At,!0)),c(pe,We)};k(Z,pe=>{t().file_timestamp&&pe(K)})}Ze(Ne,()=>t().file_path,pe=>t(t().file_path=pe,!0)),Ze(Me,()=>t().file_prefix,pe=>t(t().file_prefix=pe,!0)),is(rt,()=>t().file_timestamp,pe=>t(t().file_timestamp=pe,!0)),c(Ee,Ge)};k(et,Ee=>{t().delivery==="file"&&Ee(te)})}var j=i(et,2);{var F=Ee=>{var Ge=ou(),nt=i(n(Ge),2),Ne=i(n(nt),2),it=i(nt,2),dt=i(n(it),2),ot=i(it,2),Me=i(n(ot),2);Ze(Ne,()=>t().socket_host,Ye=>t(t().socket_host=Ye,!0)),Ze(dt,()=>t().socket_port,Ye=>t(t().socket_port=Ye,!0)),Ze(Me,()=>t().socket_unix,Ye=>t(t().socket_unix=Ye,!0)),c(Ee,Ge)};k(j,Ee=>{t().delivery==="socket"&&Ee(F)})}var ae=i(j,2);{var C=Ee=>{var Ge=cu(),nt=i(n(Ge),2),Ne=i(n(nt),2),it=i(nt,2),dt=i(n(it),2);Ze(Ne,()=>t().pipe_path,ot=>t(t().pipe_path=ot,!0)),Ze(dt,()=>t().response_pipe,ot=>t(t().response_pipe=ot,!0)),c(Ee,Ge)};k(ae,Ee=>{t().delivery==="pipe"&&Ee(C)})}var X=i(ae,2);{var de=Ee=>{var Ge=du(),nt=i(n(Ge),2),Ne=i(n(nt),2);Ze(Ne,()=>t().dbus_signal,it=>t(t().dbus_signal=it,!0)),c(Ee,Ge)};k(X,Ee=>{t().delivery==="dbus"&&Ee(de)})}var oe=i(X,2);{var Ae=Ee=>{var Ge=gu(),nt=i(n(Ge),2),Ne=i(n(nt),2);{var it=rt=>{var Z=vu();Ze(Z,()=>t().http_url,K=>t(t().http_url=K,!0)),c(rt,Z)},dt=rt=>{var Z=uu();Ze(Z,()=>t().webhook_url,K=>t(t().webhook_url=K,!0)),c(rt,Z)};k(Ne,rt=>{t().delivery==="http"?rt(it):rt(dt,-1)})}var ot=i(nt,2);{var Me=rt=>{var Z=fu(),K=wt(Z),pe=i(n(K),2);cs(pe,{options:[{value:"POST",label:"POST"},{value:"GET",label:"GET"},{value:"PUT",label:"PUT"}],get value(){return t().http_method},set value(ft){t(t().http_method=ft,!0)}});var We=i(K,2),Ve=i(n(We),2);St(Ve,"placeholder",'{"text": "{text}"}'),ja(()=>Ze(Ve,()=>e(d),ft=>l(d,ft))),en(Ve,ft=>I==null?void 0:I(ft));var gt=i(Ve,2),as=i(n(gt));as.textContent="{text}";var Ht=i(gt,2);{var Kt=ft=>{var Ft=pu(),At=n(Ft);w(()=>{var Et;return y(At,`⚠️ ${(Et=e(E))!=null?Et:""}`)}),c(ft,Ft)};k(Ht,ft=>{e(E)&&ft(Kt)})}w(()=>Se(Ve,1,qs(e(E)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""),"svelte-oc07pw")),c(rt,Z)},Ye=rt=>{var Z=hu(),K=wt(Z),pe=i(n(K),2),We=i(K,2),Ve=i(n(We),2);St(Ve,"placeholder",'{"text": "{text}"}'),ja(()=>Ze(Ve,()=>e(u),ft=>l(u,ft))),en(Ve,ft=>I==null?void 0:I(ft));var gt=i(Ve,2),as=i(n(gt));as.textContent="{text}";var Ht=i(gt,2);{var Kt=ft=>{var Ft=_u(),At=n(Ft);w(()=>{var Et;return y(At,`⚠️ ${(Et=e(O))!=null?Et:""}`)}),c(ft,Ft)};k(Ht,ft=>{e(O)&&ft(Kt)})}w(()=>Se(Ve,1,qs(e(O)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""),"svelte-oc07pw")),Ze(pe,()=>t().webhook_secret,ft=>t(t().webhook_secret=ft,!0)),c(rt,Z)};k(ot,rt=>{t().delivery==="http"?rt(Me):rt(Ye,-1)})}c(Ee,Ge)};k(oe,Ee=>{(t().delivery==="http"||t().delivery==="webhook")&&Ee(Ae)})}var $e=i(oe,2);{var tt=Ee=>{var Ge=bu(),nt=i(n(Ge),2),Ne=i(n(nt),2),it=i(nt,2),dt=i(n(it),2),ot=i(it,2),Me=i(n(ot),2);St(Me,"placeholder",'{"text": "{text}"}'),ja(()=>Ze(Me,()=>e(o),pe=>l(o,pe))),en(Me,pe=>I==null?void 0:I(pe));var Ye=i(Me,2),rt=i(n(Ye));rt.textContent="{text}";var Z=i(Ye,2);{var K=pe=>{var We=mu(),Ve=n(We);w(()=>{var gt;return y(Ve,`⚠️ ${(gt=e(H))!=null?gt:""}`)}),c(pe,We)};k(Z,pe=>{e(H)&&pe(K)})}w(()=>Se(Me,1,qs(e(H)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""),"svelte-oc07pw")),Ze(Ne,()=>t().mcp_path,pe=>t(t().mcp_path=pe,!0)),Ze(dt,()=>t().mcp_tool,pe=>t(t().mcp_tool=pe,!0)),c(Ee,Ge)};k($e,Ee=>{t().delivery==="mcp"&&Ee(tt)})}var st=i($e,2);{var U=Ee=>{var Ge=Su(),nt=i(n(Ge),4),Ne=i(n(nt),2),it=i(Ne,4);{var dt=Te=>{var Ce=yu(),Ue=n(Ce);w(()=>{var Xe;return y(Ue,`⚠️ ${(Xe=e(ve))!=null?Xe:""}`)}),c(Te,Ce)};k(it,Te=>{e(ve)&&Te(dt)})}var ot=i(nt,2),Me=n(ot),Ye=i(n(Me),2),rt=n(Ye),Z=i(Me,2);{var K=Te=>{{let Ce=ue(()=>e(v).map(Ue=>({value:Ue,label:Ue})));cs(Te,{get options(){return e(Ce)},get value(){return t().chat_model},set value(Ue){t(t().chat_model=Ue,!0)}})}},pe=Te=>{var Ce=wu();w(()=>Se(Ce,1,`full-width-input ${e(ce)?"border-red-500! ring-2! ring-red-500/20!":""}`,"svelte-oc07pw")),Ze(Ce,()=>t().chat_model,Ue=>t(t().chat_model=Ue,!0)),c(Te,Ce)};k(Z,Te=>{e(v).length>0?Te(K):Te(pe,-1)})}var We=i(Z,4);{var Ve=Te=>{var Ce=ku(),Ue=n(Ce);w(()=>{var Xe;return y(Ue,`⚠️ ${(Xe=e(ce))!=null?Xe:""}`)}),c(Te,Ce)};k(We,Te=>{e(ce)&&Te(Ve)})}var gt=i(We,2);{var as=Te=>{var Ce=xu(),Ue=n(Ce);w(()=>{Se(Ce,1,`chat-status ${e(b)?"ok":"bad"}`,"svelte-oc07pw"),y(Ue,e(_))}),c(Te,Ce)};k(gt,Te=>{e(_)&&Te(as)})}var Ht=i(ot,2),Kt=i(n(Ht),2),ft=i(Ht,2),Ft=i(n(ft),2);ja(()=>Ze(Ft,()=>t().chat_system_prompt,Te=>t(t().chat_system_prompt=Te,!0))),en(Ft,Te=>I==null?void 0:I(Te));var At=i(ft,2),Et=i(n(At),2);cs(Et,{options:[{value:"speak",label:"Speak the reply aloud (TTS)"},{value:"inject",label:"Type the reply into the focused window"},{value:"clipboard",label:"Copy the reply to the clipboard"},{value:"none",label:"Discard the reply (fire and forget)"}],get value(){return t().chat_reply_mode},set value(Te){t(t().chat_reply_mode=Te,!0)}});var ze=i(At,2),Je=i(n(ze),2),q=i(ze,2),h=i(n(q),2),x=i(q,2),we=i(n(x),2),Be=i(x,2);{var He=Te=>{var Ce=Tu(),Ue=n(Ce),Xe=n(Ue);z("click",Xe,ie),c(Te,Ce)};k(Be,Te=>{s.isNew||Te(He)})}w(()=>{Se(Ne,1,`full-width-input ${e(ve)?"border-red-500! ring-2! ring-red-500/20!":""}`,"svelte-oc07pw"),Ye.disabled=e(f),y(rt,e(f)?"Connecting…":"Test & fetch models")}),Ze(Ne,()=>t().chat_url,Te=>t(t().chat_url=Te,!0)),z("click",Ye,me),Ze(Kt,()=>t().chat_api_key,Te=>t(t().chat_api_key=Te,!0)),Ze(Je,()=>t().chat_max_history,Te=>t(t().chat_max_history=Te,!0)),Ze(h,()=>t().chat_timeout_secs,Te=>t(t().chat_timeout_secs=Te,!0)),Ze(we,()=>t().chat_reset_phrase,Te=>t(t().chat_reset_phrase=Te,!0)),c(Ee,Ge)};k(st,Ee=>{t().delivery==="chat"&&Ee(U)})}var Q=i(st,2);{var ne=Ee=>{var Ge=Eu(),nt=i(n(Ge),2),Ne=n(nt);is(Ne,()=>t().strip_newlines,it=>t(t().strip_newlines=it,!0)),c(Ee,Ge)};k(Q,Ee=>{(t().delivery==="inject"||t().delivery==="command")&&Ee(ne)})}var Re=i(fe,2),at=n(Re),lt=i(at,2);w(()=>{Se(P,1,`modal-backdrop ${r()?"target-modal-backdrop":""}`,"svelte-oc07pw"),y(ge,s.isNew?"Create Target":"Edit Target"),y(le,t().label||"Obsidian Notes"),y(ee,t().label||"Obsidian Notes")}),z("click",De,function(...Ee){var Ge;(Ge=s.onCancel)==null||Ge.apply(this,Ee)}),Ze(Ie,()=>t().label,Ee=>t(t().label=Ee,!0)),z("click",at,function(...Ee){var Ge;(Ge=s.onCancel)==null||Ge.apply(this,Ee)}),z("click",lt,V),c(D,P)};k(be,D=>{t()&&D(ke)})}c(a,Y),Rt()}us(["click"]);var Au=p(`Your desktop decides which keys VoxCtrl may claim, and may ask you to confirm them. + If a shortcut below shows different keys than you chose, that is your desktop's + choice and it wins.`),Mu=p(''),Pu=p('
'),Du=p(' '),zu=p(''),Iu=p('
'),Ou=p('
⚠️ Conflict detected: Some key bindings share the same key combination and gesture type. Disabling one of the conflicting binds will fix the problem.
'),Ru=p('CONFLICT'),Lu=p('LLM'),Nu=p('S1-mini'),Fu=p(' '),Vu=p('needs a regular key'),$u=p('not bound by your desktop'),Bu=p(' '),qu=p('Delete? ',1),ju=p(''),Wu=p('
'),Uu=p('
⌨

No keyboard bindings defined. Create a binding to link a physical hotkey to a routing target!

'),Hu=p(''),Ku=p('
',1),Gu=p(''),Yu=p('
'),Ju=p(' '),Zu=p(`⚠️ This binding uses a gesture this system cannot deliver, so it will not fire. + Pick one of the styles above.`),Xu=p(''),Qu=p(``),ep=p(' '),tp=p('
',1),sp=p(' '),ap=p('
(Click / Tab here to record)',1),np=p(''),ip=p(''),rp=p('
⚠️
'),lp=p('Your desktop will register this as .'),op=p('⚠️ Warning: This key combination and gesture type conflicts with another existing binding.'),cp=p('⚠️ Validation Error: Prompt template MUST contain the placeholder.'),dp=p('

Prompt template MUST contain the placeholder. Leave empty to inherit the default user prompt.

'),vp=p('
System Prompt Override LLM Prompt

Overrides the default system prompt configured in Settings → OpenAI API. Leave empty to inherit it.

User Prompt Template LLM Prompt
'),up=p(''),pp=p('

Hotkey Bindings

Bind keyboard combinations to your output targets. Each hotkey supports customizable triggers (double-taps, holding keys, etc.)

',1);function fp(a,s){Ot(s,!0);const t=()=>ls(Lt,"$config",r),[r,o]=Ms();let d=T(kt([])),u=T(kt([])),v=T(null),f=T(!1),_=T(null),b=T(null),m=T(null),g=T(!1),M=T(null),A=T(null),H=T(!1),E=T(!1),O=T(""),ve=T("custom"),ce=T(""),me=T("");function ie(Z,K){const pe=[...Z].sort().join(",");return`${K}:${pe}`}let I=ue(()=>{const Z=new Map;for(const pe of e(u))if(pe.keys&&pe.keys.length>0){const We=ie(pe.keys,pe.gesture);Z.set(We,(Z.get(We)||0)+1)}const K=new Set;for(const[pe,We]of Z.entries())We>1&&K.add(pe);return K}),V=ue(()=>{const Z=new Map;for(const pe of e(u))if(!pe.disabled&&pe.keys&&pe.keys.length>0){const We=ie(pe.keys,pe.gesture);Z.set(We,(Z.get(We)||0)+1)}const K=new Set;for(const[pe,We]of Z.entries())We>1&&K.add(pe);return K}),Y=ue(()=>{if(!e(v)||!e(v).keys||e(v).keys.length===0)return!1;const Z=ie(e(v).keys,e(v).gesture);return e(u).some(K=>K.id!==e(v).id&&ie(K.keys,K.gesture)===Z)});function be(Z){function K(){Z.style.height="auto",Z.style.height=`${Z.scrollHeight}px`}Z.addEventListener("input",K);const pe=setTimeout(K,0);return{update(){K()},destroy(){clearTimeout(pe),Z.removeEventListener("input",K)}}}const ke={hold:"Hold keys to dictate (Release to transcribe)",toggle:"Tap once to start recording, tap again to finish",double_tap:"Double-tap hotkey to trigger recording",double_tap_hold:"Double-tap & hold keys to dictate (Release to transcribe)"},D=["hold","toggle","double_tap","double_tap_hold"];let P=T(null),he=T(!1),B=T(null),L=T(!1),ge=T(!1);async function De(){try{l(P,await S("check_hotkey_status"),!0)}catch(Z){console.error("Failed to read hotkey status:",Z)}}async function fe(){var Z;l(he,!0),l(B,null);try{await S("open_shortcut_settings")}catch(K){l(B,(Z=K==null?void 0:K.toString())!=null?Z:"Could not open shortcut settings.",!0)}finally{l(he,!1)}}let G=ue(()=>{var K,pe;const Z=new Map;for(const We of(pe=(K=e(P))==null?void 0:K.shortcuts)!=null?pe:[])for(const Ve of We.binding_ids)Z.set(Ve,We);return Z});const J=ue(()=>{var Z,K;return(K=(Z=e(P))==null?void 0:Z.supported_gestures)!=null&&K.length?D.filter(pe=>e(P).supported_gestures.includes(pe)):D}),xe=ue(()=>D.length-e(J).length),Ie=ue(()=>{var pe,We;const Z=e(J).map(Ve=>({value:Ve,label:ke[Ve]})),K=(pe=e(v))==null?void 0:pe.gesture;return K&&!e(J).includes(K)&&Z.push({value:K,label:`${(We=ke[K])!=null?We:K} — not supported on this system`}),Z});Xt(async()=>{l(d,await S("get_targets"),!0),l(u,await S("get_bindings"),!0),await De()});async function re(){try{await S("save_targets",{targets:e(d)}),console.log("Targets auto-saved successfully!")}catch(Z){console.error("Failed to save targets:",Z)}}async function W(){try{await S("save_bindings",{bindings:e(u)}),console.log("Bindings auto-saved successfully!"),await De()}catch(Z){console.error("Failed to save bindings:",Z)}}function le(Z){return(Z.target_ids&&Z.target_ids.length>0?Z.target_ids:[Z.target_id]).map(pe=>{const We=e(d).find(Ve=>Ve.id===pe);return We?We.label:pe==="default"?"Focused Window":pe}).join(", ")}function R(Z){const K=e(d).find(pe=>pe.id===Z);return K?`${K.label} (${K.delivery})`:Z==="default"?"Focused Window":Z}function ee(){var Z,K,pe,We;if(e(d).length===0){alert("Please create at least one Output Command before making a hotkey binding.");return}l(f,!0),l(F,null),l(j,[],!0),l(H,(We=(pe=(K=(Z=t())==null?void 0:Z.engine)==null?void 0:K.s1_mini)==null?void 0:pe.enabled)!=null?We:!1,!0),l(E,!1),l(O,""),l(ve,"custom"),l(ce,""),l(me,""),l(v,{id:"binding_"+Math.random().toString(36).substring(2,6),label:"New Binding",keys:[],gesture:e(J).includes("hold")?"hold":e(J)[0],target_id:e(d)[0].id,target_ids:[e(d)[0].id],tap_ms:300,hold_threshold_ms:200,disabled:!1,openai_enabled:!1,openai_model:"",openai_mode:"custom",openai_prompt:"",openai_system_prompt:"",s1_mini_enabled:e(H)},!0)}function Oe(Z){var pe,We,Ve,gt;l(f,!1),l(F,null),l(j,[...Z.keys],!0);const K=JSON.parse(JSON.stringify(Z));K.target_ids||(K.target_ids=K.target_id?[K.target_id]:[]),K.s1_mini_enabled!==void 0&&K.s1_mini_enabled!==null?l(H,K.s1_mini_enabled,!0):l(H,(gt=(Ve=(We=(pe=t())==null?void 0:pe.engine)==null?void 0:We.s1_mini)==null?void 0:Ve.enabled)!=null?gt:!1,!0),l(E,K.openai_enabled===!0),l(O,K.openai_model||"",!0),l(ve,K.openai_mode||"custom",!0),l(ce,K.openai_prompt||"",!0),l(me,K.openai_system_prompt||"",!0),l(v,K,!0)}async function je(Z){l(u,e(u).map(K=>K.id===Z?{...K,disabled:!K.disabled}:K),!0),await W()}function Ke(){if(!e(v))return;e(v).target_ids||(e(v).target_ids=[e(v).target_id]);const Z=e(d).find(pe=>!e(v).target_ids.includes(pe.id)),K=Z?Z.id:e(d)[0].id;e(v).target_ids=[...e(v).target_ids,K]}function _e(Z){!e(v)||!e(v).target_ids||(e(v).target_ids=e(v).target_ids.filter((K,pe)=>pe!==Z))}async function se(){var We;if(!e(v))return;if(e(v).id.trim()===""){alert("Binding ID cannot be empty.");return}if(e(v).keys.length===0){alert("Please capture at least one hotkey before saving.");return}const Z=[...e(v).keys].sort().join(","),K=[...e(j)].sort().join(",");if(!(!e(f)&&Z===K))try{const Ve=await S("check_hotkey_keys",{keys:e(v).keys});if(!Ve.accepted){l(F,Ve,!0),alert((We=Ve.message)!=null?We:"This key combination cannot be used as a shortcut.");return}}catch(Ve){console.error("Failed to validate hotkey keys before saving:",Ve)}if(e(E)&&e(ve)==="custom"&&!e(ce).includes("{text}")){alert(`LLM Configuration Error: +Your custom prompt template MUST contain the '{text}' placeholder so the model knows where to insert the transcribed text. + +Example: +write a haiku about {text}`);return}if(e(v).openai_enabled=e(E),e(v).openai_model=e(O),e(v).openai_mode=e(ve),e(v).openai_prompt=e(ce),e(v).openai_system_prompt=e(me),e(v).s1_mini_enabled=e(H),e(v).target_ids&&e(v).target_ids.length>0){if(e(v).target_ids=e(v).target_ids.filter(gt=>gt.trim()!==""),e(v).target_ids.length===0){alert("Please assign at least one Output Command.");return}if(new Set(e(v).target_ids).size!==e(v).target_ids.length){alert(`Duplicate commands detected. +You cannot assign the same Output Command multiple times to a single keybind.`);return}e(v).target_id=e(v).target_ids[0]}else e(v).target_id="",e(v).target_ids=[];if(e(f)){if(e(u).some(Ve=>Ve.id===e(v).id)){alert("Binding with this ID already exists.");return}l(u,[...e(u),e(v)],!0)}else l(u,e(u).map(Ve=>Ve.id===e(v).id?e(v):Ve),!0);l(v,null),l(_,null),await W()}async function ye(Z){l(u,e(u).filter(K=>K.id!==Z),!0),await W()}function et(Z,K){const pe=K.toUpperCase();return Z==="Control"?"KEY_LEFTCTRL":Z==="Alt"?"KEY_LEFTALT":Z==="Shift"?"KEY_LEFTSHIFT":Z==="Meta"||Z==="OS"||Z==="Super"?"KEY_LEFTMETA":pe==="SPACE"?"KEY_SPACE":pe==="ENTER"?"KEY_ENTER":pe==="ESCAPE"||pe==="ESC"?"KEY_ESC":pe==="TAB"?"KEY_TAB":pe==="BACKSPACE"?"KEY_BACKSPACE":pe==="DELETE"?"KEY_DELETE":/^KEY[A-Z]$/.test(pe)?`KEY_${pe.slice(3)}`:pe.startsWith("KEY")?pe:pe.startsWith("DIGIT")?`KEY_${pe.replace("DIGIT","")}`:pe.startsWith("ARROW")?`KEY_${pe.replace("ARROW","")}`:pe.startsWith("F")&&pe.length>1?`KEY_${pe}`:Z.length===1?`KEY_${Z.toUpperCase()}`:`KEY_${pe}`}let te=T(kt([])),j=T(kt([]));gs(()=>{S("set_hotkeys_inhibited",{inhibited:e(_)==="keys"}).catch(Z=>console.error("Failed to set hotkeys inhibited:",Z))});let F=T(null);const ae=new Set(["KEY_LEFTCTRL","KEY_RIGHTCTRL","KEY_LEFTALT","KEY_RIGHTALT","KEY_LEFTSHIFT","KEY_RIGHTSHIFT","KEY_LEFTMETA","KEY_RIGHTMETA"]);function C(Z){return Z.length>0&&Z.every(K=>ae.has(K))}let X=ue(()=>e(P)===null||e(P).backend==="portal"||e(P).backend==="starting"),de=ue(()=>e(_)!=="keys"||!C(e(te))||!e(X)?null:"Keep holding and add a regular key — modifiers alone cannot be a shortcut.");async function oe(Z){if(!e(v)||Z.length===0)return;const K=[...Z].sort().join(","),pe=[...e(j)].sort().join(",");if(K===pe){l(F,null),e(v).keys=[...Z];return}let We;try{We=await S("check_hotkey_keys",{keys:Z})}catch(Ve){console.error("Failed to validate hotkey keys:",Ve),e(v).keys=[...Z];return}l(F,We,!0),We.accepted&&e(v)&&(e(v).keys=[...Z])}function Ae(Z){if(!e(_)||!e(v))return;Z.preventDefault(),Z.stopPropagation();const K=et(Z.key,Z.code);if(e(_)==="keys"&&(e(te).includes(K)||l(te,[...e(te),K],!0),Z.key==="Escape")){const pe=[...e(te)];l(te,[],!0),l(_,null),oe(pe)}}function $e(Z){if(!(!e(_)||!e(v))&&(Z.preventDefault(),Z.stopPropagation(),e(_)==="keys")){const K=[...e(te)];l(te,[],!0),l(_,null),oe(K)}}function tt(){if(e(_)){if(e(_)==="keys"&&e(te).length>0){const Z=[...e(te)];l(te,[],!0),oe(Z)}l(_,null)}}function st(Z){l(M,Z,!0),l(g,!0),l(m,{id:"new_target_"+Math.random().toString(36).substring(2,6),label:"New Target",delivery:"inject",file_prefix:"- ",file_timestamp:!0,file_timestamp_format:"%Y-%m-%dT%H:%M:%SZ",file_mode:"append",http_method:"POST",http_json_template:{text:"{text}"},webhook_json_template:{text:"{text}"},mcp_tool:"speak_text",mcp_args:{text:"{text}"},chat_max_history:20,chat_timeout_secs:120,chat_reply_mode:"speak",strip_newlines:!1,processing:{}},!0)}function U(){l(m,null),l(M,null)}async function Q(){if(e(m)){if(e(d).some(Z=>Z.id===e(m).id)){alert("Target with this ID already exists.");return}l(d,[...e(d),e(m)],!0),e(M)!==null&&e(v)&&(e(v).target_ids||(e(v).target_ids=[]),e(v).target_ids[e(M)]=e(m).id),l(m,null),l(M,null),await re()}}var ne=pp(),Re=wt(ne),at=i(n(Re),2);{var lt=Z=>{var K=Pu();let pe;var We=n(K),Ve=n(We),gt=n(Ve),as=i(Ve,2),Ht=n(as);{var Kt=x=>{var we=qe("Your desktop is handling these shortcuts");c(x,we)},ft=x=>{var we=qe("Reading keystrokes with a keyboard hook");c(x,we)},Ft=x=>{var we=qe("Reading input devices directly");c(x,we)},At=x=>{var we=qe("Starting up…");c(x,we)},Et=x=>{var we=qe("Global shortcuts are not available");c(x,we)};k(Ht,x=>{e(P).backend==="portal"?x(Kt):e(P).backend==="windows_hook"?x(ft,1):e(P).backend==="evdev"?x(Ft,2):e(P).backend==="starting"?x(At,3):x(Et,-1)})}var ze=i(as,2);let Je;var q=i(We,2);{var h=x=>{var we=Mu(),Be=n(we),He=n(Be),Te=i(Be,2);{var Ce=Ue=>{var Xe=Au();c(Ue,Xe)};k(Te,Ue=>{e(P).backend==="portal"&&Ue(Ce)})}w(()=>y(He,e(P).detail)),c(x,we)};k(q,x=>{e(L)&&x(h)})}w(()=>{pe=Se(K,1,"backend-banner svelte-w4d8v7",null,pe,{private:e(P).is_private,warn:!e(P).is_private&&e(P).is_active,broken:!e(P).is_active}),St(We,"aria-expanded",e(L)),y(gt,e(P).is_private?"🔒":e(P).is_active?"⚠️":"⛔"),Je=Se(ze,0,"banner-chevron svelte-w4d8v7",null,Je,{expanded:e(L)})}),z("click",We,()=>l(L,!e(L))),c(Z,K)};k(at,Z=>{e(P)&&Z(lt)})}var Ee=i(at,2);{var Ge=Z=>{var K=Iu(),pe=n(K),We=i(n(pe),4);let Ve;var gt=i(pe,2);{var as=Ht=>{var Kt=zu(),ft=n(Kt),Ft=n(ft),At=i(ft,2),Et=n(At),ze=n(Et),Je=i(At,2);{var q=h=>{var x=Du(),we=n(x);w(()=>y(we,e(B))),c(h,x)};k(Je,h=>{e(B)&&h(q)})}w(()=>{y(Ft,e(P).manual_enable_hint),Et.disabled=e(he),y(ze,e(he)?"Opening…":"Open Shortcut Settings")}),z("click",Et,fe),c(Ht,Kt)};k(gt,Ht=>{e(ge)&&Ht(as)})}w(()=>{St(pe,"aria-expanded",e(ge)),Ve=Se(We,0,"banner-chevron svelte-w4d8v7",null,Ve,{expanded:e(ge)})}),z("click",pe,()=>l(ge,!e(ge))),c(Z,K)};k(Ee,Z=>{var K;(K=e(P))!=null&&K.needs_manual_enable&&Z(Ge)})}var nt=i(Ee,2),Ne=i(nt,2);{var it=Z=>{var K=Ou();c(Z,K)};k(Ne,Z=>{e(I).size>0&&Z(it)})}var dt=i(Ne,2);_t(dt,21,()=>e(u),ht,(Z,K)=>{var pe=Wu();let We;var Ve=n(pe);{var gt=bt=>{var Wt=Ru();c(bt,Wt)},as=ue(()=>!e(K).disabled&&e(K).keys&&e(K).keys.length>0&&e(V).has(ie(e(K).keys,e(K).gesture)));k(Ve,bt=>{e(as)&&bt(gt)})}var Ht=i(Ve,2),Kt=n(Ht),ft=n(Kt);let Ft;var At=n(ft),Et=i(ft,2);{var ze=bt=>{var Wt=Lu();c(bt,Wt)};k(Et,bt=>{e(K).openai_enabled&&bt(ze)})}var Je=i(Et,2);{var q=bt=>{var Wt=Nu();c(bt,Wt)};k(Je,bt=>{var Wt,fs,zt,Yt;((Yt=e(K).s1_mini_enabled)!=null?Yt:(zt=(fs=(Wt=t())==null?void 0:Wt.engine)==null?void 0:fs.s1_mini)!=null&&zt.enabled)&&bt(q)})}var h=i(Kt,2),x=n(h);_t(x,21,()=>e(K).keys,ht,(bt,Wt)=>{var fs=Fu(),zt=n(fs);w(Yt=>y(zt,Yt),[()=>e(Wt).replace("KEY_","")]),c(bt,fs)});var we=i(x,2),Be=n(we),He=i(we,2);{var Te=bt=>{var Wt=Vu();c(bt,Wt)},Ce=ue(()=>e(X)&&C(e(K).keys));k(He,bt=>{e(Ce)&&bt(Te)})}var Ue=i(He,2);{var Xe=bt=>{const Wt=ue(()=>e(G).get(e(K).id));var fs=$i(),zt=wt(fs);{var Yt=Os=>{var Zs=$u();c(Os,Zs)},Is=Os=>{var Zs=Bu(),ma=n(Zs);w(()=>{var ba;return y(ma,`desktop: ${(ba=e(Wt).trigger_description)!=null?ba:""}`)}),c(Os,Zs)};k(zt,Os=>{e(Wt).bound?e(Wt).trigger_description&&Os(Is,1):Os(Yt)})}c(bt,fs)},Vt=ue(()=>{var bt;return((bt=e(P))==null?void 0:bt.backend)==="portal"&&!e(K).disabled&&e(G).get(e(K).id)});k(Ue,bt=>{e(Vt)&&bt(Xe)})}var Qt=i(h,2),ts=n(Qt),Gt=i(Qt,2),Dt=n(Gt),ps=n(Dt),es=i(Dt,2),ys=i(es,2);{var Ps=bt=>{var Wt=qu(),fs=i(wt(Wt),2),zt=i(fs,2);z("click",fs,()=>{ye(e(K).id),l(b,null)}),z("click",zt,()=>l(b,null)),c(bt,Wt)},Js=bt=>{var Wt=ju();z("click",Wt,()=>l(b,e(K).id,!0)),c(bt,Wt)};k(ys,bt=>{e(b)===e(K).id?bt(Ps):bt(Js,-1)})}w((bt,Wt,fs)=>{We=Se(pe,1,"binding-item glass svelte-w4d8v7",null,We,bt),Ft=Se(ft,1,"binding-title svelte-w4d8v7",null,Ft,Wt),y(At,e(K).label||e(K).id),y(Be,e(K).gesture),y(ts,fs),y(ps,e(K).disabled?"Enable":"Disable")},[()=>({disabled:e(K).disabled,"has-conflict":e(K).keys&&e(K).keys.length>0&&e(I).has(ie(e(K).keys,e(K).gesture)),"active-conflict":!e(K).disabled&&e(K).keys&&e(K).keys.length>0&&e(V).has(ie(e(K).keys,e(K).gesture))}),()=>({"has-conflict":!e(K).disabled&&e(K).keys&&e(K).keys.length>0&&e(V).has(ie(e(K).keys,e(K).gesture))}),()=>le(e(K))]),z("click",Dt,()=>je(e(K).id)),z("click",es,()=>Oe(e(K))),c(Z,pe)},Z=>{var K=Uu();c(Z,K)});var ot=i(Re,2);{var Me=Z=>{var K=up(),pe=n(K),We=n(pe),Ve=n(We),gt=n(Ve),as=i(Ve,2),Ht=i(We,2),Kt=n(Ht),ft=i(n(Kt),2),Ft=i(Kt,2),At=i(n(Ft),2),Et=i(Ft,2),ze=n(Et),Je=i(n(ze),2),q=i(ze,2);_t(q,21,()=>e(v).target_ids||[],ht,(Qe,pt,$t)=>{var Jt=Yu(),Cs=n(Jt),ws=n(Cs),Ws=n(ws),Ts=i(ws,2);{var Us=Rs=>{var ns=Ku(),Ma=wt(ns),N=i(Ma,2),Pe=n(N);_t(Pe,17,()=>e(d),ht,(ct,yt)=>{var Ut=Hu(),ss=n(Ut);w(vs=>{var Vs,Ls;Ut.disabled=vs,y(ss,`${(Vs=e(yt).label)!=null?Vs:""} (${(Ls=e(yt).delivery)!=null?Ls:""})`)},[()=>e(v).target_ids.includes(e(yt).id)&&e(yt).id!==e(pt)]),z("click",Ut,vs=>{vs.preventDefault(),vs.stopPropagation(),e(v).target_ids[$t]=e(yt).id,l(A,null)}),c(ct,Ut)});var Fe=i(Pe,2);z("click",Ma,()=>l(A,null)),z("click",Fe,ct=>{ct.preventDefault(),ct.stopPropagation(),l(A,null),st($t)}),c(Rs,ns)};k(Ts,Rs=>{e(A)===$t&&Rs(Us)})}var ia=i(Cs,2);{var Ga=Rs=>{var ns=Gu();z("click",ns,()=>_e($t)),c(Rs,ns)};k(ia,Rs=>{$t>0&&Rs(Ga)})}w(Rs=>y(Ws,Rs),[()=>R(e(pt))]),z("click",ws,()=>l(A,e(A)===$t?null:$t,!0)),c(Qe,Jt)});var h=i(Et,2),x=i(n(h),2);cs(x,{get options(){return e(Ie)},get value(){return e(v).gesture},set value(Qe){e(v).gesture=Qe}});var we=i(x,2);{var Be=Qe=>{var pt=Ju(),$t=n(pt);w(()=>{var Jt;return y($t,((Jt=e(P))==null?void 0:Jt.backend)==="mint_dbus"?"Your desktop delivers VoxCtrl's shortcuts itself and only reports the key going down, never coming back up — so hold and double-tap styles cannot work here and are not offered.":`${e(xe)} gesture style${e(xe)===1?"":"s"} are hidden because the way this system delivers shortcuts cannot produce them.`)}),c(Qe,pt)};k(we,Qe=>{e(xe)>0&&Qe(Be)})}var He=i(we,2);{var Te=Qe=>{var pt=Zu();c(Qe,pt)},Ce=ue(()=>e(v).gesture&&!e(J).includes(e(v).gesture));k(He,Qe=>{e(Ce)&&Qe(Te)})}var Ue=i(h,2);{var Xe=Qe=>{var pt=Xu(),$t=i(n(pt),2),Jt=i($t,2),Cs=n(Jt);w(()=>y(Cs,e(v).gesture==="double_tap_hold"?"How long the second tap must stay held before recording starts. Keeps a plain double-tap from being read as a double-tap-and-hold.":"Minimum duration to keep keys pressed to count as a 'hold'.")),Ze($t,()=>e(v).hold_threshold_ms,ws=>e(v).hold_threshold_ms=ws),c(Qe,pt)};k(Ue,Qe=>{(e(v).gesture==="hold"||e(v).gesture==="double_tap_hold")&&Qe(Xe)})}var Vt=i(Ue,2);{var Qt=Qe=>{var pt=Qu(),$t=i(n(pt),2);Ze($t,()=>e(v).tap_ms,Jt=>e(v).tap_ms=Jt),c(Qe,pt)};k(Vt,Qe=>{(e(v).gesture==="double_tap"||e(v).gesture==="double_tap_hold")&&Qe(Qt)})}var ts=i(Vt,2),Gt=n(ts),Dt=i(n(Gt),2),ps=n(Dt);{var es=Qe=>{var pt=tp(),$t=wt(pt),Jt=i(n($t),2),Cs=n(Jt),ws=i($t,2);{var Ws=Ts=>{var Us=ep(),ia=n(Us);w(()=>y(ia,e(de))),c(Ts,Us)};k(ws,Ts=>{e(de)&&Ts(Ws)})}w(Ts=>y(Cs,Ts),[()=>e(te).length>0?e(te).join(" + ").replace(/KEY_/g,""):"Press your physical shortcut combination now..."]),c(Qe,pt)},ys=Qe=>{var pt=np(),$t=n(pt);{var Jt=ws=>{var Ws=ap(),Ts=wt(Ws);_t(Ts,21,()=>e(v).keys,ht,(Us,ia)=>{var Ga=sp(),Rs=n(Ga);w(ns=>y(Rs,ns),[()=>e(ia).replace("KEY_","")]),c(Us,Ga)}),c(ws,Ws)},Cs=ws=>{var Ws=qe("⚠️ Click/Focus here to press keys!");c(ws,Ws)};k($t,ws=>{e(v).keys.length>0?ws(Jt):ws(Cs,-1)})}c(Qe,pt)};k(ps,Qe=>{e(_)==="keys"?Qe(es):Qe(ys,-1)})}var Ps=i(Gt,2);{var Js=Qe=>{var pt=ip(),$t=i(n(pt),2),Jt=i(n($t));w(()=>{var Cs;return y(Jt,` ${(Cs=e(F).message)!=null?Cs:""}`)}),c(Qe,pt)},bt=Qe=>{var pt=rp(),$t=i(n(pt),2),Jt=n($t);w(()=>y(Jt,e(F).message)),c(Qe,pt)},Wt=Qe=>{var pt=lp(),$t=i(n(pt)),Jt=n($t);w(()=>y(Jt,e(F).accelerator)),c(Qe,pt)};k(Ps,Qe=>{var pt;e(F)&&!e(F).accepted?Qe(Js):e(F)&&e(F).problem?Qe(bt,1):(pt=e(F))!=null&&pt.accelerator&&e(X)&&Qe(Wt,2)})}var fs=i(Ps,2);{var zt=Qe=>{var pt=op();c(Qe,pt)};k(fs,Qe=>{e(Y)&&Qe(zt)})}var Yt=i(ts,2),Is=i(n(Yt),2),Os=n(Is),Zs=i(Is,2);{var ma=Qe=>{var pt=vp(),$t=n(pt),Jt=i(n($t),2),Cs=i($t,2),ws=i(n(Cs),2);ja(()=>Ze(ws,()=>e(me),ns=>l(me,ns))),en(ws,ns=>be==null?void 0:be(ns));var Ws=i(Cs,2),Ts=i(n(Ws),2);St(Ts,"placeholder","e.g. write a haiku about {text}"),ja(()=>Ze(Ts,()=>e(ce),ns=>l(ce,ns))),en(Ts,ns=>be==null?void 0:be(ns));var Us=i(Ts,2);{var ia=ns=>{var Ma=cp(),N=i(n(Ma));N.textContent="{text}",c(ns,Ma)},Ga=ue(()=>e(ce)&&!e(ce).includes("{text}")),Rs=ns=>{var Ma=dp(),N=i(n(Ma));N.textContent="{text}",c(ns,Ma)};k(Us,ns=>{e(Ga)?ns(ia):ns(Rs,-1)})}w(ns=>Se(Ts,1,ns,"svelte-w4d8v7"),[()=>qs(e(ce)&&!e(ce).includes("{text}")?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":"")]),Ze(Jt,()=>e(O),ns=>l(O,ns)),c(Qe,pt)};k(Zs,Qe=>{e(E)&&Qe(ma)})}var ba=i(Yt,2),ln=i(n(ba),2),on=n(ln),cn=i(Ht,2),xt=n(cn),Mt=i(xt,2);w(Qe=>{y(gt,e(f)?"Create Hotkey Binding":"Edit Hotkey Binding"),ft.disabled=!e(f),Se(Dt,1,Qe,"svelte-w4d8v7")},[()=>qs(["border-2 rounded-desktop p-4 text-center cursor-pointer outline-none transition-all duration-200 flex flex-col items-center justify-center min-h-[70px]",e(_)==="keys"?"border-solid border-[#f43f5e] bg-[rgba(244,63,94,0.05)] animate-border-pulse":e(Y)?"border-solid border-[#fbbf24] bg-[rgba(251,191,36,0.05)] hover:border-[#fbbf24]/80":"border-dashed border-white/5 bg-black/25 hover:border-accent-blue hover:bg-black/35 focus:border-accent-blue focus:bg-black/35"].join(" "))]),z("click",as,()=>{l(v,null),l(_,null)}),Ze(ft,()=>e(v).id,Qe=>e(v).id=Qe),Ze(At,()=>e(v).label,Qe=>e(v).label=Qe),z("click",Je,Ke),z("click",Dt,()=>l(_,"keys")),Ra("focus",Dt,()=>l(_,"keys")),Ra("blur",Dt,()=>tt()),z("keydown",Dt,Ae),z("keyup",Dt,$e),is(Os,()=>e(E),Qe=>l(E,Qe)),is(on,()=>e(H),Qe=>l(H,Qe)),z("click",xt,()=>{l(v,null),l(_,null)}),z("click",Mt,se),c(Z,K)};k(ot,Z=>{e(v)&&Z(Me)})}var Ye=i(ot,2);{var rt=Z=>{Zo(Z,{isNew:!0,get existingTargets(){return e(d)},isNested:!0,onSave:Q,onCancel:U,get editingTarget(){return e(m)},set editingTarget(K){l(m,K,!0)}})};k(Ye,Z=>{e(m)&&Z(rt)})}z("click",nt,ee),c(a,ne),Rt(),o()}us(["click","keydown","keyup"]);var _p=p('
'),hp=p('
'),gp=p('
'),mp=p('
'),bp=p('
'),yp=p('
'),wp=p('
Speech: Plays transcribed text via TTS
'),kp=p('
'),xp=p('Delete? ',1),Tp=p(''),Sp=p('
'),Ep=p('
🎯

No output targets defined. Create one to route your transcription output!

'),Cp=p(`

Output Commands

Define routing destinations where transcribed text is typed, copied, piped, or sent over network sockets.

Saying a command by name. Start dictation and say “Hey Vox,” (or “VoxCtrl” / “Vox Control”), then the command's name, then what you want to send — for + example “Hey Vox, notes, remember to call the plumber” or “VoxCtrl notes, remember to call the plumber” routes remember to call the plumber to the command named notes. + Everything after the name is the text. Natural phrasing works too + (“Hey Vox, add this to my notes: …”). Say nothing of the sort and + dictation goes wherever your hotkey already points.

`,1);function Ap(a,s){Ot(s,!0);let t=T(kt([])),r=T(kt([])),o=T(null),d=T(!1),u=T(null),v=T(null);Xt(async()=>{l(t,await S("get_targets"),!0),l(r,await S("get_bindings"),!0)});async function f(){try{await S("save_targets",{targets:e(t)}),console.log("Targets auto-saved successfully!")}catch(ie){console.error("Failed to save targets:",ie)}}async function _(){try{await S("save_bindings",{bindings:e(r)}),console.log("Bindings auto-saved successfully!")}catch(ie){console.error("Failed to save bindings:",ie)}}function b(){l(d,!0),l(o,{id:"new_target_"+Math.random().toString(36).substring(2,6),label:"New Target",delivery:"inject",file_prefix:"- ",file_timestamp:!0,file_timestamp_format:"%Y-%m-%dT%H:%M:%SZ",file_mode:"append",http_method:"POST",http_json_template:{text:"{text}"},webhook_json_template:{text:"{text}"},mcp_tool:"speak_text",mcp_args:{text:"{text}"},chat_max_history:20,chat_timeout_secs:120,chat_reply_mode:"speak",strip_newlines:!1,processing:{}},!0)}function m(ie){l(d,!1),l(u,ie.id,!0);const I=JSON.parse(JSON.stringify(ie));I.processing||(I.processing={}),I.file_mode||(I.file_mode="append"),l(o,I,!0)}function g(){l(o,null),l(u,null)}async function M(){if(e(o)){if(e(d))l(t,[...e(t),e(o)],!0);else{if(e(u)&&e(u)!==e(o).id){let ie=!1;l(r,e(r).map(I=>{let V=!1,Y=I.target_ids?[...I.target_ids]:[I.target_id];for(let be=0;beie.id===e(u)?e(o):ie),!0)}l(o,null),l(u,null),await f()}}async function A(ie){const I=e(r).filter(V=>(V.target_ids&&V.target_ids.length>0?V.target_ids:[V.target_id]).includes(ie)).map(V=>V.label||V.id);if(I.length>0){alert(`Cannot delete target. It is currently being used by hotkeys: ${I.join(", ")}`);return}l(t,e(t).filter(V=>V.id!==ie),!0),await f()}var H=Cp(),E=wt(H),O=i(n(E),4),ve=i(O,2);_t(ve,21,()=>e(t),ht,(ie,I)=>{var V=Sp(),Y=n(V),be=n(Y),ke=n(be),D=n(ke),P=i(ke,2),he=n(P),B=i(be,2);{var L=te=>{var j=_p(),F=n(j);w(()=>{var ae;return y(F,`Cmd: ${(ae=e(I).command)!=null?ae:""}`)}),c(te,j)};k(B,te=>{e(I).delivery==="exec"&&te(L)})}var ge=i(B,2);{var De=te=>{var j=hp(),F=n(j);w(()=>{var ae;return y(F,`File: ${(ae=e(I).file_path)!=null?ae:""}`)}),c(te,j)};k(ge,te=>{e(I).delivery==="file"&&te(De)})}var fe=i(ge,2);{var G=te=>{var j=gp(),F=n(j);w(()=>{var ae,C;return y(F,`Socket: ${(ae=e(I).socket_host)!=null?ae:""}:${(C=e(I).socket_port)!=null?C:""}`)}),c(te,j)};k(fe,te=>{e(I).delivery==="socket"&&te(G)})}var J=i(fe,2);{var xe=te=>{var j=mp(),F=n(j),ae=i(F);{var C=X=>{var de=qe();w(()=>{var oe;return y(de,`→ ${(oe=e(I).response_pipe)!=null?oe:""}`)}),c(X,de)};k(ae,X=>{e(I).response_pipe&&X(C)})}w(()=>{var X;return y(F,`Pipe: ${(X=e(I).pipe_path)!=null?X:""} `)}),c(te,j)};k(J,te=>{e(I).delivery==="pipe"&&te(xe)})}var Ie=i(J,2);{var re=te=>{var j=bp(),F=n(j);w(()=>{var ae;return y(F,`API: ${(ae=e(I).http_url||e(I).webhook_url)!=null?ae:""}`)}),c(te,j)};k(Ie,te=>{(e(I).delivery==="http"||e(I).delivery==="webhook")&&te(re)})}var W=i(Ie,2);{var le=te=>{var j=yp(),F=n(j);w(()=>{var ae;return y(F,`MCP Tool: ${(ae=e(I).mcp_tool||"speak_text")!=null?ae:""}`)}),c(te,j)};k(W,te=>{e(I).delivery==="mcp"&&te(le)})}var R=i(W,2);{var ee=te=>{var j=wp();c(te,j)};k(R,te=>{e(I).delivery==="speak"&&te(ee)})}var Oe=i(R,2);{var je=te=>{var j=kp(),F=n(j);w(()=>{var ae,C,X;return y(F,`Chat: ${(ae=e(I).chat_model||"no model")!=null?ae:""} @ ${(C=e(I).chat_url||"no endpoint")!=null?C:""} → ${(X=e(I).chat_reply_mode||"speak")!=null?X:""}`)}),c(te,j)};k(Oe,te=>{e(I).delivery==="chat"&&te(je)})}var Ke=i(Oe,2),_e=n(Ke),se=i(_e,2);{var ye=te=>{var j=xp(),F=i(wt(j),2),ae=i(F,2);z("click",F,()=>{A(e(I).id),l(v,null)}),z("click",ae,()=>l(v,null)),c(te,j)},et=te=>{var j=Tp();z("click",j,()=>l(v,e(I).id,!0)),c(te,j)};k(se,te=>{e(v)===e(I).id?te(ye):te(et,-1)})}w(()=>{y(D,e(I).label),y(he,e(I).delivery)}),z("click",_e,()=>m(e(I))),c(ie,V)},ie=>{var I=Ep();c(ie,I)});var ce=i(E,2);{var me=ie=>{Zo(ie,{get isNew(){return e(d)},get existingTargets(){return e(t)},isNested:!1,onSave:M,onCancel:g,get editingTarget(){return e(o)},set editingTarget(I){l(o,I,!0)}})};k(ce,ie=>{e(o)&&ie(me)})}z("click",O,b),c(a,H),Rt()}us(["click"]);var Mp=p('

Use CUDA GPU acceleration (ONNX Runtime). Falls back to CPU if unavailable.

',1),Pp=p('

Runs synthesis on the GPU via Vulkan. Falls back to the CPU whenever no Vulkan device can be opened.

',1),Dp=p('

Runs synthesis on the GPU via Vulkan. Falls back to the CPU whenever no Vulkan device can be opened.

',1),zp=p('

Runs synthesis on the GPU via Vulkan. Falls back to the CPU whenever no Vulkan device can be opened.

',1),Ip=p('
Run speed
'),Op=p('

'),Rp=p('

'),Lp=p('⏳ Checking local voice files...'),Np=p(' '),Fp=p('
'),Vp=p('

'),$p=p('

Piper Voice

Voice directory (leave blank for default)

Default voice directory: ~/.local/share/voxctrl/piper-voices/

'),Bp=p('⏳ Checking local model files...'),qp=p('⏳ Downloading VoxCPM2 model weights from HuggingFace (4.5 GB)...'),jp=p('
'),Wp=p("Currently using the HF_TOKEN environment variable.",1),Up=p(`

VoxCPM2 Voice

⚡ OpenBMB VoxCPM2 — 2B Autoregressive Diffusion TTS

Runs through audio.cpp with optional Vulkan acceleration. Supports reference Voice Cloning and Ultimate Cloning (reference audio + transcript matching). Licensed under Apache 2.0.

Voice Design (prompt-based) isn't offered here: audio.cpp's current VoxCPM2 build doesn't + act on the prompt yet, an upstream limitation. Voice Cloning below works correctly.

Shared Voice Folder (leave blank for default)

Default directory: ~/.local/share/voxctrl/cloned-tts-voices/

Enable Ultimate Cloning

When enabled, VoxCPM2 reads a companion .txt transcript file next to the .wav reference audio (e.g. voice_name.txt alongside voice_name.wav) for maximum phoneme alignment, nuanced breathing, and exact prosodic preservation.

VoxCPM2 model files are hosted on HuggingFace at huggingface.co/openbmb/VoxCPM2. + An optional token can avoid anonymous download rate limits — set it once in the General tab.

Model directory (leave blank for default)

Default directory: ~/.local/share/voxctrl/models/voxcpm2/

Loads the model at startup so the first reply doesn't pay the load cost.

`),Hp=p('⏳ Checking local model files...'),Kp=p('⏳ Downloading Breeze-TTS-2 model weights from HuggingFace...'),Gp=p('
'),Yp=p(`

Breeze-TTS-2 Voice

⚠️ Non-Commercial License Warning

Breeze-TTS-2 model weights are released under the BreezeBlue Research and Non-Commercial License. + Commercial use requires a personal or commercial license directly from the creator (RESONIA, INC.).

Voice Design (prompt-based) isn't offered here: it doesn't reliably apply the described + voice and quality suffers compared to Voice Cloning below, which works correctly.

Shared Voice Folder (leave blank for default)

Default directory: ~/.local/share/voxctrl/cloned-tts-voices/

⚠️ Voice Cloning Transcript Required

Unlike Pocket-TTS and VoxCPM2, Breeze-TTS-2 cannot clone a voice without a transcript. + Drop reference .wav audio files into your shared voice folder along with a + matching text file (e.g. voice_name.txt) containing exactly what is spoken + in the audio — cloning fails without one.

Breeze-TTS-2 runs through the audio.cpp engine, which downloads the model on its first use + here — no HuggingFace token required.

Model directory (leave blank for default)

Default directory: ~/.local/share/voxctrl/models/breeze-tts-2/

Loads the model at startup so the first reply doesn't pay the load cost.

`),Jp=p('⏳ Checking local model files...'),Zp=p('⏳ Downloading Pocket-TTS model & voice clip (may take a few minutes)...'),Xp=p('
'),Qp=p('

'),ef=p(`

Pocket-TTS Voice

Pocket-TTS runs through the audio.cpp engine, which downloads the model and voice clip on + their first use here — no HuggingFace token required.

Custom voice directory (leave blank for default)

Drop a .wav reference clip into this folder to add it to the voice list — + the filename (without extension) becomes the voice's id, e.g. narrator.wav adds + "Narrator (Custom)". Naming a clip after a built-in voice (e.g. alba.wav) replaces + that voice's reference clip. Default: ~/.local/share/voxctrl/cloned-tts-voices/

Loads the model at startup so the first reply doesn't pay the load cost.

`),tf=p(`

This build cannot run this engine. The ONNX half is behind an opt-in + cargo feature, so Test TTS stays disabled until the app is rebuilt with it:
npm run tauri dev -- --features inflect-micro
npm run tauri build -- --features inflect-micro
The -- is required, or npm consumes the flag itself. Downloading the + model works either way — only synthesis needs the feature.

`),sf=p('⏳ Checking local model files...'),af=p('⏳ Downloading Inflect-Micro-v2 model (~38 MB)...'),nf=p('
'),rf=p('
 
'),lf=p('
 
'),of=p(`

Inflect Micro

A 9.4M-parameter VITS model (38 MB) with a single fixed English voice at 24 kHz, so + there is no voice to choose. Needs espeak-ng installed for phonemization.

The model is deterministic for a fixed seed, so the same text always produces identical + audio. Change it to resample the prosody.

Higher values give more expressive but less predictable delivery. Default is 0.667.

Loads the ONNX graphs at launch so the first spoken response has no load delay.

Model directory (leave blank for default)

Point this at an existing copy of the model to skip downloading. Default: ~/.local/share/voxctrl/models/inflect-micro/

Model diagnostics

Reports the tensor names the downloaded export declares. Useful if synthesis fails with a + message about an input that could not be mapped.

`),cf=p('

',1),df=p(`

The model stays in memory for the whole session — the fastest possible response, at + the cost of holding its memory even while TTS sits unused.

`),vf=p('
'),uf=p(' '),pf=p('
(Click / Tab here to record a new stop key)',1),ff=p(''),_f=p('
→
'),hf=p('

No pronunciation snippets defined.

'),gf=p('

Text to Speech

TTS Engine

Model Memory

Playback

Stop Key Bind

Press a key combo to immediately stop TTS playback — works even when this window is hidden.

TTS Snippets (Pronunciation Guide)

Type a word (e.g. "voxctrl") ➔ its spoken expansion/pronunciation (e.g. "vox control"). Only affects speech playback.

');function mf(a,s){Ot(s,!0);let t=Nt(s,"cfg",15);function r(){Lt.set(t()),Va.set(!0)}let o=T(null),d=T(0),u=T(!1),v=null,f=null,_=null,b=null,m=T(!1),g=T(null),M=0;function A(){l(u,!0),l(d,0),l(o,null),M=performance.now(),v&&clearInterval(v),v=setInterval(()=>{l(d,Math.round(performance.now()-M),!0),e(d)>1e4&&(clearInterval(v),l(u,!1),l(o,null))},10)}const H=["en-us-libritts-high","en-us-amy-low","en-us-kathleen-low","en-gb-southern_english_female-low","en-us-ryan-high","en-us-ryan-medium","en-us-ryan-low","en-us-lessac-medium","en-us-lessac-low","en-us-danny-low","en-gb-alan-low"];let E=T(kt({})),O=T(!1),ve=T(!1),ce=T(!1),me=T(null);async function ie(){l(O,!0);const N={};for(const Pe of H)try{N[Pe]=await S("check_voice_downloaded",{voiceName:Pe,voiceDir:t().tts.voice_dir})}catch(Fe){console.error("Failed to check download status for voice "+Pe,Fe),N[Pe]=!1}l(E,N,!0),l(O,!1)}async function I(N){if(!e(ve)){l(ve,!0);try{await S("download_voice",{voiceName:N,voiceDir:t().tts.voice_dir}),e(E)[N]=!0}catch(Pe){alert(`Failed to download voice: ${Pe}`)}finally{l(ve,!1)}}}async function V(){const N=t().tts.voice_dir;if(!N){l(me,null);return}const Pe=await S("check_directory_exists",{path:N});l(me,Pe?null:"This folder does not exist. Please create it first or leave blank for the default location.",!0),e(me)||await ie()}function Y(){r()}function be(N){N.key==="Enter"&&N.currentTarget.blur()}async function ke(){r()}async function D(){if(e(ce))return;try{await bl(t())}catch(ct){l(g,`Failed to save configuration: ${ct}`);return}if(e(m)){l(m,!1);try{await S("stop_tts")}catch(ct){console.error("Failed to stop TTS:",ct)}}l(ce,!0),l(g,null),A();let N="TTS",Pe=null;t().tts.engine==="piper"?(N="Piper",Pe=t().tts.voice):t().tts.engine==="pocket_tts"?(N="Pocket-TTS",Pe=t().tts.pocket_tts.voice):t().tts.engine==="breeze_tts_2"?(N="Breeze-TTS-2",Pe=null):t().tts.engine==="vox_cpm_2"?(N="VoxCPM2",Pe=null):t().tts.engine==="inflect_micro"?(N="Inflect Micro",Pe=null):t().tts.engine==="espeak"&&(N="eSpeak-NG",Pe=null);const Fe=`Hi this is ${N} speaking from VoxCtrl`;try{await S("speak_text",{text:Fe,voice:Pe})}catch(ct){l(g,`${ct}`),clearInterval(v),l(u,!1),l(ce,!1)}}let P=T(!1);function he(){if(!t().tts.enabled)return"Enable text-to-speech above first.";if(e(P))return"Switching engine...";if(e(m))return null;if(e(ce))return"Already speaking.";if(t().tts.engine==="inflect_micro"){if(!e(Ke))return"This build was compiled without the `inflect-micro` feature, so this engine cannot synthesize. Rebuild with: npm run tauri dev -- --features inflect-micro";if(e(se))return"Checking local model files...";if(e(ye))return"Downloading the model...";if(!e(_e))return"Download the model first."}if(t().tts.engine==="breeze_tts_2"){if(e(Ge))return"Checking local model files...";if(e(nt))return"Downloading the model...";if(!e(Ee))return"Download the model first."}if(t().tts.engine==="vox_cpm_2"){if(e(ne))return"Checking local model files...";if(e(Re))return"Downloading the model...";if(!e(Q))return"Download the model first."}return null}function B(){return!t().tts.enabled||e(P)?!0:e(m)?!1:e(ce)?!0:t().tts.engine==="piper"?e(O)||e(ve)||!e(E)[t().tts.voice]:t().tts.engine==="pocket_tts"?e(Ae)||e($e)||!e(oe):t().tts.engine==="breeze_tts_2"?e(Ge)||e(nt)||!e(Ee):t().tts.engine==="vox_cpm_2"?e(ne)||e(Re)||!e(Q):t().tts.engine==="inflect_micro"?e(se)||e(ye)||!e(_e)||!e(Ke):!1}let L=T(kt([])),ge=T(null);function De(){return t().tts.engine==="vox_cpm_2"?t().tts.vox_cpm_2.voice_dir||"":t().tts.engine==="breeze_tts_2"?t().tts.breeze_tts_2.voice_dir||"":t().tts.pocket_tts.voice_dir||""}function fe(){if(!e(L)||e(L).length===0)return;const N=e(L)[0].id;let Pe=!1;(!t().tts.vox_cpm_2.cloned_voice||!e(L).some(Fe=>Fe.id===t().tts.vox_cpm_2.cloned_voice))&&(t(t().tts.vox_cpm_2.cloned_voice=N,!0),Pe=!0),(!t().tts.breeze_tts_2.cloned_voice||!e(L).some(Fe=>Fe.id===t().tts.breeze_tts_2.cloned_voice))&&(t(t().tts.breeze_tts_2.cloned_voice=N,!0),Pe=!0),(!t().tts.pocket_tts.voice||!e(L).some(Fe=>Fe.id===t().tts.pocket_tts.voice))&&(t(t().tts.pocket_tts.voice=N,!0),Pe=!0),Pe&&r()}gs(()=>{fe(),t().tts.vox_cpm_2.voice_mode!=="clone"&&(t(t().tts.vox_cpm_2.voice_mode="clone",!0),r()),t().tts.breeze_tts_2.voice_mode!=="clone"&&(t(t().tts.breeze_tts_2.voice_mode="clone",!0),r())});async function G(){try{l(L,await S("list_pocket_tts_voices",{voiceDir:De()}),!0),fe()}catch(N){console.error("list_pocket_tts_voices:",N)}}async function J(N){const Pe=typeof N=="string"?N:De();if(!Pe){l(ge,null),await G();return}const Fe=await S("check_directory_exists",{path:Pe});l(ge,Fe?null:"This folder does not exist. Please create it first or leave blank for the default location.",!0),e(ge)||await G()}function xe(){r()}function Ie(N){N.key==="Enter"&&N.currentTarget.blur()}let re=ue(()=>H.map(N=>({value:N,label:`${N}${e(E)[N]?" ✔":""}`}))),W=ue(()=>e(L).map(N=>({value:N.id,label:N.label})));const le=[{value:"always_loaded",label:"Always loaded (fastest response)"},{value:"on_demand",label:"Load when needed, unload when idle (saves memory)"}];let R=ue(()=>{var N;return Math.round(((N=t().tts.idle_unload_secs)!=null?N:900)/60)});function ee(){t().tts.memory_mode==="on_demand"&&!t().tts.idle_unload_secs&&t(t().tts.idle_unload_secs=900,!0),r()}function Oe(N){const Pe=Number(N.currentTarget.value),Fe=Math.min(480,Math.max(1,Math.round(Pe)||15));t(t().tts.idle_unload_secs=Fe*60,!0),r()}const je=[{value:"vox_cpm_2",label:"VoxCPM2 (neural, voice cloning & design)"},{value:"breeze_tts_2",label:"Breeze-TTS-2 (neural, voice design)"},{value:"pocket_tts",label:"Pocket-TTS (neural, voice cloning)"},{value:"piper",label:"Piper (neural, high quality)"},{value:"inflect_micro",label:"Inflect Micro (neural, 38 MB)"},{value:"espeak",label:"eSpeak-NG (lightweight)"}];let Ke=T(!0),_e=T(!1),se=T(!1),ye=T(!1),et=T(null),te=T(!1),j=T(null);async function F(){try{l(Ke,await S("inflect_micro_available"),!0)}catch(N){console.error("inflect_micro_available:",N),l(Ke,!1)}}async function ae(){l(se,!0);try{l(_e,await S("check_inflect_micro_downloaded",{modelDir:t().tts.inflect_micro.model_dir}),!0)}catch(N){console.error("check_inflect_micro_downloaded:",N),l(_e,!1)}finally{l(se,!1)}}async function C(){if(!e(ye)){l(ye,!0),l(j,null);try{await S("download_inflect_micro",{modelDir:t().tts.inflect_micro.model_dir}),l(_e,!0)}catch(N){l(j,`${N}`)}finally{l(ye,!1)}}}async function X(){if(!e(te)){l(te,!0),l(et,null);try{const N=await S("inflect_micro_inspect",{modelDir:t().tts.inflect_micro.model_dir});l(et,JSON.stringify(N,null,2),!0)}catch(N){l(et,`${N}`)}finally{l(te,!1)}}}function de(){r()}let oe=T(!1),Ae=T(!1),$e=T(!1);async function tt(){l(Ae,!0);try{l(oe,await S("check_pocket_tts_ready",{voice:t().tts.pocket_tts.voice,voiceDir:t().tts.pocket_tts.voice_dir}),!0)}catch(N){console.error("check_pocket_tts_ready:",N),l(oe,!1)}finally{l(Ae,!1)}}async function st(){if(!e($e)){l($e,!0);try{await S("download_pocket_tts",{voice:t().tts.pocket_tts.voice,voiceDir:t().tts.pocket_tts.voice_dir,hfToken:t().tts.hf_token}),l(oe,!0)}catch(N){alert(`Failed to download Pocket-TTS assets: ${N}`)}finally{l($e,!1)}}}function U(){r(),l(oe,!1),tt()}let Q=T(!1),ne=T(!1),Re=T(!1);async function at(){l(ne,!0);try{l(Q,await S("check_vox_cpm_2_ready",{modelDir:t().tts.vox_cpm_2.model_dir}),!0)}catch(N){console.error("check_vox_cpm_2_ready:",N),l(Q,!1)}finally{l(ne,!1)}}async function lt(){if(!e(Re)){l(Re,!0);try{const N=t().tts.hf_token;await S("download_vox_cpm_2",{modelDir:t().tts.vox_cpm_2.model_dir,hfToken:N}),l(Q,!0)}catch(N){alert(`Failed to download VoxCPM2 assets: ${N}`)}finally{l(Re,!1)}}}let Ee=T(!1),Ge=T(!1),nt=T(!1);async function Ne(){l(Ge,!0);try{l(Ee,await S("check_breeze_tts_2_ready",{modelDir:t().tts.breeze_tts_2.model_dir}),!0)}catch(N){console.error("check_breeze_tts_2_ready:",N),l(Ee,!1)}finally{l(Ge,!1)}}async function it(){if(!e(nt)){l(nt,!0);try{const N=t().tts.hf_token;await S("download_breeze_tts_2",{modelDir:t().tts.breeze_tts_2.model_dir,hfToken:N}),l(Ee,!0)}catch(N){alert(`Failed to download Breeze-TTS-2 assets: ${N}`)}finally{l(nt,!1)}}}let dt=T(null);const ot=ue(()=>!!e(dt));async function Me(){r(),l(P,!0);try{t().tts.engine==="vox_cpm_2"?(t(t().tts.vox_cpm_2.voice_mode="clone",!0),l(Q,!1),await at(),await G()):t().tts.engine==="breeze_tts_2"?(t(t().tts.breeze_tts_2.voice_mode="clone",!0),l(Ee,!1),await Ne(),await G()):t().tts.engine==="pocket_tts"?(l(oe,!1),await G(),await tt()):t().tts.engine==="inflect_micro"?(l(_e,!1),await F(),await ae()):t().tts.engine==="piper"&&(t().tts.voice_dir?await V():await ie())}finally{setTimeout(()=>{l(P,!1)},400)}}Xt(async()=>{S("hf_token_env").then(N=>l(dt,N&&N.trim()?N.trim():null,!0)).catch(()=>l(dt,null)),t().tts.voice_dir?V():ie(),G(),t().tts.engine==="vox_cpm_2"&&at(),t().tts.engine==="breeze_tts_2"&&Ne(),t().tts.engine==="pocket_tts"&&tt(),t().tts.engine==="inflect_micro"&&(await F(),ae()),f=await ks("tts-playback-start",()=>{e(u)&&(clearInterval(v),l(o,e(d),!0),l(u,!1)),l(ce,!1),l(m,!0)}),_=await ks("tts-playback-end",()=>{l(m,!1),e(ce)&&(clearInterval(v),l(u,!1),l(ce,!1))}),b=await ks("tts-error",N=>{l(g,N.payload,!0),clearInterval(v),l(u,!1),l(o,null),l(ce,!1),l(m,!1)})}),br(()=>{v&&clearInterval(v),f&&f(),_&&_(),b&&b()});let Ye=T(!1),rt=T(kt([]));function Z(N,Pe){const Fe=Pe.toUpperCase();return N==="Control"?"KEY_LEFTCTRL":N==="Alt"?"KEY_LEFTALT":N==="Shift"?"KEY_LEFTSHIFT":N==="Meta"||N==="OS"||N==="Super"?"KEY_LEFTMETA":Fe==="SPACE"?"KEY_SPACE":Fe==="ENTER"?"KEY_ENTER":Fe==="ESCAPE"||Fe==="ESC"?"KEY_ESC":Fe==="TAB"?"KEY_TAB":Fe==="BACKSPACE"?"KEY_BACKSPACE":Fe==="DELETE"?"KEY_DELETE":Fe.startsWith("KEY")?Fe:Fe.startsWith("DIGIT")?`KEY_${Fe.replace("DIGIT","")}`:Fe.startsWith("ARROW")?`KEY_${Fe.replace("ARROW","")}`:Fe.startsWith("F")&&Fe.length>1?`KEY_${Fe}`:N.length===1?`KEY_${N.toUpperCase()}`:`KEY_${Fe}`}function K(N){if(!e(Ye))return;N.preventDefault(),N.stopPropagation();const Pe=Z(N.key,N.code);e(rt).includes(Pe)||l(rt,[...e(rt),Pe],!0),N.key==="Escape"&&(t(t().tts.stop_key=[...e(rt)],!0),r(),l(rt,[],!0),l(Ye,!1))}function pe(N){e(Ye)&&(N.preventDefault(),N.stopPropagation(),e(rt).length>0&&(t(t().tts.stop_key=[...e(rt)],!0),r()),l(rt,[],!0),l(Ye,!1))}function We(){e(rt).length>0&&(t(t().tts.stop_key=[...e(rt)],!0),r(),l(rt,[],!0)),l(Ye,!1)}let Ve=T(kt(Object.entries(t().tts.snippets||{}).map(([N,Pe])=>({key:N,val:Pe})))),gt=!1;gs(()=>{const N=e(Ve),Pe={};for(const{key:ss,val:vs}of N)ss.trim()&&(Pe[ss.trim()]=vs.trim());const Fe=t().tts.snippets||{},ct=Object.keys(Fe),yt=Object.keys(Pe);let Ut=ct.length!==yt.length;if(!Ut){for(const ss of yt)if(Fe[ss]!==Pe[ss]){Ut=!0;break}}Ut&&(t(t().tts.snippets=Pe,!0),gt&&r()),gt=!0});function as(){l(Ve,[...e(Ve),{key:"",val:""}],!0)}function Ht(N){l(Ve,e(Ve).filter((Pe,Fe)=>Fe!==N),!0)}var Kt=gf(),ft=i(n(Kt),2),Ft=i(n(ft),2),At=i(n(Ft),2),Et=i(Ft,2),ze=i(n(Et),2);cs(ze,{get options(){return je},onchange:Me,get value(){return t().tts.engine},set value(N){t(t().tts.engine=N,!0)}});var Je=i(Et,2);{var q=N=>{var Pe=Mp(),Fe=wt(Pe),ct=i(n(Fe),2);z("change",ct,r),is(ct,()=>t().tts.gpu,yt=>t(t().tts.gpu=yt,!0)),c(N,Pe)},h=N=>{var Pe=Pp(),Fe=wt(Pe),ct=i(n(Fe),2);z("change",ct,r),is(ct,()=>t().tts.pocket_tts.gpu,yt=>t(t().tts.pocket_tts.gpu=yt,!0)),c(N,Pe)},x=N=>{var Pe=Dp(),Fe=wt(Pe),ct=i(n(Fe),2);z("change",ct,r),is(ct,()=>t().tts.breeze_tts_2.gpu,yt=>t(t().tts.breeze_tts_2.gpu=yt,!0)),c(N,Pe)},we=N=>{var Pe=zp(),Fe=wt(Pe),ct=i(n(Fe),2);z("change",ct,r),is(ct,()=>t().tts.vox_cpm_2.gpu,yt=>t(t().tts.vox_cpm_2.gpu=yt,!0)),c(N,Pe)};k(Je,N=>{t().tts.engine==="piper"?N(q):t().tts.engine==="pocket_tts"?N(h,1):t().tts.engine==="breeze_tts_2"?N(x,2):t().tts.engine==="vox_cpm_2"&&N(we,3)})}var Be=i(Je,2),He=n(Be),Te=n(He),Ce=i(He,2),Ue=i(Be,2),Xe=n(Ue),Vt=n(Xe),Qt=i(Xe,2);{var ts=N=>{var Pe=Ip(),Fe=i(n(Pe),2);let ct;var yt=n(Fe);w(()=>{ct=Se(Fe,1,"run-speed-value svelte-1q9seip",null,ct,{counting:e(u)}),y(yt,e(u)?`${e(d)} ms`:`${e(o)} ms`)}),c(N,Pe)};k(Qt,N=>{(e(u)||e(o)!==null)&&N(ts)})}var Gt=i(Ue,2);{var Dt=N=>{var Pe=Op(),Fe=n(Pe);w(()=>{var ct;return y(Fe,`❌ ${(ct=e(g))!=null?ct:""}`)}),c(N,Pe)};k(Gt,N=>{e(g)&&N(Dt)})}var ps=i(Gt,2);{var es=N=>{var Pe=Rp(),Fe=n(Pe);w(ct=>y(Fe,`Test TTS unavailable: ${ct!=null?ct:""}`),[()=>he()]),c(N,Pe)},ys=ue(()=>!e(g)&&B()&&he());k(ps,N=>{e(ys)&&N(es)})}var Ps=i(ft,2);{var Js=N=>{var Pe=$p(),Fe=i(n(Pe),2),ct=i(n(Fe),2);cs(ct,{get options(){return e(re)},onchange:ke,get value(){return t().tts.voice},set value(rs){t(t().tts.voice=rs,!0)}});var yt=i(Fe,2),Ut=n(yt);{var ss=rs=>{var Pt=Lp();c(rs,Pt)},vs=rs=>{var Pt=Np(),Tt=n(Pt);w(()=>{var os;return y(Tt,`⏳ Downloading ${(os=t().tts.voice)!=null?os:""} (model + config)...`)}),c(rs,Pt)},Vs=rs=>{var Pt=Fp(),Tt=n(Pt),os=n(Tt),Ns=i(Tt,2),Qs=n(Ns);w(()=>{Se(Tt,1,qs(e(E)[t().tts.voice]?"status-downloaded":"status-missing"),"svelte-1q9seip"),y(os,e(E)[t().tts.voice]?"✔ Voice downloaded and ready":"❌ Voice files missing"),Ns.disabled=e(E)[t().tts.voice]||e(ve),y(Qs,e(E)[t().tts.voice]?"Downloaded":"📥 Download")}),z("click",Ns,()=>I(t().tts.voice)),c(rs,Pt)};k(Ut,rs=>{e(O)?rs(ss):e(ve)?rs(vs,1):rs(Vs,-1)})}var Ls=i(yt,2),_s=i(n(Ls),2);let $s;var Xs=i(_s,2);{var ya=rs=>{var Pt=Vp(),Tt=n(Pt);w(()=>y(Tt,e(me))),c(rs,Pt)};k(Xs,rs=>{e(me)&&rs(ya)})}w(()=>$s=Se(_s,1,"svelte-1q9seip",null,$s,{"field-input-error":!!e(me)})),z("change",_s,Y),Ra("blur",_s,V),z("keydown",_s,be),Ze(_s,()=>t().tts.voice_dir,rs=>t(t().tts.voice_dir=rs,!0)),c(N,Pe)};k(Ps,N=>{t().tts.engine==="piper"&&N(Js)})}var bt=i(Ps,2);{var Wt=N=>{var Pe=Up(),Fe=i(n(Pe),6),ct=i(n(Fe),2);cs(ct,{get options(){return e(W)},defaultToFirst:!0,onchange:r,get value(){return t().tts.vox_cpm_2.cloned_voice},set value(Bt){t(t().tts.vox_cpm_2.cloned_voice=Bt,!0)}});var yt=i(Fe,2),Ut=i(n(yt),2),ss=i(yt,4),vs=i(n(ss),2),Vs=i(ss,4),Ls=n(Vs);{var _s=Bt=>{var ra=Bp();c(Bt,ra)},$s=Bt=>{var ra=qp();c(Bt,ra)},Xs=Bt=>{var ra=jp(),ai=n(ra),xr=n(ai),qt=i(ai,2),Fs=n(qt);w(()=>{Se(ai,1,qs(e(Q)?"status-downloaded":"status-missing"),"svelte-1q9seip"),y(xr,e(Q)?"✔ Model weights downloaded and ready":"❌ Model files missing"),qt.disabled=e(Q)||e(Re),y(Fs,e(Q)?"Downloaded":"📥 Download")}),z("click",qt,lt),c(Bt,ra)};k(Ls,Bt=>{e(ne)?Bt(_s):e(Re)?Bt($s,1):Bt(Xs,-1)})}var ya=i(Vs,2),rs=i(n(ya),5);{var Pt=Bt=>{var ra=Wp();c(Bt,ra)};k(rs,Bt=>{e(ot)&&Bt(Pt)})}var Tt=i(ya,2),os=i(n(Tt),2),Ns=i(Tt,4),Qs=i(n(Ns),2);z("change",Ut,()=>{r(),J(t().tts.vox_cpm_2.voice_dir)}),Ze(Ut,()=>t().tts.vox_cpm_2.voice_dir,Bt=>t(t().tts.vox_cpm_2.voice_dir=Bt,!0)),z("change",vs,r),is(vs,()=>t().tts.vox_cpm_2.ultimate_cloning,Bt=>t(t().tts.vox_cpm_2.ultimate_cloning=Bt,!0)),z("change",os,r),Ze(os,()=>t().tts.vox_cpm_2.model_dir,Bt=>t(t().tts.vox_cpm_2.model_dir=Bt,!0)),z("change",Qs,r),is(Qs,()=>t().tts.vox_cpm_2.prewarm,Bt=>t(t().tts.vox_cpm_2.prewarm=Bt,!0)),c(N,Pe)};k(bt,N=>{t().tts.engine==="vox_cpm_2"&&N(Wt)})}var fs=i(bt,2);{var zt=N=>{var Pe=Yp(),Fe=i(n(Pe),6),ct=i(n(Fe),2);cs(ct,{get options(){return e(W)},defaultToFirst:!0,onchange:r,get value(){return t().tts.breeze_tts_2.cloned_voice},set value(Pt){t(t().tts.breeze_tts_2.cloned_voice=Pt,!0)}});var yt=i(Fe,2),Ut=i(n(yt),2),ss=i(yt,6),vs=n(ss);{var Vs=Pt=>{var Tt=Hp();c(Pt,Tt)},Ls=Pt=>{var Tt=Kp();c(Pt,Tt)},_s=Pt=>{var Tt=Gp(),os=n(Tt),Ns=n(os),Qs=i(os,2),Bt=n(Qs);w(()=>{Se(os,1,qs(e(Ee)?"status-downloaded":"status-missing"),"svelte-1q9seip"),y(Ns,e(Ee)?"✔ Model weights downloaded and ready":"❌ Model files missing"),Qs.disabled=e(Ee)||e(nt),y(Bt,e(Ee)?"Downloaded":"📥 Download")}),z("click",Qs,it),c(Pt,Tt)};k(vs,Pt=>{e(Ge)?Pt(Vs):e(nt)?Pt(Ls,1):Pt(_s,-1)})}var $s=i(ss,4),Xs=i(n($s),2),ya=i($s,4),rs=i(n(ya),2);z("change",Ut,()=>{r(),J(t().tts.breeze_tts_2.voice_dir)}),Ze(Ut,()=>t().tts.breeze_tts_2.voice_dir,Pt=>t(t().tts.breeze_tts_2.voice_dir=Pt,!0)),z("change",Xs,r),Ze(Xs,()=>t().tts.breeze_tts_2.model_dir,Pt=>t(t().tts.breeze_tts_2.model_dir=Pt,!0)),z("change",rs,r),is(rs,()=>t().tts.breeze_tts_2.prewarm,Pt=>t(t().tts.breeze_tts_2.prewarm=Pt,!0)),c(N,Pe)};k(fs,N=>{t().tts.engine==="breeze_tts_2"&&N(zt)})}var Yt=i(fs,2);{var Is=N=>{var Pe=ef(),Fe=i(n(Pe),2),ct=i(n(Fe),2);cs(ct,{get options(){return e(W)},defaultToFirst:!0,onchange:U,get value(){return t().tts.pocket_tts.voice},set value(Tt){t(t().tts.pocket_tts.voice=Tt,!0)}});var yt=i(Fe,2),Ut=n(yt);{var ss=Tt=>{var os=Jp();c(Tt,os)},vs=Tt=>{var os=Zp();c(Tt,os)},Vs=Tt=>{var os=Xp(),Ns=n(os),Qs=n(Ns),Bt=i(Ns,2),ra=n(Bt);w(()=>{Se(Ns,1,qs(e(oe)?"status-downloaded":"status-missing"),"svelte-1q9seip"),y(Qs,e(oe)?"✔ Model and voice clip downloaded and ready":"❌ Model files missing"),Bt.disabled=e(oe)||e($e),y(ra,e(oe)?"Downloaded":"📥 Download")}),z("click",Bt,st),c(Tt,os)};k(Ut,Tt=>{e(Ae)?Tt(ss):e($e)?Tt(vs,1):Tt(Vs,-1)})}var Ls=i(yt,4),_s=i(n(Ls),2);let $s;var Xs=i(_s,2);{var ya=Tt=>{var os=Qp(),Ns=n(os);w(()=>y(Ns,e(ge))),c(Tt,os)};k(Xs,Tt=>{e(ge)&&Tt(ya)})}var rs=i(Ls,4),Pt=i(n(rs),2);w(()=>$s=Se(_s,1,"svelte-1q9seip",null,$s,{"field-input-error":!!e(ge)})),z("change",_s,xe),Ra("blur",_s,J),z("keydown",_s,Ie),Ze(_s,()=>t().tts.pocket_tts.voice_dir,Tt=>t(t().tts.pocket_tts.voice_dir=Tt,!0)),z("change",Pt,r),is(Pt,()=>t().tts.pocket_tts.prewarm,Tt=>t(t().tts.pocket_tts.prewarm=Tt,!0)),c(N,Pe)};k(Yt,N=>{t().tts.engine==="pocket_tts"&&N(Is)})}var Os=i(Yt,2);{var Zs=N=>{var Pe=of(),Fe=i(n(Pe),4);{var ct=qt=>{var Fs=tf();c(qt,Fs)};k(Fe,qt=>{e(Ke)||qt(ct)})}var yt=i(Fe,2),Ut=n(yt);{var ss=qt=>{var Fs=sf();c(qt,Fs)},vs=qt=>{var Fs=af();c(qt,Fs)},Vs=qt=>{var Fs=nf(),dn=n(Fs),Bi=n(dn),Tr=i(dn,2),tc=n(Tr);w(()=>{Se(dn,1,qs(e(_e)?"status-downloaded":"status-missing"),"svelte-1q9seip"),y(Bi,e(_e)?"✔ Model downloaded and ready":"❌ Model files missing"),Tr.disabled=e(_e)||e(ye),y(tc,e(_e)?"Downloaded":"📥 Download")}),z("click",Tr,C),c(qt,Fs)};k(Ut,qt=>{e(se)?qt(ss):e(ye)?qt(vs,1):qt(Vs,-1)})}var Ls=i(yt,2);{var _s=qt=>{var Fs=rf(),dn=n(Fs);w(()=>{var Bi;return y(dn,`❌ ${(Bi=e(j))!=null?Bi:""}`)}),c(qt,Fs)};k(Ls,qt=>{e(j)&&qt(_s)})}var $s=i(Ls,2),Xs=i(n($s),2),ya=i($s,4),rs=i(n(ya),2),Pt=i(ya,4),Tt=i(n(Pt),2),os=i(Pt,4),Ns=i(n(os),2),Qs=i(os,4),Bt=i(n(Qs),2),ra=n(Bt),ai=i(Qs,4);{var xr=qt=>{var Fs=lf(),dn=n(Fs);w(()=>y(dn,e(et))),c(qt,Fs)};k(ai,qt=>{e(et)&&qt(xr)})}w(()=>{Bt.disabled=!e(_e)||e(te),y(ra,e(te)?"Inspecting...":"🔍 Inspect graphs")}),z("change",Xs,de),Ze(Xs,()=>t().tts.inflect_micro.seed,qt=>t(t().tts.inflect_micro.seed=qt,!0)),z("change",rs,de),Ze(rs,()=>t().tts.inflect_micro.noise_scale,qt=>t(t().tts.inflect_micro.noise_scale=qt,!0)),z("change",Tt,de),is(Tt,()=>t().tts.inflect_micro.prewarm,qt=>t(t().tts.inflect_micro.prewarm=qt,!0)),z("change",Ns,de),Ze(Ns,()=>t().tts.inflect_micro.model_dir,qt=>t(t().tts.inflect_micro.model_dir=qt,!0)),z("click",Bt,X),c(N,Pe)};k(Os,N=>{t().tts.engine==="inflect_micro"&&N(Zs)})}var ma=i(Os,2),ba=i(n(ma),2),ln=i(n(ba),2);cs(ln,{get options(){return le},onchange:ee,get value(){return t().tts.memory_mode},set value(N){t(t().tts.memory_mode=N,!0)}});var on=i(ba,2);{var cn=N=>{var Pe=cf(),Fe=wt(Pe),ct=i(n(Fe),2),yt=i(Fe,2),Ut=n(yt);w(()=>{var ss;yr(ct,e(R)),y(Ut,`The model is loaded the moment VoxCtrl knows it will be needed — as soon as you start + dictating to a target that speaks — and stays primed while you keep using it. The + countdown restarts on every use, so it only unloads after ${(ss=e(R))!=null?ss:""} + ${e(R)===1?"minute":"minutes"} of no speech. The first reply after an + unload takes a few seconds longer while the model loads again.`)}),z("change",ct,Oe),c(N,Pe)},xt=N=>{var Pe=df();c(N,Pe)};k(on,N=>{t().tts.memory_mode==="on_demand"?N(cn):N(xt,-1)})}var Mt=i(ma,2),Qe=i(n(Mt),2),pt=i(n(Qe),2),$t=i(Qe,2),Jt=i(n($t),4),Cs=n(Jt);{var ws=N=>{var Pe=vf(),Fe=i(n(Pe),2),ct=n(Fe);w(yt=>y(ct,yt),[()=>e(rt).length>0?e(rt).join(" + ").replace(/KEY_/g,""):"Press your physical shortcut combination now..."]),c(N,Pe)},Ws=N=>{var Pe=ff(),Fe=n(Pe);{var ct=Ut=>{var ss=pf(),vs=wt(ss);_t(vs,21,()=>t().tts.stop_key,ht,(Vs,Ls)=>{var _s=uf(),$s=n(_s);w(Xs=>y($s,Xs),[()=>e(Ls).replace("KEY_","")]),c(Vs,_s)}),c(Ut,ss)},yt=Ut=>{var ss=qe("⚠️ Click/Focus here to press a stop key!");c(Ut,ss)};k(Fe,Ut=>{t().tts.stop_key.length>0?Ut(ct):Ut(yt,-1)})}c(N,Pe)};k(Cs,N=>{e(Ye)?N(ws):N(Ws,-1)})}var Ts=i(Mt,2),Us=n(Ts),ia=i(n(Us),2),Ga=i(Us,2),Rs=n(Ga);_t(Rs,17,()=>e(Ve),ht,(N,Pe,Fe)=>{var ct=_f(),yt=n(ct),Ut=i(yt,4),ss=i(Ut,2);Ze(yt,()=>e(Ve)[Fe].key,vs=>e(Ve)[Fe].key=vs),Ze(Ut,()=>e(Ve)[Fe].val,vs=>e(Ve)[Fe].val=vs),z("click",ss,()=>Ht(Fe)),c(N,ct)});var ns=i(Rs,2);{var Ma=N=>{var Pe=hf();c(N,Pe)};k(ns,N=>{e(Ve).length===0&&N(Ma)})}w((N,Pe,Fe,ct)=>{y(Te,`Speed (${N!=null?N:""}×)`),Xe.disabled=Pe,St(Xe,"title",Fe),y(Vt,e(ce)?"Speaking...":e(m)?"⏹ Stop & Test":"Test TTS"),Se(Jt,1,ct,"svelte-1q9seip")},[()=>t().tts.speed.toFixed(2),()=>B(),()=>{var N;return(N=he())!=null?N:"Speak a test phrase"},()=>qs(["border-2 rounded-desktop p-6 text-center cursor-pointer outline-none transition-all duration-200 flex flex-col items-center justify-center min-h-[80px]",e(Ye)?"border-solid border-[#f43f5e] bg-[rgba(244,63,94,0.05)] animate-border-pulse":"border-dashed border-white/5 bg-black/25 hover:border-accent-blue hover:bg-black/35 focus:border-accent-blue focus:bg-black/35"].join(" "))]),z("change",At,r),is(At,()=>t().tts.enabled,N=>t(t().tts.enabled=N,!0)),z("change",Ce,r),Ze(Ce,()=>t().tts.speed,N=>t(t().tts.speed=N,!0)),z("click",Xe,D),z("change",pt,r),is(pt,()=>t().tts.response_overlay,N=>t(t().tts.response_overlay=N,!0)),z("click",Jt,()=>l(Ye,!0)),Ra("focus",Jt,()=>l(Ye,!0)),Ra("blur",Jt,We),z("keydown",Jt,K),z("keyup",Jt,pe),z("click",ia,as),c(a,Kt),Rt()}us(["change","click","keydown","keyup"]);var bf=p(''),yf=p(`⚠️ The model isn't available on this server. Post-processing will fail with a 404 — pick a model from the list above or pull it on the server.`),wf=p(" "),kf=p('Select the Custom preset to edit the system and user prompts.'),xf=p('⚠️ The user prompt must contain the placeholder.'),Tf=p('Use where your dictated speech should be inserted.'),Sf=p(`

OpenAI API LLM Post-Processing

Connect to any OpenAI-compatible API server — a local server or a hosted + provider. The URL defaults to a local server; point it anywhere you like and + supply an API key when the server requires one.

Connection

Default Prompts

The system prompt tells the model how to transform your speech. The user + prompt is the message sent to the model — it must contain , which is replaced with whatever you dictate. + Built-in presets are read-only; choose Custom to edit the + prompts yourself.

System Prompt
User Prompt
`);function Ef(a,s){Ot(s,!0);let t=Nt(s,"cfg",15);function r(){Lt.set(t()),Va.set(!0)}let o=T(!1),d=T(null),u=T(kt([])),v=ue(()=>[...e(u).map(_e=>({value:_e,label:_e})),...t().openai.model&&!e(u).includes(t().openai.model)?[{value:t().openai.model,label:`${t().openai.model} (not found)`}]:[]]);const f=[{value:"clean",label:"Clean (grammar fix)"},{value:"formal",label:"Formal"},{value:"casual",label:"Casual"},{value:"bullet",label:"Bullet points"},{value:"concise",label:"Concise (summarize)"},{value:"custom",label:"Custom (editable)"}],_={clean:"Fix grammar and punctuation only. Return only the corrected text, no commentary.",formal:"Rewrite the user's text in formal professional language. Return only the result.",casual:"Rewrite the user's text in casual conversational language. Return only the result.",bullet:"Convert the user's text to a bullet-point list. Return only the list.",concise:"Summarize the user's text concisely in 1-2 sentences. Return only the summary."};let b=ue(()=>t().openai.mode==="custom");function m(){const _e=_[t().openai.mode];_e!==void 0&&(t(t().openai.system_prompt=_e,!0),t(t().openai.user_prompt="{text}",!0)),r()}let g=ue(()=>t().openai.user_prompt.includes("{text}")),M=ue(()=>e(u).length>0&&!!t().openai.model&&!e(u).includes(t().openai.model));async function A(){l(o,!0),l(d,null);try{const _e=await S("test_openai",{endpoint:t().openai.endpoint,apiKey:t().openai.api_key,timeoutSecs:t().openai.timeout_secs});l(d,{success:_e.success,message:_e.message},!0),_e.success&&(l(u,_e.models,!0),!t().openai.model&&_e.models.length>0&&(t(t().openai.model=_e.models[0],!0),r()))}catch(_e){l(d,{success:!1,message:_e.toString()},!0)}finally{l(o,!1)}}Xt(()=>{A()});var H=Sf(),E=i(n(H),4),O=i(n(E),2),ve=i(n(O),2),ce=i(O,2),me=i(n(ce),2),ie=i(ce,2),I=i(n(ie),2);{var V=_e=>{cs(_e,{get options(){return e(v)},onchange:r,get value(){return t().openai.model},set value(se){t(t().openai.model=se,!0)}})},Y=_e=>{var se=bf();z("change",se,r),Ze(se,()=>t().openai.model,ye=>t(t().openai.model=ye,!0)),c(_e,se)};k(I,_e=>{e(u).length>0?_e(V):_e(Y,-1)})}var be=i(ie,2);{var ke=_e=>{var se=yf(),ye=i(n(se)),et=n(ye);w(()=>y(et,t().openai.model)),c(_e,se)};k(be,_e=>{e(M)&&_e(ke)})}var D=i(be,2),P=i(n(D),2),he=i(D,2),B=n(he),L=n(B),ge=i(B,2);{var De=_e=>{var se=wf(),ye=n(se);w(()=>{Se(se,1,`status-msg ${e(d).success?"success":"error"}`,"svelte-1bvctpo"),y(ye,e(d).message)}),c(_e,se)};k(ge,_e=>{e(d)&&_e(De)})}var fe=i(E,2),G=i(n(fe),2),J=i(n(G));J.textContent="{text}";var xe=i(G,2),Ie=i(n(xe),2);cs(Ie,{get options(){return f},onchange:m,get value(){return t().openai.mode},set value(_e){t(t().openai.mode=_e,!0)}});var re=i(xe,2),W=i(n(re),2),le=i(re,2),R=i(n(le),2);St(R,"placeholder","{text}");var ee=i(R,2);{var Oe=_e=>{var se=kf();c(_e,se)},je=_e=>{var se=xf(),ye=i(n(se));ye.textContent="{text}",c(_e,se)},Ke=_e=>{var se=Tf(),ye=i(n(se));ye.textContent="{text}",c(_e,se)};k(ee,_e=>{e(b)?e(g)?_e(Ke,-1):_e(je,1):_e(Oe)})}w(()=>{B.disabled=e(o),y(L,e(o)?"⏳ Testing...":"🔌 Test Connection"),W.readOnly=!e(b),Se(W,1,qs(e(b)?"":"locked"),"svelte-1bvctpo"),R.readOnly=!e(b),Se(R,1,qs(e(b)?e(g)?"":"invalid":"locked"),"svelte-1bvctpo")}),z("change",ve,r),Ze(ve,()=>t().openai.endpoint,_e=>t(t().openai.endpoint=_e,!0)),z("change",me,r),Ze(me,()=>t().openai.api_key,_e=>t(t().openai.api_key=_e,!0)),z("change",P,r),Ze(P,()=>t().openai.timeout_secs,_e=>t(t().openai.timeout_secs=_e,!0)),z("click",B,A),z("change",W,r),Ze(W,()=>t().openai.system_prompt,_e=>t(t().openai.system_prompt=_e,!0)),z("change",R,r),Ze(R,()=>t().openai.user_prompt,_e=>t(t().openai.user_prompt=_e,!0)),c(a,H),Rt()}us(["change","click"]);var Cf=p(' '),Af=p('⏳ Downloading'),Mf=p('Missing'),Pf=p('⏳ Checking S1-mini model files...'),Df=p('⏳ Downloading S1-mini model (s1-mini-q4_k_m.gguf & tokenizer.json)...'),zf=p(' '),If=p('
❌ Model files missing
'),Of=p('
',1),Rf=p('

These features are covered by S1-mini when enabled.

'),Lf=p('
→
'),Nf=p('

No snippets defined.

'),Ff=p(`

Post-Processing

S1-mini Dictation Cleanup

Note: S1-Mini is a ~480 MB download.

Basic Text Cleanup

Voice Commands

Transcribes the first few seconds of each recording early, so a command like + “Hey Vox, say …” shows its overlay and starts loading the voice before you let go + of the hotkey. Where the text goes is still decided by the full transcript. Turn + this off to save the extra transcription work.

Custom Dictionary

Provide a comma-separated list of words (e.g. names or jargon like "Waylin, Rufer, Enola, Kenz") that are hard to spell. The transcription process will correct these in the final text.

Snippets

Type a trigger word → it expands to the replacement text.

`);function Vf(a,s){Ot(s,!0);let t=Nt(s,"cfg",15);t().engine&&!t().engine.s1_mini&&t(t().engine.s1_mini={enabled:!1,styling:"semi-formal"},!0);function r(){Lt.set(t()),Va.set(!0)}let o=T(!1),d=T(!1),u=T(!1),v=T(null);const f={cuda:"CUDA (NVIDIA)",vulkan:"Vulkan (AMD/Intel/NVIDIA)",coreml:"CoreML (Apple)",webgpu:"WebGPU (AMD/Intel/NVIDIA)"},_=C=>{var X;return(X=f[C])!=null?X:C};function b(){t().engine.s1_mini||t(t().engine.s1_mini={enabled:!1,styling:"semi-formal"},!0)}async function m(){l(d,!0);try{l(o,await S("check_s1_mini_downloaded"),!0)}catch(C){console.error("Failed to check S1-mini download status",C),l(o,!1)}finally{l(d,!1)}}async function g(){if(!e(u)){l(u,!0);try{await S("download_s1_mini_model"),l(o,!0)}catch(C){alert(`Failed to download S1-mini model: ${C}`)}finally{l(u,!1)}}}async function M(){b(),r(),t().engine.s1_mini.enabled&&!e(o)&&await g()}let A=ue(()=>{var C;return!!((C=t().engine.s1_mini)!=null&&C.enabled)});Xt(async()=>{var C;b(),m();try{const X=await S("accelerator_support");l(v,(C=X.s1_mini_gpu)!=null?C:null,!0)}catch(X){console.error("Failed to query GPU support",X)}});let H=T(kt(Object.entries(t().features.snippets).map(([C,X])=>({key:C,val:X})))),E=!1;gs(()=>{const C=e(H),X={};for(const{key:tt,val:st}of C)tt.trim()&&(X[tt.trim()]=st.trim());const de=t().features.snippets||{},oe=Object.keys(de),Ae=Object.keys(X);let $e=oe.length!==Ae.length;if(!$e){for(const tt of Ae)if(de[tt]!==X[tt]){$e=!0;break}}$e&&(t(t().features.snippets=X,!0),E&&r()),E=!0});function O(){l(H,[...e(H),{key:"",val:""}],!0)}function ve(C){l(H,e(H).filter((X,de)=>de!==C),!0)}let ce=ue(()=>t().features.custom_vocabulary?t().features.custom_vocabulary.join(", "):"");function me(C){const X=C.target;t(t().features.custom_vocabulary=X.value.split(",").map(de=>de.trim()).filter(de=>de.length>0),!0),r()}function ie(C){function X(){C.style.height="auto",C.style.height=`${C.scrollHeight}px`}C.addEventListener("input",X);const de=setTimeout(X,0);return{update(){X()},destroy(){clearTimeout(de),C.removeEventListener("input",X)}}}var I=Ff(),V=i(n(I),2),Y=n(V),be=i(n(Y),2);{var ke=C=>{var X=Cf(),de=n(X);w(oe=>y(de,`✔ Ready ${oe!=null?oe:""}`),[()=>e(v)?`(${_(e(v))})`:"(CPU)"]),c(C,X)},D=C=>{var X=Af();c(C,X)},P=C=>{var X=Mf();c(C,X)};k(be,C=>{e(o)?C(ke):e(u)?C(D,1):e(A)&&C(P,2)})}var he=i(Y,2),B=i(n(he),2),L=i(he,4);{var ge=C=>{var X=Of(),de=wt(X),oe=n(de);{var Ae=ne=>{var Re=Pf();c(ne,Re)},$e=ne=>{var Re=Df();c(ne,Re)},tt=ne=>{var Re=zf(),at=n(Re);w(lt=>y(at,`✔ Model downloaded and ready ${lt!=null?lt:""}`),[()=>e(v)?`(${_(e(v))} GPU accelerated)`:"on CPU"]),c(ne,Re)},st=ne=>{var Re=If(),at=i(n(Re),2);z("click",at,g),c(ne,Re)};k(oe,ne=>{e(d)?ne(Ae):e(u)?ne($e,1):e(o)?ne(tt,2):ne(st,-1)})}var U=i(de,2),Q=i(n(U),2);cs(Q,{options:[{value:"semi-formal",label:"Semi-formal (Default)"},{value:"casual",label:"Casual"},{value:"formal",label:"Formal"},{value:"verbatim",label:"Verbatim"},{value:"concise",label:"Concise"}],onchange:r,get value(){return t().engine.s1_mini.styling},set value(ne){t(t().engine.s1_mini.styling=ne,!0)}}),c(C,X)};k(L,C=>{e(A)&&C(ge)})}var De=i(V,2);let fe;var G=i(n(De),2);{var J=C=>{var X=Rf();c(C,X)};k(G,C=>{e(A)&&C(J)})}var xe=i(G,2),Ie=i(n(xe),2),re=i(xe,2),W=i(n(re),2),le=i(re,2),R=i(n(le),2),ee=i(De,2),Oe=i(n(ee),2),je=i(n(Oe),2),Ke=i(ee,2),_e=i(n(Ke),4);en(_e,C=>ie==null?void 0:ie(C));var se=i(Ke,2),ye=n(se),et=i(n(ye),2),te=i(ye,2),j=n(te);_t(j,17,()=>e(H),ht,(C,X,de)=>{var oe=Lf(),Ae=n(oe),$e=i(Ae,4),tt=i($e,2);Ze(Ae,()=>e(H)[de].key,st=>e(H)[de].key=st),Ze($e,()=>e(H)[de].val,st=>e(H)[de].val=st),z("click",tt,()=>ve(de)),c(C,oe)});var F=i(j,2);{var ae=C=>{var X=Nf();c(C,X)};k(F,C=>{e(H).length===0&&C(ae)})}w(()=>{fe=Se(De,1,"field-group svelte-1s1a8xn",null,fe,{"disabled-section":e(A)}),Ie.disabled=e(A),W.disabled=e(A),R.disabled=e(A),yr(_e,e(ce))}),z("change",B,M),is(B,()=>t().engine.s1_mini.enabled,C=>t(t().engine.s1_mini.enabled=C,!0)),z("change",Ie,r),is(Ie,()=>t().features.remove_fillers,C=>t(t().features.remove_fillers=C,!0)),z("change",W,r),is(W,()=>t().features.spoken_punctuation,C=>t(t().features.spoken_punctuation=C,!0)),z("change",R,r),is(R,()=>t().features.auto_format_lists,C=>t(t().features.auto_format_lists=C,!0)),z("change",je,r),is(je,()=>t().features.early_command_detection,C=>t(t().features.early_command_detection=C,!0)),z("input",_e,me),z("click",et,O),c(a,I),Rt()}us(["change","click","input"]);async function Xo(a,s){await S("plugin:shell|open",{path:a,with:s})}async function $f(a={}){return typeof a=="object"&&Object.freeze(a),await S("plugin:dialog|save",{options:a})}var Bf=p(""),qf=p(""),jf=p('
'),Wf=p('
'),Uf=p(''),Hf=p('

Building the report…

'),Kf=p('
 
'),Gf=p('

Title: · Report ID

',1),Yf=p('

Fill in the summary and description above and the finished report appears here.

'),Jf=p(''),Zf=p(''),Xf=p(''),Qf=p(''),e_=p('
'),t_=p('
'),s_=p("Send report files it for you — no GitHub account needed.",1),a_=p("This build has no automatic submission set up, so the routes below are the ones to use. Submit bug report opens the pre-filled issue form on GitHub and copies the report to your clipboard so you can submit directly.",1),n_=p('
Saved to
'),i_=p(''),r_=p("
"),l_=p(`

Report a Bug

VoxCtrl 0.5.0 added a Windows build, and a Windows GPU build is on its way. Neither has been + through anyone's hands but the developer's yet, so if something is broken, this page is the + fastest way to say so — and it is the only part of VoxCtrl that ever sends anything about + your machine anywhere.

What gets sent

✓ Included
  • What you write below. This is the only text of yours that travels.
  • Version and build — which VoxCtrl, installed how, with which GPU features compiled in.
  • Operating system, kernel or Windows build, and CPU architecture.
  • Hardware — CPU model, core count, total memory, display adapter name.
  • Desktop and session (Linux), and your language, e.g. en.
  • Settings, with everything below stripped out first.
  • Output targets and hotkeys — how many, of which kinds, which keys. Not their names or contents.
  • The tail of VoxCtrl's log, up to 400 lines.
✕ Never included
  • Anything you have dictated. The log is written so transcribed text cannot reach it in the first place.
  • API keys and access tokens. Reported only as set or not set.
  • Your name, username, hostname, email or IP address.
  • File paths. A folder setting is reported as "default" or "custom", never as a path.
  • Custom vocabulary, snippets and prompts. Counted, never quoted.
  • Target names, shell commands, URLs and webhook secrets.
  • Audio. No recording, no sample, ever.

Nothing here happens on its own. There is no telemetry, no background reporting, and nothing + is sent until you press a button on this page — and you can read the whole report first. + The rules are enforced in code and tested in CI; the log this quotes is at .

What went wrong

Write it as if to someone who cannot see your screen. Please do not paste logs or settings + here — they are attached already.

The report

Open on GitHub fills in the issue form in your browser and waits for you to + press Submit there. Save, Copy and Email put the report in your + hands to send however you like — attach the saved file to an email to .

Limits and the ID that enforces them

Report ID — a random value made on + this machine, used only to count reports. It is derived from nothing about you or your + computer, and resetting it starts a fresh count.
`);function o_(a,s){Ot(s,!0);const t=["Recording / hotkeys","Transcription accuracy or speed","Audio input or devices","Text-to-speech","Output targets / routing","Settings window or overlay","Installing or updating","Crash or freeze","Something else"],r=[{value:"always",label:"Every time"},{value:"sometimes",label:"Sometimes"},{value:"once",label:"It happened once"}];let o=kt({summary:"",description:"",area:t[0],frequency:"always"}),d=T(null),u=T(null),v=T(!1),f=T(null),_=T(!1),b=T(!1),m=T(null),g=T(null),M=T(null),A=T(!1),H=T(!1);const E=ue(()=>o.description.trim().length),O=ue(()=>{var q,h;return(h=(q=e(d))==null?void 0:q.limits.min_description_chars)!=null?h:30}),ve=ue(()=>{var q,h;return(h=(q=e(d))==null?void 0:q.limits.max_description_chars)!=null?h:4e3}),ce=ue(()=>o.summary.trim().length>0&&e(E)>=e(O)&&e(E)<=e(ve));async function me(){try{l(d,await S("bug_report_context"),!0)}catch(q){console.error("Failed to read bug report context:",q)}}Xt(me);let ie;gs(()=>{const q={...o};if(!e(ce)){l(u,null);return}return ie&&clearTimeout(ie),ie=setTimeout(()=>I(q),400),()=>{ie&&clearTimeout(ie)}});async function I(q){l(v,!0),l(f,null);try{l(u,await S("preview_bug_report",{statement:q}),!0)}catch(h){l(f,String(h),!0),l(u,null)}finally{l(v,!1)}}async function V(){return e(u)||await I({...o}),e(u)}async function Y(){var h,x,we,Be,He,Te,Ce,Ue;if(!o.summary.trim()){l(g,{type:"error",message:"Please provide a one-line summary above before submitting."},!0);return}if(e(E)l(A,!1),2500)}catch(x){l(g,{type:"error",message:`Could not copy the report: ${x}`},!0)}}async function P(){var x,we;if(!o.summary.trim()||e(E)l(H,!1),3e3),e(d)&&l(d,{...e(d),install_id:q,submissions_last_day:0,submissions_last_month:0},!0)}catch(q){l(f,`Could not reset the report ID: ${q}`)}}var ge=l_(),De=i(n(ge),4),fe=i(n(De),4),G=i(n(fe)),J=n(G),xe=i(De,2),Ie=i(n(xe),2),re=i(n(Ie),2),W=i(Ie,2),le=n(W),R=i(n(le),2);_t(R,21,()=>t,ht,(q,h)=>{var x=Bf(),we=n(x),Be={};w(()=>{var He;y(we,e(h)),Be!==(Be=e(h))&&(x.value=(He=x.__value=e(h))!=null?He:"")}),c(q,x)});var ee=i(le,2),Oe=i(n(ee),2);_t(Oe,21,()=>r,ht,(q,h)=>{var x=qf(),we=n(x),Be={};w(()=>{var He;y(we,e(h).label),Be!==(Be=e(h).value)&&(x.value=(He=x.__value=e(h).value)!=null?He:"")}),c(q,x)});var je=i(W,2),Ke=i(n(je),2);St(Ke,"placeholder",`1. I pressed my dictation hotkey and spoke for ten seconds. +2. The overlay appeared but no text arrived. +3. I expected the text to be typed into my editor.`);var _e=i(Ke,2);let se;var ye=n(_e),et=i(ye);{var te=q=>{var h=qe();w(()=>{var x;return y(h,`— at least ${(x=e(O))!=null?x:""} please; steps to reproduce are worth more than anything else here`)}),c(q,h)};k(et,q=>{e(E){var h=jf(),x=n(h);w(()=>y(x,e(f))),c(q,h)};k(j,q=>{e(f)&&q(F)})}var ae=i(j,2);{var C=q=>{var h=Wf(),x=n(h);w(()=>y(x,e(u).blocked_reason)),c(q,h)};k(ae,q=>{var h;(h=e(u))!=null&&h.blocked_reason&&q(C)})}var X=i(ae,2),de=n(X),oe=i(n(de),2);{var Ae=q=>{var h=Uf(),x=n(h);w(()=>y(x,e(_)?"Hide":"Show me exactly what will be sent")),z("click",h,()=>l(_,!e(_))),c(q,h)};k(oe,q=>{e(u)&&q(Ae)})}var $e=i(de,2);{var tt=q=>{var h=Hf();c(q,h)},st=q=>{var h=Gf(),x=wt(h),we=i(n(x)),Be=n(we),He=i(we,2),Te=n(He),Ce=i(x,2);{var Ue=Xe=>{var Vt=Kf(),Qt=n(Vt);w(()=>y(Qt,e(u).markdown)),c(Xe,Vt)};k(Ce,Xe=>{e(_)&&Xe(Ue)})}w(Xe=>{y(Be,e(u).title),y(Te,Xe)},[()=>e(u).fingerprint.slice(0,12)]),c(q,h)},U=q=>{var h=Yf();c(q,h)};k($e,q=>{e(v)&&!e(u)?q(tt):e(u)?q(st,1):q(U,-1)})}var Q=i($e,2),ne=n(Q);{var Re=q=>{var h=Jf(),x=n(h);w(()=>{h.disabled=e(b)||e(u)&&!e(u).can_submit,y(x,e(b)?"Sending…":"Send report")}),z("click",h,Y),c(q,h)},at=q=>{var h=Zf(),x=n(h);w(()=>{h.disabled=e(b),y(x,e(b)?"Submitting…":"Submit bug report")}),z("click",h,Y),c(q,h)};k(ne,q=>{var h;(h=e(d))!=null&&h.relay_configured?q(Re):q(at,-1)})}var lt=i(ne,2),Ee=i(lt,2),Ge=i(Ee,2),nt=n(Ge),Ne=i(Ge,2),it=i(Q,2);{var dt=q=>{var h=t_(),x=n(h),we=n(x),Be=n(we),He=i(we,2);{var Te=Ce=>{var Ue=e_(),Xe=n(Ue);{var Vt=Gt=>{var Dt=Xf();z("click",Dt,()=>he(e(g).path)),c(Gt,Dt)};k(Xe,Gt=>{e(g).path&&Gt(Vt)})}var Qt=i(Xe,2);{var ts=Gt=>{var Dt=Qf();z("click",Dt,()=>B(e(g).url)),c(Gt,Dt)};k(Qt,Gt=>{e(g).url&&Gt(ts)})}c(Ce,Ue)};k(He,Ce=>{(e(g).path||e(g).url)&&Ce(Te)})}w(()=>{Se(h,1,qs(e(g).type==="ok"?"ok-alert":"warning-alert"),"svelte-7vrdzs"),y(Be,e(g).message)}),c(q,h)};k(it,q=>{e(g)&&q(dt)})}var ot=i(it,2),Me=n(ot);{var Ye=q=>{var h=s_();c(q,h)},rt=q=>{var h=a_();c(q,h)};k(Me,q=>{var h;(h=e(d))!=null&&h.relay_configured?q(Ye):q(rt,-1)})}var Z=i(Me,10),K=n(Z),pe=i(ot,2);{var We=q=>{var h=n_(),x=i(n(h)),we=n(x);w(()=>y(we,e(M))),c(q,h)};k(pe,q=>{e(M)&&!e(g)&&q(We)})}var Ve=i(pe,2);{var gt=q=>{var h=r_();let x;var we=n(h),Be=i(we);{var He=Te=>{var Ce=i_();z("click",Ce,()=>B(e(m).issue_url)),c(Te,Ce)};k(Be,Te=>{e(m).issue_url&&Te(He)})}w(()=>{var Te;x=Se(h,1,"svelte-7vrdzs",null,x,{"ok-alert":e(m).ok,"warning-alert":!e(m).ok}),y(we,`${(Te=e(m).message)!=null?Te:""} `)}),c(q,h)};k(Ve,q=>{e(m)&&q(gt)})}var as=i(X,2),Ht=i(n(as),2),Kt=n(Ht),ft=i(Ht,2),Ft=n(ft),At=i(n(Ft)),Et=n(At),ze=i(Ft,2),Je=n(ze);w((q,h)=>{var x,we,Be,He,Te,Ce,Ue,Xe,Vt,Qt,ts,Gt,Dt,ps,es,ys,Ps,Js;y(J,(we=(x=e(d))==null?void 0:x.log_path)!=null?we:"…"),St(Ke,"maxlength",e(ve)),se=Se(_e,1,"counter svelte-7vrdzs",null,se,{short:e(E)>0&&e(E){var q,h;return Math.round(((h=(q=e(d))==null?void 0:q.limits.cooldown_seconds)!=null?h:120)/60)},()=>{var q,h,x;return(x=(h=(q=e(d))==null?void 0:q.install_id)==null?void 0:h.slice(0,12))!=null?x:"…"}]),Ze(re,()=>o.summary,q=>o.summary=q),Fl(R,()=>o.area,q=>o.area=q),Fl(Oe,()=>o.frequency,q=>o.frequency=q),Ze(Ke,()=>o.description,q=>o.description=q),z("click",lt,be),z("click",Ee,ke),z("click",Ge,D),z("click",Ne,P),z("click",ze,L),c(a,ge),Rt()}us(["click"]);class fi extends Zd{constructor(s){super(s)}static async new(s,t,r){return S("plugin:image|new",{rgba:or(s),width:t,height:r}).then(o=>new fi(o))}static async fromBytes(s){return S("plugin:image|from_bytes",{bytes:or(s)}).then(t=>new fi(t))}static async fromPath(s){return S("plugin:image|from_path",{path:s}).then(t=>new fi(t))}async rgba(){return S("plugin:image|rgba",{rid:this.rid}).then(s=>new Uint8Array(s))}async size(){return S("plugin:image|size",{rid:this.rid})}}function or(a){return a==null?null:typeof a=="string"?a:a instanceof fi?a.rid:a}var Bl;(function(a){a.Nsis="nsis",a.Msi="msi",a.Deb="deb",a.Rpm="rpm",a.AppImage="appimage",a.App="app"})(Bl||(Bl={}));async function c_(){return S("plugin:app|version")}const d_="/assets/voxctrl-CDHFw5hI.gif";var v_=p('
Custom overlays
'),u_=p('
Cloned TTS voices
'),p_=p(`

About VoxCtrl

VoxCtrl

Native, on-device voice-to-text for Linux and Windows. + Uses whisper.cpp, Moonshine, + and NVIDIA Parakeet for offline transcription and routes speech to any destination.

System

FrontendSvelte 5 + Tauri 2
BackendRust (Tokio async)
Inferencewhisper.cpp, Moonshine & Parakeet TDT
Config~/.config/voxctrl/
Models~/.local/share/voxctrl/models/
MCP socket/tmp/voxctrl-mcp.sock

Open Source Attributions

This application is built possible by these outstanding open-source projects:

Speech recognition

whisper.cpp MIT License
ONNX Runtime MIT / Apache 2.0

Text-to-speech

Piper TTS MIT License
audio.cpp Apache 2.0
ggml MIT License
Inflect-Micro-v2 Apache 2.0
Breeze-TTS-2 (BreezeBlue) Non-Commercial License

Dictation cleanup

Core framework & runtime

Tauri Framework MIT / Apache 2.0
Svelte & Vite MIT License
whisper-rs Unlicense
Rust, Tokio & CPAL MIT / Apache 2.0
`);function f_(a,s){Ot(s,!0);let t=T("0.1.0"),r=T(""),o=T("");Xt(async()=>{try{l(t,await c_(),!0)}catch(E){console.error("Failed to fetch app version:",E)}try{l(r,await S("get_custom_overlays_dir"),!0)}catch(E){console.error("Failed to fetch custom overlays directory:",E)}try{l(o,await S("get_cloned_tts_voices_dir"),!0)}catch(E){console.error("Failed to fetch cloned TTS voices directory:",E)}});var d=p_(),u=i(n(d),2),v=n(u),f=i(v,2),_=i(n(f),2),b=n(_),m=i(u,2),g=i(n(m),12);{var M=E=>{var O=v_(),ve=i(n(O)),ce=n(ve),me=n(ce);w(()=>y(me,e(r))),c(E,O)};k(g,E=>{e(r)&&E(M)})}var A=i(g,2);{var H=E=>{var O=u_(),ve=i(n(O)),ce=n(ve),me=n(ce);w(()=>y(me,e(o))),c(E,O)};k(A,E=>{e(o)&&E(H)})}w(()=>{var E;St(v,"src",d_),y(b,`Version ${(E=e(t))!=null?E:""} — Rust + Tauri Edition`)}),c(a,d),Rt()}var __=p(''),h_=p(''),g_=p(' 🛑 Stop',1),m_=p('🎙️ Record'),b_=p('
Unsaved changes detected
'),y_=p('
');function w_(a,s){Ot(s,!0);const t=()=>ls(Lt,"$config",d),r=()=>ls(xs,"$status",d),o=()=>ls(Va,"$configDirty",d),[d,u]=Ms();let v=T("general");const f=[{id:"general",label:"General",icon:"⚙️"},{id:"audio",label:"Audio Input",icon:"🔊"},{id:"engine",label:"Engine",icon:"🧠"},{id:"features",label:"Post-Processing",icon:"✨"},{id:"hotkeys",label:"Hotkeys",icon:"⌨️"},{id:"commands",label:"Output Commands",icon:"🎯"},{id:"visual",label:"Visual Feedback",icon:"🎨"},{id:"tts",label:"TTS",icon:"🗣️"},{id:"openai",label:"OpenAI API",icon:"🤖"},{id:"bugreport",label:"Bug Report",icon:"🐞"},{id:"about",label:"About",icon:"ℹ️"}];async function _(){await bl(t())}async function b(){await S("toggle_recording")}let m="general",g=T(null);gs(()=>{var ye,et;const se=e(v);se!==m&&(m=se,e(g)&&(e(g).scrollTop=0),(et=(ye=t())==null?void 0:ye.audio)!=null&&et.dynamic_stream&&r().recording&&S("stop_recording").catch(te=>{console.error("Failed to stop recording on activeTab change:",te)}))}),Xt(()=>{const se=ks("focus-settings-tab",et=>{const te=et.payload;f.some(j=>j.id===te)&&l(v,te,!0)});let ye;return ye=lr.subscribe(et=>{if(et){const te=t();if(te&&te.engine&&te.engine.whisper_cpp){const j=te.engine.whisper_cpp.model_size;te.engine.backend==="whisper-cpp"&&S("check_model_downloaded",{modelSize:j,modelDir:te.engine.whisper_cpp.model_dir||""}).then(async F=>{var ae;if(!F&&(l(v,"engine"),(ae=te==null?void 0:te.ui)!=null&&ae.auto_show_settings))try{const{getCurrentWindow:C}=await Kd(async()=>{const{getCurrentWindow:de}=await Promise.resolve().then(()=>nh);return{getCurrentWindow:de}},void 0),X=C();await X.show(),await X.setFocus()}catch(C){console.error("Failed to programmatically show settings window on startup:",C)}}).catch(F=>{console.error("Failed to check model download status on startup:",F)})}ye?ye():setTimeout(()=>ye(),0)}}),()=>{se.then(et=>et()).catch(()=>{})}});var M=y_(),A=n(M),H=n(A),E=n(H),O=i(H,2);_t(O,21,()=>f,ht,(se,ye)=>{var et=h_();let te;var j=n(et),F=n(j),ae=i(j,2),C=n(ae),X=i(ae,2);{var de=oe=>{var Ae=__();c(oe,Ae)};k(X,oe=>{e(v)===e(ye).id&&oe(de)})}w(()=>{te=Se(et,1,"nav-btn svelte-myrvk6",null,te,{active:e(v)===e(ye).id}),y(F,e(ye).icon),y(C,e(ye).label)}),z("click",et,()=>l(v,e(ye).id,!0)),c(se,et)});var ve=i(O,2),ce=n(ve);let me;var ie=n(ce),I=n(ie),V=i(n(I),2),Y=n(V),be=i(I,2),ke=n(be),D=i(ie,2);let P;var he=n(D);{var B=se=>{var ye=g_();c(se,ye)},L=se=>{var ye=m_();c(se,ye)};k(he,se=>{r().recording?se(B):se(L,-1)})}var ge=i(A,2),De=n(ge),fe=n(De);{var G=se=>{pv(se,{get cfg(){return un(),t()},set cfg(ye){vn(Lt,ye)}})},J=se=>{Qv(se,{get cfg(){return un(),t()},set cfg(ye){vn(Lt,ye)}})},xe=se=>{Yv(se,{get cfg(){return un(),t()},set cfg(ye){vn(Lt,ye)}})},Ie=se=>{Vf(se,{get cfg(){return un(),t()},set cfg(ye){vn(Lt,ye)}})},re=se=>{fp(se,{})},W=se=>{Ap(se,{})},le=se=>{wv(se,{get cfg(){return un(),t()},set cfg(ye){vn(Lt,ye)}})},R=se=>{mf(se,{get cfg(){return un(),t()},set cfg(ye){vn(Lt,ye)}})},ee=se=>{Ef(se,{get cfg(){return un(),t()},set cfg(ye){vn(Lt,ye)}})},Oe=se=>{o_(se,{})},je=se=>{f_(se,{})};k(fe,se=>{e(v)==="general"?se(G):e(v)==="audio"?se(J,1):e(v)==="engine"?se(xe,2):e(v)==="features"?se(Ie,3):e(v)==="hotkeys"?se(re,4):e(v)==="commands"?se(W,5):e(v)==="visual"?se(le,6):e(v)==="tts"?se(R,7):e(v)==="openai"?se(ee,8):e(v)==="bugreport"?se(Oe,9):e(v)==="about"&&se(je,10)})}ml(De,se=>l(g,se),()=>e(g));var Ke=i(De,2);{var _e=se=>{var ye=b_(),et=i(n(ye),2);z("click",et,_),c(se,ye)};k(Ke,se=>{o()&&se(_e)})}w(()=>{var se;St(E,"src",wr),me=Se(ce,1,"status-panel svelte-myrvk6",null,me,{recording:r().recording,speaking:r().speaking}),y(Y,r().recording?"Recording":r().speaking?"Speaking":"Idle"),y(ke,`${(se=r().word_count)!=null?se:""} words`),P=Se(D,1,"btn-record svelte-myrvk6",null,P,{active:r().recording})}),z("click",D,b),c(a,M),Rt(),u()}us(["click"]);function rn(a){let s=0,t=0,r=!1,o=null;ks("audio-level",u=>{s=Math.min(1,u.payload*100)}).then(u=>{r?u():o=u});let d=requestAnimationFrame(function u(){t+=(s-t)*.35,s*=.86,a(t),d=requestAnimationFrame(u)});return()=>{r=!0,o==null||o(),cancelAnimationFrame(d)}}var k_=p(""),x_=p('
'),T_=p('
VOXCTRL VOICE CARD
TARGET •••• VOX
');function S_(a,s){Ot(s,!0);const t=()=>ls(xs,"$status",r),[r,o]=Ms();let d=Nt(s,"recording",3,!1);Nt(s,"speaking",3,!1);let u=Nt(s,"active",3,!0);const v=20,f=6;let _=T(kt(Array(v).fill(0)));const b=ue(()=>t().audio_ready!==!1),m=ue(()=>t().active_target_label||"Focused Window");Xt(()=>{let D=0;const P=new Float32Array(v);return rn(he=>{D+=.016;for(let B=0;BP[B]?L:P[B]*.86}l(_,Array.from(P),!0)})});function g(D){return D===0?"red":D<=2?"amber":"green"}var M=T_();let A;var H=n(M);let E;var O=i(n(H),8),ve=i(n(O),2);{var ce=D=>{var P=qe("PROC");c(D,P)},me=D=>{var P=qe("INIT");c(D,P)},ie=D=>{var P=qe("REC");c(D,P)};k(ve,D=>{t().processing?D(ce):d()&&!e(b)?D(me,1):D(ie,-1)})}var I=i(O,2);_t(I,21,()=>e(_),ht,(D,P)=>{var he=x_();_t(he,21,()=>Array(f),ht,(B,L,ge)=>{var De=k_();let fe;w(G=>fe=Se(De,1,`dot ${G!=null?G:""}`,"svelte-1pt4ba2",fe,{lit:f-ge<=e(P)*f}),[()=>g(ge)]),c(B,De)}),c(D,he)});var V=i(I,4),Y=n(V);{var be=D=>{var P=qe("Reading the card…");c(D,P)},ke=D=>{var P=qe();w(()=>y(P,e(m))),c(D,P)};k(Y,D=>{t().processing?D(be):D(ke,-1)})}w(()=>{A=Se(M,1,"card-scene svelte-1pt4ba2",null,A,{on:u()}),E=Se(H,1,"card svelte-1pt4ba2",null,E,{processing:t().processing,initializing:d()&&!e(b)})}),c(a,M),Rt(),o()}var E_=p('
'),C_=p('
WAVEFORM // OSC-01 TGT ▸
');function A_(a,s){Ot(s,!0);const t=()=>ls(xs,"$status",r),[r,o]=Ms();let d=Nt(s,"recording",3,!1),u=Nt(s,"active",3,!0);const v=126,f=500,_=78;let b=T("");const m=ue(()=>t().audio_ready!==!1),g=ue(()=>t().active_target_label||"Focused Window");Xt(()=>{const B=new Float32Array(v);let L=0;return rn(ge=>{L+=.016;let De=0;if(t().processing)De=.55*Math.sin(L*9)*(.6+.4*Math.sin(L*1.7));else if(d()&&t().audio_ready===!1)De=.05*(Math.random()*2-1);else if(d()){const G=Math.random()*2-1;De=Math.min(1,ge*1.5)*(.45*Math.sin(L*24)+.55*G)}B.copyWithin(0,1),B[v-1]=De;let fe="";for(let G=0;G{var L=qe("· TRANSCRIBING");c(B,L)},me=B=>{var L=qe("· CALIBRATING");c(B,L)},ie=B=>{var L=qe("· LIVE TRACE");c(B,L)};k(ve,B=>{t().processing?B(ce):d()&&!e(m)?B(me,1):B(ie,-1)})}var I=i(O,4),V=i(n(I),2),Y=n(V),be=i(E,2),ke=i(n(be),6);_t(ke,16,()=>[1,2,3,4],ht,(B,L)=>{var ge=E_();w(()=>ds(ge,`left: ${L*20}%`)),c(B,ge)});var D=i(ke,2);St(D,"viewBox","0 0 500 78");var P=n(D),he=i(P);w(()=>{A=Se(M,1,"scope svelte-xjziu1",null,A,{on:u(),processing:t().processing,initializing:d()&&!e(m)}),y(Y,e(g)),St(P,"d",e(b)),St(he,"d",e(b))}),c(a,M),Rt(),o()}var M_=p('
⌖
');function P_(a,s){Ot(s,!0);const t=()=>ls(xs,"$status",r),[r,o]=Ms();let d=Nt(s,"recording",3,!1),u=Nt(s,"active",3,!0),v=T(0);const f=ue(()=>t().audio_ready!==!1),_=ue(()=>t().active_target_label||"Focused Window");Xt(()=>rn(Y=>l(v,Y,!0)));var b=M_();let m;var g=i(n(b),2),M=i(n(g),2),A=n(M),H=n(A);{var E=Y=>{var be=qe("PULSE // ANALYZING");c(Y,be)},O=Y=>{var be=qe("PULSE // ACQUIRING");c(Y,be)},ve=Y=>{var be=qe("PULSE // TARGET LOCK");c(Y,be)};k(H,Y=>{t().processing?Y(E):d()&&!e(f)?Y(O,1):Y(ve,-1)})}var ce=i(A,2),me=n(ce);{var ie=Y=>{var be=qe("Decoding transmission…");c(Y,be)},I=Y=>{var be=qe("Connecting mic…");c(Y,be)},V=Y=>{var be=qe();w(()=>y(be,e(_))),c(Y,be)};k(me,Y=>{t().processing?Y(ie):d()&&!e(f)?Y(I,1):Y(V,-1)})}w(()=>{var Y;m=Se(b,1,"radar svelte-13tl5wx",null,m,{on:u(),processing:t().processing,initializing:d()&&!e(f)}),ds(b,`--lvl: ${(Y=e(v))!=null?Y:""}`)}),c(a,b),Rt(),o()}var D_=p('
'),z_=p('
OCEAN WAVE
');function I_(a,s){Ot(s,!0);const t=()=>ls(xs,"$status",r),[r,o]=Ms();let d=Nt(s,"recording",3,!1);Nt(s,"speaking",3,!1);let u=Nt(s,"active",3,!0);const v=380,f=90;let _=T(""),b=T(""),m=T(""),g=T(60);const M=ue(()=>t().audio_ready!==!1),A=ue(()=>t().active_target_label||"Focused Window");function H(G,J,xe,Ie){let re=`M 0 ${f} L 0 ${Ie.toFixed(1)}`;for(let W=0;W<=v;W+=8){const le=Ie+Math.sin(W*J+xe)*G;re+=` L ${W} ${le.toFixed(1)}`}return re+` L ${v} ${f} Z`}Xt(()=>{let G=0;return rn(J=>{G+=.016;const xe=J,Ie=t().processing?4+2.5*Math.sin(G*1.6):0,re=64-xe*20-Ie,W=56-xe*24-Ie*1.2,le=47-xe*28-Ie*1.4,R=(t().processing?5:2.5)+xe*14,ee=(t().processing?6:2)+xe*18,Oe=(t().processing?7:1.5)+xe*22;l(_,H(R,.014,G*2.1,re),!0),l(b,H(ee,.022,-G*3,W),!0),l(m,H(Oe,.018,G*3.9,le),!0),l(g,38+le-21+Math.sin(G*2.2)*2.5)})});var E=z_();let O;var ve=i(n(E),4),ce=n(ve);{var me=G=>{var J=qe("deep current — processing");c(G,J)},ie=G=>{var J=qe("low tide — preparing");c(G,J)},I=G=>{var J=qe("high tide — listening");c(G,J)};k(ce,G=>{t().processing?G(me):d()&&!e(M)?G(ie,1):G(I,-1)})}var V=i(ve,2),Y=n(V);St(Y,"viewBox","0 0 380 90");var be=n(Y),ke=i(be),D=i(ke),P=i(V,2);_t(P,16,()=>[0,1,2],ht,(G,J)=>{var xe=D_();w(()=>ds(xe,`left: ${64+J*112}px; animation-delay: ${J*1.4}s;`)),c(G,xe)});var he=i(P,2),B=i(n(he),2),L=n(B);{var ge=G=>{var J=qe("Sounding the depths…");c(G,J)},De=G=>{var J=qe("Casting off…");c(G,J)},fe=G=>{var J=qe();w(()=>y(J,e(A))),c(G,J)};k(L,G=>{t().processing?G(ge):d()&&!e(M)?G(De,1):G(fe,-1)})}w(()=>{var G;O=Se(E,1,"ocean svelte-1orgnnz",null,O,{on:u(),processing:t().processing}),St(be,"d",e(_)),St(ke,"d",e(b)),St(D,"d",e(m)),ds(he,`top: ${(G=e(g))!=null?G:""}px;`)}),c(a,E),Rt(),o()}var O_=p("
"),R_=p('
');function L_(a,s){Ot(s,!0);const t=()=>ls(xs,"$status",r),[r,o]=Ms();let d=Nt(s,"recording",3,!1),u=Nt(s,"active",3,!0);const v=5,f=8,_=52;let b=T(kt(Array(v).fill(f)));const m=ue(()=>t().audio_ready!==!1),g=ue(()=>t().active_target_label||"Focused Window");function M(D,P,he,B,L,ge,De,fe){const G=(P-1)/2,J=1-Math.abs(D-G)/(G+1)*.4;let xe;if(ge)xe=(Math.sin(B*4-D*.85)*.5+.5)*J;else if(L&&!De)xe=0;else if(L){const Ie=Math.sin(B*3-D*.8);xe=Math.min(1,Math.max(0,he*J*(.9+.1*Ie)*(.85+.3*fe)))}else xe=0;return f+(_-f)*xe}Xt(()=>{let D=0;return rn(P=>{D+=.016;const he=t().audio_ready!==!1,B=new Array(v);for(let L=0;L{var P=qe("PROCESSING");c(D,P)},I=D=>{var P=qe("STANDBY");c(D,P)},V=D=>{var P=qe("LISTENING");c(D,P)};k(me,D=>{t().processing?D(ie):d()&&!e(m)?D(I,1):D(V,-1)})}var Y=i(E,2);_t(Y,21,()=>e(b),ht,(D,P)=>{var he=O_();let B;w(()=>{var L;B=Se(he,1,"bar svelte-12wa5lj",null,B,{dim:d()&&!e(m),processing:t().processing}),ds(he,`height: ${(L=e(P))!=null?L:""}px`)}),c(D,he)});var be=i(Y,4),ke=n(be);w(()=>{H=Se(A,1,"mono svelte-12wa5lj",null,H,{on:u()}),ve=Se(O,1,"dot svelte-12wa5lj",null,ve,{lit:!t().processing&&!(d()&&!e(m)),processing:t().processing,standby:d()&&!e(m)}),y(ke,e(g))}),c(a,A),Rt(),o()}var N_=p('
'),F_=p('
SPECTRUM // EQ-16 OUT ▸
');function V_(a,s){Ot(s,!0);const t=()=>ls(xs,"$status",r),[r,o]=Ms();let d=Nt(s,"recording",3,!1),u=Nt(s,"active",3,!0);const v=16,f=6,_=96;let b=T(kt(Array(v).fill(f)));const m=ue(()=>t().audio_ready!==!1),g=ue(()=>t().active_target_label||"Focused Window");function M(P,he,B,L,ge,De,fe,G){const J=P/(he-1);let xe;if(De)xe=Math.pow(Math.sin(L*2.4-J*6)*.5+.5,1.5);else if(ge&&!fe)xe=G*.06;else if(ge){const Ie=2+J*9,re=P*.7,W=Math.sin(L*Ie+re)*.5+.5,le=1-J*.35;xe=Math.min(1,Math.max(0,B*le*(.35+.65*W)*(.7+.6*G)))}else xe=0;return f+(_-f)*xe}Xt(()=>{let P=0;return rn(he=>{P+=.016;const B=t().audio_ready!==!1,L=new Array(v);for(let ge=0;ge{var he=qe("· ANALYZING");c(P,he)},I=P=>{var he=qe("· WARMING UP");c(P,he)},V=P=>{var he=qe("· LIVE");c(P,he)};k(me,P=>{t().processing?P(ie):d()&&!e(m)?P(I,1):P(V,-1)})}var Y=i(ce,4),be=i(n(Y),2),ke=n(be),D=i(E,4);_t(D,21,()=>e(b),ht,(P,he)=>{var B=N_();w(()=>{var L;return ds(B,`height: ${(L=e(he))!=null?L:""}px; opacity: ${.45+.55*(e(he)/_)}`)}),c(P,B)}),w(()=>{H=Se(A,1,"spectrum svelte-194vixl",null,H,{on:u()}),ve=Se(O,1,"led svelte-194vixl",null,ve,{processing:t().processing,standby:d()&&!e(m)}),y(ke,e(g))}),c(a,A),Rt(),o()}var $_=p('
VOXCTRL — /dev/mic0
');function B_(a,s){Ot(s,!0);const t=()=>ls(xs,"$status",r),[r,o]=Ms();let d=Nt(s,"recording",3,!1),u=Nt(s,"active",3,!0);const v=20;let f=T(kt("·".repeat(v))),_=T(!1);const b=ue(()=>t().audio_ready!==!1),m=ue(()=>t().active_target_label||"Focused Window");function g(L,ge,De,fe,G){const J=v;if(fe){const xe=2*J,Ie=Math.floor(ge*10)%xe,re=Iele===re?"█":"·").join("")}else{if(De&&!G)return Array.from({length:J},(xe,Ie)=>Ie%4===0?"·":" ").join("");if(De){const xe=Math.round(Math.min(1,Math.max(0,L))*J);return Array.from({length:J},(Ie,re)=>re{let L=0;return rn(ge=>{L+=.016;const De=t().audio_ready!==!1;l(f,g(ge,L,d(),t().processing,De),!0),l(_,Math.sin(L*5.5)>0)})});var M=$_();let A;var H=i(n(M),2),E=n(H),O=n(E),ve=i(E,2);let ce;var me=n(ve);{var ie=L=>{var ge=qe("[PROC]");c(L,ge)},I=L=>{var ge=qe("[INIT]");c(L,ge)},V=L=>{var ge=qe("[REC ]");c(L,ge)};k(me,L=>{t().processing?L(ie):d()&&!e(b)?L(I,1):L(V,-1)})}var Y=i(me),be=i(ve,2),ke=n(be);{var D=L=>{var ge=qe("transcribing audio stream");c(L,ge)},P=L=>{var ge=qe("connecting input device");c(L,ge)},he=L=>{var ge=qe("streaming to output");c(L,ge)};k(ke,L=>{t().processing?L(D):d()&&!e(b)?L(P,1):L(he,-1)})}var B=i(ke,1,!0);w(()=>{var L,ge;A=Se(M,1,"terminal svelte-pvtvge",null,A,{on:u()}),y(O,`$ voxctrl listen --target "${(L=e(m))!=null?L:""}"`),ce=Se(ve,1,"line2 svelte-pvtvge",null,ce,{processing:t().processing,standby:d()&&!e(b)}),y(Y,` ${(ge=e(f))!=null?ge:""}`),y(B,e(_)?"_":" ")}),c(a,M),Rt(),o()}var q_=p('
VU
-20
0
+3
');function j_(a,s){Ot(s,!0);const t=()=>ls(xs,"$status",r),[r,o]=Ms();let d=Nt(s,"recording",3,!1),u=Nt(s,"active",3,!0);const v=144,f=70,_=58,b=-.95,m=.95,g=.016;let M=T(kt(O(b)));const A=ue(()=>t().audio_ready!==!1),H=ue(()=>t().active_target_label||"Focused Window");function E(fe){return b+Math.min(1,Math.max(0,fe))*(m-b)}function O(fe){const G=v+Math.sin(fe)*_,J=f-Math.cos(fe)*_;return`M ${v} ${f} L ${G.toFixed(1)} ${J.toFixed(1)}`}function ve(fe,G,J){const re=256*(G-fe.x)-24.96*fe.v;fe.v+=re*J,fe.x+=fe.v*J,Math.abs(fe.x-G)<.001&&Math.abs(fe.v)<.02&&(fe.x=G,fe.v=0)}Xt(()=>{let fe=0;const G={x:b,v:0};return rn(J=>{fe+=g;const xe=t().audio_ready!==!1;let Ie;t().processing?Ie=E(.3+.25*Math.abs(Math.sin(fe*2))):d()&&xe?Ie=E(J):Ie=b,ve(G,Ie,g),l(M,O(G.x),!0)})});var ce=q_();let me;var ie=n(ce),I=i(n(ie),2),V=n(I);{var Y=fe=>{var G=qe("ANALOG // PROCESSING");c(fe,G)},be=fe=>{var G=qe("ANALOG // WARMING UP");c(fe,G)},ke=fe=>{var G=qe("ANALOG // INPUT LEVEL");c(fe,G)};k(V,fe=>{t().processing?fe(Y):d()&&!e(A)?fe(be,1):fe(ke,-1)})}var D=i(I,4);let P;var he=i(ie,2),B=i(n(he),20),L=n(B),ge=i(he,2),De=n(ge);w(()=>{me=Se(ce,1,"vinyl svelte-kq5b5i",null,me,{on:u()}),P=Se(D,1,"led svelte-kq5b5i",null,P,{processing:t().processing,standby:d()&&!e(A)}),St(L,"d",e(M)),y(De,e(H))}),c(a,ce),Rt(),o()}var W_=p("
",1),U_=p('
'),H_=p('
⚡
'),K_=p(''),G_=p('
SYSTEM RESPONDING
'),Y_=p('
RECORDING
'),J_=p('
'),Z_=p('
');function X_(a,s){Ot(s,!0);const t=()=>ls(xs,"$status",v),r=()=>ls(sv,"$recording",v),o=()=>ls(Lt,"$config",v),d=()=>ls(av,"$speaking",v),u=()=>ls(nv,"$mcpRecording",v),[v,f]=Ms(),_=new Set(["waveform","pulse","blue_wave","mono_bars","spectrum","terminal","vinyl","voice_card","none"]);let b=T(!0),m=T(void 0);const g=ue(()=>t().active_target_label||"Focused Window"),M=ue(()=>t().active_target_label||"Focused Window");let A=T(!1),H=T(""),E=T(""),O=null,ve=null,ce=null,me=null,ie=ue(()=>r()&&o().ui.show_overlay||d()&&o().tts.enabled&&o().tts.response_overlay||u()&&o().mcp.visual_feedback||e(A)&&o().ui.show_command_overlay),I=ue(()=>d()&&o().tts.enabled&&o().tts.response_overlay&&!r()),V=T(!1),Y=T(!1);gs(()=>{!e(V)||e(I)?l(Y,!1):r()||t().processing?l(Y,!0):e(ie)&&l(Y,!1)});let be=ue(()=>o().ui.overlay_style!=="none"&&o().ui.show_overlay&&e(Y)),ke=T(!1),D,P;gs(()=>(e(ie)?(D&&clearTimeout(D),l(V,!0),P&&clearTimeout(P),P=setTimeout(()=>{l(ke,!0)},25),J(o().ui.overlay_style)):(l(ke,!1),D=setTimeout(()=>{l(V,!1)},450)),()=>{D&&clearTimeout(D),P&&clearTimeout(P)}));let he=ue(()=>e(m)?e(m).html.replace(/\{\{trigger\}\}/g,e(g)).replace(/\{\{target\}\}/g,e(M)):""),B=0,L=T(0),ge=null,De=null;function fe(){De===null&&(De=requestAnimationFrame(G))}function G(){if(l(L,e(L)+(B-e(L))*.42),B*=.82,B<5e-4&&(B=0),e(L)<5e-4&&l(L,0),e(m)&&window.dispatchEvent(new CustomEvent("voxctrl-status",{detail:{recording:r(),processing:t().processing,speaking:d(),audio_ready:t().audio_ready!==!1,active_target_label:t().active_target_label||"Focused Window",audio_level:e(L)}})),e(L)===0&&B===0&&!e(V)){De=null;return}De=requestAnimationFrame(G)}gs(()=>{e(V)&&fe()});function J(le){if(_.has(le)){l(m,void 0);return}S("get_custom_overlay",{name:le}).then(R=>{l(m,R!=null?R:void 0,!0)}).catch(R=>{console.error(`Failed to load custom overlay "${le}":`,R),l(m,void 0)})}gs(()=>{const le=o().ui.overlay_style;l(b,!1);const R=setTimeout(()=>{l(b,!0)},25);return J(le),()=>clearTimeout(R)}),gs(()=>{const le=document.documentElement;le.style.setProperty("--voxctrl-audio-level",String(e(L))),le.style.setProperty("--voxctrl-recording",r()?"1":"0"),le.style.setProperty("--voxctrl-processing",t().processing?"1":"0"),le.style.setProperty("--voxctrl-speaking",d()?"1":"0"),le.style.setProperty("--voxctrl-mcp-recording",u()?"1":"0"),le.style.setProperty("--voxctrl-audio-ready",t().audio_ready!==!1?"1":"0")}),Xt(()=>{document.documentElement.classList.add("overlay-window"),document.body.classList.add("overlay-window"),requestAnimationFrame(()=>{requestAnimationFrame(()=>{S("overlay_content_ready").catch(()=>{})})}),document.documentElement.style.setProperty("background","transparent","important"),document.body.style.setProperty("background","transparent","important");const le=document.getElementById("app");return le&&le.style.setProperty("background","transparent","important"),ks("overlay-style-selected",R=>{J(R.payload)}).then(R=>{me=R}),ks("audio-level",R=>{B=Math.min(1,R.payload*100),fe(),window.dispatchEvent(new CustomEvent("voxctrl-audio-level",{detail:R.payload}))}).then(R=>{ge=R}),ks("command-executed",R=>{if(!o().ui.show_command_overlay)return;l(H,R.payload.command,!0),l(E,R.payload.summary,!0),l(A,!0),O&&clearTimeout(O);const ee=(R.payload.duration_secs||o().ui.command_overlay_duration_secs||3)*1e3;O=setTimeout(()=>{l(A,!1)},ee)}).then(R=>{ve=R}),ks("command-withdrawn",()=>{O&&clearTimeout(O),l(A,!1)}).then(R=>{ce=R}),()=>{document.documentElement.classList.remove("overlay-window"),document.body.classList.remove("overlay-window"),ge&&ge(),ve&&ve(),ce&&ce(),me&&me(),O&&clearTimeout(O),De!==null&&cancelAnimationFrame(De)}});function xe(le){return le.querySelectorAll("script").forEach(ee=>{const Oe=document.createElement("script");Array.from(ee.attributes).forEach(je=>{Oe.setAttribute(je.name,je.value)}),Oe.appendChild(document.createTextNode(ee.innerHTML)),ee.parentNode&&ee.parentNode.replaceChild(Oe,ee)}),{destroy(){window.dispatchEvent(new CustomEvent("voxctrl-cleanup"))}}}var Ie=Z_(),re=n(Ie);{var W=le=>{var R=J_(),ee=n(R);{var Oe=te=>{var j=U_(),F=n(j);{var ae=U=>{A_(U,{get recording(){return r()},get active(){return e(ke)}})},C=U=>{P_(U,{get recording(){return r()},get active(){return e(ke)}})},X=U=>{I_(U,{get recording(){return r()},get speaking(){return d()},get active(){return e(ke)}})},de=U=>{L_(U,{get recording(){return r()},get active(){return e(ke)}})},oe=U=>{V_(U,{get recording(){return r()},get active(){return e(ke)}})},Ae=U=>{B_(U,{get recording(){return r()},get active(){return e(ke)}})},$e=U=>{j_(U,{get recording(){return r()},get active(){return e(ke)}})},tt=U=>{var Q=W_(),ne=wt(Q);Rl(ne,()=>``);var Re=i(ne,2);let at;Rl(Re,()=>e(he),!0),en(Re,lt=>xe==null?void 0:xe(lt)),w(()=>at=Se(Re,1,"custom-overlay-content svelte-rmqsd6",null,at,{active:e(ke)})),c(U,Q)},st=U=>{S_(U,{get recording(){return r()},get speaking(){return d()},get active(){return e(ke)}})};k(F,U=>{o().ui.overlay_style==="waveform"?U(ae):o().ui.overlay_style==="pulse"?U(C,1):o().ui.overlay_style==="blue_wave"?U(X,2):o().ui.overlay_style==="mono_bars"?U(de,3):o().ui.overlay_style==="spectrum"?U(oe,4):o().ui.overlay_style==="terminal"?U(Ae,5):o().ui.overlay_style==="vinyl"?U($e,6):e(m)?U(tt,7):o().ui.overlay_style!=="none"&&U(st,8)})}c(te,j)};k(ee,te=>{e(be)&&te(Oe)})}var je=i(ee,2);{var Ke=te=>{var j=H_();let F;var ae=i(n(j),2),C=n(ae),X=n(C),de=i(C,2),oe=n(de);w(Ae=>{var $e;F=Se(j,1,"system-response-box command svelte-rmqsd6",null,F,{on:e(ke)}),y(X,Ae),y(oe,`▸ ${($e=e(E))!=null?$e:""}`)},[()=>e(H).toUpperCase()]),c(te,j)};k(je,te=>{e(A)&&o().ui.show_command_overlay&&!e(I)&&te(Ke)})}var _e=i(je,2);{var se=te=>{var j=G_();let F;var ae=n(j);_t(ae,20,()=>[0,1,2,3,4],ht,(oe,Ae)=>{var $e=K_();w(()=>ds($e,`animation-delay: ${Ae*.13}s`)),c(oe,$e)});var C=i(ae,2),X=i(n(C),2),de=n(X);w(()=>{var oe;F=Se(j,1,"system-response-box speaking svelte-rmqsd6",null,F,{on:e(ke)}),y(de,`▸ ${(oe=e(M))!=null?oe:""}`)}),c(te,j)};k(_e,te=>{e(I)&&te(se)})}var ye=i(_e,2);{var et=te=>{var j=Y_();let F;var ae=i(n(j),2),C=i(n(ae),2),X=n(C);w(()=>{var de;F=Se(j,1,"system-response-box mcp svelte-rmqsd6",null,F,{on:e(ke)}),y(X,`▸ ${(de=e(M))!=null?de:""}`)}),c(te,j)};k(ye,te=>{u()&&o().mcp.visual_feedback&&te(et)})}c(le,R)};k(re,le=>{e(V)&&e(b)&&le(W)})}w(()=>{St(Ie,"data-recording",r()),St(Ie,"data-speaking",d()),St(Ie,"data-processing",t().processing)}),c(a,Ie),Rt(),f()}class yl{constructor(...s){this.type="Logical",s.length===1?"Logical"in s[0]?(this.width=s[0].Logical.width,this.height=s[0].Logical.height):(this.width=s[0].width,this.height=s[0].height):(this.width=s[0],this.height=s[1])}toPhysical(s){return new an(this.width*s,this.height*s)}[ga](){return{width:this.width,height:this.height}}toJSON(){return this[ga]()}}class an{constructor(...s){this.type="Physical",s.length===1?"Physical"in s[0]?(this.width=s[0].Physical.width,this.height=s[0].Physical.height):(this.width=s[0].width,this.height=s[0].height):(this.width=s[0],this.height=s[1])}toLogical(s){return new yl(this.width/s,this.height/s)}[ga](){return{width:this.width,height:this.height}}toJSON(){return this[ga]()}}class In{constructor(s){this.size=s}toLogical(s){return this.size instanceof yl?this.size:this.size.toLogical(s)}toPhysical(s){return this.size instanceof an?this.size:this.size.toPhysical(s)}[ga](){return{[`${this.size.type}`]:{width:this.size.width,height:this.size.height}}}toJSON(){return this[ga]()}}class wl{constructor(...s){this.type="Logical",s.length===1?"Logical"in s[0]?(this.x=s[0].Logical.x,this.y=s[0].Logical.y):(this.x=s[0].x,this.y=s[0].y):(this.x=s[0],this.y=s[1])}toPhysical(s){return new ua(this.x*s,this.y*s)}[ga](){return{x:this.x,y:this.y}}toJSON(){return this[ga]()}}class ua{constructor(...s){this.type="Physical",s.length===1?"Physical"in s[0]?(this.x=s[0].Physical.x,this.y=s[0].Physical.y):(this.x=s[0].x,this.y=s[0].y):(this.x=s[0],this.y=s[1])}toLogical(s){return new wl(this.x/s,this.y/s)}[ga](){return{x:this.x,y:this.y}}toJSON(){return this[ga]()}}class Wi{constructor(s){this.position=s}toLogical(s){return this.position instanceof wl?this.position:this.position.toLogical(s)}toPhysical(s){return this.position instanceof ua?this.position:this.position.toPhysical(s)}[ga](){return{[`${this.position.type}`]:{x:this.position.x,y:this.position.y}}}toJSON(){return this[ga]()}}var cr;(function(a){a[a.Critical=1]="Critical",a[a.Informational=2]="Informational"})(cr||(cr={}));class Qo{constructor(s){this._preventDefault=!1,this.event=s.event,this.id=s.id}preventDefault(){this._preventDefault=!0}isPreventDefault(){return this._preventDefault}}var el;(function(a){a.None="none",a.Normal="normal",a.Indeterminate="indeterminate",a.Paused="paused",a.Error="error"})(el||(el={}));function kl(){return new xl(window.__TAURI_INTERNALS__.metadata.currentWindow.label,{skip:!0})}async function tr(){return S("plugin:window|get_all_windows").then(a=>a.map(s=>new xl(s,{skip:!0})))}const Rr=["tauri://created","tauri://error"];class xl{constructor(s,t={}){var r;this.label=s,this.listeners=Object.create(null),t!=null&&t.skip||S("plugin:window|create",{options:{...t,parent:typeof t.parent=="string"?t.parent:(r=t.parent)===null||r===void 0?void 0:r.label,label:s}}).then(async()=>this.emit("tauri://created")).catch(async o=>this.emit("tauri://error",o))}static async getByLabel(s){var t;return(t=(await tr()).find(r=>r.label===s))!==null&&t!==void 0?t:null}static getCurrent(){return kl()}static async getAll(){return tr()}static async getFocusedWindow(){for(const s of await tr())if(await s.isFocused())return s;return null}async listen(s,t){return this._handleTauriEvent(s,t)?()=>{const r=this.listeners[s];r.splice(r.indexOf(t),1)}:ks(s,t,{target:{kind:"Window",label:this.label}})}async once(s,t){return this._handleTauriEvent(s,t)?()=>{const r=this.listeners[s];r.splice(r.indexOf(t),1)}:Xd(s,t,{target:{kind:"Window",label:this.label}})}async emit(s,t){if(Rr.includes(s)){for(const r of this.listeners[s]||[])r({event:s,id:-1,payload:t});return}return Yo(s,t)}async emitTo(s,t,r){if(Rr.includes(t)){for(const o of this.listeners[t]||[])o({event:t,id:-1,payload:r});return}return Qd(s,t,r)}_handleTauriEvent(s,t){return Rr.includes(s)?(s in this.listeners?this.listeners[s].push(t):this.listeners[s]=[t],!0):!1}async scaleFactor(){return S("plugin:window|scale_factor",{label:this.label})}async innerPosition(){return S("plugin:window|inner_position",{label:this.label}).then(s=>new ua(s))}async outerPosition(){return S("plugin:window|outer_position",{label:this.label}).then(s=>new ua(s))}async innerSize(){return S("plugin:window|inner_size",{label:this.label}).then(s=>new an(s))}async outerSize(){return S("plugin:window|outer_size",{label:this.label}).then(s=>new an(s))}async isFullscreen(){return S("plugin:window|is_fullscreen",{label:this.label})}async isMinimized(){return S("plugin:window|is_minimized",{label:this.label})}async isMaximized(){return S("plugin:window|is_maximized",{label:this.label})}async isFocused(){return S("plugin:window|is_focused",{label:this.label})}async isDecorated(){return S("plugin:window|is_decorated",{label:this.label})}async isResizable(){return S("plugin:window|is_resizable",{label:this.label})}async isMaximizable(){return S("plugin:window|is_maximizable",{label:this.label})}async isMinimizable(){return S("plugin:window|is_minimizable",{label:this.label})}async isClosable(){return S("plugin:window|is_closable",{label:this.label})}async isVisible(){return S("plugin:window|is_visible",{label:this.label})}async title(){return S("plugin:window|title",{label:this.label})}async theme(){return S("plugin:window|theme",{label:this.label})}async isAlwaysOnTop(){return S("plugin:window|is_always_on_top",{label:this.label})}async activityName(){return S("plugin:window|activity_name",{label:this.label})}async sceneIdentifier(){return S("plugin:window|scene_identifier",{label:this.label})}async center(){return S("plugin:window|center",{label:this.label})}async requestUserAttention(s){let t=null;return s&&(s===cr.Critical?t={type:"Critical"}:t={type:"Informational"}),S("plugin:window|request_user_attention",{label:this.label,value:t})}async setResizable(s){return S("plugin:window|set_resizable",{label:this.label,value:s})}async setEnabled(s){return S("plugin:window|set_enabled",{label:this.label,value:s})}async isEnabled(){return S("plugin:window|is_enabled",{label:this.label})}async setMaximizable(s){return S("plugin:window|set_maximizable",{label:this.label,value:s})}async setMinimizable(s){return S("plugin:window|set_minimizable",{label:this.label,value:s})}async setClosable(s){return S("plugin:window|set_closable",{label:this.label,value:s})}async setTitle(s){return S("plugin:window|set_title",{label:this.label,value:s})}async maximize(){return S("plugin:window|maximize",{label:this.label})}async unmaximize(){return S("plugin:window|unmaximize",{label:this.label})}async toggleMaximize(){return S("plugin:window|toggle_maximize",{label:this.label})}async minimize(){return S("plugin:window|minimize",{label:this.label})}async unminimize(){return S("plugin:window|unminimize",{label:this.label})}async show(){return S("plugin:window|show",{label:this.label})}async hide(){return S("plugin:window|hide",{label:this.label})}async close(){return S("plugin:window|close",{label:this.label})}async destroy(){return S("plugin:window|destroy",{label:this.label})}async setDecorations(s){return S("plugin:window|set_decorations",{label:this.label,value:s})}async setShadow(s){return S("plugin:window|set_shadow",{label:this.label,value:s})}async setEffects(s){return S("plugin:window|set_effects",{label:this.label,value:s})}async clearEffects(){return S("plugin:window|set_effects",{label:this.label,value:null})}async setAlwaysOnTop(s){return S("plugin:window|set_always_on_top",{label:this.label,value:s})}async setAlwaysOnBottom(s){return S("plugin:window|set_always_on_bottom",{label:this.label,value:s})}async setContentProtected(s){return S("plugin:window|set_content_protected",{label:this.label,value:s})}async setSize(s){return S("plugin:window|set_size",{label:this.label,value:s instanceof In?s:new In(s)})}async setMinSize(s){return S("plugin:window|set_min_size",{label:this.label,value:s instanceof In?s:s?new In(s):null})}async setMaxSize(s){return S("plugin:window|set_max_size",{label:this.label,value:s instanceof In?s:s?new In(s):null})}async setSizeConstraints(s){function t(r){return r?{Logical:r}:null}return S("plugin:window|set_size_constraints",{label:this.label,value:{minWidth:t(s==null?void 0:s.minWidth),minHeight:t(s==null?void 0:s.minHeight),maxWidth:t(s==null?void 0:s.maxWidth),maxHeight:t(s==null?void 0:s.maxHeight)}})}async setPosition(s){return S("plugin:window|set_position",{label:this.label,value:s instanceof Wi?s:new Wi(s)})}async setFullscreen(s){return S("plugin:window|set_fullscreen",{label:this.label,value:s})}async setSimpleFullscreen(s){return S("plugin:window|set_simple_fullscreen",{label:this.label,value:s})}async setFocus(){return S("plugin:window|set_focus",{label:this.label})}async setFocusable(s){return S("plugin:window|set_focusable",{label:this.label,value:s})}async setIcon(s){return S("plugin:window|set_icon",{label:this.label,value:or(s)})}async setSkipTaskbar(s){return S("plugin:window|set_skip_taskbar",{label:this.label,value:s})}async setCursorGrab(s){return S("plugin:window|set_cursor_grab",{label:this.label,value:s})}async setCursorVisible(s){return S("plugin:window|set_cursor_visible",{label:this.label,value:s})}async setCursorIcon(s){return S("plugin:window|set_cursor_icon",{label:this.label,value:s})}async setBackgroundColor(s){return S("plugin:window|set_background_color",{color:s})}async setCursorPosition(s){return S("plugin:window|set_cursor_position",{label:this.label,value:s instanceof Wi?s:new Wi(s)})}async setIgnoreCursorEvents(s){return S("plugin:window|set_ignore_cursor_events",{label:this.label,value:s})}async startDragging(){return S("plugin:window|start_dragging",{label:this.label})}async startResizeDragging(s){return S("plugin:window|start_resize_dragging",{label:this.label,value:s})}async setBadgeCount(s){return S("plugin:window|set_badge_count",{label:this.label,value:s})}async setBadgeLabel(s){return S("plugin:window|set_badge_label",{label:this.label,value:s})}async setOverlayIcon(s){return S("plugin:window|set_overlay_icon",{label:this.label,value:s?or(s):void 0})}async setProgressBar(s){return S("plugin:window|set_progress_bar",{label:this.label,value:s})}async setVisibleOnAllWorkspaces(s){return S("plugin:window|set_visible_on_all_workspaces",{label:this.label,value:s})}async setTitleBarStyle(s){return S("plugin:window|set_title_bar_style",{label:this.label,value:s})}async setTheme(s){return S("plugin:window|set_theme",{label:this.label,value:s})}async onResized(s){return this.listen(ta.WINDOW_RESIZED,t=>{t.payload=new an(t.payload),s(t)})}async onMoved(s){return this.listen(ta.WINDOW_MOVED,t=>{t.payload=new ua(t.payload),s(t)})}async onCloseRequested(s){return this.listen(ta.WINDOW_CLOSE_REQUESTED,async t=>{const r=new Qo(t);await s(r),r.isPreventDefault()||await this.destroy()})}async onDragDropEvent(s){const t=await this.listen(ta.DRAG_ENTER,u=>{s({...u,payload:{type:"enter",paths:u.payload.paths,position:new ua(u.payload.position)}})}),r=await this.listen(ta.DRAG_OVER,u=>{s({...u,payload:{type:"over",position:new ua(u.payload.position)}})}),o=await this.listen(ta.DRAG_DROP,u=>{s({...u,payload:{type:"drop",paths:u.payload.paths,position:new ua(u.payload.position)}})}),d=await this.listen(ta.DRAG_LEAVE,u=>{s({...u,payload:{type:"leave"}})});return()=>{t(),o(),r(),d()}}async onFocusChanged(s){const t=await this.listen(ta.WINDOW_FOCUS,o=>{s({...o,payload:!0})}),r=await this.listen(ta.WINDOW_BLUR,o=>{s({...o,payload:!1})});return()=>{t(),r()}}async onScaleChanged(s){return this.listen(ta.WINDOW_SCALE_FACTOR_CHANGED,s)}async onThemeChanged(s){return this.listen(ta.WINDOW_THEME_CHANGED,s)}}var ql;(function(a){a.Disabled="disabled",a.Throttle="throttle",a.Suspend="suspend"})(ql||(ql={}));var jl;(function(a){a.Default="default",a.FluentOverlay="fluentOverlay"})(jl||(jl={}));var tl;(function(a){a.AppearanceBased="appearanceBased",a.Light="light",a.Dark="dark",a.MediumLight="mediumLight",a.UltraDark="ultraDark",a.Titlebar="titlebar",a.Selection="selection",a.Menu="menu",a.Popover="popover",a.Sidebar="sidebar",a.HeaderView="headerView",a.Sheet="sheet",a.WindowBackground="windowBackground",a.HudWindow="hudWindow",a.FullScreenUI="fullScreenUI",a.Tooltip="tooltip",a.ContentBackground="contentBackground",a.UnderWindowBackground="underWindowBackground",a.UnderPageBackground="underPageBackground",a.Mica="mica",a.Blur="blur",a.Acrylic="acrylic",a.Tabbed="tabbed",a.TabbedDark="tabbedDark",a.TabbedLight="tabbedLight"})(tl||(tl={}));var sl;(function(a){a.FollowsWindowActiveState="followsWindowActiveState",a.Active="active",a.Inactive="inactive"})(sl||(sl={}));function kr(a){return a===null?null:{name:a.name,scaleFactor:a.scaleFactor,position:new ua(a.position),size:new an(a.size),workArea:{position:new ua(a.workArea.position),size:new an(a.workArea.size)}}}async function Q_(){return S("plugin:window|current_monitor").then(kr)}async function eh(){return S("plugin:window|primary_monitor").then(kr)}async function th(a,s){return S("plugin:window|monitor_from_point",{x:a,y:s}).then(kr)}async function sh(){return S("plugin:window|available_monitors").then(a=>a.map(kr))}async function ah(){return S("plugin:window|cursor_position").then(a=>new ua(a))}const nh=Object.freeze(Object.defineProperty({__proto__:null,CloseRequestedEvent:Qo,get Effect(){return tl},get EffectState(){return sl},LogicalPosition:wl,LogicalSize:yl,PhysicalPosition:ua,PhysicalSize:an,get ProgressBarStatus(){return el},get UserAttentionType(){return cr},Window:xl,availableMonitors:sh,currentMonitor:Q_,cursorPosition:ah,getAllWindows:tr,getCurrentWindow:kl,monitorFromPoint:th,primaryMonitor:eh},Symbol.toStringTag,{value:"Module"}));var ih=p('
Installing the helper packages…

You may be prompted for your administrator password.

'),rh=p('
Checking VoxCtrl setup…
'),lh=p('

'),oh=p('

',1),ch=p(`

🔒 VoxCtrl asked your desktop to register its shortcuts and is told nothing + else. It does not read your keyboard, cannot see what you type in other + applications, and needed no special permissions to set up.

`),dh=p(' '),vh=p('not accepted by your desktop'),uh=p("
  • "),ph=p('
      '),fh=p(`

      Your desktop does not offer the global-shortcuts portal, so VoxCtrl is + reading key events from the X server instead. This needed no permissions + and no setup, and every gesture style works — but in this mode every + keystroke passes through VoxCtrl. Nothing is stored or sent anywhere; a + desktop with portal support (KDE Plasma, GNOME 48+, Hyprland) avoids it + entirely.

      `),_h=p(`

      Your desktop is holding VoxCtrl's shortcuts itself, which is why VoxCtrl + cannot read your keyboard here. It also means the desktop only reports the + key going down, never coming back up: hold and double-tap styles cannot + work on this route, and the Hotkeys tab offers only tap-to-start, + tap-to-stop.

      `),hh=p(`

      Your desktop does not offer the global-shortcuts portal, so VoxCtrl is + falling back to reading input devices — access this machine already had, + which VoxCtrl neither requested nor configured. Shortcuts work, but in this + mode every keystroke passes through VoxCtrl. Nothing is stored or sent + anywhere; if you would rather it did not happen at all, a desktop with + portal support (KDE Plasma, GNOME 48+, Hyprland) avoids it entirely.

      `),gh=p('

      '),mh=p(`

      Global shortcuts require approval from your system. If you closed or cancelled + the desktop keybind prompt without approving, click below to show the prompt again.

      `,1),bh=p('

      '),yh=p('

      Global shortcuts require approval or registration from your system. VoxCtrl will not grant itself keyboard access to work around this.

      ',1),wh=p(' '),kh=p(' '),xh=p(` is missing, so transcriptions cannot be + typed into the focused window.`,1),Th=p(''),Sh=p(''),Eh=p('
       
      '),Ch=p('
      ',1),Ah=p(' is downloaded and ready.',1),Mh=p('Downloading in the background — no action needed.',1),Ph=p(' is not downloaded yet, so dictation produces no text.',1),Dh=p('
      '),zh=p('
      ❌
      '),Ih=p(''),Oh=p('
      ');function Rh(a,s){Ot(s,!0);let t=T(null),r=T(!1),o=T(!1),d=T(null),u=T(!1),v=T(!1),f=T(!1),_=T(null),b=T(!1),m=T(null),g;async function M(){try{l(t,await S("get_setup_status"),!0)}catch(B){console.error("Failed to read setup status:",B)}}Xt(()=>{M(),g=setInterval(M,2e3)}),br(()=>{g&&clearInterval(g)});async function A(){try{await kl().close()}catch(B){console.error("Failed to close window natively:",B)}}async function H(){var B;l(r,!0),l(d,null);try{await S("install_system_integration"),await M()}catch(L){l(d,(B=L==null?void 0:L.toString())!=null?B:"Install failed",!0),l(u,!0)}finally{l(r,!1)}}async function E(){var B;l(o,!0),l(d,null);try{await S("download_configured_model"),await M()}catch(L){l(d,(B=L==null?void 0:L.toString())!=null?B:"Download failed",!0)}finally{l(o,!1)}}async function O(){try{await S("open_settings_tab",{tab:"engine"})}catch(B){console.error("Failed to open the Engine settings tab:",B)}}async function ve(){var B;l(f,!0),l(_,null);try{await S("open_shortcut_settings")}catch(L){l(_,(B=L==null?void 0:L.toString())!=null?B:"Could not open shortcut settings.",!0)}finally{l(f,!1)}}async function ce(){var B;l(b,!0),l(m,null);try{await S("approve_shortcuts"),await M()}catch(L){l(m,(B=L==null?void 0:L.toString())!=null?B:"Failed to configure shortcuts for your desktop.",!0),await M()}finally{l(b,!1)}}async function me(){if(e(t))try{await navigator.clipboard.writeText(e(t).manual_package_commands),l(v,!0),setTimeout(()=>l(v,!1),2e3)}catch(B){console.error("Clipboard write failed:",B)}}const ie=ue(()=>e(t)?e(t).hotkeys.backend==="starting"?"busy":e(t).hotkeys_active?"ok":"todo":"busy"),I=ue(()=>e(t)?e(t).missing_injection_tool?"todo":"ok":"busy"),V=ue(()=>e(t)?e(t).model_ready?"ok":e(t).model_auto_downloads?"busy":"todo":"busy"),Y=B=>B==="ok"?"✅":B==="busy"?"⏳":"⚠️";var be=Oh(),ke=n(be);{var D=B=>{var L=ih();c(B,L)},P=B=>{var L=rh();c(B,L)},he=B=>{var L=Ih(),ge=n(L),De=n(ge),fe=n(De),G=i(De,2),J=n(G),xe=n(J),Ie=i(J,2),re=n(Ie),W=i(ge,2),le=n(W);let R;var ee=n(le),Oe=n(ee),je=i(ee,2),Ke=i(n(je),2),_e=n(Ke),se=i(Ke,2);{var ye=ze=>{var Je=oh(),q=wt(Je),h=n(q),x=i(q,2),we=n(x),Be=n(we),He=i(x,2);{var Te=Ce=>{var Ue=lh(),Xe=n(Ue);w(()=>y(Xe,e(_))),c(Ce,Ue)};k(He,Ce=>{e(_)&&Ce(Te)})}w(()=>{var Ce;y(h,`🔧 One more step on KDE: ${(Ce=e(t).hotkeys.manual_enable_hint)!=null?Ce:""}`),we.disabled=e(f),y(Be,e(f)?"Opening…":"Open Shortcut Settings")}),z("click",we,ve),c(ze,Je)};k(se,ze=>{e(t).hotkeys.needs_manual_enable&&ze(ye)})}var et=i(se,2);{var te=ze=>{var Je=ch();c(ze,Je)};k(et,ze=>{(e(t).hotkeys.backend==="portal"||e(t).hotkeys.backend==="mint_dbus")&&ze(te)})}var j=i(et,2);{var F=ze=>{var Je=ph();_t(Je,21,()=>e(t).hotkeys.shortcuts,ht,(q,h)=>{var x=uh();let we;var Be=n(x);{var He=Ce=>{var Ue=dh(),Xe=n(Ue);w(()=>y(Xe,e(h).trigger_description||e(h).requested||"chosen in your desktop settings")),c(Ce,Ue)},Te=Ce=>{var Ue=vh();c(Ce,Ue)};k(Be,Ce=>{e(h).bound?Ce(He):Ce(Te,-1)})}w(()=>we=Se(x,1,"svelte-45v8pc",null,we,{unbound:!e(h).bound})),c(q,x)}),c(ze,Je)};k(j,ze=>{e(t).hotkeys_active&&e(t).hotkeys.shortcuts.length>0&&ze(F)})}var ae=i(j,2);{var C=ze=>{var Je=fh();c(ze,Je)},X=ze=>{var Je=_h();c(ze,Je)},de=ze=>{var Je=hh();c(ze,Je)},oe=ze=>{var Je=mh(),q=i(wt(Je),2),h=n(q),x=n(h),we=i(q,2);{var Be=He=>{var Te=gh(),Ce=n(Te);w(()=>y(Ce,e(m))),c(He,Te)};k(we,He=>{e(m)&&He(Be)})}w(()=>{h.disabled=e(b),y(x,e(b)?"Configuring…":"Approve Keybinds")}),z("click",h,ce),c(ze,Je)},Ae=ze=>{var Je=yh(),q=i(wt(Je),2),h=n(q),x=n(h),we=i(q,2);{var Be=He=>{var Te=bh(),Ce=n(Te);w(()=>y(Ce,e(m))),c(He,Te)};k(we,He=>{e(m)&&He(Be)})}w(()=>{h.disabled=e(b),y(x,e(b)?"Configuring…":"Approve Shortcuts")}),z("click",h,ce),c(ze,Je)};k(ae,ze=>{e(t).hotkeys.backend==="x11"?ze(C):e(t).hotkeys.backend==="mint_dbus"?ze(X,1):e(t).hotkeys.backend==="evdev"?ze(de,2):e(t).hotkeys.portal_refused?ze(oe,3):e(t).hotkeys.backend!=="starting"&&ze(Ae,4)})}var $e=i(ae,2);{var tt=ze=>{var Je=wh(),q=n(Je);w(()=>{var h;return y(q,`Portal reported: ${(h=e(t).hotkeys.portal_error)!=null?h:""}`)}),c(ze,Je)};k($e,ze=>{e(t).hotkeys.portal_error&&e(t).hotkeys.backend!=="portal"&&e(t).hotkeys.backend!=="evdev"&&ze(tt)})}var st=i($e,2);{var U=ze=>{var Je=kh(),q=n(Je);w(()=>{var h;return y(q,`X11 shortcuts: ${(h=e(t).hotkeys.x11_error)!=null?h:""}`)}),c(ze,Je)};k(st,ze=>{e(t).hotkeys.x11_error&&e(t).hotkeys.backend!=="x11"&&e(t).hotkeys.backend!=="portal"&&ze(U)})}var Q=i(le,2);let ne;var Re=n(Q),at=n(Re),lt=i(Re,2),Ee=i(n(lt),2),Ge=n(Ee);{var nt=ze=>{var Je=xh(),q=wt(Je),h=n(q);w(()=>y(h,e(t).missing_injection_tool)),c(ze,Je)},Ne=ze=>{var Je=qe("Ready — transcriptions can be typed straight into the focused window.");c(ze,Je)};k(Ge,ze=>{e(t).missing_injection_tool?ze(nt):ze(Ne,-1)})}var it=i(Ee,2);{var dt=ze=>{var Je=Ch(),q=wt(Je),h=n(q);{var x=Ce=>{var Ue=Th();z("click",Ue,H),c(Ce,Ue)};k(h,Ce=>{e(t).pkexec_available&&e(t).manual_package_commands&&Ce(x)})}var we=i(h,2);{var Be=Ce=>{var Ue=Sh(),Xe=n(Ue);w(()=>y(Xe,e(u)?"Hide manual commands":"Install it manually")),z("click",Ue,()=>l(u,!e(u))),c(Ce,Ue)};k(we,Ce=>{e(t).manual_package_commands&&Ce(Be)})}var He=i(q,2);{var Te=Ce=>{var Ue=Eh(),Xe=n(Ue),Vt=n(Xe),Qt=i(Xe,2),ts=n(Qt);w(()=>{y(Vt,e(t).manual_package_commands),y(ts,e(v)?"Copied":"Copy commands")}),z("click",Qt,me),c(Ce,Ue)};k(He,Ce=>{e(u)&&Ce(Te)})}c(ze,Je)};k(it,ze=>{e(t).missing_injection_tool&&ze(dt)})}var ot=i(Q,2);let Me;var Ye=n(ot),rt=n(Ye),Z=i(Ye,2),K=i(n(Z),2),pe=n(K);{var We=ze=>{var Je=Ah(),q=wt(Je),h=n(q);w(()=>y(h,e(t).model_size)),c(ze,Je)},Ve=ze=>{var Je=Mh(),q=i(wt(Je)),h=n(q);w(()=>y(h,e(t).model_size)),c(ze,Je)},gt=ze=>{var Je=Ph(),q=wt(Je),h=n(q);w(()=>y(h,e(t).model_size)),c(ze,Je)};k(pe,ze=>{e(t).model_ready?ze(We):e(t).model_auto_downloads?ze(Ve,1):ze(gt,-1)})}var as=i(K,2);{var Ht=ze=>{var Je=Dh(),q=n(Je),h=n(q),x=i(q,2);w(()=>{q.disabled=e(o),y(h,e(o)?"Downloading…":`Download ${e(t).model_size}`)}),z("click",q,E),z("click",x,O),c(ze,Je)};k(as,ze=>{!e(t).model_ready&&!e(t).model_auto_downloads&&ze(Ht)})}var Kt=i(W,2);{var ft=ze=>{var Je=zh(),q=i(n(Je),2),h=n(q);w(()=>y(h,e(d))),c(ze,Je)};k(Kt,ze=>{e(d)&&ze(ft)})}var Ft=i(Kt,2),At=n(Ft),Et=n(At);w((ze,Je,q)=>{y(fe,e(t).is_complete?"✅":"🛠️"),y(xe,e(t).is_complete?"VoxCtrl is ready":"Finish setting up VoxCtrl"),y(re,e(t).is_complete?"Press your shortcut anywhere to dictate.":"Dictation is not ready yet — the steps below say why."),R=Se(le,1,"step svelte-45v8pc",null,R,{done:e(ie)==="ok"}),y(Oe,ze),y(_e,e(t).hotkeys.detail),ne=Se(Q,1,"step svelte-45v8pc",null,ne,{done:e(I)==="ok"}),y(at,Je),Me=Se(ot,1,"step svelte-45v8pc",null,Me,{done:e(V)==="ok"}),y(rt,q),y(Et,e(t).is_complete?"Close":"Continue anyway")},[()=>Y(e(ie)),()=>Y(e(I)),()=>Y(e(V))]),z("click",At,A),c(B,L)};k(ke,B=>{e(r)?B(D):e(t)?B(he,-1):B(P,1)})}c(a,be),Rt()}us(["click"]);const Lh=[{id:"tiny",mb:75,speed:.96,accuracy:.58},{id:"base",mb:142,speed:.88,accuracy:.68},{id:"small",mb:466,speed:.68,accuracy:.8},{id:"medium",mb:1500,speed:.42,accuracy:.9},{id:"large-v3",mb:3100,speed:.22,accuracy:.97}],Nh=[{id:"tiny",mb:100,speed:.98,accuracy:.64},{id:"base",mb:250,speed:.92,accuracy:.77}],Fh=[{id:"tdt-0.6b-v3",mb:665,speed:.95,accuracy:.94}],Vh=[{id:"remote",mb:0,speed:.95,accuracy:.95}],Ui=[{id:"whisper-cpp",name:"whisper.cpp",glyph:"∇",tagline:"Reference-grade accuracy in quiet spaces. Five model sizes from 75 MB to 3.1 GB. CUDA, Vulkan or CPU.",models:Lh,gpu:!0,noiseRetention:.64},{id:"moonshine",name:"Moonshine",glyph:"↯",tagline:"Streaming ONNX model tuned for real rooms — fans, keyboards, traffic. Fast on any CPU, tiny download.",models:Nh,gpu:!1,noiseRetention:.93},{id:"parakeet",name:"Parakeet TDT",glyph:"⚡",tagline:"NVIDIA FastConformer TDT 0.6B. Ultra-fast non-autoregressive transcription, SOTA accuracy, no repetition loops.",models:Fh,gpu:!0,noiseRetention:.88},{id:"remote-openai",name:"Remote Speech Engine",glyph:"🌐",tagline:"Connect to an OpenAI-compatible speech-to-text server on your network or cloud (Faster-Whisper, vLLM, etc.).",models:Vh,gpu:!1,noiseRetention:.92}],$n=[{id:"toggle",name:"Tap to talk",verb:"tap",desc:"Press once to start, press again to stop. Hands stay free while you speak.",key:[[1,1],[8,0],[1,1],[3,0]],mic:[[1,0],[9,1],[4,0]]},{id:"double_tap",name:"Double-tap to talk",verb:"double-tap",desc:"Two quick presses start dictation; one press stops. Hard to trigger by accident.",key:[[1,1],[.7,0],[1,1],[7,0],[1,1],[3,0]],mic:[[2.7,0],[7.3,1],[4,0]]},{id:"hold",name:"Hold to talk",verb:"hold",desc:"Hold the keys down while speaking, release to stop. Like a walkie-talkie.",key:[[1,0],[9,1],[4,0]],mic:[[1,0],[9,1],[4,0]]},{id:"double_tap_hold",name:"Double-tap & hold",verb:"double-tap and hold",desc:"Tap once, then press and hold. Release to stop. Never collides with a plain shortcut.",key:[[1,1],[.7,0],[8.3,1],[4,0]],mic:[[2.7,0],[6.3,1],[4,0]]}],Rn=[{id:"blue_wave",name:"Ocean Wave",meta:"default · tide-pool waves",glyph:"⊟"},{id:"voice_card",name:"Voice Card",meta:"20×6 LED VU matrix",glyph:"⊟"},{id:"waveform",name:"Waveform",meta:"scrolling oscilloscope",glyph:"⌇"},{id:"pulse",name:"Pulse Ring",meta:"sonar sweep · target lock",glyph:"◌"},{id:"mono_bars",name:"Mono Bars",meta:"black & white 5-bar meter",glyph:"▥"},{id:"spectrum",name:"Neon Spectrum",meta:"16-band equalizer",glyph:"▦"},{id:"terminal",name:"Retro Terminal",meta:"DOS-blue ASCII meter",glyph:"▸"},{id:"vinyl",name:"Analog VU",meta:"vintage needle meter",glyph:"◔"}],$h=[{id:"top",label:"Top",glyph:"⤒"},{id:"center",label:"Center",glyph:"⊡"},{id:"bottom",label:"Bottom",glyph:"⤓"}],ka=[{id:"vox_cpm_2",name:"VoxCPM2",kind:"neural · 2B autoregressive",quality:.98,speed:.25,mb:2950,note:"2B autoregressive diffusion. SOTA voice realism & cloning. Runs via audio.cpp, best on a Vulkan GPU."},{id:"breeze_tts_2",name:"Breeze-TTS-2",kind:"neural · expressive",quality:.96,speed:.32,mb:5080,note:"Most natural prosody. Runs via audio.cpp, best on a Vulkan GPU or fast CPU.",nonCommercial:!0,licenceUrl:"huggingface.co/BreezeBlue/Breeze-TTS-2"},{id:"pocket_tts",name:"Pocket TTS",kind:"neural · voice cloning",quality:.86,speed:.55,mb:130,note:"Cloned voices, downloaded in-app. Runs via audio.cpp with optional Vulkan acceleration."},{id:"piper",name:"Piper TTS",kind:"onnx · ~11 voices",quality:.72,speed:.8,mb:60,note:"The sweet spot for most machines. Per-voice ~60 MB."},{id:"inflect_micro",name:"Inflect Micro",kind:"compact neural",quality:.55,speed:.92,mb:38,note:"Tiny footprint, still human-ish. Good for laptops."},{id:"espeak",name:"eSpeak-NG",kind:"formant synth",quality:.3,speed:.99,mb:0,note:"Instant, robotic, runs anywhere. Zero download."}],xa=["Welcome","Engine","Hotkey","Overlay","Test","Voice","Done"];function Bn(a){return a<=0?"none":a>=1e3?`${(a/1e3).toFixed(1)} GB`:`${Math.round(a)} MB`}function Bh(a,s=ka){const t=Math.max(0,...s.map(r=>r.mb));return t<=0||a<=0?0:Math.min(100,a/t*100)}function sr(a){return`${Math.round(a*100)}%`}function qh(a){return a>.85?"instant":a>.6?"< 1 s":a>.35?"1–3 s":"3–8 s"}function jh(a){return a>.9?"instant":a>.7?"< 0.5 s":a>.5?"~1 s":"2–4 s"}function Hi(a,s){return Array.from({length:a},(t,r)=>{const o=(r+1)/a;return{h:Math.max(8,Math.round(100*s*(.55+.45*Math.sin(r*1.7+s*5)))),o:o<=s?1:.18}})}function ec(a){return Array.from({length:a},(s,t)=>({d:(.6+t*7%5*.12).toFixed(2),dl:(t*.07).toFixed(2)}))}function Wh(a,s){const t=s.toUpperCase();return a==="Control"?"KEY_LEFTCTRL":a==="Alt"?"KEY_LEFTALT":a==="Shift"?"KEY_LEFTSHIFT":a==="Meta"||a==="OS"||a==="Super"?"KEY_LEFTMETA":t==="SPACE"?"KEY_SPACE":t==="ENTER"?"KEY_ENTER":t==="ESCAPE"||t==="ESC"?"KEY_ESC":t==="TAB"?"KEY_TAB":t==="BACKSPACE"?"KEY_BACKSPACE":t==="DELETE"?"KEY_DELETE":/^KEY[A-Z]$/.test(t)?`KEY_${t.slice(3)}`:t.startsWith("KEY")?t:t.startsWith("DIGIT")?`KEY_${t.replace("DIGIT","")}`:t.startsWith("ARROW")?`KEY_${t.replace("ARROW","")}`:t.startsWith("F")&&t.length>1?`KEY_${t}`:a.length===1?`KEY_${a.toUpperCase()}`:`KEY_${t}`}const Uh={KEY_LEFTCTRL:"Ctrl",KEY_RIGHTCTRL:"Ctrl",KEY_LEFTALT:"Alt",KEY_RIGHTALT:"Alt",KEY_LEFTSHIFT:"Shift",KEY_RIGHTSHIFT:"Shift",KEY_LEFTMETA:"Super",KEY_RIGHTMETA:"Super",KEY_SPACE:"Space",KEY_ESC:"Esc",KEY_ENTER:"Enter",KEY_TAB:"Tab",KEY_BACKSPACE:"Backspace",KEY_DELETE:"Delete"};function Tl(a){var s;return(s=Uh[a])!=null?s:a.replace(/^KEY_/,"")}const Hh=new Set(["KEY_LEFTCTRL","KEY_RIGHTCTRL","KEY_LEFTALT","KEY_RIGHTALT","KEY_LEFTSHIFT","KEY_RIGHTSHIFT","KEY_LEFTMETA","KEY_RIGHTMETA"]);function Kh(a){return a.length>0&&a.every(s=>Hh.has(s))}const Lr="default_hold",ci="command",Gh="Command";function Yh(a){return{...a,id:ci,label:Gh,delivery:"command",command:null}}var Ti,Si,Ei,Ci,Ai,Mi,Pi,Di,zi,Ii,Oi;class Jh{constructor(){vt(this,Ti,T(0));vt(this,Si,T(0));vt(this,Ei,T(!1));vt(this,Ci,T("hold"));vt(this,Ai,T(null));vt(this,Mi,T(!1));vt(this,Pi,T(kt([])));vt(this,Di,T(null));vt(this,zi,T(kt([])));vt(this,Ii,T(!1));vt(this,Oi,T(!1))}get step(){return e($(this,Ti))}set step(s){l($(this,Ti),s,!0)}get visited(){return e($(this,Si))}set visited(s){l($(this,Si),s,!0)}get leaving(){return e($(this,Ei))}set leaving(s){l($(this,Ei),s,!0)}get gesture(){return e($(this,Ci))}set gesture(s){l($(this,Ci),s,!0)}get combo(){return e($(this,Ai))}set combo(s){l($(this,Ai),s,!0)}get recording(){return e($(this,Mi))}set recording(s){l($(this,Mi),s,!0)}get held(){return e($(this,Pi))}set held(s){l($(this,Pi),s,!0)}get captureHint(){return e($(this,Di))}set captureHint(s){l($(this,Di),s,!0)}get issues(){return e($(this,zi))}set issues(s){l($(this,zi),s,!0)}get engineChosen(){return e($(this,Ii))}set engineChosen(s){l($(this,Ii),s,!0)}get modelChosen(){return e($(this,Oi))}set modelChosen(s){l($(this,Oi),s,!0)}get gestureInfo(){var s;return(s=$n.find(t=>t.id===this.gesture))!=null?s:$n[2]}get displayKeys(){var s;return this.recording?this.held:(s=this.combo)!=null?s:[]}recordIssue(s){this.issues=[...this.issues.filter(t=>t.id!==s.id),s]}clearIssue(s){this.issues=this.issues.filter(t=>t.id!==s)}goTo(s){s===this.step||this.leaving||s<0||s>=xa.length||(this.leaving=!0,this.recording=!1,setTimeout(()=>{this.step=s,this.visited=Math.max(this.visited,s),this.leaving=!1},200))}async ensureCommandTarget(){var o;const s=await S("get_targets");if(s.some(d=>d.id===ci&&d.delivery==="command"))return ci;const t=(o=s.find(d=>d.delivery==="inject"))!=null?o:s[0];if(!t)return"default";const r=[...s.filter(d=>d.id!==ci),Yh(t)];return await S("save_targets",{targets:r}),ci}async saveBinding(){if(!this.combo||this.combo.length===0)return;const s=await this.ensureCommandTarget(),t=await S("get_bindings").catch(()=>[]),r=this.gestureInfo,o={id:Lr,label:`Dictate (${r.name})`,keys:[...this.combo],gesture:this.gesture,target_id:s,target_ids:[s],tap_ms:300,hold_threshold_ms:200,disabled:!1,openai_enabled:!1,openai_model:"",openai_mode:"custom",openai_prompt:"",openai_system_prompt:""},d=t.filter(u=>u.id!==Lr&&u.id!=="default_toggle"&&u.id!=="__tts_stop__");await S("save_bindings",{bindings:[o,...d]})}async loadBinding(){var s;try{const t=await S("get_bindings"),r=(s=t.find(o=>o.id===Lr))!=null?s:t.find(o=>o.id!=="__tts_stop__");r&&r.keys.length>0&&(this.combo=[...r.keys],$n.some(o=>o.id===r.gesture)&&(this.gesture=r.gesture))}catch(t){console.error("Wizard: failed to read existing bindings:",t)}}reset(){this.step=0,this.visited=0,this.leaving=!1,this.gesture="hold",this.combo=null,this.recording=!1,this.held=[],this.captureHint=null,this.issues=[],this.engineChosen=!1,this.modelChosen=!1}}Ti=new WeakMap,Si=new WeakMap,Ei=new WeakMap,Ci=new WeakMap,Ai=new WeakMap,Mi=new WeakMap,Pi=new WeakMap,Di=new WeakMap,zi=new WeakMap,Ii=new WeakMap,Oi=new WeakMap;const Le=new Jh;function Ca(a){const s={...Ln(Lt)};a(s),Lt.set(s)}var Zh=p('
      '),Xh=p(`
      VoxCtrl
      // welcome

      Speak to anything on your machine.

      A few minutes of setup. Pick a transcription engine, bind a hotkey, choose how VoxCtrl shows + itself, and test it end to end. Everything runs on this device — nothing leaves it.

      ↺ Nothing is permanent — every choice can be changed later in Settings.
      `);function Qh(a){const s=[{glyph:"∇",n:"01",title:"Transcription engine",desc:"whisper.cpp or Moonshine, sized to your hardware."},{glyph:"⌁",n:"02",title:"Hotkey",desc:"A gesture and a key combo to start talking."},{glyph:"⌬",n:"03",title:"Overlay",desc:"A visual signal while the mic is live — or none."},{glyph:"◉",n:"04",title:"Live test",desc:"Dictate into a box and watch it land."},{glyph:"⊕",n:"05",title:"Voice output",desc:"Optional: let agents talk back through your speakers."}];var t=Xh(),r=n(t),o=n(r),d=i(n(o),4),u=i(r,2);_t(u,5,()=>s,ht,(v,f)=>{var _=Zh(),b=n(_),m=n(b),g=n(m),M=i(m,2),A=n(M),H=i(b,2),E=n(H),O=i(H,2),ve=n(O);w(()=>{y(g,e(f).glyph),y(A,e(f).n),y(E,e(f).title),y(ve,e(f).desc)}),c(v,_)}),w(()=>St(d,"src",wr)),c(a,t)}var eg=p(''),tg=p('
      Discovered models from server:
      '),sg=p("
      "),ag=p('✔ Tested & verified successfully'),ng=p('⚠️ Test connection required to proceed'),ig=p(``);function rg(a,s){Ot(s,!0);const t=()=>ls(Lt,"$config",r),[r,o]=Ms();let d=Nt(s,"isOpen",15,!1),u=T(""),v=T(""),f=T("whisper-1"),_=T(""),b=T(30),m=T(!1),g=T(null),M=T(kt([])),A=T(!1),H=!1;gs(()=>{d()&&!H&&Fa(()=>{var Y;const V=t().engine.remote_openai;l(u,(V==null?void 0:V.endpoint)||"http://localhost:8000/v1",!0),l(v,(V==null?void 0:V.api_key)||"",!0),l(f,(V==null?void 0:V.model)||"whisper-1",!0),l(_,(V==null?void 0:V.language)||"",!0),l(b,(Y=V==null?void 0:V.timeout_secs)!=null?Y:30,!0),l(g,null)}),H=d()});function E(){Ca(V=>{V.engine.remote_openai?(V.engine.remote_openai.endpoint=e(u).trim()||"http://localhost:8000/v1",V.engine.remote_openai.api_key=e(v).trim()?e(v).trim():null,V.engine.remote_openai.model=e(f).trim()||"whisper-1",V.engine.remote_openai.language=e(_).trim(),V.engine.remote_openai.timeout_secs=Number(e(b))||30):V.engine.remote_openai={endpoint:e(u).trim()||"http://localhost:8000/v1",api_key:e(v).trim()?e(v).trim():null,model:e(f).trim()||"whisper-1",language:e(_).trim(),timeout_secs:Number(e(b))||30}})}async function O(){var V;if(!e(m)){E(),l(m,!0),l(g,null);try{const Y=await S("test_remote_stt",{endpoint:e(u).trim()||"http://localhost:8000/v1",apiKey:e(v).trim()?e(v).trim():null,model:e(f).trim()||"whisper-1",timeoutSecs:Number(e(b))||30});l(g,{success:Y.success,message:Y.message},!0),Y.models&&Y.models.length>0&&(l(M,Y.models,!0),e(f)||(l(f,Y.models[0],!0),E())),Y.success&&(l(A,!0),E(),(V=s.onSuccess)==null||V.call(s))}catch(Y){l(g,{success:!1,message:Y.toString()},!0)}finally{l(m,!1)}}}function ve(){E(),d(!1)}function ce(V){V.key==="Escape"&&ve()}var me=$i();Ra("keydown",Jr,ce);var ie=wt(me);{var I=V=>{var Y=ig(),be=n(Y),ke=n(be),D=i(n(ke),2),P=i(ke,2),he=i(n(P),2),B=n(he),L=i(n(B),2),ge=i(B,4),De=i(n(ge),2),fe=i(ge,4),G=i(n(fe),2),J=i(fe,2);{var xe=oe=>{var Ae=tg(),$e=i(n(Ae),2);_t($e,21,()=>e(M),ht,(tt,st)=>{var U=eg();let Q;var ne=n(U);w(()=>{Q=Se(U,1,"tag-btn svelte-1c9i6zy",null,Q,{active:e(f)===e(st)}),y(ne,e(st))}),z("click",U,()=>{l(f,e(st),!0),E()}),c(tt,U)}),c(oe,Ae)};k(J,oe=>{e(M).length>0&&oe(xe)})}var Ie=i(J,2),re=i(n(Ie),2),W=i(Ie,4),le=i(n(W),2),R=i(W,2),ee=n(R),Oe=n(ee);{var je=oe=>{var Ae=qe("⏳ Testing Connection...");c(oe,Ae)},Ke=oe=>{var Ae=qe("🧪 Test Connection");c(oe,Ae)};k(Oe,oe=>{e(m)?oe(je):oe(Ke,-1)})}var _e=i(ee,2);{var se=oe=>{var Ae=sg();let $e;var tt=n(Ae);{var st=Q=>{var ne=qe();w(()=>{var Re;return y(ne,`✔ ${(Re=e(g).message)!=null?Re:""}`)}),c(Q,ne)},U=Q=>{var ne=qe();w(()=>{var Re;return y(ne,`⚠️ ${(Re=e(g).message)!=null?Re:""}`)}),c(Q,ne)};k(tt,Q=>{e(g).success?Q(st):Q(U,-1)})}w(()=>$e=Se(Ae,1,"status-pill svelte-1c9i6zy",null,$e,{success:e(g).success,error:!e(g).success})),c(oe,Ae)};k(_e,oe=>{e(g)&&oe(se)})}var ye=i(P,2),et=n(ye),te=n(et);{var j=oe=>{var Ae=ag();c(oe,Ae)},F=oe=>{var Ae=ng();c(oe,Ae)};k(te,oe=>{e(A)?oe(j):oe(F,-1)})}var ae=i(et,2),C=n(ae),X=i(C,2),de=n(X);w(()=>{ee.disabled=e(m),y(de,e(A)?"Done":"Save & Close")}),z("click",Y,oe=>{oe.target===oe.currentTarget&&ve()}),z("keydown",Y,oe=>{oe.key==="Escape"&&ve()}),z("click",D,ve),z("change",L,E),Ze(L,()=>e(u),oe=>l(u,oe)),z("change",De,E),Ze(De,()=>e(v),oe=>l(v,oe)),z("change",G,E),Ze(G,()=>e(f),oe=>l(f,oe)),z("change",re,E),Ze(re,()=>e(_),oe=>l(_,oe)),z("change",le,E),Ze(le,()=>e(b),oe=>l(b,oe)),z("click",ee,O),z("click",C,ve),z("click",X,ve),c(V,Y)};k(ie,V=>{d()&&V(I)})}c(a,me),Rt(),o()}us(["click","keydown","change"]);var lg=p(`
      This build was compiled without the Moonshine backend — choosing it runs whisper.cpp + with the model above instead.
      `),og=p(`
      This build was compiled without the Parakeet backend — choosing it runs whisper.cpp + with the model above instead.
      `),cg=p('
      '),dg=p('
      server configuration
      URL
      Model
      Status
      ',1),vg=p(''),ug=p('
      '),pg=p('
      model size
      ',1),fg=p('
      '),_g=p('
      '),hg=p('
      ✓
      ◌ quiet room
      ≋ noisy room
      '),gg=p(' '),mg=p(' '),bg=p(' Checking local models…'),yg=p(' '),wg=p('⚠️ Test connection required before continuing'),kg=p(' '),xg=p('◇ Pick an engine and a model size — they download before the next step'),Tg=p(' '),Sg=p(`
      // 01 · transcription engine

      Which ears should VoxCtrl use?

      Choose between on-device engines (whisper.cpp, Moonshine, Parakeet TDT) or connect to a Remote Speech Engine over your network. + Pick a model size inside each card or configure your remote endpoint to get started.

      `);function Eg(a,s){Ot(s,!0);const t=()=>ls(Lt,"$config",r),[r,o]=Ms(),d=1;let u=T(!0),v=T(!0),f=T(null),_=T(kt({})),b=T(kt({})),m=T(kt({})),g=T(null),M=T(null),A=T(!1),H=T(!1),E=T(!1);const O=ue(()=>t().engine.backend==="remote-openai"?"remote-openai":t().engine.backend==="parakeet"?"parakeet":t().engine.backend==="moonshine"?"moonshine":"whisper-cpp"),ve={cuda:"CUDA",vulkan:"Vulkan",coreml:"CoreML"},ce=ue(()=>!!e(f)&&t().engine.whisper_cpp.device!=="cpu"),me=ue(()=>{var U;return e(f)?(U=ve[e(f)])!=null?U:e(f):""}),ie=ue(()=>{var U;return e(O)==="remote-openai"?((U=t().engine.remote_openai)==null?void 0:U.model)||"whisper-1":e(O)==="parakeet"&&e(v)?t().engine.parakeet.model_size:e(O)==="moonshine"&&e(u)?t().engine.moonshine.model_size:t().engine.whisper_cpp.model_size}),I=ue(()=>e(O)==="remote-openai"?e(E):e(O)==="parakeet"&&e(v)?!!e(m)[e(ie)]:e(O)==="moonshine"&&e(u)?!!e(b)[e(ie)]:!!e(_)[e(ie)]);function V(U,Q){var ne;return U!==e(O)?!1:Q.id===(U==="remote-openai"?((ne=t().engine.remote_openai)==null?void 0:ne.model)||"whisper-1":U==="parakeet"?t().engine.parakeet.model_size:U==="moonshine"?t().engine.moonshine.model_size:t().engine.whisper_cpp.model_size)}function Y(U,Q){return U==="remote-openai"?e(E):U==="parakeet"?!!e(m)[Q.id]:U==="moonshine"?!!e(b)[Q.id]:!!e(_)[Q.id]}function be(U){Ca(Q=>{Q.engine.backend=U,U==="remote-openai"&&!Q.engine.remote_openai&&(Q.engine.remote_openai={endpoint:"http://localhost:8000/v1",api_key:null,model:"whisper-1",language:"",timeout_secs:30})}),Le.engineChosen=!0,U==="remote-openai"&&(Le.modelChosen=!0,l(H,!0))}function ke(U,Q){Ca(ne=>{ne.engine.backend=U,U==="parakeet"?ne.engine.parakeet.model_size=Q.id:U==="moonshine"?ne.engine.moonshine.model_size=Q.id:U==="remote-openai"?ne.engine.remote_openai?ne.engine.remote_openai.model=Q.id:ne.engine.remote_openai={endpoint:"http://localhost:8000/v1",api_key:null,model:Q.id,language:"",timeout_secs:30}:ne.engine.whisper_cpp.model_size=Q.id}),l(M,null),Le.engineChosen=!0,Le.modelChosen=!0}function D(){e(f)&&Ca(U=>{U.engine.whisper_cpp.device=e(ce)?"cpu":"auto"})}async function P(){const U=t().engine.whisper_cpp.model_dir,Q={};for(const ne of Ui[0].models)try{Q[ne.id]=await S("check_model_downloaded",{modelSize:ne.id,modelDir:U})}catch(Re){console.error("Wizard: whisper model check failed for",ne.id,Re),Q[ne.id]=!1}l(_,Q,!0)}async function he(){const U={},Q=Ui.find(ne=>ne.id==="moonshine");if(Q)for(const ne of Q.models)try{U[ne.id]=await S("check_moonshine_downloaded",{modelSize:ne.id})}catch(Re){console.error("Wizard: moonshine model check failed for",ne.id,Re),U[ne.id]=!1}l(b,U,!0)}async function B(){const U={},Q=Ui.find(ne=>ne.id==="parakeet");if(Q)for(const ne of Q.models)try{U[ne.id]=await S("check_parakeet_downloaded",{modelSize:ne.id})}catch(Re){console.error("Wizard: parakeet model check failed for",ne.id,Re),U[ne.id]=!1}l(m,U,!0)}async function L(){if(e(O)==="remote-openai")return e(E)?!0:(s.setBlocker(d,"Test the remote connection successfully to continue."),l(H,!0),!1);if(e(I))return!0;const U=e(O),Q=e(ie);l(g,Q,!0),l(M,null);try{return U==="parakeet"&&e(v)?(await S("download_parakeet_model",{modelSize:Q}),l(m,{...e(m),[Q]:!0},!0)):U==="moonshine"&&e(u)?(await S("download_moonshine_model",{modelSize:Q}),l(b,{...e(b),[Q]:!0},!0)):(await S("download_model",{modelSize:Q,modelDir:t().engine.whisper_cpp.model_dir}),l(_,{...e(_),[Q]:!0},!0)),Le.clearIssue("model-download"),!0}catch(ne){return l(M,`${ne}`),Le.recordIssue({id:"model-download",step:d,title:`Speech model "${Q}" could not be downloaded — dictation will produce no text.`,detail:`engine=${U} model=${Q} model_dir=${t().engine.whisper_cpp.model_dir||"(default)"} +${ne}`}),!1}finally{l(g,null)}}gs(()=>{e(g)?s.setBlocker(d,`Downloading ${e(g)}…`):e(A)?e(O)==="remote-openai"&&!e(E)?s.setBlocker(d,"Test the remote connection successfully to continue."):e(I)?s.setBlocker(d,null):Le.engineChosen?Le.modelChosen?s.setBlocker(d,null):s.setBlocker(d,"Choose a model size to continue."):s.setBlocker(d,"Choose a transcription engine to continue."):s.setBlocker(d,"Checking which models are already on disk…")});async function ge(){l(A,!1),await Promise.all([P(),he(),B()]),l(A,!0)}Xt(()=>(s.registerGate(d,L),S("moonshine_available").then(U=>l(u,U,!0)).catch(()=>l(u,!1)),S("parakeet_available").then(U=>l(v,U,!0)).catch(()=>l(v,!1)),S("accelerator_support").then(U=>{var Q;return l(f,(Q=U==null?void 0:U.whisper_gpu)!=null?Q:null,!0)}).catch(()=>l(f,null)),ge(),()=>{s.registerGate(d,null),s.setBlocker(d,null)}));function De(U){var Ge,nt;if(U.id==="remote-openai")return{model:{id:((Ge=t().engine.remote_openai)==null?void 0:Ge.model)||"whisper-1",mb:0,speed:.95,accuracy:.95},rows:[{label:"speed",pct:95,value:"network",color:"var(--vx-cyan-0)",dim:!1},{label:"accuracy",pct:95,value:"server",color:"var(--vx-cyan-2)",dim:!1},{label:"RAM",pct:2,value:"offloaded",color:"var(--vx-gold-1)",dim:!1},{label:"VRAM",pct:0,value:"0 MB",color:"var(--vx-gold-0)",dim:!0}],quiet:Hi(12,.95),noisy:Hi(12,.92),quietPct:"server",noisyPct:"server"};const Q=U.id==="parakeet"?t().engine.parakeet.model_size:U.id==="moonshine"?t().engine.moonshine.model_size:t().engine.whisper_cpp.model_size,ne=(nt=U.models.find(Ne=>Ne.id===Q))!=null?nt:U.models[0],Re=U.gpu&&e(ce),at=Math.min(1,ne.speed+(Re?.3:0)),lt=Re?ne.mb*.3:ne.mb,Ee=Re?ne.mb*1.1:0;return{model:ne,rows:[{label:"speed",pct:Math.round(at*100),value:qh(at),color:"var(--vx-cyan-0)",dim:!1},{label:"accuracy",pct:Math.round(ne.accuracy*100),value:sr(ne.accuracy),color:"var(--vx-cyan-2)",dim:!1},{label:"RAM",pct:Math.max(2,Math.min(100,Math.round(lt/3400*100))),value:Bn(lt),color:"var(--vx-gold-1)",dim:!1},{label:"VRAM",pct:Ee?Math.max(2,Math.min(100,Math.round(Ee/3400*100))):0,value:Ee?Bn(Ee):U.gpu?"off":"cpu only",color:"var(--vx-gold-0)",dim:!Ee}],quiet:Hi(12,ne.accuracy),noisy:Hi(12,ne.accuracy*U.noiseRetention),quietPct:sr(ne.accuracy),noisyPct:sr(ne.accuracy*U.noiseRetention)}}var fe=Sg(),G=n(fe),J=i(n(G),2);let xe;var Ie=n(J);let re;var W=i(Ie,2),le=n(W),R=i(n(le),2);let ee;var Oe=n(R);{var je=U=>{var Q=qe("UNAVAILABLE · CPU BUILD");c(U,Q)},Ke=U=>{var Q=qe();w(()=>{var ne;return y(Q,`ON · ${(ne=e(me))!=null?ne:""}`)}),c(U,Q)},_e=U=>{var Q=qe("OFF · CPU");c(U,Q)};k(Oe,U=>{e(f)?e(ce)?U(Ke,1):U(_e,-1):U(je)})}var se=i(le,2),ye=n(se);{var et=U=>{var Q=qe(`Moves whisper.cpp weights from RAM to your GPU: faster, less RAM, uses VRAM. Moonshine is + CPU-native and unaffected.`);c(U,Q)},te=U=>{var Q=qe(`This build has no GPU backend compiled in, so both engines run on the CPU. The Vulkan + download accelerates whisper.cpp; Moonshine is CPU-native either way.`);c(U,Q)};k(ye,U=>{e(f)?U(et):U(te,-1)})}var j=i(G,2);_t(j,21,()=>Ui,ht,(U,Q)=>{const ne=ue(()=>De(e(Q))),Re=ue(()=>e(O)===e(Q).id);var at=hg();let lt;var Ee=i(n(at),2),Ge=n(Ee),nt=n(Ge),Ne=n(nt),it=i(nt,2),dt=n(it),ot=i(Ge,2),Me=n(ot),Ye=i(ot,2);{var rt=h=>{var x=lg();c(h,x)},Z=h=>{var x=og();c(h,x)};k(Ye,h=>{e(Q).id==="moonshine"&&!e(u)?h(rt):e(Q).id==="parakeet"&&!e(v)&&h(Z,1)})}var K=i(Ee,2),pe=n(K);{var We=h=>{var x=dg(),we=i(wt(x),2),Be=n(we),He=i(n(Be),2),Te=n(He),Ce=i(Be,2),Ue=i(n(Ce),2),Xe=n(Ue),Vt=i(Ce,2),Qt=i(n(Vt),2);let ts;var Gt=n(Qt);{var Dt=zt=>{var Yt=qe("✔ Verified");c(zt,Yt)},ps=zt=>{var Yt=qe("⚠️ Untested");c(zt,Yt)};k(Gt,zt=>{e(E)?zt(Dt):zt(ps,-1)})}var es=i(we,2),ys=n(es);let Ps;var Js=n(ys);{var bt=zt=>{var Yt=qe("⚙ Configure Server");c(zt,Yt)},Wt=zt=>{var Yt=qe("⚡ Setup & Test");c(zt,Yt)};k(Js,zt=>{e(E)?zt(bt):zt(Wt,-1)})}var fs=i(es,2);_t(fs,21,()=>e(ne).rows,ht,(zt,Yt)=>{var Is=cg();let Os;var Zs=n(Is),ma=n(Zs),ba=n(ma),ln=i(ma),on=n(ln),cn=i(Zs,2),xt=n(cn);let Mt;w(()=>{var Qe;Os=Se(Is,1,"metric svelte-xv54mf",null,Os,{dim:e(Yt).dim}),y(ba,e(Yt).label),y(on,e(Yt).value),Mt=ds(xt,"",Mt,{width:`${(Qe=e(Yt).pct)!=null?Qe:""}%`,background:e(Yt).color})}),c(zt,Is)}),w(()=>{var zt,Yt,Is;St(He,"title",((zt=t().engine.remote_openai)==null?void 0:zt.endpoint)||"http://localhost:8000/v1"),y(Te,((Yt=t().engine.remote_openai)==null?void 0:Yt.endpoint)||"http://localhost:8000/v1"),y(Xe,((Is=t().engine.remote_openai)==null?void 0:Is.model)||"whisper-1"),ts=Se(Qt,1,"remote-v svelte-xv54mf",null,ts,{"remote-v-ok":e(E),"remote-v-warn":!e(E)}),Ps=Se(ys,1,"vx-btn vx-btn-sm remote-cfg-btn svelte-xv54mf",null,Ps,{"vx-primary":!e(E)})}),z("click",ys,zt=>{zt.stopPropagation(),be("remote-openai"),l(H,!0)}),c(h,x)},Ve=h=>{var x=pg(),we=i(wt(x),2);_t(we,21,()=>e(Q).models,ht,(He,Te)=>{var Ce=vg();let Ue;var Xe=n(Ce),Vt=n(Xe),Qt=i(Xe,2),ts=n(Qt);w((Gt,Dt,ps)=>{Ue=Se(Ce,1,"size svelte-xv54mf",null,Ue,Gt),y(Vt,e(Te).id),y(ts,`${Dt!=null?Dt:""}${ps!=null?ps:""}`)},[()=>({on:V(e(Q).id,e(Te))}),()=>Bn(e(Te).mb),()=>Y(e(Q).id,e(Te))?" ✔":""]),z("click",Ce,Gt=>{Gt.stopPropagation(),ke(e(Q).id,e(Te))}),c(He,Ce)});var Be=i(we,2);_t(Be,21,()=>e(ne).rows,ht,(He,Te)=>{var Ce=ug();let Ue;var Xe=n(Ce),Vt=n(Xe),Qt=n(Vt),ts=i(Vt),Gt=n(ts),Dt=i(Xe,2),ps=n(Dt);let es;w(()=>{var ys;Ue=Se(Ce,1,"metric svelte-xv54mf",null,Ue,{dim:e(Te).dim}),y(Qt,e(Te).label),y(Gt,e(Te).value),es=ds(ps,"",es,{width:`${(ys=e(Te).pct)!=null?ys:""}%`,background:e(Te).color})}),c(He,Ce)}),c(h,x)};k(pe,h=>{e(Q).id==="remote-openai"?h(We):h(Ve,-1)})}var gt=i(K,2),as=n(gt),Ht=n(as),Kt=i(n(Ht)),ft=n(Kt),Ft=i(Ht,2);_t(Ft,21,()=>e(ne).quiet,ht,(h,x)=>{var we=fg();let Be;w(()=>{var He;return Be=ds(we,"",Be,{height:`${(He=e(x).h)!=null?He:""}%`,opacity:e(x).o})}),c(h,we)});var At=i(as,2),Et=n(At),ze=i(n(Et)),Je=n(ze),q=i(Et,2);_t(q,21,()=>e(ne).noisy,ht,(h,x)=>{var we=_g();let Be;w(()=>{var He;return Be=ds(we,"",Be,{height:`${(He=e(x).h)!=null?He:""}%`,opacity:e(x).o})}),c(h,we)}),w(()=>{lt=Se(at,1,"vx-card engine-card svelte-xv54mf",null,lt,{"vx-on":e(Re)}),St(at,"aria-checked",e(Re)),y(Ne,e(Q).glyph),y(dt,e(Q).name),y(Me,e(Q).tagline),y(ft,e(ne).quietPct),y(Je,e(ne).noisyPct)}),z("click",at,()=>{be(e(Q).id),e(Q).id==="remote-openai"&&l(H,!0)}),z("keydown",at,h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),be(e(Q).id),e(Q).id==="remote-openai"&&l(H,!0))}),c(U,at)});var F=i(j,2),ae=n(F);{var C=U=>{var Q=gg(),ne=i(n(Q));w(()=>{var Re;return y(ne,` Downloading ${(Re=e(g))!=null?Re:""} — this can take a few minutes`)}),c(U,Q)},X=U=>{var Q=mg(),ne=n(Q);w(()=>{var Re;return y(ne,`✕ Download failed: ${(Re=e(M))!=null?Re:""}`)}),c(U,Q)},de=U=>{var Q=bg();c(U,Q)},oe=U=>{var Q=$i(),ne=wt(Q);{var Re=lt=>{var Ee=yg(),Ge=n(Ee);w(()=>{var nt;return y(Ge,`✓ Remote engine connected (${(nt=e(ie))!=null?nt:""})`)}),c(lt,Ee)},at=lt=>{var Ee=wg();c(lt,Ee)};k(ne,lt=>{e(E)?lt(Re):lt(at,-1)})}c(U,Q)},Ae=U=>{var Q=kg(),ne=n(Q);w(()=>{var Re;return y(ne,`✓ ${(Re=e(ie))!=null?Re:""} is on disk and ready`)}),c(U,Q)},$e=U=>{var Q=xg();c(U,Q)},tt=U=>{var Q=Tg(),ne=n(Q);w(()=>{var Re;return y(ne,`↓ ${(Re=e(ie))!=null?Re:""} will download when you continue`)}),c(U,Q)};k(ae,U=>{e(g)?U(C):e(M)?U(X,1):e(A)?e(O)==="remote-openai"?U(oe,3):e(I)?U(Ae,4):!Le.engineChosen||!Le.modelChosen?U($e,5):U(tt,-1):U(de,2)})}var st=i(F,2);rg(st,{onSuccess:()=>{l(E,!0)},get isOpen(){return e(H)},set isOpen(U){l(H,U,!0)}}),w(()=>{xe=Se(J,1,"vx-card gpu-toggle svelte-xv54mf",null,xe,{"vx-on":e(ce)}),J.disabled=!e(f),re=Se(Ie,1,"switch svelte-xv54mf",null,re,{on:e(ce)}),ee=Se(R,1,"state svelte-xv54mf",null,ee,{on:e(ce)})}),z("click",J,D),c(a,fe),Rt(),o()}us(["click","keydown"]);var Cg=p("
      "),Ag=p("
      "),Mg=p(''),Pg=p('
      '),Dg=p('
      '),zg=p('+'),Ig=p("
      ",1),Og=p('
      '),Rg=p(' Asking…',1),Lg=p('
      '),Ng=p('
      '),Fg=p(`
      // 02 · first key binding

      How do you want to start talking?

      Pick a gesture, then record the keys. Taps keep your hands free while speaking; holds can't be + left running by accident. Double-taps avoid clashes with shortcuts you already use.

      `);function Vg(a,s){Ot(s,!0);const t=2;let r=T(null),o=T(!1),d=T(null);const u=ue(()=>{var W,le;return(le=(W=e(r))==null?void 0:W.supported_gestures)!=null&&le.length?$n.filter(R=>e(r).supported_gestures.includes(R.id)):$n}),v=ue(()=>$n.length-e(u).length),f=ue(()=>{var W;return((W=e(r))==null?void 0:W.is_active)===!0}),_=ue(()=>!!Le.combo&&Le.combo.length>0&&e(r)!==null&&!e(r).is_active),b=ue(()=>Le.recording&&Kh(Le.held)?"Keep holding and add a regular key — modifiers alone cannot be a shortcut.":null);async function m(){try{l(r,await S("check_hotkey_status"),!0),e(r).is_active&&Le.clearIssue("shortcut-register")}catch(W){console.error("Wizard: failed to read hotkey status:",W)}}function g(){Le.recording=!0,Le.held=[],Le.captureHint=null,S("set_hotkeys_inhibited",{inhibited:!0}).catch(()=>{})}function M(){Le.recording=!1,Le.held=[],S("set_hotkeys_inhibited",{inhibited:!1}).catch(()=>{})}async function A(W){var R;if(W.length===0)return;let le;try{le=await S("check_hotkey_keys",{keys:W})}catch(ee){console.error("Wizard: hotkey validation failed:",ee),Le.combo=[...W];return}le.accepted?(Le.combo=[...W],Le.captureHint=null,await O()):Le.captureHint=(R=le.message)!=null?R:"This key combination cannot be used as a shortcut. Try another."}function H(W){if(!Le.recording)return;W.preventDefault(),W.stopPropagation();const le=Wh(W.key,W.code);if(W.key==="Escape"&&Le.held.length===0){M();return}Le.held.includes(le)||(Le.held=[...Le.held,le])}function E(W){if(!Le.recording)return;W.preventDefault(),W.stopPropagation();const le=[...Le.held];M(),A(le)}async function O(){var W;try{await Le.saveBinding()}catch(le){console.error("Wizard: failed to save binding:",le),l(d,`Could not save the binding: ${le}`),Le.recordIssue({id:"binding-save",step:t,title:"The hotkey binding could not be written — no shortcut will start dictation.",detail:`keys=${((W=Le.combo)!=null?W:[]).join("+")} gesture=${Le.gesture} +${le}`});return}Le.clearIssue("binding-save"),await m()}async function ve(){var W,le,R,ee,Oe,je;l(o,!0),l(d,null);try{l(r,await S("approve_shortcuts"),!0)}catch(Ke){l(d,`${Ke}`),Le.recordIssue({id:"shortcut-register",step:t,title:"Your desktop refused to register the global shortcut.",detail:`backend=${(le=(W=e(r))==null?void 0:W.backend)!=null?le:"unknown"} portal_refused=${(ee=(R=e(r))==null?void 0:R.portal_refused)!=null?ee:"?"} +portal_error=${(je=(Oe=e(r))==null?void 0:Oe.portal_error)!=null?je:"(none)"} +${Ke}`}),await m()}finally{l(o,!1)}}async function ce(){try{await S("open_shortcut_settings")}catch(W){l(d,`${W}`)}}gs(()=>{let W=null;Le.recording?W="Press the keys you want to use.":!Le.combo||Le.combo.length===0?W="Record a key combination first.":e(_)&&(W="Register the shortcut with your desktop to continue."),s.setBlocker(t,W)}),gs(()=>{const W=e(u);W.length>0&&!W.some(le=>le.id===Le.gesture)&&(Le.gesture=W[0].id)}),Xt(()=>{s.registerGate(t,async()=>{var R;return await O(),((R=e(r))==null?void 0:R.is_active)!==!1}),Le.loadBinding(),m();const W=ks("setup-status-changed",()=>void m()),le=setInterval(()=>{Le.recording||m()},3e3);return window.addEventListener("keydown",H,!0),window.addEventListener("keyup",E,!0),()=>{clearInterval(le),W.then(R=>R()).catch(()=>{}),window.removeEventListener("keydown",H,!0),window.removeEventListener("keyup",E,!0),Le.recording&&M(),s.registerGate(t,null),s.setBlocker(t,null)}});const me=ue(()=>{var W,le,R,ee;return Le.recording?{label:"listening for keys",hint:(le=(W=Le.captureHint)!=null?W:e(b))!=null?le:"Hold one or more modifiers, then press a key. Esc to cancel.",tone:"rec"}:Le.combo&&Le.combo.length>0?{label:"binding captured",hint:(R=Le.captureHint)!=null?R:"Click anywhere in this area to record a different combination.",tone:"done"}:{label:"click to record",hint:(ee=Le.captureHint)!=null?ee:"Needs at least one modifier (Ctrl, Alt, Shift or Super) plus a regular key — e.g. Super + Space.",tone:"idle"}});var ie=Fg(),I=i(n(ie),2),V=n(I),Y=n(V);_t(Y,17,()=>e(u),ht,(W,le)=>{const R=ue(()=>Le.gesture===e(le).id);var ee=Mg();let Oe;var je=n(ee),Ke=n(je),_e=n(Ke),se=i(Ke,2),ye=n(se),et=i(je,2),te=n(et),j=i(n(te),2);_t(j,21,()=>e(le).key,ht,(C,X)=>{var de=ue(()=>Cl(e(X),2));let oe=()=>e(de)[0],Ae=()=>e(de)[1];var $e=Cg();let tt,st;w(()=>{tt=Se($e,1,"svelte-1fbfhk3",null,tt,{on:Ae()&&e(R),lit:Ae()}),st=ds($e,"",st,{flex:oe()})}),c(C,$e)});var F=i(te,2),ae=i(n(F),2);_t(ae,21,()=>e(le).mic,ht,(C,X)=>{var de=ue(()=>Cl(e(X),2));let oe=()=>e(de)[0],Ae=()=>e(de)[1];var $e=Ag();let tt,st;w(()=>{tt=Se($e,1,"svelte-1fbfhk3",null,tt,{on:Ae()&&e(R),lit:Ae()}),st=ds($e,"",st,{flex:oe()})}),c(C,$e)}),w(()=>{Oe=Se(ee,1,"vx-card gesture svelte-1fbfhk3",null,Oe,{"vx-on":e(R)}),y(_e,e(le).name),y(ye,e(le).desc)}),z("click",ee,()=>Le.gesture=e(le).id),c(W,ee)});var be=i(Y,2);{var ke=W=>{var le=Pg(),R=n(le);w(()=>{var ee;return y(R,`${(ee=e(v))!=null?ee:""} gesture${e(v)===1?"":"s"} hidden — this desktop's shortcut + backend only tells VoxCtrl that a shortcut fired, so it cannot time a hold.`)}),c(W,le)};k(be,W=>{e(v)>0&&W(ke)})}var D=i(V,2),P=n(D);let he;var B=n(P);{var L=W=>{var le=Dg();c(W,le)};k(B,W=>{Le.recording&&W(L)})}var ge=i(B,2),De=i(n(ge),1,!0),fe=i(ge,2);_t(fe,21,()=>Le.displayKeys,ht,(W,le,R)=>{var ee=Ig(),Oe=wt(ee);let je;var Ke=n(Oe),_e=i(Oe,2);{var se=ye=>{var et=zg();c(ye,et)};k(_e,ye=>{R{je=Se(Oe,1,"vx-keycap",null,je,{"vx-hot":Le.recording||e(me).tone==="done"}),y(Ke,ye)},[()=>Tl(e(le))]),c(W,ee)});var G=i(fe,2);let J;var xe=n(G),Ie=i(P,2);{var re=W=>{var le=Ng();let R;var ee=n(le),Oe=n(ee),je=i(ee,2),Ke=n(je),_e=n(Ke),se=i(Ke,2),ye=n(se);{var et=de=>{var oe=qe("The binding is registered system-wide. Continue to choose an overlay.");c(de,oe)},te=de=>{var oe=qe();w(()=>y(oe,e(r).portal_error)),c(de,oe)},j=de=>{var oe=qe(`Wayland desktops ask you to confirm global shortcuts. Click below and approve the + dialog your desktop shows — you come straight back here.`);c(de,oe)};k(ye,de=>{var oe;e(f)?de(et):(oe=e(r))!=null&&oe.portal_error?de(te,1):de(j,-1)})}var F=i(se,2);{var ae=de=>{var oe=Og(),Ae=n(oe);w(()=>y(Ae,e(d))),c(de,oe)};k(F,de=>{e(d)&&de(ae)})}var C=i(je,2);{var X=de=>{var oe=Lg(),Ae=n(oe),$e=i(Ae,2),tt=n($e);{var st=Q=>{var ne=Rg();c(Q,ne)},U=Q=>{var ne=qe("Register →");c(Q,ne)};k(tt,Q=>{e(o)?Q(st):Q(U,-1)})}w(()=>$e.disabled=e(o)),z("click",Ae,ce),z("click",$e,ve),c(de,oe)};k(C,de=>{e(f)||de(X)})}w(()=>{var de,oe;R=Se(le,1,"sys svelte-1fbfhk3",null,R,{ok:e(f)}),y(Oe,e(f)?"✓":"⌬"),y(_e,e(f)?`Shortcuts are live (${(oe=(de=e(r))==null?void 0:de.backend)!=null?oe:"ready"})`:"Your desktop still needs to approve the shortcut")}),c(W,le)};k(Ie,W=>{Le.combo&&Le.combo.length>0&&W(re)})}w(()=>{he=Se(P,1,"recorder svelte-1fbfhk3",null,he,{rec:e(me).tone==="rec",done:e(me).tone==="done"}),y(De,e(me).label),J=Se(G,1,"rec-hint svelte-1fbfhk3",null,J,{bad:!!Le.captureHint}),y(xe,e(me).hint)}),z("click",P,()=>Le.recording?M():g()),c(a,ie),Rt()}us(["click"]);const $g="/assets/blue_wave-DGfyQFFo.webm",Bg="/assets/mono_bars-1wA0h3Fz.webm",qg="/assets/pulse-Cdnh-rAb.webm",jg="/assets/spectrum-CLEHMZrI.webm",Wg="/assets/terminal-CvV88uWw.webm",Ug="/assets/vinyl-BG1f8NO1.webm",Hg="/assets/voice_card-BZZeHAB9.webm",Kg="/assets/waveform-DUI2x_EP.webm",Gg="/assets/blue_wave-OqjJ-fxD.webp",Yg="/assets/mono_bars-CPLx02Ku.webp",Jg="/assets/pulse-ESYJH4j2.webp",Zg="/assets/spectrum-DV9agKUG.webp",Xg="/assets/terminal-DhrByqCl.webp",Qg="/assets/vinyl-BfHn3C6g.webp",em="/assets/voice_card-QnCU8RiM.webp",tm="/assets/waveform-B5-owbWT.webp";var sm=p('
      '),am=p('
      '),nm=Uo(''),im=p('
      '),rm=p('
      '),lm=p('
      '),om=p('
      > listening
      '),cm=p(''),dm=p('',2),vm=p("
      ",1);function Wl(a,s){Ot(s,!0);let t=Nt(s,"seed",3,1),r=Nt(s,"showClip",3,!0);const o=Object.assign({"../../assets/overlays/blue_wave.webm":$g,"../../assets/overlays/mono_bars.webm":Bg,"../../assets/overlays/pulse.webm":qg,"../../assets/overlays/spectrum.webm":jg,"../../assets/overlays/terminal.webm":Wg,"../../assets/overlays/vinyl.webm":Ug,"../../assets/overlays/voice_card.webm":Hg,"../../assets/overlays/waveform.webm":Kg}),d=Object.assign({"../../assets/overlays/blue_wave.webp":Gg,"../../assets/overlays/mono_bars.webp":Yg,"../../assets/overlays/pulse.webp":Jg,"../../assets/overlays/spectrum.webp":Zg,"../../assets/overlays/terminal.webp":Xg,"../../assets/overlays/vinyl.webp":Qg,"../../assets/overlays/voice_card.webp":em,"../../assets/overlays/waveform.webp":tm});function u(D,P){var B;const he=Object.entries(D).find(([L])=>L.endsWith(`/${P}`));return(B=he==null?void 0:he[1])!=null?B:null}const v=(()=>{if(typeof document>"u")return!0;const D=document.createElement("video");return D.canPlayType('video/webm; codecs="av01.0.05M.08"')!==""||D.canPlayType("video/webm")!==""})(),f=ue(()=>r()&&v?u(o,`${s.styleId}.webm`):null),_=ue(()=>u(d,`${s.styleId}.webp`));let b=T(!1);gs(()=>{e(f),l(b,!1)});const m=ue(()=>Array.from({length:14},(D,P)=>{const he=.3+.7*Math.abs(Math.sin(t()*2.3+P*1.3));return{h:Math.round(he*100),delay:((P*.11+t()*.07)%1.1).toFixed(2),dur:(.9+P*5%4*.15).toFixed(2)}})),g=ue(()=>s.styleId==="pulse"?"ring":s.styleId==="vinyl"?"needle":s.styleId==="terminal"?"terminal":s.styleId==="waveform"||s.styleId==="blue_wave"?"wave":"bars"),M=ue(()=>s.styleId==="mono_bars");var A=vm(),H=wt(A);let E;var O=n(H);{var ve=D=>{var P=am();_t(P,21,()=>e(m).slice(0,s.styleId==="mono_bars"?5:14),ht,(he,B)=>{var L=sm();let ge;w(()=>{var De,fe,G;return ge=ds(L,"",ge,{height:`${(De=e(B).h)!=null?De:""}%`,"animation-delay":`${(fe=e(B).delay)!=null?fe:""}s`,"animation-duration":`${(G=e(B).dur)!=null?G:""}s`})}),c(he,L)}),c(D,P)},ce=D=>{var P=nm();c(D,P)},me=D=>{var P=im();c(D,P)},ie=D=>{var P=rm();c(D,P)},I=D=>{var P=om(),he=i(n(P),2);_t(he,21,()=>e(m).slice(0,10),ht,(B,L)=>{var ge=lm();let De;w(()=>{var fe;return De=ds(ge,"",De,{"animation-delay":`${(fe=e(L).delay)!=null?fe:""}s`})}),c(B,ge)}),c(D,P)};k(O,D=>{e(g)==="bars"?D(ve):e(g)==="wave"?D(ce,1):e(g)==="ring"?D(me,2):e(g)==="needle"?D(ie,3):D(I,-1)})}var V=i(H,2);{var Y=D=>{var P=cm();w(()=>St(P,"src",e(_))),c(D,P)};k(V,D=>{e(_)&&D(Y)})}var be=i(V,2);{var ke=D=>{var P=dm();let he;P.muted=!0,w(()=>{var B;he=Se(P,1,"clip svelte-y6l73v",null,he,{ready:e(b)}),St(P,"src",e(f)),St(P,"poster",(B=e(_))!=null?B:void 0)}),Ra("playing",P,()=>l(b,!0)),Ra("error",P,()=>l(b,!1)),c(D,P)};k(be,D=>{e(f)&&D(ke)})}w(()=>E=Se(H,1,"preview svelte-y6l73v",null,E,{mono:e(M)})),c(a,A),Rt()}var um=p(''),pm=p(''),fm=p(`
      // 03 · on-screen overlay

      Show a signal while listening?

      The overlay appears the moment your hotkey fires and shows live mic level plus the active + target — so you know VoxCtrl is hearing you, and where the words are going. Turn it off for + a silent setup.

      `);function _m(a,s){Ot(s,!0);const t=()=>ls(Lt,"$config",r),[r,o]=Ms(),d=ue(()=>t().ui.show_overlay),u=ue(()=>t().ui.overlay_style),v=ue(()=>t().ui.overlay_position),f=ue(()=>{var fe;return(fe=Rn.find(G=>G.id===e(u)))!=null?fe:Rn[0]}),_=ue(()=>{var fe;return(fe={top:16,center:46,bottom:76}[e(v)])!=null?fe:46});function b(fe){Ca(G=>{G.ui.show_overlay=fe})}function m(fe){Ca(G=>{G.ui.overlay_style=fe,G.ui.show_overlay=!0})}function g(fe){Ca(G=>{G.ui.overlay_position=fe})}var M=fm(),A=n(M),H=i(n(A),2),E=n(H);let O;var ve=i(E,2);let ce;var me=i(A,2);let ie;var I=n(me),V=n(I),Y=n(V),be=i(V,2);_t(be,21,()=>Rn,ht,(fe,G,J)=>{var xe=um();let Ie;var re=n(xe),W=n(re);{let et=ue(()=>e(G).id===e(u));Wl(W,{seed:J+1,get styleId(){return e(G).id},get showClip(){return e(et)}})}var le=i(re,2),R=n(le),ee=n(R),Oe=n(ee),je=i(ee,2),Ke=n(je),_e=i(R,2);let se;var ye=n(_e);w(()=>{Ie=Se(xe,1,"vx-card style-card svelte-ek86vh",null,Ie,{"vx-on":e(G).id===e(u)}),y(Oe,e(G).name),y(Ke,e(G).meta),se=Se(_e,1,"style-glyph svelte-ek86vh",null,se,{on:e(G).id===e(u)}),y(ye,e(G).glyph)}),z("click",xe,()=>m(e(G).id)),c(fe,xe)});var ke=i(I,2),D=n(ke),P=n(D),he=i(D,2),B=i(n(he),4);let L;var ge=n(B);{let fe=ue(()=>Rn.indexOf(e(f))+1);Wl(ge,{get seed(){return e(fe)},get styleId(){return e(f).id},showClip:!0})}var De=i(he,2);_t(De,21,()=>$h,ht,(fe,G)=>{var J=pm();let xe;var Ie=n(J),re=n(Ie),W=i(Ie,1,!0);w(()=>{xe=Se(J,1,"pos svelte-ek86vh",null,xe,{on:e(G).id===e(v)}),y(re,e(G).glyph),y(W,e(G).label)}),z("click",J,()=>g(e(G).id)),c(fe,J)}),w(()=>{var fe,G,J;O=Se(E,1,"vx-card mode svelte-ek86vh",null,O,{"vx-on":e(d)}),ce=Se(ve,1,"vx-card mode svelte-ek86vh",null,ce,{"off-on":!e(d)}),ie=Se(me,1,"body svelte-ek86vh",null,ie,{muted:!e(d)}),y(Y,`style · ${(fe=Rn.length)!=null?fe:""} built in`),y(P,`position · ${(G=e(v))!=null?G:""}`),L=ds(B,"",L,{top:`${(J=e(_))!=null?J:""}%`})}),z("click",E,()=>b(!0)),z("click",ve,()=>b(!1)),c(a,M),Rt(),o()}us(["click"]);var hm=p('+'),gm=p('
      ',1),mm=p('
      '),bm=p('
      '),ym=p('
      ✓
      It works.
      '),wm=p(`
      // 04 · live test

      Say something.

      Click into the box, then your binding and speak. Your words land where + the cursor is.

      ▸ test.txt
      Nothing happening? The overlay and tray icon show whether VoxCtrl heard the key. You can + continue and come back to this from Settings → Hotkeys at any time.
      `);function km(a,s){Ot(s,!0);const t=()=>ls(Lt,"$config",o),r=()=>ls(xs,"$status",o),[o,d]=Ms();let u=T(null),v=T(""),f=T(0),_=T("idle"),b=0,m=0;const g=ec(28),M=ue(()=>Le.gestureInfo),A=ue(()=>{var ee;return(ee=Le.combo)!=null?ee:[]}),H=ue(()=>{var ee;return t().engine.backend==="remote-openai"?`Remote Speech Engine · ${((ee=t().engine.remote_openai)==null?void 0:ee.model)||"whisper-1"}`:t().engine.backend==="parakeet"?`Parakeet TDT · ${t().engine.parakeet.model_size}`:t().engine.backend==="moonshine"?`Moonshine · ${t().engine.moonshine.model_size}`:`whisper.cpp · ${t().engine.whisper_cpp.model_size} · ${t().engine.whisper_cpp.device==="cpu"?"cpu":"gpu/auto"}`}),E=ue(()=>({idle:"waiting for hotkey",recording:"recording",transcribing:"transcribing",success:"delivered"})[e(_)]);let O=!1;gs(()=>{const ee=r();ee.recording&&!O?(l(_,"recording"),b=performance.now(),m=e(v).length):!ee.recording&&ee.processing&&e(_)==="recording"&&l(_,"transcribing"),O=ee.recording});function ve(){if(!e(u))return;const ee=e(u).value,Oe=ee.length>m&&ee.trim().length>0;l(v,ee,!0),Oe&&(e(_)==="recording"||e(_)==="transcribing")&&(l(f,Math.max(1,Math.round(performance.now()-b)),!0),l(_,"success"))}function ce(){l(_,"idle"),l(v,""),m=0,e(u)&&(e(u).value="",e(u).focus())}Xt(()=>{setTimeout(()=>{var ee;return(ee=e(u))==null?void 0:ee.focus()},60)});var me=wm(),ie=n(me),I=n(ie),V=i(n(I),4),Y=i(n(V)),be=n(Y),ke=i(I,2),D=n(ke);_t(D,17,()=>e(A),ht,(ee,Oe,je)=>{var Ke=gm(),_e=wt(Ke),se=n(_e),ye=i(_e,2);{var et=te=>{var j=hm();c(te,j)};k(ye,te=>{jey(se,te),[()=>Tl(e(Oe))]),c(ee,Ke)});var P=i(D,2),he=n(P),B=i(ie,2);let L;var ge=n(B),De=i(n(ge),2),fe=i(n(De),1,!0),G=i(ge,2);ml(G,ee=>l(u,ee),()=>e(u));var J=i(G,2);{var xe=ee=>{var Oe=bm();_t(Oe,21,()=>g,ht,(je,Ke)=>{var _e=mm();let se;w(()=>{var ye,et;return se=ds(_e,"",se,{"animation-duration":`${(ye=e(Ke).d)!=null?ye:""}s`,"animation-delay":`${(et=e(Ke).dl)!=null?et:""}s`})}),c(je,_e)}),c(ee,Oe)};k(J,ee=>{(e(_)==="recording"||e(_)==="transcribing")&&ee(xe)})}var Ie=i(J,2);{var re=ee=>{var Oe=ym(),je=n(Oe),Ke=i(n(je),4),_e=n(Ke),se=i(Ke,2);w(()=>{var ye;return y(_e,`Transcribed${t().engine.backend==="remote-openai"?" via Remote Speech Engine":" on-device"} in ${(ye=e(f))!=null?ye:""} ms · delivered via inject`)}),z("click",se,ce),c(ee,Oe)};k(Ie,ee=>{e(_)==="success"&&ee(re)})}var W=i(B,2),le=i(n(W),2),R=n(le);w(()=>{var ee;y(be,e(M).verb),y(he,e(M).name),L=Se(B,1,"box svelte-oqvphh",null,L,{live:e(_)==="recording"||e(_)==="transcribing",won:e(_)==="success"}),Se(De,1,`state ${(ee=e(_))!=null?ee:""}`,"svelte-oqvphh"),y(fe,e(E)),y(R,e(H))}),z("input",G,ve),c(a,me),Rt(),d()}us(["input","click"]);var xm=p('
      '),Tm=p('■ Stop ',1),Sm=p('▶ play sample',1),Em=p('Speaking sample aloud…'),Cm=p('Downloading voice…'),Am=p('Locked (token required)'),Mm=p('Ready for playback'),Pm=p('Download voice first'),Dm=p('
      ⚠ Non-commercial license:
      '),zm=p(''),Im=p('
      bundled · zero download
      '),Om=p(''),Rm=p('
      '),Lm=p(''),Nm=p('
      '),Fm=p('Needs a HuggingFace access token — enter one above to unlock this voice.'),Vm=p(' '),$m=p(`Already downloaded — the token is only needed to fetch the weights, so this voice + works without one.`),Bm=p('This build was compiled without the `inflect-micro` feature, so this engine cannot\n synthesize.'),qm=p('
      '),jm=p('
      '),Wm=p(`
      // 05 · text to speech · optional

      Should VoxCtrl talk back?

      Agents can stream replies back through a response pipe and VoxCtrl speaks them aloud. Richer + voices need bigger models and more time per sentence; lighter engines answer instantly.

      HuggingFace access token optional — speeds up downloads if you have one
      `);function Um(a,s){Ot(s,!0);const t=()=>ls(Lt,"$config",r),[r,o]=Ms(),d=5,u=ue(()=>t().tts.enabled),v=ue(()=>t().tts.engine),f=ue(()=>{var h;return(h=ka.find(x=>x.id===e(v)))!=null?h:ka[0]});let _=T(kt({espeak:!0})),b=T(kt({})),m=T(null),g=T(kt({})),M=T(!0),A=T(null);const H=ue(()=>!!e(A)),E=ue(()=>{var h,x;return(x=e(A))!=null?x:((h=t().tts.hf_token)!=null?h:"").trim()}),O=ue(()=>e(E).length>0),ve=ka.filter(h=>h.needsHfToken);function ce(h){e(H)||(l(ie,!1),Ca(x=>{x.tts.hf_token=h.trim()?h.trim():null}))}function me(h){const x=ka.find(we=>we.id===h);return!!(x!=null&&x.needsHfToken)&&!e(O)&&!e(_)[h]}let ie=T(!1);const I="hf-token-rejected";function V(h){return`${h}`.toLowerCase().includes(I)}let Y=T(null),be=T(null);const ke=ec(12);let D=null,P=null,he=0,B=!1;const L=300,ge=1500,De=3e4;function fe(){D&&(clearTimeout(D),D=null),P&&(clearInterval(P),P=null)}function G(){l(Y,null),fe()}async function J(){if(!e(Y))return;let h;try{h=await S("get_status")}catch(x){console.error("Wizard: status poll failed:",x);return}if(h&&xs.set(h),h!=null&&h.speaking){B=!0;return}(B||Date.now()-he>ge)&&G()}function xe(h,x){const we={...e(g)};x?we[h]=x:delete we[h],l(g,we,!0)}async function Ie(h){var we,Be,He,Te,Ce,Ue;const x=Ln(Lt);try{switch(h){case"espeak":return!0;case"piper":return await S("check_voice_downloaded",{voiceName:x.tts.voice,voiceDir:x.tts.voice_dir});case"pocket_tts":return await S("check_pocket_tts_ready",{voice:x.tts.pocket_tts.voice,voiceDir:x.tts.pocket_tts.voice_dir});case"inflect_micro":return await S("check_inflect_micro_downloaded",{modelDir:(Be=(we=x.tts.inflect_micro)==null?void 0:we.model_dir)!=null?Be:""});case"breeze_tts_2":return await S("check_breeze_tts_2_ready",{modelDir:(Te=(He=x.tts.breeze_tts_2)==null?void 0:He.model_dir)!=null?Te:""});case"vox_cpm_2":return await S("check_vox_cpm_2_ready",{modelDir:(Ue=(Ce=x.tts.vox_cpm_2)==null?void 0:Ce.model_dir)!=null?Ue:""})}}catch(Xe){return console.error("Wizard: TTS readiness check failed for",h,Xe),!1}}async function re(){await Promise.all(ka.map(async h=>{l(b,{...e(b),[h.id]:!0},!0);const x=await Ie(h.id);l(_,{...e(_),[h.id]:x},!0),l(b,{...e(b),[h.id]:!1},!0)}))}async function W(h){var we,Be,He,Te,Ce,Ue,Xe,Vt,Qt,ts,Gt,Dt;if(e(m))return;l(m,h,!0),xe(h,null);const x=Ln(Lt);try{switch(h){case"piper":await S("download_voice",{voiceName:x.tts.voice,voiceDir:x.tts.voice_dir});break;case"pocket_tts":await S("download_pocket_tts",{voice:(we=x.tts.pocket_tts)==null?void 0:we.voice,voiceDir:(Be=x.tts.pocket_tts)==null?void 0:Be.voice_dir,hfToken:x.tts.hf_token});break;case"inflect_micro":await S("download_inflect_micro",{modelDir:(Te=(He=x.tts.inflect_micro)==null?void 0:He.model_dir)!=null?Te:""});break;case"breeze_tts_2":await S("download_breeze_tts_2",{modelDir:(Ue=(Ce=x.tts.breeze_tts_2)==null?void 0:Ce.model_dir)!=null?Ue:"",hfToken:x.tts.hf_token});break;case"vox_cpm_2":await S("download_vox_cpm_2",{modelDir:(Vt=(Xe=x.tts.vox_cpm_2)==null?void 0:Xe.model_dir)!=null?Vt:"",hfToken:x.tts.hf_token});break;case"espeak":break}l(ie,!1),l(_,{...e(_),[h]:!0},!0),Le.clearIssue(`tts-download-${h}`)}catch(ps){const es=ka.find(Ps=>Ps.id===h),ys=V(ps);ys&&l(ie,!0),xe(h,ys?`HuggingFace did not accept that access token, so ${(Qt=es==null?void 0:es.name)!=null?Qt:h} could not be downloaded. Check the token is a valid read token, and that the same account has accepted the licence at ${(ts=es==null?void 0:es.licenceUrl)!=null?ts:"huggingface.co"}.`:`${ps}`),Le.recordIssue({id:`tts-download-${h}`,step:d,title:ys?`${(Gt=es==null?void 0:es.name)!=null?Gt:h} could not be downloaded — HuggingFace did not accept the access token.`:`${(Dt=es==null?void 0:es.name)!=null?Dt:h} could not be downloaded — speech output will stay silent.`,detail:`engine=${h} +${ps}`})}finally{l(m,null)}}const le=["pocket_tts","breeze_tts_2","vox_cpm_2"],R=ue(()=>le.includes(e(v))),ee=ue(()=>e(v)==="pocket_tts"?t().tts.pocket_tts.gpu:e(v)==="breeze_tts_2"?t().tts.breeze_tts_2.gpu:e(v)==="vox_cpm_2"?t().tts.vox_cpm_2.gpu:!1);function Oe(h){Ca(x=>{e(v)==="pocket_tts"?x.tts.pocket_tts.gpu=h:e(v)==="breeze_tts_2"?x.tts.breeze_tts_2.gpu=h:e(v)==="vox_cpm_2"&&(x.tts.vox_cpm_2.gpu=h)})}function je(h){me(h)||Ca(x=>{x.tts.enabled=!0,x.tts.engine=h})}function Ke(h){Ca(x=>{x.tts.enabled=h})}async function _e(h){if(e(Y)){G(),S("stop_tts").catch(()=>{});return}je(h),l(be,null),l(Y,h,!0),he=Date.now(),B=!1,fe(),P=setInterval(()=>void J(),L),D=setTimeout(()=>{G(),l(be,"The sample never finished playing. The engine may have failed silently — check Settings → TTS, or try another voice.")},De);const x=Ln(Lt),we=ka.find(He=>He.id===h),Be=h==="piper"?x.tts.voice:h==="pocket_tts"?x.tts.pocket_tts.voice:null;try{await S("save_config",{newConfig:x}),await S("speak_text",{text:`Hi this is ${we.name} speaking from VoxCtrl`,voice:Be})}catch(He){l(be,`${He}`),G(),Le.recordIssue({id:`tts-speak-${h}`,step:d,title:`${we.name} failed to speak the sample.`,detail:`engine=${h} voice=${Be!=null?Be:"(fixed)"} +${He}`})}}gs(()=>{var h;if(!e(u)){s.setBlocker(d,null);return}if(e(m)){s.setBlocker(d,`Downloading ${(h=ka.find(x=>x.id===e(m)))==null?void 0:h.name}…`);return}if(me(e(v))){s.setBlocker(d,"Enter a HuggingFace access token, or pick a voice that does not need one.");return}if(e(v)==="inflect_micro"&&!e(M)){s.setBlocker(d,"This build has no Inflect Micro engine — pick another voice or skip.");return}s.setBlocker(d,e(_)[e(v)]?null:"Download the voice you picked, or turn speech output off to continue.")}),Xt(()=>{re(),S("hf_token_env").then(x=>l(A,x&&x.trim()?x.trim():null,!0)).catch(()=>l(A,null)),S("inflect_micro_available").then(x=>l(M,x,!0)).catch(()=>l(M,!1));const h=[ks("tts-playback-end",()=>G()),ks("tts-error",x=>{l(be,x.payload,!0),G(),Le.recordIssue({id:"tts-runtime",step:d,title:"The text-to-speech engine reported an error while speaking.",detail:`engine=${Ln(Lt).tts.engine} +${x.payload}`})})];return()=>{s.setBlocker(d,null),fe();for(const x of h)x.then(we=>we()).catch(()=>{});S("stop_tts").catch(()=>{})}});const se=ue(()=>!!e(_)[e(v)]),ye=ue(()=>me(e(v))),et=ue(()=>e(v)==="inflect_micro"&&!e(M)),te=ue(()=>e(se)&&!e(et)&&!e(ye)&&!e(m));var j=Wm(),F=n(j),ae=i(n(F),2),C=n(ae);let X;var de=i(C,2);let oe;var Ae=i(F,2),$e=n(Ae),tt=n($e);let st;var U=n(tt);{var Q=h=>{var x=Tm(),we=i(wt(x),4);_t(we,21,()=>ke,ht,(Be,He)=>{var Te=xm();let Ce;w(()=>{var Ue,Xe;return Ce=ds(Te,"",Ce,{"animation-duration":`${(Ue=e(He).d)!=null?Ue:""}s`,"animation-delay":`${(Xe=e(He).dl)!=null?Xe:""}s`})}),c(Be,Te)}),c(h,x)},ne=h=>{var x=Sm();c(h,x)};k(U,h=>{e(Y)?h(Q):h(ne,-1)})}var Re=i(tt,2),at=n(Re),lt=n(at),Ee=i(at,2),Ge=n(Ee);{var nt=h=>{var x=Em();c(h,x)},Ne=h=>{var x=Cm();c(h,x)},it=h=>{var x=Am();c(h,x)},dt=h=>{var x=Mm();c(h,x)},ot=h=>{var x=Pm();c(h,x)};k(Ge,h=>{e(Y)?h(nt):e(m)?h(Ne,1):e(ye)?h(it,2):e(se)?h(dt,3):h(ot,-1)})}var Me=i($e,2);let Ye;var rt=i(n(Me),2),Z=n(rt),K=i(Z,2);let pe;var We=n(K);{var Ve=h=>{var x=qe("did not accept this token");c(h,x)},gt=h=>{var x=qe("HF_TOKEN environment variable");c(h,x)},as=h=>{var x=qe("✓ token saved");c(h,x)},Ht=h=>{var x=qe("token required for gated voices");c(h,x)};k(We,h=>{e(ie)?h(Ve):e(H)?h(gt,1):e(O)?h(as,2):h(Ht,-1)})}var Kt=i(Ae,2);{var ft=h=>{var x=Dm(),we=i(n(x));w(()=>{var Be;return y(we,` ${(Be=e(f).name)!=null?Be:""} weights are released under a research/non-commercial license. Commercial + use requires a separate license from the model's publisher.`)}),c(h,x)};k(Kt,h=>{e(u)&&e(f).nonCommercial&&!e(_)[e(v)]&&h(ft)})}var Ft=i(Kt,2);{var At=h=>{var x=zm(),we=n(x),Be=i(we,2),He=n(Be);w(()=>{var Te;jd(we,e(ee)),y(He,`Vulkan GPU acceleration for ${(Te=e(f).name)!=null?Te:""}`)}),z("change",we,Te=>Oe(Te.currentTarget.checked)),c(h,x)};k(Ft,h=>{e(u)&&e(R)&&h(At)})}var Et=i(Ft,2);let ze;_t(Et,21,()=>ka,ht,(h,x)=>{const we=ue(()=>e(u)&&e(v)===e(x).id),Be=ue(()=>!!e(_)[e(x).id]),He=ue(()=>e(m)===e(x).id),Te=ue(()=>e(x).id==="inflect_micro"&&!e(M)),Ce=ue(()=>me(e(x).id));var Ue=qm();let Xe;var Vt=n(Ue),Qt=n(Vt),ts=n(Qt),Gt=n(ts),Dt=i(ts,2),ps=n(Dt),es=i(Qt,2),ys=n(es),Ps=n(ys),Js=i(Vt,2),bt=n(Js);{var Wt=xt=>{var Mt=Im();c(xt,Mt)},fs=xt=>{var Mt=Om();c(xt,Mt)},zt=xt=>{var Mt=Rm(),Qe=n(Mt);w(pt=>y(Qe,`✓ Downloaded (${pt!=null?pt:""})`),[()=>Bn(e(x).mb)]),c(xt,Mt)},Yt=xt=>{var Mt=Lm(),Qe=n(Mt);w(pt=>{Mt.disabled=!!e(m)||e(Te)||e(Ce),y(Qe,`↓ Download ${pt!=null?pt:""}`)},[()=>Bn(e(x).mb)]),z("click",Mt,pt=>{pt.stopPropagation(),W(e(x).id)}),c(xt,Mt)};k(bt,xt=>{e(x).mb===0?xt(Wt):e(He)?xt(fs,1):e(Be)?xt(zt,2):xt(Yt,-1)})}var Is=i(Js,2);_t(Is,21,()=>[{label:"quality",pct:Math.round(e(x).quality*100),value:sr(e(x).quality),color:"var(--vx-cyan-0)"},{label:"speed",pct:Math.round(e(x).speed*100),value:jh(e(x).speed),color:"var(--vx-cyan-2)"},{label:"model size",pct:Bh(e(x).mb),value:Bn(e(x).mb),color:"var(--vx-gold-1)"}],ht,(xt,Mt)=>{var Qe=Nm(),pt=n(Qe),$t=n(pt),Jt=n($t),Cs=i($t),ws=n(Cs),Ws=i(pt,2),Ts=n(Ws);let Us;w(()=>{var ia;y(Jt,e(Mt).label),y(ws,e(Mt).value),Us=ds(Ts,"",Us,{width:`${(ia=e(Mt).pct)!=null?ia:""}%`,background:e(Mt).color})}),c(xt,Qe)});var Os=i(Is,2),Zs=n(Os);{var ma=xt=>{var Mt=Fm();c(xt,Mt)},ba=xt=>{var Mt=Vm(),Qe=n(Mt);w(()=>y(Qe,e(g)[e(x).id])),c(xt,Mt)},ln=xt=>{var Mt=$m();c(xt,Mt)},on=xt=>{var Mt=Bm();c(xt,Mt)},cn=xt=>{var Mt=qe();w(()=>y(Mt,e(x).note)),c(xt,Mt)};k(Zs,xt=>{e(Ce)?xt(ma):e(g)[e(x).id]?xt(ba,1):e(x).needsHfToken&&!e(O)&&e(Be)?xt(ln,2):e(Te)?xt(on,3):xt(cn,-1)})}w(()=>{Xe=Se(Ue,1,"vx-card card svelte-1yghr3b",null,Xe,{"vx-on":e(we),locked:e(Ce)}),St(Ue,"aria-disabled",e(Ce)),St(Ue,"aria-checked",e(we)),y(Gt,e(x).name),y(ps,e(x).kind),y(Ps,e(we)?"✓":"")}),z("click",Ue,()=>je(e(x).id)),z("keydown",Ue,xt=>{(xt.key==="Enter"||xt.key===" ")&&(xt.preventDefault(),je(e(x).id))}),c(h,Ue)});var Je=i(Et,2);{var q=h=>{var x=jm(),we=n(x);w(()=>{var Be;return y(we,`⚠ ${(Be=e(be))!=null?Be:""}`)}),c(h,x)};k(Je,h=>{e(be)&&h(q)})}w(h=>{var x;X=Se(C,1,"vx-card mode svelte-1yghr3b",null,X,{"vx-on":e(u)}),oe=Se(de,1,"vx-card mode svelte-1yghr3b",null,oe,{"off-on":!e(u)}),st=Se(tt,1,"vx-btn audition-btn svelte-1yghr3b",null,st,{playing:!!e(Y)}),tt.disabled=!e(te)&&!e(Y),St(tt,"title",e(Y)?"Stop":e(se)?"Play a sample":e(ye)?"Needs a HuggingFace access token":"Download this voice first"),y(lt,`Audition: ${(x=e(f).name)!=null?x:""}`),Ye=Se(Me,1,"hf-bar svelte-1yghr3b",null,Ye,h),Z.readOnly=e(H),St(Z,"title",e(H)?"Set by the HF_TOKEN environment variable":"Enter a HuggingFace read token for gated models"),yr(Z,e(E)),pe=Se(K,1,"hf-state svelte-1yghr3b",null,pe,{ok:e(O)&&!e(ie),bad:e(ie)}),ze=Se(Et,1,"grid svelte-1yghr3b",null,ze,{muted:!e(u)})},[()=>({needed:e(u)&&(e(ie)||ve.some(h=>me(h.id)))})]),z("click",C,()=>Ke(!0)),z("click",de,()=>Ke(!1)),z("click",tt,()=>{e(Y)?(G(),S("stop_tts").catch(()=>{})):_e(e(v))}),z("input",Z,h=>ce(h.currentTarget.value)),c(a,j),Rt(),o()}us(["click","input","change","keydown"]);const Hm="/assets/record_off-DqBdWxcg.png";var Km=p('VoxCtrl is ready.',1),Gm=p('Setup is incomplete.',1),Ym=p('
      '),Jm=Uo(''),Zm=p('
      '),Xm=p('
      click me ↓
      '),Qm=p(`
      where everything lives
      Every choice is editable
      Nothing you picked here is locked in. Settings holds the same options plus the ones the + wizard skipped — output targets, per-binding LLM cleanup, audio devices and the MCP server.
      • ⌁ Hotkeys gestures & bindings
      • ∇ Engine model & device
      • ⌬ Visual overlay style & position
      • ⊕ TTS voice output
      • ⊳ Output Commands where text goes
      `),eb=p(''),tb=p('
       
      '),sb=p(''),ab=p('
      '),nb=p('
      What still needs fixing
      '),ib=p('

      system tray
      Find VoxCtrl in the tray
      Click the icon to open Settings, diagnostics, or toggle TTS memory. Try it:
      📶 🔊 ᛒ
      ⌃
      ');function rb(a,s){Ot(s,!0);const t=()=>ls(Lt,"$config",r),[r,o]=Ms();let d=T(!1),u=T(!1),v=T(!0),f=T(!1),_=T(null),b=T(null),m=T(!1);async function g(){l(m,!0);try{l(b,await S("get_setup_status"),!0)}catch(F){console.error("Wizard: could not read setup status:",F),l(b,null)}finally{l(m,!1)}}const M=ue(()=>{var ae;if(!e(b))return[];const F=[];return e(b).hotkeys_active||F.push({id:"sys-hotkeys",step:2,title:"No global shortcut is active — pressing your hotkey will do nothing.",detail:`backend=${e(b).hotkeys.backend} portal_refused=${e(b).hotkeys.portal_refused} +portal_error=${(ae=e(b).hotkeys.portal_error)!=null?ae:"(none)"}`}),!e(b).model_ready&&!e(b).model_auto_downloads&&F.push({id:"sys-model",step:1,title:`Speech model "${e(b).model_size}" is not on disk — dictation will record but produce no text.`,detail:`model_size=${e(b).model_size} model_ready=false auto_downloads=${e(b).model_auto_downloads}`}),e(b).missing_injection_tool&&F.push({id:"sys-inject",step:4,title:`"${e(b).missing_injection_tool}" is not installed — VoxCtrl cannot type text into other windows.`,detail:`missing_injection_tool=${e(b).missing_injection_tool} +install with: ${e(b).manual_package_commands||"(unknown package manager)"}`}),F}),A=ue(()=>{const F=new Set(Le.issues.map(ae=>ae.id));return[...Le.issues,...e(M).filter(ae=>!F.has(ae.id))]}),H=ue(()=>e(A).length===0),E=ue(()=>{var F;return((F=Le.combo)!=null?F:[]).map(Tl).join(" + ")||"not set"}),O=ue(()=>{var F,ae,C,X,de;return[{k:"engine",v:t().engine.backend==="remote-openai"?`Remote Speech Engine · ${((F=t().engine.remote_openai)==null?void 0:F.model)||"whisper-1"}`:t().engine.backend==="parakeet"?`Parakeet TDT · ${t().engine.parakeet.model_size}`:t().engine.backend==="moonshine"?`Moonshine · ${t().engine.moonshine.model_size}`:`whisper.cpp · ${t().engine.whisper_cpp.model_size}`},{k:"hotkey",v:`${e(E)} · ${Le.gestureInfo.name}`},{k:"overlay",v:t().ui.show_overlay?`${(C=(ae=Rn.find(oe=>oe.id===t().ui.overlay_style))==null?void 0:ae.name)!=null?C:t().ui.overlay_style} · ${t().ui.overlay_position}`:"off"},{k:"voice output",v:t().tts.enabled?(de=(X=ka.find(oe=>oe.id===t().tts.engine))==null?void 0:X.name)!=null?de:t().tts.engine:"off"}]}),ve=ue(()=>{var F,ae,C;return["VoxCtrl setup report",`engine: ${t().engine.backend} / ${t().engine.backend==="remote-openai"?((F=t().engine.remote_openai)==null?void 0:F.model)||"whisper-1":t().engine.backend==="parakeet"?t().engine.parakeet.model_size:t().engine.backend==="moonshine"?t().engine.moonshine.model_size:t().engine.whisper_cpp.model_size}`,`device: ${t().engine.whisper_cpp.device}`,`hotkey: ${e(E)} (${Le.gesture})`,`overlay: ${t().ui.show_overlay?`${t().ui.overlay_style} / ${t().ui.overlay_position}`:"off"}`,`tts: ${t().tts.enabled?t().tts.engine:"off"}`,`shortcut backend: ${(C=(ae=e(b))==null?void 0:ae.hotkeys.backend)!=null?C:"unknown"}`,"",...e(A).map(X=>{var de;return`[${(de=xa[X.step])!=null?de:"setup"}] ${X.title} +${X.detail} +`})].join(` +`)});async function ce(){try{await navigator.clipboard.writeText(e(ve)),l(u,!0),setTimeout(()=>l(u,!1),2e3)}catch(F){console.error("Wizard: clipboard write failed:",F)}}async function me(){l(f,!0),l(_,null);try{const F=await S("wizard_failure_log");try{await navigator.clipboard.writeText(F)}catch(de){console.error("Wizard: clipboard write failed:",de)}const ae=encodeURIComponent("VoxCtrl Bug Report"),C=encodeURIComponent(`Paste the log contents below and I will get back to you with a fix ASAP. + +`),X=`mailto:jrufer@gmail.com?subject=${ae}&body=${C}`;await S("send_bug_report_email",{mailtoUrl:X,attachmentPath:null}),l(_,"Log copied to your clipboard — paste it into the email that just opened.")}catch(F){l(_,`Could not open your email app: ${F}`)}finally{l(f,!1)}}async function ie(){try{await S("open_settings_tab",{tab:"general"})}catch(F){console.error("Wizard: could not open Settings:",F)}}Xt(()=>{var F;g(),((F=t().tts)==null?void 0:F.memory_mode)!==void 0&&l(v,t().tts.memory_mode==="on_demand")});function I(){l(v,!e(v)),Lt.update(F=>(F.tts&&(F.tts.memory_mode=e(v)?"on_demand":"always_loaded"),F))}var V=ib(),Y=n(V),be=n(Y);let ke;var D=n(be),P=i(be,2),he=n(P),B=i(P,2),L=n(B);{var ge=F=>{var ae=Km();c(F,ae)},De=F=>{var ae=Gm();c(F,ae)};k(L,F=>{e(H)?F(ge):F(De,-1)})}var fe=i(B,2),G=n(fe);{var J=F=>{var ae=qe(`This window can close. VoxCtrl keeps running quietly in your system tray and listens for + your hotkey in any app.`);c(F,ae)},xe=F=>{var ae=qe();w(()=>{var C;return y(ae,`Sorry about that — ${(C=e(A).length)!=null?C:""} problem${e(A).length===1?"":"s"} came up during setup + and will stop VoxCtrl working end to end. Your choices are still saved. The details are on + the right — fix them here or in Settings, or send us the log and we'll take it from there.`)}),c(F,ae)};k(G,F=>{e(H)?F(J):F(xe,-1)})}var Ie=i(fe,2);_t(Ie,21,()=>e(O),ht,(F,ae)=>{var C=Ym(),X=n(C),de=n(X),oe=i(X,2),Ae=n(oe);w(()=>{y(de,e(ae).k),y(Ae,e(ae).v)}),c(F,C)});var re=i(Y,2),W=i(n(re),6),le=n(W);{var R=F=>{var ae=Zm(),C=n(ae),X=i(C,2),de=i(X,2),oe=n(de),Ae=n(oe);let $e;var tt=n(Ae);{var st=Q=>{var ne=Jm();c(Q,ne)};k(tt,Q=>{e(v)&&Q(st)})}var U=i(de,4);w(()=>$e=Se(Ae,1,"chk svelte-ujy0nl",null,$e,{on:e(v)})),z("click",C,ie),z("click",X,()=>{l(d,!1),g()}),z("click",de,I),z("click",U,()=>l(d,!1)),c(F,ae)};k(le,F=>{e(d)&&F(R)})}var ee=i(le,2),Oe=i(n(ee),6),je=n(Oe);let Ke;var _e=n(je),se=i(je,2);{var ye=F=>{var ae=Xm();c(F,ae)};k(se,F=>{e(d)||F(ye)})}var et=i(re,2);{var te=F=>{var ae=Qm(),C=i(n(ae),8);z("click",C,ie),c(F,ae)},j=F=>{var ae=nb(),C=n(ae),X=n(C),de=n(X),oe=n(de),Ae=i(X,2),$e=n(Ae);{var tt=Ne=>{var it=eb();c(Ne,it)};k($e,Ne=>{e(m)&&Ne(tt)})}var st=i(C,2);_t(st,21,()=>e(A),Ne=>Ne.id,(Ne,it)=>{var dt=tb(),ot=n(dt),Me=n(ot),Ye=n(Me),rt=i(Me,2),Z=n(rt),K=i(ot,2),pe=n(K);w(()=>{var We;y(Ye,(We=xa[e(it).step])!=null?We:"setup"),y(Z,e(it).title),y(pe,e(it).detail)}),c(Ne,dt)});var U=i(st,2),Q=n(U),ne=n(Q),Re=i(Q,2),at=i(Re,2),lt=n(at);{var Ee=Ne=>{var it=sb();c(Ne,it)};k(lt,Ne=>{e(f)&&Ne(Ee)})}var Ge=i(U,2);{var nt=Ne=>{var it=ab(),dt=n(it);w(()=>y(dt,e(_))),c(Ne,it)};k(Ge,Ne=>{e(_)&&Ne(nt)})}w(()=>{var Ne;y(oe,`problems · ${(Ne=e(A).length)!=null?Ne:""}`),Ae.disabled=e(m),y(ne,e(u)?"✓ Copied":"Copy diagnostics"),at.disabled=e(f)}),z("click",Ae,g),z("click",Q,ce),z("click",Re,ie),z("click",at,me),c(F,ae)};k(et,F=>{e(H)?F(te):F(j,-1)})}w(()=>{ke=Se(be,1,"tick svelte-ujy0nl",null,ke,{warn:!e(H)}),y(D,e(H)?"✓":"!"),y(he,e(H)?"// configured":"// finished with problems"),Ke=Se(je,1,"tray-btn svelte-ujy0nl",null,Ke,{on:e(d)}),St(_e,"src",Hm)}),z("click",je,()=>l(d,!e(d))),c(a,V),Rt(),o()}us(["click"]);var lb=p('
      Loading your settings…
      '),ob=p(''),cb=p(''),db=p('
      '),vb=p('
      '),ub=p(' '),pb=p(' Working…',1),fb=p('
      '),_b=p('
      voxctrl // setup
      ');function hb(a,s){Ot(s,!0);const t=()=>ls(Lt,"$config",o),r=()=>ls(lr,"$configLoaded",o),[o,d]=Ms();let u={};function v(j,F){F?u[j]=F:delete u[j]}let f=T(kt({}));function _(j,F){var ae;((ae=e(f)[j])!=null?ae:null)!==F&&l(f,{...e(f),[j]:F},!0)}let b=T(!1),m=T(null);const g=ue(()=>Le.step),M=ue(()=>{var j;return(j=e(f)[e(g)])!=null?j:null}),A=ue(()=>e(g)===0?"Get started →":e(g)===5&&!t().tts.enabled?"Skip →":e(g)===xa.length-1?Le.issues.length>0?"Finish anyway":"Finish":"Continue →");async function H(){if(e(b))return;if(l(m,null),e(g)===xa.length-1){await ve();return}const j=u[e(g)];if(j){l(b,!0);try{if(!await j())return}catch(F){l(m,`${F}`);return}finally{l(b,!1)}}Le.goTo(e(g)+1)}function E(){e(b)||(l(m,null),Le.goTo(e(g)-1))}let O=T(!1);async function ve(){if(!e(O)){l(O,!0);try{await S("save_config",{newConfig:t()}),await S("finish_setup_wizard",{openSettings:!1})}catch(j){l(m,`Could not finish setup: ${j}`),l(O,!1)}}}async function ce(){await ve()}function me(j){Le.recordIssue({id:`uncaught-${Le.issues.filter(F=>F.id.startsWith("uncaught-")).length}`,step:Le.step,title:"Something went wrong during setup that the wizard did not expect.",detail:j})}Xt(()=>{const j=ae=>{var C;me(((C=ae.error)==null?void 0:C.stack)||ae.message||String(ae))},F=ae=>{var C,X;me(((C=ae.reason)==null?void 0:C.stack)||((X=ae.reason)==null?void 0:X.message)||String(ae.reason))};return window.addEventListener("error",j),window.addEventListener("unhandledrejection",F),S("wizard_error_test_active").then(ae=>{ae&&(Le.recordIssue({id:"simulated-test-failure",step:4,title:"Simulated failure (--simulate-wizard-error) — the live test did not detect any transcribed audio.",detail:"This is a test fixture, not a real failure: it exists so the wizard's error screen (apology, log capture, copy-to-clipboard, email-us) can be verified without needing a genuinely broken hotkey or microphone."}),Le.visited=xa.length-1,Le.step=xa.length-1)}).catch(ae=>console.error("Wizard: could not check for the error-test flag:",ae)),()=>{window.removeEventListener("error",j),window.removeEventListener("unhandledrejection",F)}});var ie=_b(),I=n(ie),V=n(I),Y=i(V,8),be=n(Y),ke=i(I,2);let D;var P=n(ke);{var he=j=>{var F=lb();c(j,F)},B=j=>{Qh(j)},L=j=>{Eg(j,{registerGate:v,setBlocker:_})},ge=j=>{Vg(j,{registerGate:v,setBlocker:_})},De=j=>{_m(j,{})},fe=j=>{km(j,{})},G=j=>{Um(j,{setBlocker:_})},J=j=>{rb(j,{})};k(P,j=>{r()?e(g)===0?j(B,1):e(g)===1?j(L,2):e(g)===2?j(ge,3):e(g)===3?j(De,4):e(g)===4?j(fe,5):e(g)===5?j(G,6):j(J,-1):j(he)})}var xe=i(ke,2),Ie=n(xe),re=n(Ie);{var W=j=>{var F=ob();w(()=>F.disabled=e(b)),z("click",F,E),c(j,F)},le=j=>{var F=cb();w(()=>F.disabled=e(O)),z("click",F,ce),c(j,F)};k(re,j=>{e(g)>0?j(W):j(le,-1)})}var R=i(Ie,2);_t(R,21,()=>xa,ht,(j,F,ae)=>{var C=vb();let X;var de=n(C);let oe;var Ae=n(de),$e=n(Ae),tt=i(Ae,2),st=n(tt),U=i(de,2);{var Q=ne=>{var Re=db(),at=n(Re);let lt;w(()=>lt=ds(at,"",lt,{width:ae{ae{X=ds(C,"",X,{flex:aeLe.visited||e(b),y($e,ne),y(st,e(F))},[()=>aeLe.goTo(ae)),c(j,C)});var ee=i(R,2),Oe=n(ee);{var je=j=>{var F=ub(),ae=n(F);w(()=>{St(F,"title",e(M)),y(ae,e(M))}),c(j,F)};k(Oe,j=>{e(M)&&!e(b)&&j(je)})}var Ke=i(Oe,2),_e=n(Ke);{var se=j=>{var F=pb();c(j,F)},ye=j=>{var F=qe();w(()=>y(F,e(A))),c(j,F)};k(_e,j=>{e(b)||e(O)?j(se):j(ye,-1)})}var et=i(xe,2);{var te=j=>{var F=fb(),ae=n(F),C=n(ae),X=i(ae,2);w(()=>{var de;return y(C,`⚠ ${(de=e(m))!=null?de:""}`)}),z("click",X,()=>l(m,null)),c(j,F)};k(et,j=>{e(m)&&j(te)})}w(()=>{var j;St(V,"src",wr),y(be,`step ${e(g)+1} / ${(j=xa.length)!=null?j:""} · every choice editable later in Settings`),D=Se(ke,1,"vx-screen svelte-18pn5kx",null,D,{"vx-leaving":Le.leaving}),Ke.disabled=e(b)||e(O)||!!e(M)}),z("click",Ke,H),c(a,ie),Rt(),d()}us(["click"]);function Ul(a){if(!a||a<0)return"";if(a<1024)return`${a} B`;const s=["KB","MB","GB"];let t=a/1024,r=0;for(;t>=1024&&r

      '),bb=p('

      '),yb=p('

      Asking GitHub for the latest release…

      '),wb=p('

      Nothing to install. Check again any time from Settings → General.

      '),kb=p(`

      What's new

       
      `),xb=p('

      '),Tb=p('

      VoxCtrl keeps running until the download is verified. Nothing is replaced before then.

      '),Sb=p('

      The new version is installed. VoxCtrl is closing and will start again in a moment.

      '),Eb=p('

      '),Cb=p('

      Your current version is untouched and still working.

      ',1),Ab=p(" ",1),Mb=p('

      '),Pb=p(''),Db=p(''),zb=p(''),Ib=p(''),Ob=p('
      ',1),Rb=p(''),Lb=p('

      ');function Nb(a,s){Ot(s,!0);let t=T("checking"),r=T(null),o=T(""),d=T(null),u=T(null),v=[];const f=ue(()=>gb(e(d)));Xt(async()=>{v.push(await ks("update-progress",re=>{l(d,re.payload,!0)})),v.push(await ks("update-installed",()=>{l(t,"installed")})),v.push(await ks("update-failed",re=>{l(t,"failed"),l(u,re.payload,!0)})),await _()}),br(()=>{v.forEach(re=>re())});async function _(){try{let re=await S("get_pending_update");re.update||(re=await S("check_for_update")),l(o,re.current_version,!0),l(r,re.update,!0),l(t,re.update?"available":"up-to-date",!0)}catch(re){l(t,"failed"),l(u,`${re}`)}}async function b(){var re;if((re=e(r))!=null&&re.can_self_update){l(t,"installing"),l(u,null),l(d,{downloaded:0,total:e(r).download_size},!0);try{await S("install_update")}catch(W){l(t,"failed"),l(u,`${W}`)}}}async function m(){await S("dismiss_update")}async function g(){var re,W;try{await Xo((W=(re=e(r))==null?void 0:re.release_url)!=null?W:"https://github.com/JRufer/VoxCtrl/releases/latest")}catch(le){console.error("Could not open the release page:",le)}}var M=Lb(),A=n(M),H=n(A),E=n(H),O=i(E,2),ve=n(O),ce=n(ve);{var me=re=>{var W=qe("VoxCtrl is up to date");c(re,W)},ie=re=>{var W=qe();w(()=>{var le,R;return y(W,`Restarting into ${(R=(le=e(r))==null?void 0:le.version)!=null?R:""}`)}),c(re,W)},I=re=>{var W=qe();w(()=>{var le,R;return y(W,`Updating to ${(R=(le=e(r))==null?void 0:le.version)!=null?R:""}`)}),c(re,W)},V=re=>{var W=qe();w(()=>{var le;return y(W,`VoxCtrl ${(le=e(r).version)!=null?le:""} is available`)}),c(re,W)},Y=re=>{var W=qe("Checking for updates…");c(re,W)};k(ce,re=>{e(t)==="up-to-date"?re(me):e(t)==="installed"?re(ie,1):e(t)==="installing"?re(I,2):e(r)?re(V,3):re(Y,-1)})}var be=i(ve,2);{var ke=re=>{var W=mb(),le=n(W);w(()=>{var R,ee;return y(le,`You have ${(R=e(r).current_version)!=null?R:""} — ${(ee=e(r).version)!=null?ee:""} is the latest release.`)}),c(re,W)},D=re=>{var W=bb(),le=n(W);w(()=>{var R;return y(le,`Version ${(R=e(o))!=null?R:""} is the latest release.`)}),c(re,W)};k(be,re=>{e(r)&&e(t)!=="up-to-date"?re(ke):e(t)==="up-to-date"&&re(D,1)})}var P=i(H,2);{var he=re=>{var W=yb();c(re,W)},B=re=>{var W=wb();c(re,W)},L=re=>{var W=Ab(),le=wt(W);{var R=te=>{var j=kb(),F=i(n(j),2),ae=n(F);w(()=>y(ae,e(r).notes)),c(te,j)};k(le,te=>{e(r).notes&&te(R)})}var ee=i(le,2);{var Oe=te=>{var j=xb(),F=n(j);w(()=>y(F,e(r).unsupported_reason)),c(te,j)};k(ee,te=>{!e(r).can_self_update&&e(r).unsupported_reason&&te(Oe)})}var je=i(ee,2);{var Ke=te=>{var j=Tb(),F=n(j);let ae;var C=n(F),X=i(F,2),de=n(X);{var oe=$e=>{var tt=qe();w(()=>{var st,U;return y(tt,`Downloading ${(U=(st=e(r).asset_name)!=null?st:"the update")!=null?U:""}…`)}),c($e,tt)},Ae=$e=>{var tt=qe();w(st=>{var U;return y(tt,`Downloading — ${(U=e(f))!=null?U:""}% of ${st!=null?st:""}`)},[()=>{var st,U;return Ul((U=(st=e(d))==null?void 0:st.total)!=null?U:e(r).download_size)}]),c($e,tt)};k(de,$e=>{e(f)===null?$e(oe):$e(Ae,-1)})}w(()=>{ae=Se(F,1,"bar svelte-15mrihi",null,ae,{indeterminate:e(f)===null}),ds(C,e(f)===null?"":`width: ${e(f)}%`)}),c(te,j)},_e=te=>{var j=Sb();c(te,j)},se=te=>{var j=Eb(),F=n(j);w(ae=>y(F,`VoxCtrl will download ${ae!=null?ae:""}, verify it against the checksum + GitHub published, replace itself and restart. Your settings, models and voices are not + touched.`),[()=>Ul(e(r).download_size)]),c(te,j)};k(je,te=>{e(t)==="installing"?te(Ke):e(t)==="installed"?te(_e,1):e(r).can_self_update&&te(se,2)})}var ye=i(je,2);{var et=te=>{var j=Cb(),F=wt(j),ae=n(F);w(()=>y(ae,e(u))),c(te,j)};k(ye,te=>{e(t)==="failed"&&e(u)&&te(et)})}c(re,W)},ge=re=>{var W=Mb(),le=n(W);w(()=>y(le,e(u))),c(re,W)};k(P,re=>{e(t)==="checking"?re(he):e(t)==="up-to-date"?re(B,1):e(r)?re(L,2):e(t)==="failed"&&e(u)&&re(ge,3)})}var De=i(P,2),fe=n(De);{var G=re=>{var W=Pb();w(()=>W.disabled=e(t)==="installing"),z("click",W,m),c(re,W)},J=re=>{var W=Db();z("click",W,m),c(re,W)},xe=re=>{var W=Ob(),le=wt(W),R=n(le),ee=i(le,2),Oe=n(ee),je=i(Oe,2);{var Ke=se=>{var ye=zb();z("click",ye,b),c(se,ye)},_e=se=>{var ye=Ib();z("click",ye,g),c(se,ye)};k(je,se=>{e(r).can_self_update?se(Ke):se(_e,-1)})}z("click",R,g),z("click",Oe,m),c(re,W)},Ie=re=>{var W=Rb();z("click",W,m),c(re,W)};k(fe,re=>{e(t)==="installing"||e(t)==="installed"?re(G):e(t)==="up-to-date"?re(J,1):e(r)?re(xe,2):re(Ie,-1)})}w(()=>St(E,"src",wr)),c(a,M),Rt()}us(["click"]);function Fb(a){const s=window.location.pathname;function t(){return s.startsWith("/overlay")?"overlay":s.startsWith("/udev-warning")?"udev-warning":s.startsWith("/wizard")?"wizard":s.startsWith("/update")?"update":"settings"}const r=t();r==="overlay"&&(document.documentElement.classList.add("overlay-window"),document.body.classList.add("overlay-window"));var o=$i(),d=wt(o);{var u=m=>{X_(m,{})},v=m=>{Rh(m,{})},f=m=>{hb(m,{})},_=m=>{Nb(m,{})},b=m=>{w_(m,{})};k(d,m=>{r==="overlay"?m(u):r==="udev-warning"?m(v,1):r==="wizard"?m(f,2):r==="update"?m(_,3):m(b,-1)})}c(a,o)}Ad(Fb,{target:document.getElementById("app")}); diff --git a/dist/assets/index-C_ftghkx.js b/dist/assets/index-C_ftghkx.js deleted file mode 100644 index 9aca9146..00000000 --- a/dist/assets/index-C_ftghkx.js +++ /dev/null @@ -1,155 +0,0 @@ -var tc=Object.defineProperty;var Tl=s=>{throw TypeError(s)};var ac=(s,a,t)=>a in s?tc(s,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[a]=t;var Ha=(s,a,t)=>ac(s,typeof a!="symbol"?a+"":a,t),Tr=(s,a,t)=>a.has(s)||Tl("Cannot "+t);var F=(s,a,t)=>(Tr(s,a,"read from private field"),t?t.call(s):a.get(s)),vt=(s,a,t)=>a.has(s)?Tl("Cannot add the same private member more than once"):a instanceof WeakSet?a.add(s):a.set(s,t),gt=(s,a,t,r)=>(Tr(s,a,"write to private field"),r?r.call(s,t):a.set(s,t),t),jt=(s,a,t)=>(Tr(s,a,"access private method"),t);(function(){const a=document.createElement("link").relList;if(a&&a.supports&&a.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const d of o)if(d.type==="childList")for(const u of d.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&r(u)}).observe(document,{childList:!0,subtree:!0});function t(o){const d={};return o.integrity&&(d.integrity=o.integrity),o.referrerPolicy&&(d.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?d.credentials="include":o.crossOrigin==="anonymous"?d.credentials="omit":d.credentials="same-origin",d}function r(o){if(o.ep)return;o.ep=!0;const d=t(o);fetch(o.href,d)}})();const sc="5";var Wl,Hl,Kl;typeof window<"u"&&((Kl=(Hl=(Wl=window.__svelte)!=null?Wl:window.__svelte={}).v)!=null?Kl:Hl.v=new Set).add(sc);let ei=!1,nc=!1;function ic(){ei=!0}ic();const rc=1,lc=2,Jl=4,oc=8,cc=16,dc=1,vc=2,uc=4,pc=8,fc=16,_c=1,hc=2,Sa=Symbol("uninitialized"),Zl="http://www.w3.org/1999/xhtml",gc="http://www.w3.org/2000/svg",mc="http://www.w3.org/1998/Math/MathML",Xl=!1;var sl=Array.isArray,bc=Array.prototype.indexOf,Gn=Array.prototype.includes,ur=Array.from,Ql=Object.defineProperty,Nn=Object.getOwnPropertyDescriptor,yc=Object.getOwnPropertyDescriptors,wc=Object.prototype,kc=Array.prototype,eo=Object.getPrototypeOf,Sl=Object.isExtensible;const Us=()=>{};function to(s){for(var a=0;a{s=r,a=o});return{promise:t,resolve:s,reject:a}}function El(s,a){if(Array.isArray(s))return s;if(!(Symbol.iterator in s))return Array.from(s);const t=[];for(const r of s)if(t.push(r),t.length===a)break;return t}const Ia=2,Yn=4,pr=8,so=1<<24,Ss=16,As=32,nn=64,Rr=128,ps=512,Ea=1024,Aa=2048,Rs=4096,ja=8192,fs=16384,An=32768,Nr=1<<25,Jn=65536,ar=1<<17,xc=1<<18,ti=1<<19,Tc=1<<20,zs=1<<25,Tn=65536,sr=1<<21,Fn=1<<22,tn=1<<23,yn=Symbol("$state"),Sc=Symbol("legacy props"),Ec=Symbol(""),Hi=Symbol("attributes"),Fr=Symbol("class"),Vr=Symbol("style"),ni=Symbol("text"),Ki=Symbol("form reset"),fr=new class extends Error{constructor(){super(...arguments);Ha(this,"name","StaleReactionError");Ha(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}};var Gl;const Cc=!!((Gl=globalThis.document)!=null&&Gl.contentType)&&globalThis.document.contentType.includes("xml");function no(s){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function Ac(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function Mc(s,a,t){throw new Error("https://svelte.dev/e/each_key_duplicate")}function Pc(s){throw new Error("https://svelte.dev/e/effect_in_teardown")}function Dc(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function Ic(s){throw new Error("https://svelte.dev/e/effect_orphan")}function zc(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function Lc(s){throw new Error("https://svelte.dev/e/props_invalid_value")}function Oc(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function Rc(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function Nc(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function Fc(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}function Vc(){console.warn("https://svelte.dev/e/derived_inert")}function $c(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function Bc(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function io(s){return s===this.v}function ro(s,a){return s!=s?a==a:s!==a||s!==null&&typeof s=="object"||typeof s=="function"}function lo(s){return!ro(s,this.v)}let ma=null;function Zn(s){ma=s}function Lt(s,a=!1,t){ma={p:ma,i:!1,c:null,e:null,s,x:null,r:Ct,l:ei&&!a?{s:null,u:null,$:[]}:null}}function Ot(s){var a=ma,t=a.e;if(t!==null){a.e=null;for(var r of t)Mo(r)}return a.i=!0,ma=a.p,{}}function Li(){return!ei||ma!==null&&ma.l===null}let un=[];function oo(){var s=un;un=[],to(s)}function an(s){if(un.length===0&&!di){var a=un;queueMicrotask(()=>{a===un&&oo()})}un.push(s)}function qc(){for(;un.length>0;)oo()}function co(s){var a=Ct;if(a===null)return zt.f|=tn,s;if(!(a.f&An)&&!(a.f&Yn))throw s;Qs(s,a)}function Qs(s,a){for(;a!==null;){if(a.f&Rr){if(!(a.f&An))throw s;try{a.b.error(s);return}catch(t){s=t}}a=a.parent}throw s}const jc=-7169;function ga(s,a){s.f=s.f&jc|a}function nl(s){s.f&ps||s.deps===null?ga(s,Ea):ga(s,Rs)}function vo(s){if(s!==null)for(const a of s)!(a.f&Ia)||!(a.f&Tn)||(a.f^=Tn,vo(a.deps))}function uo(s,a,t){s.f&Aa?a.add(s):s.f&Rs&&t.add(s),vo(s.deps),ga(s,Ea)}function il(s,a,t){if(s==null)return a(void 0),t&&t(void 0),Us;const r=Fs(()=>s.subscribe(a,t));return r.unsubscribe?()=>r.unsubscribe():r}const Mn=[];function Uc(s,a){return{subscribe:Oi(s,a).subscribe}}function Oi(s,a=Us){let t=null;const r=new Set;function o(v){if(ro(s,v)&&(s=v,t)){const f=!Mn.length;for(const _ of r)_[1](),Mn.push(_,s);if(f){for(let _=0;_{r.delete(_),r.size===0&&t&&(t(),t=null)}}return{set:o,update:d,subscribe:u}}function Ri(s,a,t){const r=!Array.isArray(s),o=r?[s]:s;if(!o.every(Boolean))throw new Error("derived() expects stores as input, got a falsy value");const d=a.length<2;return Uc(t,(u,v)=>{let f=!1;const _=[];let b=0,m=Us;const h=()=>{if(b)return;m();const A=a(r?_[0]:_,u,v);d?u(A):m=typeof A=="function"?A:Us},M=o.map((A,$)=>il(A,C=>{_[$]=C,b&=~(1<<$),f&&h()},()=>{b|=1<<$}));return f=!0,h(),function(){to(M),m(),f=!1}})}function On(s){let a;return il(s,t=>a=t)(),a}let $r=!1,ii=!1,Br=Symbol("unmounted");function la(s,a,t){var d;const r=(d=t[a])!=null?d:t[a]={store:null,source:ko(void 0),unsubscribe:Us};if(r.store!==s&&!(Br in t))if(r.unsubscribe(),r.store=s!=null?s:null,s==null)r.source.v=void 0,r.unsubscribe=Us;else{var o=!0;r.unsubscribe=il(s,u=>{o?r.source.v=u:l(r.source,u)}),o=!1}return s&&Br in t?On(s):e(r.source)}function dn(s,a){return Wc(s,a),a}function Ma(){const s={};function a(){hr(()=>{for(var t in s)s[t].unsubscribe();Ql(s,Br,{enumerable:!1,value:!0})})}return[s,a]}function Wc(s,a){$r=!0;try{s.set(a)}finally{$r=!1}}function vn(){ii=!0}function Hc(s){var a=ii;try{return ii=!1,[s(),ii]}finally{ii=a}}let Sr=null,Pn=null,ut=null,ci=null,Da=null,qr=null,di=!1,Er=!1,Rn=null,Gi=null;var Cl=0;let Kc=1;var Bn,Js,_n,qn,jn,hn,Un,$s,gi,as,mi,Zs,Ps,Ds,Wn,Hn,Jt,jr,ri,Ur,po,fo,Yi,Gc,Wr,zn;const cr=class cr{constructor(){vt(this,Jt);Ha(this,"id",Kc++);vt(this,Bn,!1);Ha(this,"linked",!0);vt(this,Js,null);vt(this,_n,null);Ha(this,"async_deriveds",new Map);Ha(this,"current",new Map);Ha(this,"previous",new Map);Ha(this,"unblocked",new Set);vt(this,qn,new Set);vt(this,jn,new Set);vt(this,hn,new Set);vt(this,Un,0);vt(this,$s,new Map);vt(this,gi,null);vt(this,as,[]);vt(this,mi,[]);vt(this,Zs,new Set);vt(this,Ps,new Set);vt(this,Ds,new Map);vt(this,Wn,new Set);Ha(this,"is_fork",!1);vt(this,Hn,!1)}skip_effect(a){F(this,Ds).has(a)||F(this,Ds).set(a,{d:[],m:[]}),F(this,Wn).delete(a)}unskip_effect(a,t=r=>this.schedule(r)){var r=F(this,Ds).get(a);if(r){F(this,Ds).delete(a);for(var o of r.d)ga(o,Aa),t(o);for(o of r.m)ga(o,Rs),t(o)}F(this,Wn).add(a)}capture(a,t,r=!1){a.v!==Sa&&!this.previous.has(a)&&this.previous.set(a,a.v),a.f&tn||(this.current.set(a,[t,r]),Da==null||Da.set(a,t)),this.is_fork||(a.v=t)}activate(){ut=this}deactivate(){ut=null,Da=null}flush(){try{Er=!0,ut=this,jt(this,Jt,ri).call(this)}finally{Cl=0,qr=null,Rn=null,Gi=null,Er=!1,ut=null,Da=null,wn.clear()}}discard(){for(const a of F(this,jn))a(this);F(this,jn).clear(),F(this,hn).clear(),jt(this,Jt,zn).call(this)}register_created_effect(a){F(this,mi).push(a)}increment(a,t){var r;if(gt(this,Un,F(this,Un)+1),a){let o=(r=F(this,$s).get(t))!=null?r:0;F(this,$s).set(t,o+1)}}decrement(a,t){var r;if(gt(this,Un,F(this,Un)-1),a){let o=(r=F(this,$s).get(t))!=null?r:0;o===1?F(this,$s).delete(t):F(this,$s).set(t,o-1)}F(this,Hn)||(gt(this,Hn,!0),an(()=>{gt(this,Hn,!1),this.linked&&this.flush()}))}transfer_effects(a,t){for(const r of a)F(this,Zs).add(r);for(const r of t)F(this,Ps).add(r);a.clear(),t.clear()}oncommit(a){F(this,qn).add(a)}ondiscard(a){F(this,jn).add(a)}on_fork_commit(a){F(this,hn).add(a)}run_fork_commit_callbacks(){for(const a of F(this,hn))a(this);F(this,hn).clear()}settled(){var a;return((a=F(this,gi))!=null?a:gt(this,gi,ao())).promise}static ensure(){var a;if(ut===null){const t=ut=new cr;jt(a=t,Jt,Wr).call(a),!Er&&!di&&an(()=>{F(t,Bn)||t.flush()})}return ut}apply(){{Da=null;return}}schedule(a){var o;if(qr=a,(o=a.b)!=null&&o.is_pending&&a.f&(Yn|pr|so)&&!(a.f&An)){a.b.defer_effect(a);return}for(var t=a;t.parent!==null;){t=t.parent;var r=t.f;if(Rn!==null&&t===Ct&&(zt===null||!(zt.f&Ia))&&!$r)return;if(r&(nn|As)){if(!(r&Ea))return;t.f^=Ea}}F(this,as).push(t)}};Bn=new WeakMap,Js=new WeakMap,_n=new WeakMap,qn=new WeakMap,jn=new WeakMap,hn=new WeakMap,Un=new WeakMap,$s=new WeakMap,gi=new WeakMap,as=new WeakMap,mi=new WeakMap,Zs=new WeakMap,Ps=new WeakMap,Ds=new WeakMap,Wn=new WeakMap,Hn=new WeakMap,Jt=new WeakSet,jr=function(){if(this.is_fork)return!0;for(const r of F(this,$s).keys()){for(var a=r,t=!1;a.parent!==null;){if(F(this,Ds).has(a)){t=!0;break}a=a.parent}if(!t)return!0}return!1},ri=function(){var f,_,b,m;if(gt(this,Bn,!0),Cl++>1e3&&(jt(this,Jt,zn).call(this),Jc()),!jt(this,Jt,jr).call(this)){for(const h of F(this,Zs))F(this,Ps).delete(h),ga(h,Aa),this.schedule(h);for(const h of F(this,Ps))ga(h,Rs),this.schedule(h)}const a=F(this,as);gt(this,as,[]),this.apply();var t=Rn=[],r=[],o=Gi=[];for(const h of a)try{jt(this,Jt,Ur).call(this,h,t,r)}catch(M){throw go(h),M}if(ut=null,o.length>0){var d=cr.ensure();for(const h of o)d.schedule(h)}if(Rn=null,Gi=null,jt(this,Jt,jr).call(this)){jt(this,Jt,Yi).call(this,r),jt(this,Jt,Yi).call(this,t);for(const[h,M]of F(this,Ds))ho(h,M);o.length>0&&jt(f=ut,Jt,ri).call(f);return}const u=jt(this,Jt,po).call(this);if(u){jt(_=u,Jt,fo).call(_,this);return}F(this,Zs).clear(),F(this,Ps).clear();for(const h of F(this,qn))h(this);F(this,qn).clear(),ci=this,Al(r),Al(t),ci=null,(b=F(this,gi))==null||b.resolve();var v=ut;if(this.linked&&F(this,Un)===0&&jt(this,Jt,zn).call(this),F(this,as).length>0){v===null&&(v=this,jt(this,Jt,Wr).call(this));const h=v;F(h,as).push(...F(this,as).filter(M=>!F(h,as).includes(M)))}v!==null&&jt(m=v,Jt,ri).call(m)},Ur=function(a,t,r){a.f^=Ea;for(var o=a.first;o!==null;){var d=o.f,u=(d&(As|nn))!==0,v=u&&(d&Ea)!==0,f=v||(d&ja)!==0||F(this,Ds).has(o);if(!f&&o.fn!==null){u?o.f^=Ea:d&Yn?t.push(o):Fi(o)&&(d&Ss&&F(this,Ps).add(o),Qn(o));var _=o.first;if(_!==null){o=_;continue}}for(;o!==null;){var b=o.next;if(b!==null){o=b;break}o=o.parent}}},po=function(){for(var a=F(this,Js);a!==null;){if(!a.is_fork){for(const[t,[,r]]of this.current)if(a.current.has(t)&&!r)return a}a=F(a,Js)}return null},fo=function(a){var r;for(const[o,d]of a.current)!this.previous.has(o)&&a.previous.has(o)&&this.previous.set(o,a.previous.get(o)),this.current.set(o,d);for(const[o,d]of a.async_deriveds){const u=this.async_deriveds.get(o);u&&d.promise.then(u.resolve)}const t=o=>{var d=o.reactions;if(d!==null)for(const f of d){var u=f.f;if(u&Ia)t(f);else{var v=f;u&(Fn|Ss)&&!this.async_deriveds.has(v)&&(F(this,Ps).delete(v),ga(v,Aa),this.schedule(v))}}};for(const o of this.current.keys())t(o);this.oncommit(()=>a.discard()),jt(r=a,Jt,zn).call(r),ut=this,jt(this,Jt,ri).call(this)},Yi=function(a){for(var t=0;t!this.current.has(h));if(o.length===0)a&&m.discard();else if(t.length>0){if(a)for(const h of F(this,Wn))m.unskip_effect(h,M=>{var A;M.f&(Ss|Fn)?m.schedule(M):jt(A=m,Jt,Yi).call(A,[M])});m.activate();var d=new Set,u=new Map;for(var v of t)_o(v,o,d,u);u=new Map;var f=[...m.current.keys()].filter(h=>this.current.has(h)?this.current.get(h)[0]!==h.v:!0);if(f.length>0)for(const h of F(this,mi))!(h.f&(fs|ja|ar))&&rl(h,f,u)&&(h.f&(Fn|Ss)?(ga(h,Aa),m.schedule(h)):F(m,Zs).add(h));if(F(m,as).length>0){m.apply();for(var _ of F(m,as))jt(b=m,Jt,Ur).call(b,_,[],[]);gt(m,as,[])}m.deactivate()}}}},Wr=function(){Pn===null?Sr=Pn=this:(gt(Pn,_n,this),gt(this,Js,Pn)),Pn=this},zn=function(){var a=F(this,Js),t=F(this,_n);a===null?Sr=t:gt(a,_n,t),t===null?Pn=a:gt(t,Js,a),this.linked=!1};let Sn=cr;function Yc(s){var a=di;di=!0;try{for(var t;;){if(qc(),ut===null)return t;ut.flush()}}finally{di=a}}function Jc(){try{zc()}catch(s){Qs(s,qr)}}let ws=null;function Al(s){var a=s.length;if(a!==0){for(var t=0;t0)){wn.clear();for(const o of ws){if(o.f&(fs|ja))continue;const d=[o];let u=o.parent;for(;u!==null;)ws.has(u)&&(ws.delete(u),d.push(u)),u=u.parent;for(let v=d.length-1;v>=0;v--){const f=d[v];f.f&(fs|ja)||Qn(f)}}ws.clear()}}ws=null}}function _o(s,a,t,r){if(!t.has(s)&&(t.add(s),s.reactions!==null))for(const o of s.reactions){const d=o.f;d&Ia?_o(o,a,t,r):d&(Fn|Ss)&&!(d&Aa)&&rl(o,a,r)&&(ga(o,Aa),ll(o))}}function rl(s,a,t){const r=t.get(s);if(r!==void 0)return r;if(s.deps!==null)for(const o of s.deps){if(Gn.call(a,o))return!0;if(o.f&Ia&&rl(o,a,t))return t.set(o,!0),!0}return t.set(s,!1),!1}function ll(s){ut.schedule(s)}function ho(s,a){if(!(s.f&As&&s.f&Ea)){s.f&Aa?a.d.push(s):s.f&Rs&&a.m.push(s),ga(s,Ea);for(var t=s.first;t!==null;)ho(t,a),t=t.next}}function go(s){ga(s,Ea);for(var a=s.first;a!==null;)go(a),a=a.next}function Zc(s){let a=0,t=En(0),r;return()=>{vl()&&(e(t),gr(()=>(a===0&&(r=Fs(()=>s(()=>vi(t)))),a+=1,()=>{an(()=>{a-=1,a===0&&(r==null||r(),r=void 0,vi(t))})})))}}var Xc=Jn|ti;function Qc(s,a,t,r){new ed(s,a,t,r)}var os,al,cs,gn,Ka,ds,Ba,ss,Bs,mn,Xs,Kn,bi,yi,qs,dr,ba,td,ad,sd,Hr,Ji,Zi,Kr,Gr;class ed{constructor(a,t,r,o){vt(this,ba);Ha(this,"parent");Ha(this,"is_pending",!1);Ha(this,"transform_error");vt(this,os);vt(this,al,null);vt(this,cs);vt(this,gn);vt(this,Ka);vt(this,ds,null);vt(this,Ba,null);vt(this,ss,null);vt(this,Bs,null);vt(this,mn,0);vt(this,Xs,0);vt(this,Kn,!1);vt(this,bi,new Set);vt(this,yi,new Set);vt(this,qs,null);vt(this,dr,Zc(()=>(gt(this,qs,En(F(this,mn))),()=>{gt(this,qs,null)})));var d,u;gt(this,os,a),gt(this,cs,t),gt(this,gn,v=>{var f=Ct;f.b=this,f.f|=Rr,r(v)}),this.parent=Ct.b,this.transform_error=(u=o!=null?o:(d=this.parent)==null?void 0:d.transform_error)!=null?u:v=>v,gt(this,Ka,ul(()=>{jt(this,ba,Hr).call(this)},Xc))}defer_effect(a){uo(a,F(this,bi),F(this,yi))}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!F(this,cs).pending}update_pending_count(a,t){jt(this,ba,Kr).call(this,a,t),gt(this,mn,F(this,mn)+a),!(!F(this,qs)||F(this,Kn))&&(gt(this,Kn,!0),an(()=>{gt(this,Kn,!1),F(this,qs)&&Xn(F(this,qs),F(this,mn))}))}get_effect_pending(){return F(this,dr).call(this),e(F(this,qs))}error(a){if(!F(this,cs).onerror&&!F(this,cs).failed)throw a;ut!=null&&ut.is_fork?(F(this,ds)&&ut.skip_effect(F(this,ds)),F(this,Ba)&&ut.skip_effect(F(this,Ba)),F(this,ss)&&ut.skip_effect(F(this,ss)),ut.on_fork_commit(()=>{jt(this,ba,Gr).call(this,a)})):jt(this,ba,Gr).call(this,a)}}os=new WeakMap,al=new WeakMap,cs=new WeakMap,gn=new WeakMap,Ka=new WeakMap,ds=new WeakMap,Ba=new WeakMap,ss=new WeakMap,Bs=new WeakMap,mn=new WeakMap,Xs=new WeakMap,Kn=new WeakMap,bi=new WeakMap,yi=new WeakMap,qs=new WeakMap,dr=new WeakMap,ba=new WeakSet,td=function(){try{gt(this,ds,vs(()=>F(this,gn).call(this,F(this,os))))}catch(a){this.error(a)}},ad=function(a){const t=F(this,cs).failed;t&>(this,ss,vs(()=>{t(F(this,os),()=>a,()=>()=>{})}))},sd=function(){const a=F(this,cs).pending;a&&(this.is_pending=!0,gt(this,Ba,vs(()=>a(F(this,os)))),an(()=>{var t=gt(this,Bs,document.createDocumentFragment()),r=Ws();t.append(r),gt(this,ds,jt(this,ba,Zi).call(this,()=>vs(()=>F(this,gn).call(this,r)))),F(this,Xs)===0&&(F(this,os).before(t),gt(this,Bs,null),kn(F(this,Ba),()=>{gt(this,Ba,null)}),jt(this,ba,Ji).call(this,ut))}))},Hr=function(){try{if(this.is_pending=this.has_pending_snippet(),gt(this,Xs,0),gt(this,mn,0),gt(this,ds,vs(()=>{F(this,gn).call(this,F(this,os))})),F(this,Xs)>0){var a=gt(this,Bs,document.createDocumentFragment());_l(F(this,ds),a);const t=F(this,cs).pending;gt(this,Ba,vs(()=>t(F(this,os))))}else jt(this,ba,Ji).call(this,ut)}catch(t){this.error(t)}},Ji=function(a){this.is_pending=!1,a.transfer_effects(F(this,bi),F(this,yi))},Zi=function(a){var t=Ct,r=zt,o=ma;Ns(F(this,Ka)),hs(F(this,Ka)),Zn(F(this,Ka).ctx);try{return Sn.ensure(),a()}catch(d){return co(d),null}finally{Ns(t),hs(r),Zn(o)}},Kr=function(a,t){var r;if(!this.has_pending_snippet()){this.parent&&jt(r=this.parent,ba,Kr).call(r,a,t);return}gt(this,Xs,F(this,Xs)+a),F(this,Xs)===0&&(jt(this,ba,Ji).call(this,t),F(this,Ba)&&kn(F(this,Ba),()=>{gt(this,Ba,null)}),F(this,Bs)&&(F(this,os).before(F(this,Bs)),gt(this,Bs,null)))},Gr=function(a){F(this,ds)&&(Ya(F(this,ds)),gt(this,ds,null)),F(this,Ba)&&(Ya(F(this,Ba)),gt(this,Ba,null)),F(this,ss)&&(Ya(F(this,ss)),gt(this,ss,null));var t=F(this,cs).onerror;let r=F(this,cs).failed;var o=!1,d=!1;const u=()=>{if(o){Bc();return}o=!0,d&&Fc(),F(this,ss)!==null&&kn(F(this,ss),()=>{gt(this,ss,null)}),jt(this,ba,Zi).call(this,()=>{jt(this,ba,Hr).call(this)})},v=f=>{try{d=!0,t==null||t(f,u),d=!1}catch(_){Qs(_,F(this,Ka)&&F(this,Ka).parent)}r&>(this,ss,jt(this,ba,Zi).call(this,()=>{try{return vs(()=>{var _=Ct;_.b=this,_.f|=Rr,r(F(this,os),()=>f,()=>u)})}catch(_){return Qs(_,F(this,Ka).parent),null}}))};an(()=>{var f;try{f=this.transform_error(a)}catch(_){Qs(_,F(this,Ka)&&F(this,Ka).parent);return}f!==null&&typeof f=="object"&&typeof f.then=="function"?f.then(v,_=>Qs(_,F(this,Ka)&&F(this,Ka).parent)):v(f)})};function nd(s,a,t,r){const o=Li()?fi:ol;var d=s.filter(h=>!h.settled);if(t.length===0&&d.length===0){r(a.map(o));return}var u=Ct,v=id(),f=d.length===1?d[0].promise:d.length>1?Promise.all(d.map(h=>h.promise)):null;function _(h){if(!(u.f&fs)){v();try{r(h)}catch(M){Qs(M,u)}nr()}}var b=mo();if(t.length===0){f.then(()=>_(a.map(o))).finally(b);return}function m(){Promise.all(t.map(h=>rd(h))).then(h=>_([...a.map(o),...h])).catch(h=>Qs(h,u)).finally(b)}f?f.then(()=>{v(),m(),nr()}):m()}function id(){var s=Ct,a=zt,t=ma,r=ut;return function(d=!0){Ns(s),hs(a),Zn(t),d&&!(s.f&fs)&&(r==null||r.activate(),r==null||r.apply())}}function nr(s=!0){Ns(null),hs(null),Zn(null),s&&(ut==null||ut.deactivate())}function mo(){var s=Ct,a=s.b,t=ut,r=a.is_rendered();return a.update_pending_count(1,t),t.increment(r,s),()=>{a.update_pending_count(-1,t),t.decrement(r,s)}}function fi(s){var a=Ia|Aa;return Ct!==null&&(Ct.f|=ti),{ctx:ma,deps:null,effects:null,equals:io,f:a,fn:s,reactions:null,rv:0,v:Sa,wv:0,parent:Ct,ac:null}}const Bi=Symbol("obsolete");function rd(s,a,t){let r=Ct;r===null&&Ac();var o=void 0,d=En(Sa),u=!zt,v=new Set;return gd(()=>{var M;var f=Ct,_=ao();o=_.promise;try{Promise.resolve(s()).then(_.resolve,A=>{A!==fr&&_.reject(A)}).finally(nr)}catch(A){_.reject(A),nr()}var b=ut;if(u){if(f.f&An)var m=mo();if(r.b.is_rendered())(M=b.async_deriveds.get(f))==null||M.reject(Bi);else for(const A of v.values())A.reject(Bi);v.add(_),b.async_deriveds.set(f,_)}const h=(A,$=void 0)=>{m==null||m(),v.delete(_),$!==Bi&&(b.activate(),$?(d.f|=tn,Xn(d,$)):(d.f&tn&&(d.f^=tn),Xn(d,A)),b.deactivate())};_.promise.then(h,A=>h(null,A||"unknown"))}),hr(()=>{for(const f of v)f.reject(Bi)}),new Promise(f=>{function _(b){function m(){b===o?f(d):_(o)}b.then(m,m)}_(o)})}function fe(s){const a=fi(s);return Oo(a),a}function ol(s){const a=fi(s);return a.equals=lo,a}function ld(s){var a=s.effects;if(a!==null){s.effects=null;for(var t=0;t0&&!wo&&cd()}return a}function cd(){wo=!1;for(const s of ir){s.f&Ea&&ga(s,Rs);let a;try{a=Fi(s)}catch{a=!0}a&&Qn(s)}ir.clear()}function vi(s){l(s,s.v+1)}function xo(s,a,t){var r=s.reactions;if(r!==null)for(var o=Li(),d=r.length,u=0;u{if(xn===d)return v();var f=zt,_=xn;hs(null),Il(d);var b=v();return hs(f),Il(_),b};return r&&t.set("length",S(s.length)),new Proxy(s,{defineProperty(v,f,_){(!("value"in _)||_.configurable===!1||_.enumerable===!1||_.writable===!1)&&Oc();var b=t.get(f);return b===void 0?u(()=>{var m=S(_.value);return t.set(f,m),m}):l(b,_.value,!0),!0},deleteProperty(v,f){var _=t.get(f);if(_===void 0){if(f in v){const b=u(()=>S(Sa));t.set(f,b),vi(o)}}else l(_,Sa),vi(o);return!0},get(v,f,_){var M;if(f===yn)return s;var b=t.get(f),m=f in v;if(b===void 0&&(!m||(M=Nn(v,f))!=null&&M.writable)&&(b=u(()=>{var A=wt(m?v[f]:Sa),$=S(A);return $}),t.set(f,b)),b!==void 0){var h=e(b);return h===Sa?void 0:h}return Reflect.get(v,f,_)},getOwnPropertyDescriptor(v,f){var _=Reflect.getOwnPropertyDescriptor(v,f);if(_&&"value"in _){var b=t.get(f);b&&(_.value=e(b))}else if(_===void 0){var m=t.get(f),h=m==null?void 0:m.v;if(m!==void 0&&h!==Sa)return{enumerable:!0,configurable:!0,value:h,writable:!0}}return _},has(v,f){var h;if(f===yn)return!0;var _=t.get(f),b=_!==void 0&&_.v!==Sa||Reflect.has(v,f);if(_!==void 0||Ct!==null&&(!b||(h=Nn(v,f))!=null&&h.writable)){_===void 0&&(_=u(()=>{var M=b?wt(v[f]):Sa,A=S(M);return A}),t.set(f,_));var m=e(_);if(m===Sa)return!1}return b},set(v,f,_,b){var re;var m=t.get(f),h=f in v;if(r&&f==="length")for(var M=_;MS(Sa)),t.set(M+"",A))}if(m===void 0)(!h||(re=Nn(v,f))!=null&&re.writable)&&(m=u(()=>S(void 0)),l(m,wt(_)),t.set(f,m));else{h=m.v!==Sa;var $=u(()=>wt(_));l(m,$)}var C=Reflect.getOwnPropertyDescriptor(v,f);if(C!=null&&C.set&&C.set.call(b,_),!h){if(r&&typeof f=="string"){var O=t.get("length"),le=Number(f);Number.isInteger(le)&&le>=O.v&&l(O,le+1)}vi(o)}return!0},ownKeys(v){e(o);var f=Reflect.ownKeys(v).filter(m=>{var h=t.get(m);return h===void 0||h.v!==Sa});for(var[_,b]of t)b.v!==Sa&&!(_ in v)&&f.push(_);return f},setPrototypeOf(){Rc()}})}function Ml(s){try{if(s!==null&&typeof s=="object"&&yn in s)return s[yn]}catch{}return s}function dd(s,a){return Object.is(Ml(s),Ml(a))}var Yr,To,So,Eo;function vd(){if(Yr===void 0){Yr=window,To=/Firefox/.test(navigator.userAgent);var s=Element.prototype,a=Node.prototype,t=Text.prototype;So=Nn(a,"firstChild").get,Eo=Nn(a,"nextSibling").get,Sl(s)&&(s[Fr]=void 0,s[Hi]=null,s[Vr]=void 0,s.__e=void 0),Sl(t)&&(t[ni]=void 0)}}function Ws(s=""){return document.createTextNode(s)}function Ls(s){return So.call(s)}function Ni(s){return Eo.call(s)}function n(s,a){return Ls(s)}function mt(s,a=!1){{var t=Ls(s);return t instanceof Comment&&t.data===""?Ni(t):t}}function i(s,a=1,t=!1){let r=s;for(;a--;)r=Ni(r);return r}function ud(s){s.textContent=""}function Co(){return!1}function Ao(s,a,t){return document.createElementNS(a!=null?a:Zl,s,void 0)}let Pl=!1;function pd(){Pl||(Pl=!0,document.addEventListener("reset",s=>{Promise.resolve().then(()=>{var a;if(!s.defaultPrevented)for(const t of s.target.elements)(a=t[Ki])==null||a.call(t)})},{capture:!0}))}function _r(s){var a=zt,t=Ct;hs(null),Ns(null);try{return s()}finally{hs(a),Ns(t)}}function dl(s,a,t,r=t){s.addEventListener(a,()=>_r(t));const o=s[Ki];o?s[Ki]=()=>{o(),r(!0)}:s[Ki]=()=>r(!0),pd()}function fd(s){Ct===null&&(zt===null&&Ic(),Dc()),Hs&&Pc()}function _d(s,a){var t=a.last;t===null?a.last=a.first=s:(t.next=s,s.prev=t,a.last=s)}function Ks(s,a){var u;var t=Ct;t!==null&&t.f&ja&&(s|=ja);var r={ctx:ma,deps:null,nodes:null,f:s|Aa|ps,first:null,fn:a,last:null,next:null,parent:t,b:t&&t.b,prev:null,teardown:null,wv:0,ac:null};ut==null||ut.register_created_effect(r);var o=r;if(s&Yn)Rn!==null?Rn.push(r):Sn.ensure().schedule(r);else if(a!==null){try{Qn(r)}catch(v){throw Ya(r),v}o.deps===null&&o.teardown===null&&o.nodes===null&&o.first===o.last&&!(o.f&ti)&&(o=o.first,s&Ss&&s&Jn&&o!==null&&(o.f|=Jn))}if(o!==null&&(o.parent=t,t!==null&&_d(o,t),zt!==null&&zt.f&Ia&&!(s&nn))){var d=zt;((u=d.effects)!=null?u:d.effects=[]).push(o)}return r}function vl(){return zt!==null&&!Es}function hr(s){const a=Ks(pr,null);return ga(a,Ea),a.teardown=s,a}function ka(s){var o;fd();var a=Ct.f,t=!zt&&(a&As)!==0&&(a&An)===0;if(t){var r=ma;((o=r.e)!=null?o:r.e=[]).push(s)}else return Mo(s)}function Mo(s){return Ks(Yn|Tc,s)}function hd(s){Sn.ensure();const a=Ks(nn|ti,s);return(t={})=>new Promise(r=>{t.outro?kn(a,()=>{Ya(a),r(void 0)}):(Ya(a),r(void 0))})}function js(s){return Ks(Yn,s)}function gd(s){return Ks(Fn|ti,s)}function gr(s,a=0){return Ks(pr|a,s)}function w(s,a=[],t=[],r=[]){nd(r,a,t,o=>{Ks(pr,()=>s(...o.map(e)))})}function ul(s,a=0){var t=Ks(Ss|a,s);return t}function vs(s){return Ks(As|ti,s)}function Po(s){var a=s.teardown;if(a!==null){const t=Hs,r=zt;Dl(!0),hs(null);try{a.call(null)}finally{Dl(t),hs(r)}}}function pl(s,a=!1){var t=s.first;for(s.first=s.last=null;t!==null;){const o=t.ac;o!==null&&_r(()=>{o.abort(fr)});var r=t.next;t.f&nn?t.parent=null:Ya(t,a),t=r}}function md(s){for(var a=s.first;a!==null;){var t=a.next;a.f&As||Ya(a),a=t}}function Ya(s,a=!0){var t=!1;(a||s.f&xc)&&s.nodes!==null&&s.nodes.end!==null&&(Do(s.nodes.start,s.nodes.end),t=!0),ga(s,Nr),pl(s,a&&!t),_i(s,0);var r=s.nodes&&s.nodes.t;if(r!==null)for(const d of r)d.stop();Po(s),s.f^=Nr,s.f|=fs;var o=s.parent;o!==null&&o.first!==null&&Io(s),s.next=s.prev=s.teardown=s.ctx=s.deps=s.fn=s.nodes=s.ac=s.b=null}function Do(s,a){for(;s!==null;){var t=s===a?null:Ni(s);s.remove(),s=t}}function Io(s){var a=s.parent,t=s.prev,r=s.next;t!==null&&(t.next=r),r!==null&&(r.prev=t),a!==null&&(a.first===s&&(a.first=r),a.last===s&&(a.last=t))}function kn(s,a,t=!0){var r=[];zo(s,r,!0);var o=()=>{t&&Ya(s),a&&a()},d=r.length;if(d>0){var u=()=>--d||o();for(var v of r)v.out(u)}else o()}function zo(s,a,t){if(!(s.f&ja)){s.f^=ja;var r=s.nodes&&s.nodes.t;if(r!==null)for(const v of r)(v.is_global||t)&&a.push(v);for(var o=s.first;o!==null;){var d=o.next;if(!(o.f&nn)){var u=(o.f&Jn)!==0||(o.f&As)!==0&&(s.f&Ss)!==0;zo(o,a,u?t:!1)}o=d}}}function fl(s){Lo(s,!0)}function Lo(s,a){if(s.f&ja){s.f^=ja,s.f&Ea||(ga(s,Aa),Sn.ensure().schedule(s));for(var t=s.first;t!==null;){var r=t.next,o=(t.f&Jn)!==0||(t.f&As)!==0;Lo(t,o?a:!1),t=r}var d=s.nodes&&s.nodes.t;if(d!==null)for(const u of d)(u.is_global||a)&&u.in()}}function _l(s,a){if(s.nodes)for(var t=s.nodes.start,r=s.nodes.end;t!==null;){var o=t===r?null:Ni(t);a.append(t),t=o}}let Xi=!1,Hs=!1;function Dl(s){Hs=s}let zt=null,Es=!1;function hs(s){zt=s}let Ct=null;function Ns(s){Ct=s}let _s=null;function Oo(s){zt!==null&&(_s===null?_s=[s]:_s.push(s))}let Ga=null,es=0,ls=null;function bd(s){ls=s}let Ro=1,pn=0,xn=pn;function Il(s){xn=s}function No(){return++Ro}function Fi(s){var a=s.f;if(a&Aa)return!0;if(a&Ia&&(s.f&=~Tn),a&Rs){for(var t=s.deps,r=t.length,o=0;os.wv)return!0}a&ps&&Da===null&&ga(s,Ea)}return!1}function Fo(s,a,t=!0){var r=s.reactions;if(r!==null&&!(_s!==null&&Gn.call(_s,s)))for(var o=0;o{s.ac.abort(fr)}),s.ac=null);try{s.f|=sr;var b=s.fn,m=b();s.f|=An;var h=s.deps,M=ut==null?void 0:ut.is_fork;if(Ga!==null){var A;if(M||_i(s,es),h!==null&&es>0)for(h.length=es+Ga.length,A=0;At==null?void 0:t.call(this,d))}return s.startsWith("pointer")||s.startsWith("touch")||s==="wheel"?an(()=>{a.addEventListener(s,o,r)}):a.addEventListener(s,o,r),o}function Os(s,a,t,r,o){var d={capture:r,passive:o},u=kd(s,a,t,d);(a===document.body||a===window||a===document||a instanceof HTMLMediaElement)&&hr(()=>{a.removeEventListener(s,u,d)})}function L(s,a,t){var r;((r=a[fn])!=null?r:a[fn]={})[s]=t}function pa(s){for(var a=0;a{throw le});throw h}}finally{s[fn]=a,delete s.currentTarget,hs(b),Ns(m)}}}var Yl;const Cr=((Yl=globalThis==null?void 0:globalThis.window)==null?void 0:Yl.trustedTypes)&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:s=>s});function xd(s){var a;return(a=Cr==null?void 0:Cr.createHTML(s))!=null?a:s}function jo(s){var a=Ao("template");return a.innerHTML=xd(s.replaceAll("","")),a.content}function Cn(s,a){var t=Ct;t.nodes===null&&(t.nodes={start:s,end:a,a:null,t:null})}function p(s,a){var t=(a&_c)!==0,r=(a&hc)!==0,o,d=!s.startsWith("");return()=>{o===void 0&&(o=jo(d?s:""+s),t||(o=Ls(o)));var u=r||To?document.importNode(o,!0):o.cloneNode(!0);if(t){var v=Ls(u),f=u.lastChild;Cn(v,f)}else Cn(u,u);return u}}function Td(s,a,t="svg"){var r=!s.startsWith(""),o=`<${t}>${r?s:""+s}`,d;return()=>{if(!d){var u=jo(o),v=Ls(u);d=Ls(v)}var f=d.cloneNode(!0);return Cn(f,f),f}}function Uo(s,a){return Td(s,a,"svg")}function je(s=""){{var a=Ws(s+"");return Cn(a,a),a}}function Vi(){var s=document.createDocumentFragment(),a=document.createComment(""),t=Ws();return s.append(a,t),Cn(a,t),s}function c(s,a){s!==null&&s.before(a)}const Sd=["touchstart","touchmove"];function Ed(s){return Sd.includes(s)}function y(s,a){var r;var t=a==null?"":typeof a=="object"?`${a}`:a;t!==((r=s[ni])!=null?r:s[ni]=s.nodeValue)&&(s[ni]=t,s.nodeValue=`${t}`)}function Cd(s,a){return Ad(s,a)}const qi=new Map;function Ad(s,{target:a,anchor:t,props:r={},events:o,context:d,intro:u=!0,transformError:v}){vd();var f=void 0,_=hd(()=>{var b=t!=null?t:a.appendChild(Ws());Qc(b,{pending:()=>{}},M=>{Lt({});var A=ma;d&&(A.c=d),o&&(r.$$events=o),f=s(M,r)||{},Ot()},v);var m=new Set,h=M=>{for(var A=0;A{var C;for(var M of m)for(const O of[a,document]){var A=qi.get(O),$=A.get(M);--$==0?(O.removeEventListener(M,Zr),A.delete(M),A.size===0&&qi.delete(O)):A.set(M,$)}Jr.delete(h),b!==t&&((C=b.parentNode)==null||C.removeChild(b))}});return Md.set(f,_),f}let Md=new WeakMap;var Ts,Is,ns,bn,wi,ki,vr;class Pd{constructor(a,t=!0){Ha(this,"anchor");vt(this,Ts,new Map);vt(this,Is,new Map);vt(this,ns,new Map);vt(this,bn,new Set);vt(this,wi,!0);vt(this,ki,a=>{if(F(this,Ts).has(a)){var t=F(this,Ts).get(a),r=F(this,Is).get(t);if(r)fl(r),F(this,bn).delete(t);else{var o=F(this,ns).get(t);o&&(F(this,Is).set(t,o.effect),F(this,ns).delete(t),o.fragment.lastChild.remove(),this.anchor.before(o.fragment),r=o.effect)}for(const[d,u]of F(this,Ts)){if(F(this,Ts).delete(d),d===a)break;const v=F(this,ns).get(u);v&&(Ya(v.effect),F(this,ns).delete(u))}for(const[d,u]of F(this,Is)){if(d===t||F(this,bn).has(d))continue;const v=()=>{if(Array.from(F(this,Ts).values()).includes(d)){var _=document.createDocumentFragment();_l(u,_),_.append(Ws()),F(this,ns).set(d,{effect:u,fragment:_})}else Ya(u);F(this,bn).delete(d),F(this,Is).delete(d)};F(this,wi)||!r?(F(this,bn).add(d),kn(u,v,!1)):v()}}});vt(this,vr,a=>{F(this,Ts).delete(a);const t=Array.from(F(this,Ts).values());for(const[r,o]of F(this,ns))t.includes(r)||(Ya(o.effect),F(this,ns).delete(r))});this.anchor=a,gt(this,wi,t)}ensure(a,t){var r=ut,o=Co();if(t&&!F(this,Is).has(a)&&!F(this,ns).has(a))if(o){var d=document.createDocumentFragment(),u=Ws();d.append(u),F(this,ns).set(a,{effect:vs(()=>t(u)),fragment:d})}else F(this,Is).set(a,vs(()=>t(this.anchor)));if(F(this,Ts).set(r,a),o){for(const[v,f]of F(this,Is))v===a?r.unskip_effect(f):r.skip_effect(f);for(const[v,f]of F(this,ns))v===a?r.unskip_effect(f.effect):r.skip_effect(f.effect);r.oncommit(F(this,ki)),r.ondiscard(F(this,vr))}else F(this,ki).call(this,r)}}Ts=new WeakMap,Is=new WeakMap,ns=new WeakMap,bn=new WeakMap,wi=new WeakMap,ki=new WeakMap,vr=new WeakMap;function Zt(s){ma===null&&no(),ei&&ma.l!==null?Dd(ma).m.push(s):ka(()=>{const a=Fs(s);if(typeof a=="function")return a})}function mr(s){ma===null&&no(),Zt(()=>()=>Fs(s))}function Dd(s){var t;var a=s.l;return(t=a.u)!=null?t:a.u={a:[],b:[],m:[]}}function x(s,a,t=!1){var r=new Pd(s),o=t?Jn:0;function d(u,v){r.ensure(u,v)}ul(()=>{var u=!1;a((v,f=0)=>{u=!0,d(f,v)}),u||d(-1,null)},o)}function ht(s,a){return a}function Id(s,a,t){var m;for(var r=[],o=a.length,d,u=a.length,v=0;v{if(d){if(d.pending.delete(h),d.done.add(h),d.pending.size===0){var M=s.outrogroups;Xr(s,ur(d.done)),M.delete(d),M.size===0&&(s.outrogroups=null)}}else u-=1},!1)}if(u===0){var f=r.length===0&&t!==null;if(f){var _=t,b=_.parentNode;ud(b),b.append(_),s.items.clear()}Xr(s,a,!f)}else d={pending:new Set(a),done:new Set},((m=s.outrogroups)!=null?m:s.outrogroups=new Set).add(d)}function Xr(s,a,t=!0){var r;if(s.pending.size>0){r=new Set;for(const u of s.pending.values())for(const v of u)r.add(s.items.get(v).e)}for(var o=0;o{var re=t();return sl(re)?re:re==null?[]:ur(re)}),h,M=new Map,A=!0;function $(re){le.effect.f&fs||(le.pending.delete(re),le.fallback=b,zd(le,h,u,a,r),b!==null&&(h.length===0?b.f&zs?(b.f^=zs,li(b,null,u)):fl(b):kn(b,()=>{b=null})))}function C(re){le.pending.delete(re)}var O=ul(()=>{h=e(m);for(var re=h.length,me=new Set,ee=ut,P=Co(),R=0;Rd(u)):(b=vs(()=>d(Dn!=null?Dn:Dn=Ws())),b.f|=zs)),re>me.size&&Mc(),!A)if(M.set(ee,me),P){for(const[Y,B]of v)me.has(Y)||ee.skip_effect(B.e);ee.oncommit($),ee.ondiscard(C)}else $(ee);e(m)}),le={effect:O,items:v,pending:M,outrogroups:null,fallback:b};A=!1}function si(s){for(;s!==null&&!(s.f&As);)s=s.next;return s}function zd(s,a,t,r,o){var Pe,Y,B,ge,ae,G,ue,Se,ie;var d=(r&oc)!==0,u=a.length,v=s.items,f=si(s.effect.first),_,b=null,m,h=[],M=[],A,$,C,O;if(d)for(O=0;O0){var Ae=r&Jl&&u===0?t:null;if(d){for(O=0;O{var q,J;if(m!==void 0)for(C of m)(J=(q=C.nodes)==null?void 0:q.a)==null||J.apply()})}function Ld(s,a,t,r,o,d,u,v){var f=u&rc?u&cc?En(t):ko(t,!1,!1):null,_=u&lc?En(o):null;return{v:f,i:_,e:vs(()=>(d(a,f!=null?f:t,_!=null?_:o,v),()=>{s.delete(r)}))}}function li(s,a,t){if(s.nodes)for(var r=s.nodes.start,o=s.nodes.end,d=a&&!(a.f&zs)?a.nodes.start:t;r!==null;){var u=Ni(r);if(d.before(r),r===o)return;r=u}}function Ys(s,a,t){a===null?s.effect.first=t:a.next=t,t===null?s.effect.last=a:t.prev=a}function Ll(s,a,t=!1,r=!1,o=!1,d=!1){var u=s,v="";if(t)var f=s;w(()=>{var M;var _=Ct;if(v!==(v=(M=a())!=null?M:"")){if(t){_.nodes=null,f.innerHTML=v,v!==""&&Cn(Ls(f),f.lastChild);return}if(_.nodes!==null&&(Do(_.nodes.start,_.nodes.end),_.nodes=null),v!==""){var b=r?gc:o?mc:void 0,m=Ao(r?"svg":o?"math":"template",b);m.innerHTML=v;var h=r||o?m:m.content;if(Cn(Ls(h),h.lastChild),r||o)for(;Ls(h);)u.before(Ls(h));else u.before(h)}}})}function en(s,a,t){js(()=>{var r=Fs(()=>a(s,t==null?void 0:t())||{});if(r!=null&&r.destroy)return()=>r.destroy()})}function Wo(s){var a,t,r="";if(typeof s=="string"||typeof s=="number")r+=s;else if(typeof s=="object")if(Array.isArray(s)){var o=s.length;for(a=0;a=0;){var v=u+d;(u===0||Ol.includes(r[u-1]))&&(v===r.length||Ol.includes(r[v]))?r=(u===0?"":r.substring(0,u))+r.substring(v+1):u=v}}return r===""?null:r}function Rl(s,a=!1){var t=a?" !important;":";",r="";for(var o of Object.keys(s)){var d=s[o];d!=null&&d!==""&&(r+=" "+o+": "+d+t)}return r}function Ar(s){return s[0]!=="-"||s[1]!=="-"?s.toLowerCase():s}function Nd(s,a){if(a){var t="",r,o;if(Array.isArray(a)?(r=a[0],o=a[1]):r=a,s){s=String(s).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var d=!1,u=0,v=!1,f=[];r&&f.push(...Object.keys(r).map(Ar)),o&&f.push(...Object.keys(o).map(Ar));var _=0,b=-1;const $=s.length;for(var m=0;m<$;m++){var h=s[m];if(v?h==="/"&&s[m-1]==="*"&&(v=!1):d?d===h&&(d=!1):h==="/"&&s[m+1]==="*"?v=!0:h==='"'||h==="'"?d=h:h==="("?u++:h===")"&&u--,!v&&d===!1&&u===0){if(h===":"&&b===-1)b=m;else if(h===";"||m===$-1){if(b!==-1){var M=Ar(s.substring(_,b).trim());if(!f.includes(M)){h!==";"&&m++;var A=s.substring(_,m).trim();t+=" "+A+";"}}_=m+1,b=-1}}}}return r&&(t+=Rl(r)),o&&(t+=Rl(o,!0)),t=t.trim(),t===""?null:t}return s==null?null:String(s)}function Me(s,a,t,r,o,d){var u=s[Fr];if(u!==t||u===void 0){var v=Rd(t,r,d);v==null?s.removeAttribute("class"):a?s.className=v:s.setAttribute("class",v),s[Fr]=t}else if(d&&o!==d)for(var f in d){var _=!!d[f];(o==null||_!==!!o[f])&&s.classList.toggle(f,_)}return d}function Mr(s,a={},t,r){for(var o in t){var d=t[o];a[o]!==d&&(t[o]==null?s.style.removeProperty(o):s.style.setProperty(o,d,r))}}function va(s,a,t,r){var o=s[Vr];if(o!==a){var d=Nd(a,r);d==null?s.removeAttribute("style"):s.style.cssText=d,s[Vr]=a}else r&&(Array.isArray(r)?(Mr(s,t==null?void 0:t[0],r[0]),Mr(s,t==null?void 0:t[1],r[1],"important")):Mr(s,t,r));return r}function Ho(s,a,t=!1){if(s.multiple){if(a==null)return;if(!sl(a))return $c();for(var r of s.options)r.selected=a.includes(ui(r));return}for(r of s.options){var o=ui(r);if(dd(o,a)){r.selected=!0;return}}(!t||a!==void 0)&&(s.selectedIndex=-1)}function Fd(s){var a=new MutationObserver(()=>{Ho(s,s.__value)});a.observe(s,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),hr(()=>{a.disconnect()})}function Nl(s,a,t=a){var r=new WeakSet,o=!0;dl(s,"change",d=>{var _;var u=d?"[selected]":":checked",v;if(s.multiple)v=[].map.call(s.querySelectorAll(u),ui);else{var f=(_=s.querySelector(u))!=null?_:s.querySelector("option:not([disabled])");v=f&&ui(f)}t(v),s.__value=v,ut!==null&&r.add(ut)}),js(()=>{var d=a();if(s===document.activeElement){var u=ut;if(r.has(u))return}if(Ho(s,d,o),o&&d===void 0){var v=s.querySelector(":checked");v!==null&&(d=ui(v),t(d))}s.__value=d,o=!1}),Fd(s)}function ui(s){return"__value"in s?s.__value:s.value}const Vd=Symbol("is custom element"),$d=Symbol("is html"),Bd=Cc?"progress":"PROGRESS";function br(s,a){var t=hl(s);t.value===(t.value=a!=null?a:void 0)||s.value===a&&(a!==0||s.nodeName!==Bd)||(s.value=a!=null?a:"")}function qd(s,a){var t=hl(s);t.checked!==(t.checked=a!=null?a:void 0)&&(s.checked=a)}function Tt(s,a,t,r){var o=hl(s);o[a]!==(o[a]=t)&&(a==="loading"&&(s[Ec]=t),t==null?s.removeAttribute(a):typeof t!="string"&&jd(s).includes(a)?s[a]=t:s.setAttribute(a,t))}function hl(s){var a;return(a=s[Hi])!=null?a:s[Hi]={[Vd]:s.nodeName.includes("-"),[$d]:s.namespaceURI===Zl}}var Fl=new Map;function jd(s){var a=s.getAttribute("is")||s.nodeName,t=Fl.get(a);if(t)return t;Fl.set(a,t=[]);for(var r,o=s,d=Element.prototype;d!==o;){r=yc(o);for(var u in r)r[u].set&&u!=="innerHTML"&&u!=="textContent"&&u!=="innerText"&&t.push(u);o=eo(o)}return t}function He(s,a,t=a){var r=new WeakSet;dl(s,"input",async o=>{var d=o?s.defaultValue:s.value;if(d=Pr(s)?Dr(d):d,t(d),ut!==null&&r.add(ut),await wd(),d!==(d=a())){var u=s.selectionStart,v=s.selectionEnd,f=s.value.length;if(s.value=d!=null?d:"",v!==null){var _=s.value.length;u===v&&v===f&&_>f?(s.selectionStart=_,s.selectionEnd=_):(s.selectionStart=u,s.selectionEnd=Math.min(v,_))}}}),Fs(a)==null&&s.value&&(t(Pr(s)?Dr(s.value):s.value),ut!==null&&r.add(ut)),gr(()=>{var o=a();if(s===document.activeElement){var d=ut;if(r.has(d))return}Pr(s)&&o===Dr(s.value)||s.type==="date"&&!o&&!s.value||o!==s.value&&(s.value=o!=null?o:"")})}function sa(s,a,t=a){dl(s,"change",r=>{var o=r?s.defaultChecked:s.checked;t(o)}),Fs(a)==null&&t(s.checked),gr(()=>{var r=a();s.checked=!!r})}function Pr(s){var a=s.type;return a==="number"||a==="range"}function Dr(s){return s===""?null:+s}function Ir(s,a){return s===a||(s==null?void 0:s[yn])===a}function gl(s={},a,t,r){var o=ma.r,d=Ct;return js(()=>{var u,v;return gr(()=>{u=v,v=[],Fs(()=>{Ir(t(...v),s)||(a(s,...v),u&&Ir(t(...u),s)&&a(null,...u))})}),()=>{let f=d;for(;f!==o&&f.parent!==null&&f.parent.f&Nr;)f=f.parent;const _=()=>{v&&Ir(t(...v),s)&&a(null,...v)},b=f.teardown;f.teardown=()=>{_(),b==null||b()}}}),s}function Ft(s,a,t,r){var me,ee;var o=!ei||(t&vc)!==0,d=(t&pc)!==0,u=(t&fc)!==0,v=r,f=!0,_=void 0,b=()=>u&&o?(_!=null||(_=fi(r)),e(_)):(f&&(f=!1,v=u?Fs(r):r),v);let m;if(d){var h=yn in s||Sc in s;m=(ee=(me=Nn(s,a))==null?void 0:me.set)!=null?ee:h&&a in s?P=>s[a]=P:void 0}var M,A=!1;d?[M,A]=Hc(()=>s[a]):M=s[a],M===void 0&&r!==void 0&&(M=b(),m&&(o&&Lc(),m(M)));var $;if(o?$=()=>{var P=s[a];return P===void 0?b():(f=!0,P)}:$=()=>{var P=s[a];return P!==void 0&&(v=void 0),P===void 0?v:P},o&&!(t&uc))return $;if(m){var C=s.$$legacy;return function(P,R){return arguments.length>0?((!o||!R||C||A)&&m(R?$():P),P):$()}}var O=!1,le=(t&dc?fi:ol)(()=>(O=!1,$()));d&&e(le);var re=Ct;return function(P,R){if(arguments.length>0){const te=R?e(le):o&&d?wt(P):P;return l(le,te),O=!0,v!==void 0&&(v=te),P}return Hs&&O||re.f&fs?le.v:e(le)}}const Ud="modulepreload",Wd=function(s){return"/"+s},Vl={},Hd=function(a,t,r){let o=Promise.resolve();if(t&&t.length>0){document.getElementsByTagName("link");const u=document.querySelector("meta[property=csp-nonce]"),v=(u==null?void 0:u.nonce)||(u==null?void 0:u.getAttribute("nonce"));o=Promise.allSettled(t.map(f=>{if(f=Wd(f),f in Vl)return;Vl[f]=!0;const _=f.endsWith(".css"),b=_?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${f}"]${b}`))return;const m=document.createElement("link");if(m.rel=_?"stylesheet":Ud,_||(m.as="script"),m.crossOrigin="",m.href=f,v&&m.setAttribute("nonce",v),document.head.appendChild(m),_)return new Promise((h,M)=>{m.addEventListener("load",h),m.addEventListener("error",()=>M(new Error(`Unable to preload CSS for ${f}`)))})}))}function d(u){const v=new Event("vite:preloadError",{cancelable:!0});if(v.payload=u,window.dispatchEvent(v),!v.defaultPrevented)throw u}return o.then(u=>{for(const v of u||[])v.status==="rejected"&&d(v.reason);return a().catch(d)})},yr="/assets/app_icon-CfHainhY.png";function Kd(s,a,t,r){if(typeof a=="function"?s!==a||!r:!a.has(s))throw new TypeError("Cannot read private member from an object whose class did not declare it");return t==="m"?r:t==="a"?r.call(s):r?r.value:a.get(s)}function Gd(s,a,t,r,o){if(typeof a=="function"?s!==a||!0:!a.has(s))throw new TypeError("Cannot write private member to an object whose class did not declare it");return a.set(s,t),t}var Qi;const gs="__TAURI_TO_IPC_KEY__";function Yd(s,a=!1){return window.__TAURI_INTERNALS__.transformCallback(s,a)}async function E(s,a={},t){return window.__TAURI_INTERNALS__.invoke(s,a,t)}class Jd{get rid(){return Kd(this,Qi,"f")}constructor(a){Qi.set(this,void 0),Gd(this,Qi,a)}async close(){return E("plugin:resources|close",{rid:this.rid})}}Qi=new WeakMap;var ts;(function(s){s.WINDOW_RESIZED="tauri://resize",s.WINDOW_MOVED="tauri://move",s.WINDOW_CLOSE_REQUESTED="tauri://close-requested",s.WINDOW_DESTROYED="tauri://destroyed",s.WINDOW_FOCUS="tauri://focus",s.WINDOW_BLUR="tauri://blur",s.WINDOW_SCALE_FACTOR_CHANGED="tauri://scale-change",s.WINDOW_THEME_CHANGED="tauri://theme-changed",s.WINDOW_CREATED="tauri://window-created",s.WINDOW_SUSPENDED="tauri://suspended",s.WINDOW_RESUMED="tauri://resumed",s.WEBVIEW_CREATED="tauri://webview-created",s.DRAG_ENTER="tauri://drag-enter",s.DRAG_OVER="tauri://drag-over",s.DRAG_DROP="tauri://drag-drop",s.DRAG_LEAVE="tauri://drag-leave"})(ts||(ts={}));async function Ko(s,a){window.__TAURI_EVENT_PLUGIN_INTERNALS__.unregisterListener(s,a),await E("plugin:event|unlisten",{event:s,eventId:a})}async function oa(s,a,t){var r;const o=typeof(t==null?void 0:t.target)=="string"?{kind:"AnyLabel",label:t.target}:(r=t==null?void 0:t.target)!==null&&r!==void 0?r:{kind:"Any"};return E("plugin:event|listen",{event:s,target:o,handler:Yd(a)}).then(d=>async()=>Ko(s,d))}async function Zd(s,a,t){return oa(s,r=>{Ko(s,r.id),a(r)},t)}async function Go(s,a){await E("plugin:event|emit",{event:s,payload:a})}async function Xd(s,a,t){await E("plugin:event|emit_to",{target:typeof s=="string"?{kind:"AnyLabel",label:s}:s,event:a,payload:t})}const Qd={engine:{backend:"whisper-cpp",whisper_cpp:{model_dir:"",model_size:"tiny",device:"auto",threads:0,language:"auto"},moonshine:{model_size:"base",language:"en"},parakeet:{model_size:"tdt-0.6b-v3",language:"auto"},remote_openai:{endpoint:"http://localhost:8000/v1",api_key:null,model:"whisper-1",language:"",timeout_secs:30},s1_mini:{enabled:!1,styling:"semi-formal"}},audio:{vad_threshold:.5,input_device_index:null,evdev_device:null,noise_suppression:!1,gain:1,dynamic_stream:!0},ui:{show_overlay:!0,overlay_style:"mono_bars",overlay_position:"center",overlay_monitor:"primary",auto_show_settings:!1,show_notification:!1,show_command_overlay:!0,command_overlay_duration_secs:3},features:{remove_fillers:!0,custom_vocabulary:["VoxCtrl"],spoken_punctuation:!0,auto_format_lists:!0,snippets:{}},openai:{enabled:!1,model:"llama3.2:1b",mode:"clean",custom_prompt:null,system_prompt:"Fix grammar and punctuation only. Return only the corrected text, no commentary.",user_prompt:"{text}",endpoint:"http://localhost:11434",api_key:null,timeout_secs:8},tts:{enabled:!1,engine:"espeak",voice:"en-us-lessac-medium",voice_dir:"",stop_key:["KEY_ESCAPE"],response_overlay:!0,speed:1,gpu:!1,hf_token:null,pocket_tts:{voice:"alba",prewarm:!1,voice_dir:"",gpu:!1},inflect_micro:{model_dir:"",seed:0,noise_scale:.667,prewarm:!1},breeze_tts_2:{voice_mode:"prompt",cloned_voice:"alba",speaker_prompt:"A calm and clear female voice speaking at a natural pace",model_dir:"",prewarm:!1,gpu:!1},vox_cpm_2:{voice_mode:"prompt",cloned_voice:"alba",voice_dir:"",speaker_prompt:"A calm young female voice speaking clearly with a gentle tone.",ultimate_cloning:!1,model_dir:"",prewarm:!1,gpu:!1},memory_mode:"always_loaded",idle_unload_secs:900,snippets:{VoxCtrl:"Vox Control"}},mcp:{server_enabled:!1,record_timeout:15,visual_feedback:!0},updates:{auto_check:!0,skipped_version:null}},Nt=Oi(Qd),Vs=Oi(!1),rr=Oi(!1);let hi=!1,zr=null;async function ev(){try{const s=await E("get_config");Nt.set(s),Vs.set(!1),rr.set(!0),setTimeout(()=>{hi=!0},0)}catch(s){console.error("loadConfig:",s),rr.set(!0),setTimeout(()=>{hi=!0},0)}}async function ml(s){await E("save_config",{newConfig:s}),Vs.set(!1)}Nt.subscribe(s=>{hi&&(zr&&clearTimeout(zr),zr=setTimeout(async()=>{try{await ml(s),console.log("Config auto-saved successfully!")}catch(a){console.error("Auto-saving config failed:",a)}},400))});ev();oa("config-changed",s=>{hi=!1,Nt.set(s.payload),setTimeout(()=>{hi=!0},0)}).catch(s=>{console.error("Failed to setup config-changed listener:",s)});const xa=Oi({recording:!1,processing:!1,speaking:!1,mcp_recording:!1,audio_ready:!0,word_count:0,active_target_id:"default",active_target_label:"Focused Window"}),tv=Ri(xa,s=>s.recording),av=Ri(xa,s=>s.speaking),sv=Ri(xa,s=>s.mcp_recording);Ri(xa,s=>s.word_count);Ri(xa,s=>{var a;return(a=s.active_target_label)!=null?a:"Focused Window"});let Yo=0;oa("status-tick",s=>{Yo=Date.now(),xa.set(s.payload)});E("get_status").then(xa.set).catch(console.error);const nv=2e3,iv=1e3;setInterval(()=>{Date.now()-Yo{})},iv);var rv=p('

      '),lv=p(`

      Using the HF_TOKEN environment variable. It takes precedence over a saved - token and is not written to your config.

      `),ov=p('

      '),cv=p(`

      `),dv=p('

      '),vv=p(`

      General

      Setup

      Run the first-launch setup wizard again

      Walks through the engine, model, hotkey, overlay and voice choices in one flow, and downloads - whatever it needs. Your current settings stay in place until you change them in the wizard.

      Hugging Face Access Token

      Hugging Face access token

      Used by every gated model VoxCtrl can download — Pocket-TTS, Breeze-TTS-2, and VoxCPM2 in - the TTS tab. Create a token at huggingface.co/settings/tokens and accept each - model's license on its Hugging Face page before downloading. Enter it once here; the setup - wizard reads and writes the same token, so the two always match.

      Updates

      Asks GitHub once, shortly after startup, whether a newer release has been published, and - offers to install it. The request carries nothing about you or your machine, and it is the - only network request VoxCtrl makes on its own. Turn it off and VoxCtrl never contacts GitHub - unless you press "Check now".

      Check now

      MCP Server

      How long transcribe_voice listens when the calling agent does not ask for a - specific timeout. An explicit timeout_seconds in the tool call still wins.

      Socket: /tmp/voxctrl-mcp.sock (Linux) / \\\\.\\pipe\\voxctrl-mcp (Windows)

      `);function uv(s,a){Lt(a,!0);let t=Ft(a,"cfg",15);function r(){Nt.set(t()),Vs.set(!0)}let o=S(null);const d=fe(()=>!!e(o)),u=fe(()=>{var se,Ee;return(Ee=(se=e(o))!=null?se:t().tts.hf_token)!=null?Ee:""});function v(se){if(e(d))return;const Ee=se.target.value;t(t().tts.hf_token=Ee.trim()?Ee.trim():null,!0),r()}let f=S(null),_=S(!1),b=S(null),m=S(null);async function h(){l(_,!0),l(m,null),l(b,null);try{l(b,await E("check_for_update"),!0)}catch(se){l(m,`${se}`)}finally{l(_,!1)}}async function M(){try{await E("open_update_window")}catch(se){l(m,`${se}`)}}async function A(){l(f,null);try{await E("open_setup_wizard")}catch(se){l(f,`${se}`)}}Zt(()=>{E("hf_token_env").then(se=>l(o,se&&se.trim()?se.trim():null,!0)).catch(()=>l(o,null))});var $=vv(),C=i(n($),2),O=i(n(C),2),le=i(n(O),2),re=i(O,4);{var me=se=>{var Ee=rv(),Re=n(Ee);w(()=>{var he;return y(Re,`Could not open the wizard: ${(he=e(f))!=null?he:""}`)}),c(se,Ee)};x(re,se=>{e(f)&&se(me)})}var ee=i(C,2),P=i(n(ee),2),R=i(n(P),2),te=i(P,2);{var Ae=se=>{var Ee=lv();c(se,Ee)};x(te,se=>{e(d)&&se(Ae)})}var Pe=i(ee,2),Y=i(n(Pe),2),B=i(n(Y),2),ge=i(Y,4),ae=i(n(ge),2),G=n(ae),ue=i(ge,2);{var Se=se=>{var Ee=ov(),Re=n(Ee);w(()=>{var he;return y(Re,`VoxCtrl ${(he=e(b).current_version)!=null?he:""} is the latest release.`)}),c(se,Ee)},ie=se=>{var Ee=cv(),Re=n(Ee),he=i(Re);w(()=>{var ne,xe;return y(Re,`Version ${(ne=e(b).update.version)!=null?ne:""} is available (you have - ${(xe=e(b).update.current_version)!=null?xe:""}). `)}),L("click",he,M),c(se,Ee)};x(ue,se=>{var Ee;e(b)&&!e(b).update?se(Se):(Ee=e(b))!=null&&Ee.update&&se(ie,1)})}var q=i(ue,2);{var J=se=>{var Ee=dv(),Re=n(Ee);w(()=>{var he;return y(Re,`Could not check for updates: ${(he=e(m))!=null?he:""}`)}),c(se,Ee)};x(q,se=>{e(m)&&se(J)})}var ye=i(Pe,2),_e=i(n(ye),2),oe=i(n(_e),2),W=i(_e,2),ve=i(n(W),2),I=i(W,2),H=i(n(I),2);w(()=>{br(R,e(u)),R.readOnly=e(d),Tt(R,"title",e(d)?"Set by the HF_TOKEN environment variable":void 0),ae.disabled=e(_),y(G,e(_)?"Checking…":"Check for updates")}),L("click",le,A),L("input",R,v),L("change",B,r),sa(B,()=>t().updates.auto_check,se=>t(t().updates.auto_check=se,!0)),L("click",ae,h),L("change",oe,r),sa(oe,()=>t().mcp.server_enabled,se=>t(t().mcp.server_enabled=se,!0)),L("change",ve,r),sa(ve,()=>t().mcp.visual_feedback,se=>t(t().mcp.visual_feedback=se,!0)),L("change",H,r),He(H,()=>t().mcp.record_timeout,se=>t(t().mcp.record_timeout=se,!0)),c(s,$),Ot()}pa(["click","input","change"]);var pv=p(''),fv=p('
      '),_v=p('
      ');function da(s,a){Lt(a,!0);let t=Ft(a,"value",15),r=Ft(a,"options",19,()=>[]),o=Ft(a,"disabled",3,!1),d=Ft(a,"defaultToFirst",3,!1),u=S(!1),v=S(null),f=S("");const _=4,b=8;function m(P){let R=P.parentElement;for(;R&&R!==document.body&&R!==document.documentElement;){const te=window.getComputedStyle(R);if(te.transform&&te.transform!=="none"||te.perspective&&te.perspective!=="none"||te.filter&&te.filter!=="none"||te.contain==="paint"||te.contain==="layout"||te.contain==="strict"||te.contain==="content"||te.willChange==="transform")return R;R=R.parentElement}return null}function h(){if(!e(v))return;const P=e(v).getBoundingClientRect(),R=m(e(v)),te=R?R.getBoundingClientRect():null,Ae=te?te.left:0,Pe=te?te.top:0,Y=te?te.bottom:window.innerHeight,B=window.innerHeight-P.bottom-_-b,ge=P.top-_-b,ae=B<160&&ge>B,G=Math.max(120,Math.floor(ae?ge:B));l(f,ae?`position: fixed; left: ${P.left-Ae}px; width: ${P.width}px; bottom: ${Y-P.top+_}px; max-height: ${G}px;`:`position: fixed; left: ${P.left-Ae}px; width: ${P.width}px; top: ${P.bottom+_-Pe}px; max-height: ${G}px;`,!0)}function M(){l(u,!e(u)),e(u)&&h()}let A=fe(()=>r().map(P=>typeof P=="string"?{value:P,label:P,disabled:!1}:{value:P.value,label:P.label,disabled:!!P.disabled}));ka(()=>{if(d()&&e(A).length>0&&!e(A).find(R=>R.value===t())){const R=e(A).find(te=>!te.disabled)||e(A)[0];R&&t()!==R.value&&(t(R.value),a.onchange&&a.onchange(R.value))}});let $=fe(()=>{const P=e(A).find(R=>R.value===t());if(P)return P.label;if(d()&&e(A).length>0){const R=e(A).find(te=>!te.disabled)||e(A)[0];if(R)return R.label}return t()!==void 0&&t()!==null?String(t()):""});ka(()=>{if(!e(u))return;const P=te=>{e(v)&&!e(v).contains(te.target)&&l(u,!1)},R=()=>h();return document.addEventListener("click",P),window.addEventListener("scroll",R,!0),window.addEventListener("resize",R),()=>{document.removeEventListener("click",P),window.removeEventListener("scroll",R,!0),window.removeEventListener("resize",R)}});function C(P){t(P),l(u,!1),a.onchange&&a.onchange(P)}var O=_v(),le=n(O),re=n(le),me=i(le,2);{var ee=P=>{var R=fv();_t(R,21,()=>e(A),ht,(te,Ae)=>{var Pe=pv();let Y;var B=n(Pe);w(()=>{Y=Me(Pe,1,"custom-dropdown-item svelte-1heock4",null,Y,{selected:e(Ae).value===t()}),Pe.disabled=e(Ae).disabled,y(B,e(Ae).label)}),L("click",Pe,ge=>{ge.preventDefault(),ge.stopPropagation(),C(e(Ae).value)}),c(te,Pe)}),w(()=>va(R,e(f))),c(P,R)};x(me,P=>{e(u)&&!o()&&P(ee)})}gl(O,P=>l(v,P),()=>e(v)),w(()=>{le.disabled=o(),y(re,e($))}),L("click",le,M),c(s,O),Ot()}pa(["click"]);var hv=p(''),gv=p('
      '),mv=p(`

      Design your own overlay style by adding a folder with an index.html and style.css to the folder below — it - shows up here as a selectable style automatically. A working example - (a copy of Voice Card, ready to duplicate) and a README covering the - format live there already.

      Custom overlay styles:

      `,1),bv=p('

      Visual & Feedback

      Overlay & HUD

      Alerts & OS Integration

      Application Window

      ');function yv(s,a){Lt(a,!0);let t=Ft(a,"cfg",15),r=S(wt([])),o=S(wt([])),d=S(""),u=fe(()=>[{value:"voice_card",label:"Voice Card"},{value:"waveform",label:"Waveform"},{value:"pulse",label:"Pulse Ring"},{value:"blue_wave",label:"Ocean Wave"},{value:"mono_bars",label:"Mono Bars"},{value:"spectrum",label:"Neon Spectrum"},{value:"terminal",label:"Retro Terminal"},{value:"vinyl",label:"Analog VU"},...e(r).map(J=>({value:J.name,label:J.name}))]);const v=[{value:"top",label:"Top of screen"},{value:"center",label:"Center of screen"},{value:"bottom",label:"Bottom of screen"}];let f=fe(()=>[{value:"primary",label:"Primary Monitor"},...e(o).filter(J=>J.name).map(J=>({value:J.name,label:`${J.name} (${J.width}x${J.height})${J.is_primary?" [Primary]":""}`}))]);Zt(async()=>{try{l(r,await E("get_custom_overlays"),!0)}catch(J){console.error("Failed to fetch custom overlays:",J)}try{l(o,await E("get_available_monitors"),!0)}catch(J){console.error("Failed to fetch available monitors:",J)}try{l(d,await E("get_custom_overlays_dir"),!0)}catch(J){console.error("Failed to fetch custom overlays directory:",J)}});function _(){Nt.set(t()),Vs.set(!0)}function b(J){_(),Go("overlay-style-selected",J)}var m=bv(),h=i(n(m),2),M=i(n(h),2),A=i(n(M),2),$=i(M,2),C=i(n($),2),O=i($,2);{var le=J=>{var ye=hv(),_e=i(n(ye),2);L("change",_e,_),He(_e,()=>t().ui.command_overlay_duration_secs,oe=>t(t().ui.command_overlay_duration_secs=oe,!0)),c(J,ye)};x(O,J=>{t().ui.show_command_overlay&&J(le)})}var re=i(O,2),me=i(n(re),2);da(me,{get options(){return e(u)},onchange:b,get value(){return t().ui.overlay_style},set value(J){t(t().ui.overlay_style=J,!0)}});var ee=i(re,2),P=i(n(ee),2);da(P,{get options(){return v},onchange:_,get value(){return t().ui.overlay_position},set value(J){t(t().ui.overlay_position=J,!0)}});var R=i(ee,2),te=i(n(R),2);da(te,{get options(){return e(f)},onchange:_,get value(){return t().ui.overlay_monitor},set value(J){t(t().ui.overlay_monitor=J,!0)}});var Ae=i(R,2);{var Pe=J=>{var ye=gv(),_e=n(ye),oe=n(_e);w(()=>{var W;return y(oe,`⚠️ Configured monitor "${(W=t().ui.overlay_monitor)!=null?W:""}" is disconnected. Using Primary Monitor.`)}),c(J,ye)},Y=fe(()=>t().ui.overlay_monitor!=="primary"&&e(o).length>0&&!e(o).some(J=>J.name===t().ui.overlay_monitor));x(Ae,J=>{e(Y)&&J(Pe)})}var B=i(Ae,2);{var ge=J=>{var ye=mv(),_e=i(mt(ye),2),oe=i(n(_e)),W=n(oe);w(()=>y(W,e(d))),c(J,ye)};x(B,J=>{e(d)&&J(ge)})}var ae=i(h,2),G=i(n(ae),2),ue=i(n(G),2),Se=i(ae,2),ie=i(n(Se),2),q=i(n(ie),2);L("change",A,_),sa(A,()=>t().ui.show_overlay,J=>t(t().ui.show_overlay=J,!0)),L("change",C,_),sa(C,()=>t().ui.show_command_overlay,J=>t(t().ui.show_command_overlay=J,!0)),L("change",ue,_),sa(ue,()=>t().ui.show_notification,J=>t(t().ui.show_notification=J,!0)),L("change",q,_),sa(q,()=>t().ui.auto_show_settings,J=>t(t().ui.auto_show_settings=J,!0)),c(s,m),Ot()}pa(["change"]);var wv=p(`
      ⚠️
      Voice Model Not Downloaded

      The configuration specifies a voice model ( ) that is not currently downloaded. Please select the model size to - use and download it below, or choose another model.

      `),kv=p('⏳ Checking local model files...'),xv=p(' '),Tv=p('✔ Model downloaded and ready'),Sv=p('
      ❌ Model file missing
      '),Ev=p('

      '),Cv=p(`

      Whisper.cpp Settings

      Model directory (leave blank for default)

      Language code (e.g. en, da, fr) to force transcription in that - language, or auto to let whisper.cpp detect it. Forcing a language helps short phrases - that auto-detect sometimes misidentifies.

      Default model directory: ~/.local/share/voxctrl/models/

      `),Av=p(`
      ⚠️
      Moonshine backend not included in this build

      This build was compiled without Moonshine, so selecting it will fall - back to Whisper.cpp (using the Whisper model configured above). - Rebuild with --features moonshine to enable it.

      `),Mv=p(`
      🖥️
      Moonshine runs on the CPU in this build

      ONNX Runtime, which Moonshine uses, has no Vulkan backend, so the - Device setting above applies to Whisper.cpp only. Moonshine holds - its weights in RAM as fp32 — roughly 530 MB for base, 240 MB for tiny

      `),Pv=p('⏳ Checking local model files...'),Dv=p(' '),Iv=p('✔ Model downloaded'),zv=p('
      Model not downloaded
      '),Lv=p('
      '),Ov=p('

      Moonshine Settings

      '),Rv=p(`
      ⚠️
      Parakeet backend not included in this build

      This build was compiled without Parakeet, so selecting it will fall - back to Whisper.cpp. Rebuild with --features parakeet to enable it.

      `),Nv=p('⏳ Checking local model files...'),Fv=p(' '),Vv=p('✔ Model downloaded and ready'),$v=p('
      Model not downloaded
      '),Bv=p('
      '),qv=p('

      Parakeet Settings

      NVIDIA FastConformer TDT 0.6B with 128-mel ONNX preprocessor and INT8 quantization (~665 MB total).

      '),jv=p(''),Uv=p('
      Discovered models from server:
      '),Wv=p("
      "),Hv=p(`

      Remote Speech Engine Settings

      Connect to a network speech-to-text service supporting the OpenAI /v1/audio/transcriptions API (e.g., Faster-Whisper-Server, vLLM, LocalAI, Whisper-standalone, or OpenAI Whisper). - Audio will begin streaming to the endpoint as soon as your keybind is triggered.

      Base URL or full transcriptions path (e.g. http://192.168.1.50:8000/v1 or https://api.openai.com/v1).

      Leave blank if your local network server does not require authentication.

      Language code (e.g. en, es, fr) or leave blank/auto for automatic detection.

      `),Kv=p('

      Inference Engine

      Backend

      ');function Gv(s,a){Lt(a,!0);let t=Ft(a,"cfg",15);function r(){Nt.set(t()),Vs.set(!0)}const o=["tiny","tiny.en","base","base.en","small","small.en","medium","medium.en","large-v2","large-v3","large-v3-turbo"];let d=S(null),u=S(null),v=S(null);const f={cuda:"CUDA (NVIDIA)",vulkan:"Vulkan (AMD/Intel/NVIDIA)",coreml:"CoreML (Apple)",webgpu:"WebGPU (AMD/Intel/NVIDIA)"},_=z=>{var Z;return(Z=f[z])!=null?Z:z};let b=fe(()=>[{value:"whisper-cpp",label:"Whisper.cpp"},{value:"moonshine",label:e(u)?`Moonshine (${_(e(u))})`:"Moonshine (CPU only)"},{value:"parakeet",label:e(v)?`Parakeet TDT (${_(e(v))})`:"Parakeet TDT (CPU only)"},{value:"remote-openai",label:"Remote Speech Engine (OpenAI API)"}]),m=fe(()=>o.map(z=>({value:z,label:`${z}${e($)[z]?" ✔":""}`}))),h=fe(()=>[{value:"auto",label:e(d)?`Auto (${_(e(d))})`:"Auto"},...e(d)?[{value:e(d),label:_(e(d))}]:[],{value:"cpu",label:"CPU"}]);const M=[{value:"base",label:"Base"},{value:"tiny",label:"Tiny"}],A=[{value:"tdt-0.6b-v3",label:"TDT 0.6B v3 (INT8, ~665 MB)"}];let $=S(wt({})),C=S(!1),O=S(!1),le=S(null),re=S(!0),me=S(wt({})),ee=S(!1),P=S(!1),R=S(!0),te=S(wt({})),Ae=S(!1),Pe=S(!1);async function Y(){l(Ae,!0);const z={};for(const Z of A)try{z[Z.value]=await E("check_parakeet_downloaded",{modelSize:Z.value})}catch(pe){console.error("Failed to check Parakeet download status for "+Z.value,pe),z[Z.value]=!1}l(te,z,!0),l(Ae,!1)}async function B(z){if(!e(Pe)){l(Pe,!0);try{await E("download_parakeet_model",{modelSize:z}),e(te)[z]=!0}catch(Z){alert(`Failed to download Parakeet model: ${Z}`)}finally{l(Pe,!1)}}}async function ge(){var Z,pe;r();const z=(pe=(Z=t().engine.parakeet)==null?void 0:Z.model_size)!=null?pe:"tdt-0.6b-v3";e(R)&&!e(te)[z]&&await B(z)}let ae=S(!1),G=S(null),ue=S(wt([]));function Se(){t().engine.remote_openai||t(t().engine.remote_openai={endpoint:"http://localhost:8000/v1",api_key:null,model:"whisper-1",language:"",timeout_secs:30},!0)}async function ie(){if(Se(),!e(ae)){l(ae,!0),l(G,null);try{const z=await E("test_remote_stt",{endpoint:t().engine.remote_openai.endpoint||"http://localhost:8000/v1",apiKey:t().engine.remote_openai.api_key||null,model:t().engine.remote_openai.model||"whisper-1",timeoutSecs:t().engine.remote_openai.timeout_secs||30});l(G,{success:z.success,message:z.message},!0),z.models&&z.models.length>0&&(l(ue,z.models,!0),t().engine.remote_openai.model||(t(t().engine.remote_openai.model=z.models[0],!0),r()))}catch(z){l(G,{success:!1,message:z.toString()},!0)}finally{l(ae,!1)}}}async function q(){l(ee,!0);const z={};for(const Z of M)try{z[Z.value]=await E("check_moonshine_downloaded",{modelSize:Z.value})}catch(pe){console.error("Failed to check Moonshine download status for "+Z.value,pe),z[Z.value]=!1}l(me,z,!0),l(ee,!1)}async function J(z){if(!e(P)){l(P,!0);try{await E("download_moonshine_model",{modelSize:z}),e(me)[z]=!0}catch(Z){alert(`Failed to download Moonshine model: ${Z}`)}finally{l(P,!1)}}}async function ye(){r();const z=t().engine.moonshine.model_size;e(re)&&!e(me)[z]&&await J(z)}async function _e(){l(C,!0);const z={};for(const Z of o)try{z[Z]=await E("check_model_downloaded",{modelSize:Z,modelDir:t().engine.whisper_cpp.model_dir})}catch(pe){console.error("Failed to check download status for model "+Z,pe),z[Z]=!1}l($,z,!0),l(C,!1)}async function oe(z){if(!e(O)){l(O,!0);try{await E("download_model",{modelSize:z,modelDir:t().engine.whisper_cpp.model_dir}),e($)[z]=!0}catch(Z){alert(`Failed to download model: ${Z}`)}finally{l(O,!1)}}}async function W(){r();const z=t().engine.whisper_cpp.model_size;e($)[z]||await oe(z)}async function ve(){const z=t().engine.whisper_cpp.model_dir;if(!z){l(le,null);return}const Z=await E("check_directory_exists",{path:z});l(le,Z?null:"This folder does not exist. Please create it first or leave blank for the default location.",!0),e(le)||await _e()}function I(){r()}function H(z){z.key==="Enter"&&z.currentTarget.blur()}Zt(async()=>{var Z,pe,ce;_e();try{l(re,await E("moonshine_available"),!0)}catch(Ie){console.error("Failed to query Moonshine availability",Ie)}q();try{l(R,await E("parakeet_available"),!0)}catch(Ie){console.error("Failed to query Parakeet availability",Ie)}Y();try{const Ie=await E("accelerator_support");l(d,(Z=Ie.whisper_gpu)!=null?Z:null,!0),l(u,(pe=Ie.moonshine_gpu)!=null?pe:null,!0),l(v,(ce=Ie.parakeet_gpu)!=null?ce:null,!0)}catch(Ie){console.error("Failed to query GPU support",Ie)}const z=t().engine.whisper_cpp.device;z!=="auto"&&z!=="cpu"&&z!==e(d)&&(t(t().engine.whisper_cpp.device="auto",!0),r())});var se=Kv(),Ee=i(n(se),2);{var Re=z=>{var Z=wv(),pe=i(n(Z),2),ce=i(n(pe),2),Ie=i(n(ce)),Qe=n(Ie);w(()=>y(Qe,t().engine.whisper_cpp.model_size)),c(z,Z)};x(Ee,z=>{t().engine.backend==="whisper-cpp"&&!e(C)&&!e($)[t().engine.whisper_cpp.model_size]&&z(Re)})}var he=i(Ee,2),ne=i(n(he),2),xe=i(n(ne),2);da(xe,{get options(){return e(b)},onchange:r,get value(){return t().engine.backend},set value(z){t(t().engine.backend=z,!0)}});var Je=i(he,2);{var ke=z=>{var Z=Cv(),pe=i(n(Z),2),ce=i(n(pe),2);da(ce,{get options(){return e(m)},onchange:W,get value(){return t().engine.whisper_cpp.model_size},set value(De){t(t().engine.whisper_cpp.model_size=De,!0)}});var Ie=i(pe,2),Qe=n(Ie);{var ot=De=>{var Ge=kv();c(De,Ge)},et=De=>{var Ge=xv(),lt=n(Ge);w(()=>{var U;return y(lt,`⏳ Downloading ${(U=t().engine.whisper_cpp.model_size)!=null?U:""} (GGUF format)...`)}),c(De,Ge)},Q=De=>{var Ge=Tv();c(De,Ge)},X=De=>{var Ge=Sv(),lt=i(n(Ge),2);L("click",lt,()=>oe(t().engine.whisper_cpp.model_size)),c(De,Ge)};x(Qe,De=>{e(C)?De(ot):e(O)?De(et,1):e($)[t().engine.whisper_cpp.model_size]?De(Q,2):De(X,-1)})}var de=i(Ie,2),Ue=i(n(de),2);da(Ue,{get options(){return e(h)},onchange:r,get value(){return t().engine.whisper_cpp.device},set value(De){t(t().engine.whisper_cpp.device=De,!0)}});var Ce=i(de,2),Fe=i(n(Ce),2);let We;var st=i(Fe,2);{var it=De=>{var Ge=Ev(),lt=n(Ge);w(()=>y(lt,e(le))),c(De,Ge)};x(st,De=>{e(le)&&De(it)})}var Ke=i(Ce,2),rt=i(n(Ke),2),ct=i(Ke,2),nt=i(n(ct),2);w(()=>We=Me(Fe,1,"svelte-nfi4ak",null,We,{"field-input-error":!!e(le)})),L("change",Fe,I),Os("blur",Fe,ve),L("keydown",Fe,H),He(Fe,()=>t().engine.whisper_cpp.model_dir,De=>t(t().engine.whisper_cpp.model_dir=De,!0)),L("change",rt,r),He(rt,()=>t().engine.whisper_cpp.threads,De=>t(t().engine.whisper_cpp.threads=De,!0)),L("change",nt,r),He(nt,()=>t().engine.whisper_cpp.language,De=>t(t().engine.whisper_cpp.language=De,!0)),c(z,Z)},D=z=>{var Z=Ov(),pe=i(n(Z),2);{var ce=Ce=>{var Fe=Av();c(Ce,Fe)};x(pe,Ce=>{e(re)||Ce(ce)})}var Ie=i(pe,2);{var Qe=Ce=>{var Fe=Mv(),We=i(n(Fe),2),st=i(n(We),2),it=i(n(st),8);w(Ke=>y(it,` — - where Whisper.cpp${Ke!=null?Ke:""}. Pick Whisper.cpp if memory - matters more than Moonshine's latency.`),[()=>e(d)?` puts a quantized model in VRAM via ${_(e(d))}`:" uses a smaller quantized model"]),c(Ce,Fe)};x(Ie,Ce=>{e(re)&&!e(u)&&Ce(Qe)})}var ot=i(Ie,2),et=i(n(ot),2);da(et,{get options(){return M},onchange:ye,get value(){return t().engine.moonshine.model_size},set value(Ce){t(t().engine.moonshine.model_size=Ce,!0)}});var Q=i(ot,2);{var X=Ce=>{var Fe=Lv(),We=n(Fe);{var st=ct=>{var nt=Pv();c(ct,nt)},it=ct=>{var nt=Dv(),De=n(nt);w(()=>{var Ge;return y(De,`⏳ Downloading Moonshine ${(Ge=t().engine.moonshine.model_size)!=null?Ge:""} (ONNX)...`)}),c(ct,nt)},Ke=ct=>{var nt=Iv();c(ct,nt)},rt=ct=>{var nt=zv(),De=i(n(nt),2),Ge=n(De);w(()=>{var lt;return y(Ge,`Download ${(lt=t().engine.moonshine.model_size)!=null?lt:""}`)}),L("click",De,()=>J(t().engine.moonshine.model_size)),c(ct,nt)};x(We,ct=>{e(ee)?ct(st):e(P)?ct(it,1):e(me)[t().engine.moonshine.model_size]?ct(Ke,2):ct(rt,-1)})}c(Ce,Fe)};x(Q,Ce=>{e(re)&&Ce(X)})}var de=i(Q,2),Ue=i(n(de),2);L("change",Ue,r),He(Ue,()=>t().engine.moonshine.language,Ce=>t(t().engine.moonshine.language=Ce,!0)),c(z,Z)},k=z=>{var Z=qv(),pe=i(n(Z),2);{var ce=de=>{var Ue=Rv();c(de,Ue)};x(pe,de=>{e(R)||de(ce)})}var Ie=i(pe,2),Qe=i(n(Ie),2);da(Qe,{get options(){return A},onchange:ge,get value(){return t().engine.parakeet.model_size},set value(de){t(t().engine.parakeet.model_size=de,!0)}});var ot=i(Ie,2);{var et=de=>{var Ue=Bv(),Ce=n(Ue);{var Fe=Ke=>{var rt=Nv();c(Ke,rt)},We=Ke=>{var rt=Fv(),ct=n(rt);w(()=>{var nt;return y(ct,`⏳ Downloading Parakeet ${(nt=t().engine.parakeet.model_size)!=null?nt:""} (ONNX INT8)...`)}),c(Ke,rt)},st=Ke=>{var rt=Vv();c(Ke,rt)},it=Ke=>{var rt=$v(),ct=i(n(rt),2),nt=n(ct);w(()=>{var De;return y(nt,`Download ${(De=t().engine.parakeet.model_size)!=null?De:""}`)}),L("click",ct,()=>B(t().engine.parakeet.model_size)),c(Ke,rt)};x(Ce,Ke=>{e(Ae)?Ke(Fe):e(Pe)?Ke(We,1):e(te)[t().engine.parakeet.model_size]?Ke(st,2):Ke(it,-1)})}c(de,Ue)};x(ot,de=>{e(R)&&de(et)})}var Q=i(ot,2),X=i(n(Q),2);L("change",X,r),He(X,()=>t().engine.parakeet.language,de=>t(t().engine.parakeet.language=de,!0)),c(z,Z)},V=z=>{var Z=Hv(),pe=i(n(Z),4),ce=i(n(pe),2),Ie=i(pe,4),Qe=i(n(Ie),2),ot=i(Ie,4),et=i(n(ot),2),Q=i(ot,2);{var X=De=>{var Ge=Uv(),lt=i(n(Ge),2);_t(lt,21,()=>e(ue),ht,(U,K)=>{var be=jv();let Be;var Ye=n(be);w(()=>{Be=Me(be,1,"tag-btn svelte-nfi4ak",null,Be,{active:t().engine.remote_openai.model===e(K)}),y(Ye,e(K))}),L("click",be,()=>{t(t().engine.remote_openai.model=e(K),!0),r()}),c(U,be)}),c(De,Ge)};x(Q,De=>{e(ue).length>0&&De(X)})}var de=i(Q,2),Ue=i(n(de),2),Ce=i(de,4),Fe=i(n(Ce),2),We=i(Ce,2),st=n(We),it=n(st);{var Ke=De=>{var Ge=je("⏳ Testing Connection...");c(De,Ge)},rt=De=>{var Ge=je("🧪 Test Connection");c(De,Ge)};x(it,De=>{e(ae)?De(Ke):De(rt,-1)})}var ct=i(st,2);{var nt=De=>{var Ge=Wv();let lt;var U=n(Ge);{var K=Be=>{var Ye=je();w(()=>{var St;return y(Ye,`✔ ${(St=e(G).message)!=null?St:""}`)}),c(Be,Ye)},be=Be=>{var Ye=je();w(()=>{var St;return y(Ye,`⚠️ ${(St=e(G).message)!=null?St:""}`)}),c(Be,Ye)};x(U,Be=>{e(G).success?Be(K):Be(be,-1)})}w(()=>lt=Me(Ge,1,"status-pill svelte-nfi4ak",null,lt,{success:e(G).success,error:!e(G).success})),c(De,Ge)};x(ct,De=>{e(G)&&De(nt)})}w(()=>st.disabled=e(ae)),L("change",ce,r),He(ce,()=>t().engine.remote_openai.endpoint,De=>t(t().engine.remote_openai.endpoint=De,!0)),L("change",Qe,r),He(Qe,()=>t().engine.remote_openai.api_key,De=>t(t().engine.remote_openai.api_key=De,!0)),L("change",et,r),He(et,()=>t().engine.remote_openai.model,De=>t(t().engine.remote_openai.model=De,!0)),L("change",Ue,r),He(Ue,()=>t().engine.remote_openai.language,De=>t(t().engine.remote_openai.language=De,!0)),L("change",Fe,r),He(Fe,()=>t().engine.remote_openai.timeout_secs,De=>t(t().engine.remote_openai.timeout_secs=De,!0)),L("click",st,ie),c(z,Z)};x(Je,z=>{t().engine.backend==="whisper-cpp"?z(ke):t().engine.backend==="moonshine"?z(D,1):t().engine.backend==="parakeet"?z(k,2):t().engine.backend==="remote-openai"&&z(V,3)})}c(s,se),Ot()}pa(["click","change","keydown"]);var Yv=p("
      "),Jv=p('
      '),Zv=p(`

      Audio

      Input Device

      Microphone Monitor

      Only opens the microphone stream when recording is triggered, which saves power but cannot capture anything spoken while the microphone is still opening. Turn this off to keep the stream open: the last 300ms before you trigger recording is then kept and included, so a first word spoken early — the one carrying a voice command's "VoxCtrl" — is not lost.

      Voice Activity Detection

      Processing

      Removes steady background noise (fans, hiss, hum) from the microphone before - transcription, keeping speech intact. Takes effect on the next recording — no restart needed.

      `);function Xv(s,a){Lt(a,!0);let t=Ft(a,"cfg",15);function r(){Nt.set(t()),Vs.set(!0)}let o=S(wt([])),d=fe(()=>[{value:-1,label:"Default system device"},...e(o).map(I=>({value:I.index,label:I.name}))]),u=S(0),v=S(0),f=S(0),_=0,b=S(null),m;function h(){const I=e(u);I>e(v)?l(v,e(v)+(I-e(v))*.45):l(v,e(v)+(I-e(v))*.12),e(v)>e(f)?(l(f,e(v),!0),_=25):_>0?_--:l(f,Math.max(0,e(f)-.012),!0),m=requestAnimationFrame(h)}Zt(async()=>{l(o,await E("list_audio_devices"),!0);try{await E("start_monitoring_audio"),l(b,await oa("audio-level",I=>{l(u,I.payload,!0)}),!0)}catch(I){console.error("Failed to start audio monitoring:",I)}m=requestAnimationFrame(h)}),mr(async()=>{m&&cancelAnimationFrame(m),e(b)&&e(b)();try{await E("stop_monitoring_audio")}catch(I){console.error("Failed to stop audio monitoring:",I)}});var M=Zv(),A=i(n(M),2),$=i(n(A),2),C=i(n($),2);{let I=fe(()=>{var H;return(H=t().audio.input_device_index)!=null?H:-1});da(C,{get value(){return e(I)},get options(){return e(d)},onchange:H=>{t(t().audio.input_device_index=H<0?null:H,!0),r()}})}var O=i($,2),le=n(O),re=i(n(le),2);let me;var ee=i(re,2),P=n(ee),R=i(le,2),te=n(R),Ae=n(te);_t(Ae,16,()=>Array(24),ht,(I,H,se)=>{const Ee=fe(()=>se/24),Re=fe(()=>e(v)>=e(Ee)),he=fe(()=>se>=17);var ne=Yv();let xe;w(()=>xe=Me(ne,1,"vu-segment svelte-1msnq7i",null,xe,{active:e(Re),orange:e(he)})),c(I,ne)});var Pe=i(Ae,2);{var Y=I=>{var H=Jv();w(se=>va(H,`left: ${se!=null?se:""}%;`),[()=>Math.min(.99,e(f))*100]),c(I,H)};x(Pe,I=>{e(f)>.01&&I(Y)})}var B=i(O,2),ge=i(n(B),2),ae=i(A,2),G=i(n(ae),2),ue=i(n(G),2),Se=i(ue,2),ie=n(Se),q=i(ae,2),J=i(n(q),2),ye=i(n(J),2),_e=i(J,4),oe=i(n(_e),2),W=i(oe,2),ve=n(W);w((I,H)=>{me=Me(re,1,"vu-status-dot svelte-1msnq7i",null,me,{active:e(u)>.005}),y(P,e(u)>.005?"Signal Detected":"Listening..."),y(ie,I),y(ve,`${H!=null?H:""}×`)},[()=>t().audio.vad_threshold.toFixed(2),()=>t().audio.gain.toFixed(1)]),L("change",ge,r),sa(ge,()=>t().audio.dynamic_stream,I=>t(t().audio.dynamic_stream=I,!0)),L("change",ue,r),He(ue,()=>t().audio.vad_threshold,I=>t(t().audio.vad_threshold=I,!0)),L("change",ye,r),sa(ye,()=>t().audio.noise_suppression,I=>t(t().audio.noise_suppression=I,!0)),L("change",oe,r),He(oe,()=>t().audio.gain,I=>t(t().audio.gain=I,!0)),c(s,M),Ot()}pa(["change"]);var Qv=p(''),eu=p('
      Voice Command Router Settings

      Types dictated text into your active application by default. If your dictation contains VoxCtrl <target_name> <text> (for example, "VoxCtrl Notes Hello world"), VoxCtrl dynamically reroutes the text to that target instead.

      '),tu=p(' '),au=p('
      Shell Executor Settings
      Terminal Command Shell command

      Use inside the command string as a placeholder to substitute transcribed speech.

      '),su=p(' '),nu=p('

      Each line starts with:

      '),iu=p(`

      A strftime pattern, written in UTC. Common pieces: %Y year (2026), %m month (09), %d day (04), %H hour (17), %M minute, %S second, %b month name (Sep), %a weekday (Fri), %p AM/PM, %Z zone (UTC), %% a literal percent. Anything else is written as typed. - Default:

      `,1),ru=p('
      Local File Writer Settings
      '),lu=p('
      Network Socket settings
      '),ou=p('
      FIFO Named Pipe settings
      '),cu=p('
      Linux DBus emitter settings
      '),du=p(''),vu=p(''),uu=p(' '),pu=p('
      Method
      Custom Post Body JSON Template

      Must be valid JSON. Use to substitute transcribed speech.

      ',1),fu=p(' '),_u=p('
      Webhook Secret Token (HMAC)
      Custom Webhook Body JSON Template

      Must be valid JSON. Use to substitute transcribed speech.

      ',1),hu=p('
      API Endpoint Client settings
      REST endpoint URL
      '),gu=p(' '),mu=p('
      MCP Server Client settings
      Custom Socket/Pipe Path Optional override

      Leave empty to use defaults (/tmp/voxctrl-mcp.sock on Linux, \\\\.\\pipe\\voxctrl-mcp on Windows).

      MCP Tool Name
      Custom Tool Arguments JSON Template

      Must be valid JSON. Use to substitute transcribed speech.

      '),bu=p(' '),yu=p(''),wu=p(' '),ku=p(" "),xu=p(`

      Discards this target's stored conversation so the next dictation starts a new - thread. History is in-memory only and is never written to disk.

      `),Tu=p(`
      Conversational LLM settings

      Sends each dictation to an OpenAI-compatible /v1/chat/completions endpoint — Hermes, Ollama, llama.cpp — - carrying the running conversation so the model keeps its context between turns.

      Server Base URL

      The /v1 suffix is optional — it is added automatically.

      Model

      Press Test & fetch models to confirm the server is reachable and - pick from the ids it reports.

      API Key Optional
      System Prompt

      Sent ahead of every turn and never trimmed from the history window.

      Reply Handling

      Speaking the reply requires TTS to be enabled in the TTS tab.

      Conversation Memory Messages

      Most recent messages sent with each turn. 0 sends the whole conversation.

      Request Timeout Seconds
      Spoken Reset Phrase Optional

      Saying exactly this clears the conversation instead of sending it to the model. - Casing and punctuation are ignored.

      `),Su=p('
      Output
      '),Eu=p(`
      `);function Jo(s,a){Lt(a,!0);let t=Ft(a,"editingTarget",15),r=Ft(a,"isNested",3,!1),o=S(""),d=S(""),u=S(""),v=S(wt([])),f=S(!1),_=S(""),b=S(!1);const m="%Y-%m-%dT%H:%M:%SZ";let h=S(""),M=S(null);ka(()=>{var ge,ae;const Y=(ae=(ge=t())==null?void 0:ge.file_timestamp_format)!=null?ae:"";if(!t()||t().delivery!=="file"||!t().file_timestamp){l(M,null),l(h,"");return}let B=!1;return E("preview_timestamp_format",{format:Y}).then(G=>{B||(l(h,G,!0),l(M,null))}).catch(G=>{B||(l(h,""),l(M,`${G}`))}),()=>{B=!0}});let A=fe(()=>!t()||t().delivery!=="exec"||(t().command||"").includes("{text}")?null:"Command must contain '{text}' placeholder."),$=fe(()=>{if(!e(o).trim())return null;try{JSON.parse(e(o))}catch(Y){return"Invalid JSON format: "+Y.message}return e(o).includes("{text}")?null:"Arguments must contain '{text}' placeholder."}),C=fe(()=>{if(!e(d).trim())return null;try{JSON.parse(e(d))}catch(Y){return"Invalid JSON format: "+Y.message}return e(d).includes("{text}")?null:"JSON template must contain '{text}' placeholder."}),O=fe(()=>{if(!e(u).trim())return null;try{JSON.parse(e(u))}catch(Y){return"Invalid JSON format: "+Y.message}return e(u).includes("{text}")?null:"JSON template must contain '{text}' placeholder."}),le=fe(()=>{if(!t()||t().delivery!=="chat")return null;const Y=(t().chat_url||"").trim();return Y?/^https?:\/\//i.test(Y)?null:"URL must start with http:// or https://":"A server base URL is required."}),re=fe(()=>!t()||t().delivery!=="chat"||(t().chat_model||"").trim()?null:"A model name is required.");async function me(){if(t()){l(f,!0);try{const Y=await E("test_chat_target",{target:t()});l(v,Y.models,!0),l(_,Y.message,!0),l(b,Y.success,!0),Y.success&&!t().chat_model&&Y.models.length>0&&t(t().chat_model=Y.models[0],!0)}catch(Y){l(v,[],!0),l(_,String(Y),!0),l(b,!1)}finally{l(f,!1)}}}async function ee(){if(t())try{const Y=await E("reset_chat_conversation",{targetId:t().id});l(_,`Conversation cleared (${Y} message(s) discarded).`),l(b,!0)}catch(Y){l(_,String(Y),!0),l(b,!1)}}function P(Y){function B(){Y.style.height="auto",Y.style.height=`${Y.scrollHeight}px`}Y.addEventListener("input",B);const ge=setTimeout(B,0);return{update(){B()},destroy(){clearTimeout(ge),Y.removeEventListener("input",B)}}}Zt(()=>{var Y,B,ge,ae,G;t()&&(t().processing||t(t().processing={},!0),t().file_mode||t(t().file_mode="append",!0),t().file_timestamp_format||t(t().file_timestamp_format=m,!0),t((B=(Y=t()).chat_max_history)!=null?B:Y.chat_max_history=20,!0),t((ae=(ge=t()).chat_timeout_secs)!=null?ae:ge.chat_timeout_secs=120,!0),t((G=t()).chat_reply_mode||(G.chat_reply_mode="speak"),!0),l(o,t().mcp_args?JSON.stringify(t().mcp_args,null,2):`{ - "text": "{text}" -}`,!0),l(d,t().http_json_template?JSON.stringify(t().http_json_template,null,2):`{ - "text": "{text}" -}`,!0),l(u,t().webhook_json_template?JSON.stringify(t().webhook_json_template,null,2):`{ - "text": "{text}" -}`,!0))});function R(){if(t()){if(t().id.trim()===""){alert("Target ID cannot be empty.");return}if(t().delivery==="file"&&t().file_timestamp&&e(M)){alert("Validation Error: "+e(M));return}if(t().delivery==="exec"&&e(A)){alert("Validation Error: "+e(A));return}if(t().delivery==="mcp"){if(e($)){alert("Validation Error: "+e($));return}try{t(t().mcp_args=JSON.parse(e(o)),!0)}catch{alert("Invalid JSON format in MCP Custom Tool Arguments.");return}}if(t().delivery==="http"){if(e(C)){alert("Validation Error: "+e(C));return}try{t(t().http_json_template=JSON.parse(e(d)),!0)}catch{alert("Invalid JSON format in HTTP Custom Post Body.");return}}if(t().delivery==="webhook"){if(e(O)){alert("Validation Error: "+e(O));return}try{t(t().webhook_json_template=JSON.parse(e(u)),!0)}catch{alert("Invalid JSON format in Webhook Custom Post Body.");return}}if(t().delivery==="chat"){const Y=e(le)||e(re);if(Y){alert("Validation Error: "+Y);return}t(t().chat_max_history=Number(t().chat_max_history)||0,!0),t(t().chat_timeout_secs=Number(t().chat_timeout_secs)||120,!0)}a.onSave()}}var te=Vi(),Ae=mt(te);{var Pe=Y=>{var B=Eu(),ge=n(B),ae=n(ge),G=n(ae),ue=n(G),Se=i(G,2),ie=i(ae,2),q=n(ie);{var J=Ce=>{var Fe=Qv(),We=i(n(Fe),2);w(()=>We.disabled=!a.isNew),He(We,()=>t().id,st=>t(t().id=st,!0)),c(Ce,Fe)};x(q,Ce=>{r()||Ce(J)})}var ye=i(q,2),_e=i(n(ye),2),oe=i(ye,2),W=i(n(oe)),ve=n(W),I=i(oe,2),H=i(n(I),2);da(H,{options:[{value:"command",label:"Voice Command Router (VoxCtrl keyword)"},{value:"inject",label:"Inject Text Directly (Simulate keyboard)"},{value:"clipboard",label:"Save to Clipboard"},{value:"exec",label:"Execute Command"},{value:"file",label:"Write to File"},{value:"pipe",label:"FIFO Named Pipe"},{value:"socket",label:"TCP / Unix Socket"},{value:"dbus",label:"DBus Signal"},{value:"http",label:"HTTP Custom Client"},{value:"webhook",label:"Send Webhook Event"},{value:"mcp",label:"Call MCP Server Tool"},{value:"speak",label:"Speak Text Aloud (TTS)"},{value:"chat",label:"Chat with a Local LLM (Hermes / OpenAI-compatible)"}],get value(){return t().delivery},set value(Ce){t(t().delivery=Ce,!0)}});var se=i(I,2);{var Ee=Ce=>{var Fe=eu();c(Ce,Fe)};x(se,Ce=>{t().delivery==="command"&&Ce(Ee)})}var Re=i(se,2);{var he=Ce=>{var Fe=au(),We=i(n(Fe),2),st=i(n(We),2);Tt(st,"placeholder","e.g. xdg-open {text}");var it=i(st,2),Ke=i(n(it));Ke.textContent="{text}";var rt=i(it,2);{var ct=nt=>{var De=tu(),Ge=n(De);w(()=>{var lt;return y(Ge,`⚠️ ${(lt=e(A))!=null?lt:""}`)}),c(nt,De)};x(rt,nt=>{e(A)&&nt(ct)})}w(()=>Me(st,1,`full-width-input ${e(A)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""}`,"svelte-oc07pw")),He(st,()=>t().command,nt=>t(t().command=nt,!0)),c(Ce,Fe)};x(Re,Ce=>{t().delivery==="exec"&&Ce(he)})}var ne=i(Re,2);{var xe=Ce=>{var Fe=ru(),We=i(n(Fe),2),st=i(n(We),2),it=i(We,2),Ke=i(n(it),2);da(Ke,{options:[{value:"append",label:"Append (Add to end of file)"},{value:"prepend",label:"Prepend (Add to beginning of file)"}],get value(){return t().file_mode},set value(U){t(t().file_mode=U,!0)}});var rt=i(it,2),ct=i(n(rt),2),nt=i(rt,2),De=n(nt),Ge=i(nt,2);{var lt=U=>{var K=iu(),be=mt(K),Be=i(n(be),2);Tt(Be,"placeholder",m);var Ye=i(be,2),St=i(n(Ye),25);St.textContent="%Y-%m-%dT%H:%M:%SZ";var na=i(Ye,2);{var ft=Et=>{var At=su(),ia=n(At);w(()=>{var Ut;return y(ia,`⚠️ ${(Ut=e(M))!=null?Ut:""}`)}),c(Et,At)},Rt=Et=>{var At=nu(),ia=i(n(At)),Ut=n(ia);w(()=>{var Oe;return y(Ut,`[${(Oe=e(h))!=null?Oe:""}]`)}),c(Et,At)};x(na,Et=>{e(M)?Et(ft):e(h)&&Et(Rt,1)})}w(()=>Me(Be,1,qa(e(M)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""))),He(Be,()=>t().file_timestamp_format,Et=>t(t().file_timestamp_format=Et,!0)),c(U,K)};x(Ge,U=>{t().file_timestamp&&U(lt)})}He(st,()=>t().file_path,U=>t(t().file_path=U,!0)),He(ct,()=>t().file_prefix,U=>t(t().file_prefix=U,!0)),sa(De,()=>t().file_timestamp,U=>t(t().file_timestamp=U,!0)),c(Ce,Fe)};x(ne,Ce=>{t().delivery==="file"&&Ce(xe)})}var Je=i(ne,2);{var ke=Ce=>{var Fe=lu(),We=i(n(Fe),2),st=i(n(We),2),it=i(We,2),Ke=i(n(it),2),rt=i(it,2),ct=i(n(rt),2);He(st,()=>t().socket_host,nt=>t(t().socket_host=nt,!0)),He(Ke,()=>t().socket_port,nt=>t(t().socket_port=nt,!0)),He(ct,()=>t().socket_unix,nt=>t(t().socket_unix=nt,!0)),c(Ce,Fe)};x(Je,Ce=>{t().delivery==="socket"&&Ce(ke)})}var D=i(Je,2);{var k=Ce=>{var Fe=ou(),We=i(n(Fe),2),st=i(n(We),2),it=i(We,2),Ke=i(n(it),2);He(st,()=>t().pipe_path,rt=>t(t().pipe_path=rt,!0)),He(Ke,()=>t().response_pipe,rt=>t(t().response_pipe=rt,!0)),c(Ce,Fe)};x(D,Ce=>{t().delivery==="pipe"&&Ce(k)})}var V=i(D,2);{var z=Ce=>{var Fe=cu(),We=i(n(Fe),2),st=i(n(We),2);He(st,()=>t().dbus_signal,it=>t(t().dbus_signal=it,!0)),c(Ce,Fe)};x(V,Ce=>{t().delivery==="dbus"&&Ce(z)})}var Z=i(V,2);{var pe=Ce=>{var Fe=hu(),We=i(n(Fe),2),st=i(n(We),2);{var it=De=>{var Ge=du();He(Ge,()=>t().http_url,lt=>t(t().http_url=lt,!0)),c(De,Ge)},Ke=De=>{var Ge=vu();He(Ge,()=>t().webhook_url,lt=>t(t().webhook_url=lt,!0)),c(De,Ge)};x(st,De=>{t().delivery==="http"?De(it):De(Ke,-1)})}var rt=i(We,2);{var ct=De=>{var Ge=pu(),lt=mt(Ge),U=i(n(lt),2);da(U,{options:[{value:"POST",label:"POST"},{value:"GET",label:"GET"},{value:"PUT",label:"PUT"}],get value(){return t().http_method},set value(ft){t(t().http_method=ft,!0)}});var K=i(lt,2),be=i(n(K),2);Tt(be,"placeholder",'{"text": "{text}"}'),js(()=>He(be,()=>e(d),ft=>l(d,ft))),en(be,ft=>P==null?void 0:P(ft));var Be=i(be,2),Ye=i(n(Be));Ye.textContent="{text}";var St=i(Be,2);{var na=ft=>{var Rt=uu(),Et=n(Rt);w(()=>{var At;return y(Et,`⚠️ ${(At=e(C))!=null?At:""}`)}),c(ft,Rt)};x(St,ft=>{e(C)&&ft(na)})}w(()=>Me(be,1,qa(e(C)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""),"svelte-oc07pw")),c(De,Ge)},nt=De=>{var Ge=_u(),lt=mt(Ge),U=i(n(lt),2),K=i(lt,2),be=i(n(K),2);Tt(be,"placeholder",'{"text": "{text}"}'),js(()=>He(be,()=>e(u),ft=>l(u,ft))),en(be,ft=>P==null?void 0:P(ft));var Be=i(be,2),Ye=i(n(Be));Ye.textContent="{text}";var St=i(Be,2);{var na=ft=>{var Rt=fu(),Et=n(Rt);w(()=>{var At;return y(Et,`⚠️ ${(At=e(O))!=null?At:""}`)}),c(ft,Rt)};x(St,ft=>{e(O)&&ft(na)})}w(()=>Me(be,1,qa(e(O)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""),"svelte-oc07pw")),He(U,()=>t().webhook_secret,ft=>t(t().webhook_secret=ft,!0)),c(De,Ge)};x(rt,De=>{t().delivery==="http"?De(ct):De(nt,-1)})}c(Ce,Fe)};x(Z,Ce=>{(t().delivery==="http"||t().delivery==="webhook")&&Ce(pe)})}var ce=i(Z,2);{var Ie=Ce=>{var Fe=mu(),We=i(n(Fe),2),st=i(n(We),2),it=i(We,2),Ke=i(n(it),2),rt=i(it,2),ct=i(n(rt),2);Tt(ct,"placeholder",'{"text": "{text}"}'),js(()=>He(ct,()=>e(o),U=>l(o,U))),en(ct,U=>P==null?void 0:P(U));var nt=i(ct,2),De=i(n(nt));De.textContent="{text}";var Ge=i(nt,2);{var lt=U=>{var K=gu(),be=n(K);w(()=>{var Be;return y(be,`⚠️ ${(Be=e($))!=null?Be:""}`)}),c(U,K)};x(Ge,U=>{e($)&&U(lt)})}w(()=>Me(ct,1,qa(e($)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""),"svelte-oc07pw")),He(st,()=>t().mcp_path,U=>t(t().mcp_path=U,!0)),He(Ke,()=>t().mcp_tool,U=>t(t().mcp_tool=U,!0)),c(Ce,Fe)};x(ce,Ce=>{t().delivery==="mcp"&&Ce(Ie)})}var Qe=i(ce,2);{var ot=Ce=>{var Fe=Tu(),We=i(n(Fe),4),st=i(n(We),2),it=i(st,4);{var Ke=we=>{var ze=bu(),qe=n(ze);w(()=>{var Ne;return y(qe,`⚠️ ${(Ne=e(le))!=null?Ne:""}`)}),c(we,ze)};x(it,we=>{e(le)&&we(Ke)})}var rt=i(We,2),ct=n(rt),nt=i(n(ct),2),De=n(nt),Ge=i(ct,2);{var lt=we=>{{let ze=fe(()=>e(v).map(qe=>({value:qe,label:qe})));da(we,{get options(){return e(ze)},get value(){return t().chat_model},set value(qe){t(t().chat_model=qe,!0)}})}},U=we=>{var ze=yu();w(()=>Me(ze,1,`full-width-input ${e(re)?"border-red-500! ring-2! ring-red-500/20!":""}`,"svelte-oc07pw")),He(ze,()=>t().chat_model,qe=>t(t().chat_model=qe,!0)),c(we,ze)};x(Ge,we=>{e(v).length>0?we(lt):we(U,-1)})}var K=i(Ge,4);{var be=we=>{var ze=wu(),qe=n(ze);w(()=>{var Ne;return y(qe,`⚠️ ${(Ne=e(re))!=null?Ne:""}`)}),c(we,ze)};x(K,we=>{e(re)&&we(be)})}var Be=i(K,2);{var Ye=we=>{var ze=ku(),qe=n(ze);w(()=>{Me(ze,1,`chat-status ${e(b)?"ok":"bad"}`,"svelte-oc07pw"),y(qe,e(_))}),c(we,ze)};x(Be,we=>{e(_)&&we(Ye)})}var St=i(rt,2),na=i(n(St),2),ft=i(St,2),Rt=i(n(ft),2);js(()=>He(Rt,()=>t().chat_system_prompt,we=>t(t().chat_system_prompt=we,!0))),en(Rt,we=>P==null?void 0:P(we));var Et=i(ft,2),At=i(n(Et),2);da(At,{options:[{value:"speak",label:"Speak the reply aloud (TTS)"},{value:"inject",label:"Type the reply into the focused window"},{value:"clipboard",label:"Copy the reply to the clipboard"},{value:"none",label:"Discard the reply (fire and forget)"}],get value(){return t().chat_reply_mode},set value(we){t(t().chat_reply_mode=we,!0)}});var ia=i(Et,2),Ut=i(n(ia),2),Oe=i(ia,2),Ze=i(n(Oe),2),j=i(Oe,2),g=i(n(j),2),T=i(j,2);{var Te=we=>{var ze=xu(),qe=n(ze),Ne=n(qe);L("click",Ne,ee),c(we,ze)};x(T,we=>{a.isNew||we(Te)})}w(()=>{Me(st,1,`full-width-input ${e(le)?"border-red-500! ring-2! ring-red-500/20!":""}`,"svelte-oc07pw"),nt.disabled=e(f),y(De,e(f)?"Connecting…":"Test & fetch models")}),He(st,()=>t().chat_url,we=>t(t().chat_url=we,!0)),L("click",nt,me),He(na,()=>t().chat_api_key,we=>t(t().chat_api_key=we,!0)),He(Ut,()=>t().chat_max_history,we=>t(t().chat_max_history=we,!0)),He(Ze,()=>t().chat_timeout_secs,we=>t(t().chat_timeout_secs=we,!0)),He(g,()=>t().chat_reset_phrase,we=>t(t().chat_reset_phrase=we,!0)),c(Ce,Fe)};x(Qe,Ce=>{t().delivery==="chat"&&Ce(ot)})}var et=i(Qe,2);{var Q=Ce=>{var Fe=Su(),We=i(n(Fe),2),st=n(We);sa(st,()=>t().strip_newlines,it=>t(t().strip_newlines=it,!0)),c(Ce,Fe)};x(et,Ce=>{(t().delivery==="inject"||t().delivery==="command")&&Ce(Q)})}var X=i(ie,2),de=n(X),Ue=i(de,2);w(()=>{Me(B,1,`modal-backdrop ${r()?"target-modal-backdrop":""}`,"svelte-oc07pw"),y(ue,a.isNew?"Create Target":"Edit Target"),y(ve,t().label||"Obsidian Notes")}),L("click",Se,function(...Ce){var Fe;(Fe=a.onCancel)==null||Fe.apply(this,Ce)}),He(_e,()=>t().label,Ce=>t(t().label=Ce,!0)),L("click",de,function(...Ce){var Fe;(Fe=a.onCancel)==null||Fe.apply(this,Ce)}),L("click",Ue,R),c(Y,B)};x(Ae,Y=>{t()&&Y(Pe)})}c(s,te),Ot()}pa(["click"]);var Cu=p(`Your desktop decides which keys VoxCtrl may claim, and may ask you to confirm them. - If a shortcut below shows different keys than you chose, that is your desktop's - choice and it wins.`),Au=p(''),Mu=p('
      '),Pu=p(' '),Du=p(''),Iu=p('
      '),zu=p('
      ⚠️ Conflict detected: Some key bindings share the same key combination and gesture type. Disabling one of the conflicting binds will fix the problem.
      '),Lu=p('CONFLICT'),Ou=p('LLM'),Ru=p('S1-mini'),Nu=p(' '),Fu=p('needs a regular key'),Vu=p('not bound by your desktop'),$u=p(' '),Bu=p('Delete? ',1),qu=p(''),ju=p('
      '),Uu=p('
      ⌨

      No keyboard bindings defined. Create a binding to link a physical hotkey to a routing target!

      '),Wu=p(''),Hu=p('
      ',1),Ku=p(''),Gu=p('
      '),Yu=p(' '),Ju=p(`⚠️ This binding uses a gesture this system cannot deliver, so it will not fire. - Pick one of the styles above.`),Zu=p(''),Xu=p(``),Qu=p(' '),ep=p('
      ',1),tp=p(' '),ap=p('
      (Click / Tab here to record)',1),sp=p(''),np=p(''),ip=p('
      ⚠️
      '),rp=p('Your desktop will register this as .'),lp=p('⚠️ Warning: This key combination and gesture type conflicts with another existing binding.'),op=p('⚠️ Validation Error: Prompt template MUST contain the placeholder.'),cp=p('

      Prompt template MUST contain the placeholder. Leave empty to inherit the default user prompt.

      '),dp=p('
      System Prompt Override LLM Prompt

      Overrides the default system prompt configured in Settings → OpenAI API. Leave empty to inherit it.

      User Prompt Template LLM Prompt
      '),vp=p(''),up=p('

      Hotkey Bindings

      Bind keyboard combinations to your output targets. Each hotkey supports customizable triggers (double-taps, holding keys, etc.)

      ',1);function pp(s,a){Lt(a,!0);const t=()=>la(Nt,"$config",r),[r,o]=Ma();let d=S(wt([])),u=S(wt([])),v=S(null),f=S(!1),_=S(null),b=S(null),m=S(null),h=S(!1),M=S(null),A=S(null),$=S(!1),C=S(!1),O=S(""),le=S("custom"),re=S(""),me=S("");function ee(U,K){const be=[...U].sort().join(",");return`${K}:${be}`}let P=fe(()=>{const U=new Map;for(const be of e(u))if(be.keys&&be.keys.length>0){const Be=ee(be.keys,be.gesture);U.set(Be,(U.get(Be)||0)+1)}const K=new Set;for(const[be,Be]of U.entries())Be>1&&K.add(be);return K}),R=fe(()=>{const U=new Map;for(const be of e(u))if(!be.disabled&&be.keys&&be.keys.length>0){const Be=ee(be.keys,be.gesture);U.set(Be,(U.get(Be)||0)+1)}const K=new Set;for(const[be,Be]of U.entries())Be>1&&K.add(be);return K}),te=fe(()=>{if(!e(v)||!e(v).keys||e(v).keys.length===0)return!1;const U=ee(e(v).keys,e(v).gesture);return e(u).some(K=>K.id!==e(v).id&&ee(K.keys,K.gesture)===U)});function Ae(U){function K(){U.style.height="auto",U.style.height=`${U.scrollHeight}px`}U.addEventListener("input",K);const be=setTimeout(K,0);return{update(){K()},destroy(){clearTimeout(be),U.removeEventListener("input",K)}}}const Pe={hold:"Hold keys to dictate (Release to transcribe)",toggle:"Tap once to start recording, tap again to finish",double_tap:"Double-tap hotkey to trigger recording",double_tap_hold:"Double-tap & hold keys to dictate (Release to transcribe)"},Y=["hold","toggle","double_tap","double_tap_hold"];let B=S(null),ge=S(!1),ae=S(null),G=S(!1),ue=S(!1);async function Se(){try{l(B,await E("check_hotkey_status"),!0)}catch(U){console.error("Failed to read hotkey status:",U)}}async function ie(){var U;l(ge,!0),l(ae,null);try{await E("open_shortcut_settings")}catch(K){l(ae,(U=K==null?void 0:K.toString())!=null?U:"Could not open shortcut settings.",!0)}finally{l(ge,!1)}}let q=fe(()=>{var K,be;const U=new Map;for(const Be of(be=(K=e(B))==null?void 0:K.shortcuts)!=null?be:[])for(const Ye of Be.binding_ids)U.set(Ye,Be);return U});const J=fe(()=>{var U,K;return(K=(U=e(B))==null?void 0:U.supported_gestures)!=null&&K.length?Y.filter(be=>e(B).supported_gestures.includes(be)):Y}),ye=fe(()=>Y.length-e(J).length),_e=fe(()=>{var be,Be;const U=e(J).map(Ye=>({value:Ye,label:Pe[Ye]})),K=(be=e(v))==null?void 0:be.gesture;return K&&!e(J).includes(K)&&U.push({value:K,label:`${(Be=Pe[K])!=null?Be:K} — not supported on this system`}),U});Zt(async()=>{l(d,await E("get_targets"),!0),l(u,await E("get_bindings"),!0),await Se()});async function oe(){try{await E("save_targets",{targets:e(d)}),console.log("Targets auto-saved successfully!")}catch(U){console.error("Failed to save targets:",U)}}async function W(){try{await E("save_bindings",{bindings:e(u)}),console.log("Bindings auto-saved successfully!"),await Se()}catch(U){console.error("Failed to save bindings:",U)}}function ve(U){return(U.target_ids&&U.target_ids.length>0?U.target_ids:[U.target_id]).map(be=>{const Be=e(d).find(Ye=>Ye.id===be);return Be?Be.label:be==="default"?"Focused Window":be}).join(", ")}function I(U){const K=e(d).find(be=>be.id===U);return K?`${K.label} (${K.delivery})`:U==="default"?"Focused Window":U}function H(){var U,K,be,Be;if(e(d).length===0){alert("Please create at least one Output Command before making a hotkey binding.");return}l(f,!0),l(k,null),l(D,[],!0),l($,(Be=(be=(K=(U=t())==null?void 0:U.engine)==null?void 0:K.s1_mini)==null?void 0:be.enabled)!=null?Be:!1,!0),l(C,!1),l(O,""),l(le,"custom"),l(re,""),l(me,""),l(v,{id:"binding_"+Math.random().toString(36).substring(2,6),label:"New Binding",keys:["KEY_LEFTMETA","KEY_SPACE"],gesture:e(J).includes("hold")?"hold":e(J)[0],target_id:e(d)[0].id,target_ids:[e(d)[0].id],tap_ms:300,hold_threshold_ms:200,disabled:!1,openai_enabled:!1,openai_model:"",openai_mode:"custom",openai_prompt:"",openai_system_prompt:"",s1_mini_enabled:e($)},!0)}function se(U){var be,Be,Ye,St;l(f,!1),l(k,null),l(D,[...U.keys],!0);const K=JSON.parse(JSON.stringify(U));K.target_ids||(K.target_ids=K.target_id?[K.target_id]:[]),K.s1_mini_enabled!==void 0&&K.s1_mini_enabled!==null?l($,K.s1_mini_enabled,!0):l($,(St=(Ye=(Be=(be=t())==null?void 0:be.engine)==null?void 0:Be.s1_mini)==null?void 0:Ye.enabled)!=null?St:!1,!0),l(C,K.openai_enabled===!0),l(O,K.openai_model||"",!0),l(le,K.openai_mode||"custom",!0),l(re,K.openai_prompt||"",!0),l(me,K.openai_system_prompt||"",!0),l(v,K,!0)}async function Ee(U){l(u,e(u).map(K=>K.id===U?{...K,disabled:!K.disabled}:K),!0),await W()}function Re(){if(!e(v))return;e(v).target_ids||(e(v).target_ids=[e(v).target_id]);const U=e(d).find(be=>!e(v).target_ids.includes(be.id)),K=U?U.id:e(d)[0].id;e(v).target_ids=[...e(v).target_ids,K]}function he(U){!e(v)||!e(v).target_ids||(e(v).target_ids=e(v).target_ids.filter((K,be)=>be!==U))}async function ne(){var Be;if(!e(v))return;if(e(v).id.trim()===""){alert("Binding ID cannot be empty.");return}if(e(v).keys.length===0){alert("Please capture at least one hotkey before saving.");return}const U=[...e(v).keys].sort().join(","),K=[...e(D)].sort().join(",");if(!(!e(f)&&U===K))try{const Ye=await E("check_hotkey_keys",{keys:e(v).keys});if(!Ye.accepted){l(k,Ye,!0),alert((Be=Ye.message)!=null?Be:"This key combination cannot be used as a shortcut.");return}}catch(Ye){console.error("Failed to validate hotkey keys before saving:",Ye)}if(e(C)&&e(le)==="custom"&&!e(re).includes("{text}")){alert(`LLM Configuration Error: -Your custom prompt template MUST contain the '{text}' placeholder so the model knows where to insert the transcribed text. - -Example: -write a haiku about {text}`);return}if(e(v).openai_enabled=e(C),e(v).openai_model=e(O),e(v).openai_mode=e(le),e(v).openai_prompt=e(re),e(v).openai_system_prompt=e(me),e(v).s1_mini_enabled=e($),e(v).target_ids&&e(v).target_ids.length>0){if(e(v).target_ids=e(v).target_ids.filter(St=>St.trim()!==""),e(v).target_ids.length===0){alert("Please assign at least one Output Command.");return}if(new Set(e(v).target_ids).size!==e(v).target_ids.length){alert(`Duplicate commands detected. -You cannot assign the same Output Command multiple times to a single keybind.`);return}e(v).target_id=e(v).target_ids[0]}else e(v).target_id="",e(v).target_ids=[];if(e(f)){if(e(u).some(Ye=>Ye.id===e(v).id)){alert("Binding with this ID already exists.");return}l(u,[...e(u),e(v)],!0)}else l(u,e(u).map(Ye=>Ye.id===e(v).id?e(v):Ye),!0);l(v,null),l(_,null),await W()}async function xe(U){l(u,e(u).filter(K=>K.id!==U),!0),await W()}function Je(U,K){const be=K.toUpperCase();return U==="Control"?"KEY_LEFTCTRL":U==="Alt"?"KEY_LEFTALT":U==="Shift"?"KEY_LEFTSHIFT":U==="Meta"||U==="OS"||U==="Super"?"KEY_LEFTMETA":be==="SPACE"?"KEY_SPACE":be==="ENTER"?"KEY_ENTER":be==="ESCAPE"||be==="ESC"?"KEY_ESC":be==="TAB"?"KEY_TAB":be==="BACKSPACE"?"KEY_BACKSPACE":be==="DELETE"?"KEY_DELETE":/^KEY[A-Z]$/.test(be)?`KEY_${be.slice(3)}`:be.startsWith("KEY")?be:be.startsWith("DIGIT")?`KEY_${be.replace("DIGIT","")}`:be.startsWith("ARROW")?`KEY_${be.replace("ARROW","")}`:be.startsWith("F")&&be.length>1?`KEY_${be}`:U.length===1?`KEY_${U.toUpperCase()}`:`KEY_${be}`}let ke=S(wt([])),D=S(wt([]));ka(()=>{E("set_hotkeys_inhibited",{inhibited:e(_)==="keys"}).catch(U=>console.error("Failed to set hotkeys inhibited:",U))});let k=S(null);const V=new Set(["KEY_LEFTCTRL","KEY_RIGHTCTRL","KEY_LEFTALT","KEY_RIGHTALT","KEY_LEFTSHIFT","KEY_RIGHTSHIFT","KEY_LEFTMETA","KEY_RIGHTMETA"]);function z(U){return U.length>0&&U.every(K=>V.has(K))}let Z=fe(()=>e(B)===null||e(B).backend==="portal"||e(B).backend==="starting"),pe=fe(()=>e(_)!=="keys"||!z(e(ke))||!e(Z)?null:"Keep holding and add a regular key — modifiers alone cannot be a shortcut.");async function ce(U){if(!e(v)||U.length===0)return;const K=[...U].sort().join(","),be=[...e(D)].sort().join(",");if(K===be){l(k,null),e(v).keys=[...U];return}let Be;try{Be=await E("check_hotkey_keys",{keys:U})}catch(Ye){console.error("Failed to validate hotkey keys:",Ye),e(v).keys=[...U];return}l(k,Be,!0),Be.accepted&&e(v)&&(e(v).keys=[...U])}function Ie(U){if(!e(_)||!e(v))return;U.preventDefault(),U.stopPropagation();const K=Je(U.key,U.code);if(e(_)==="keys"&&(e(ke).includes(K)||l(ke,[...e(ke),K],!0),U.key==="Escape")){const be=[...e(ke)];l(ke,[],!0),l(_,null),ce(be)}}function Qe(U){if(!(!e(_)||!e(v))&&(U.preventDefault(),U.stopPropagation(),e(_)==="keys")){const K=[...e(ke)];l(ke,[],!0),l(_,null),ce(K)}}function ot(){if(e(_)){if(e(_)==="keys"&&e(ke).length>0){const U=[...e(ke)];l(ke,[],!0),ce(U)}l(_,null)}}function et(U){l(M,U,!0),l(h,!0),l(m,{id:"new_target_"+Math.random().toString(36).substring(2,6),label:"New Target",delivery:"inject",file_prefix:"- ",file_timestamp:!0,file_timestamp_format:"%Y-%m-%dT%H:%M:%SZ",file_mode:"append",http_method:"POST",http_json_template:{text:"{text}"},webhook_json_template:{text:"{text}"},mcp_tool:"speak_text",mcp_args:{text:"{text}"},chat_max_history:20,chat_timeout_secs:120,chat_reply_mode:"speak",strip_newlines:!1,processing:{}},!0)}function Q(){l(m,null),l(M,null)}async function X(){if(e(m)){if(e(d).some(U=>U.id===e(m).id)){alert("Target with this ID already exists.");return}l(d,[...e(d),e(m)],!0),e(M)!==null&&e(v)&&(e(v).target_ids||(e(v).target_ids=[]),e(v).target_ids[e(M)]=e(m).id),l(m,null),l(M,null),await oe()}}var de=up(),Ue=mt(de),Ce=i(n(Ue),2);{var Fe=U=>{var K=Mu();let be;var Be=n(K),Ye=n(Be),St=n(Ye),na=i(Ye,2),ft=n(na);{var Rt=T=>{var Te=je("Your desktop is handling these shortcuts");c(T,Te)},Et=T=>{var Te=je("Reading keystrokes with a keyboard hook");c(T,Te)},At=T=>{var Te=je("Reading input devices directly");c(T,Te)},ia=T=>{var Te=je("Starting up…");c(T,Te)},Ut=T=>{var Te=je("Global shortcuts are not available");c(T,Te)};x(ft,T=>{e(B).backend==="portal"?T(Rt):e(B).backend==="windows_hook"?T(Et,1):e(B).backend==="evdev"?T(At,2):e(B).backend==="starting"?T(ia,3):T(Ut,-1)})}var Oe=i(na,2);let Ze;var j=i(Be,2);{var g=T=>{var Te=Au(),we=n(Te),ze=n(we),qe=i(we,2);{var Ne=at=>{var tt=Cu();c(at,tt)};x(qe,at=>{e(B).backend==="portal"&&at(Ne)})}w(()=>y(ze,e(B).detail)),c(T,Te)};x(j,T=>{e(G)&&T(g)})}w(()=>{be=Me(K,1,"backend-banner svelte-w4d8v7",null,be,{private:e(B).is_private,warn:!e(B).is_private&&e(B).is_active,broken:!e(B).is_active}),Tt(Be,"aria-expanded",e(G)),y(St,e(B).is_private?"🔒":e(B).is_active?"⚠️":"⛔"),Ze=Me(Oe,0,"banner-chevron svelte-w4d8v7",null,Ze,{expanded:e(G)})}),L("click",Be,()=>l(G,!e(G))),c(U,K)};x(Ce,U=>{e(B)&&U(Fe)})}var We=i(Ce,2);{var st=U=>{var K=Iu(),be=n(K),Be=i(n(be),4);let Ye;var St=i(be,2);{var na=ft=>{var Rt=Du(),Et=n(Rt),At=n(Et),ia=i(Et,2),Ut=n(ia),Oe=n(Ut),Ze=i(ia,2);{var j=g=>{var T=Pu(),Te=n(T);w(()=>y(Te,e(ae))),c(g,T)};x(Ze,g=>{e(ae)&&g(j)})}w(()=>{y(At,e(B).manual_enable_hint),Ut.disabled=e(ge),y(Oe,e(ge)?"Opening…":"Open Shortcut Settings")}),L("click",Ut,ie),c(ft,Rt)};x(St,ft=>{e(ue)&&ft(na)})}w(()=>{Tt(be,"aria-expanded",e(ue)),Ye=Me(Be,0,"banner-chevron svelte-w4d8v7",null,Ye,{expanded:e(ue)})}),L("click",be,()=>l(ue,!e(ue))),c(U,K)};x(We,U=>{var K;(K=e(B))!=null&&K.needs_manual_enable&&U(st)})}var it=i(We,2),Ke=i(it,2);{var rt=U=>{var K=zu();c(U,K)};x(Ke,U=>{e(P).size>0&&U(rt)})}var ct=i(Ke,2);_t(ct,21,()=>e(u),ht,(U,K)=>{var be=ju();let Be;var Ye=n(be);{var St=bt=>{var Wt=Lu();c(bt,Wt)},na=fe(()=>!e(K).disabled&&e(K).keys&&e(K).keys.length>0&&e(R).has(ee(e(K).keys,e(K).gesture)));x(Ye,bt=>{e(na)&&bt(St)})}var ft=i(Ye,2),Rt=n(ft),Et=n(Rt);let At;var ia=n(Et),Ut=i(Et,2);{var Oe=bt=>{var Wt=Ou();c(bt,Wt)};x(Ut,bt=>{e(K).openai_enabled&&bt(Oe)})}var Ze=i(Ut,2);{var j=bt=>{var Wt=Ru();c(bt,Wt)};x(Ze,bt=>{var Wt,_a,It,Gt;((Gt=e(K).s1_mini_enabled)!=null?Gt:(It=(_a=(Wt=t())==null?void 0:Wt.engine)==null?void 0:_a.s1_mini)!=null&&It.enabled)&&bt(j)})}var g=i(Rt,2),T=n(g);_t(T,21,()=>e(K).keys,ht,(bt,Wt)=>{var _a=Nu(),It=n(_a);w(Gt=>y(It,Gt),[()=>e(Wt).replace("KEY_","")]),c(bt,_a)});var Te=i(T,2),we=n(Te),ze=i(Te,2);{var qe=bt=>{var Wt=Fu();c(bt,Wt)},Ne=fe(()=>e(Z)&&z(e(K).keys));x(ze,bt=>{e(Ne)&&bt(qe)})}var at=i(ze,2);{var tt=bt=>{const Wt=fe(()=>e(q).get(e(K).id));var _a=Vi(),It=mt(_a);{var Gt=La=>{var Za=Vu();c(La,Za)},za=La=>{var Za=$u(),ms=n(Za);w(()=>{var bs;return y(ms,`desktop: ${(bs=e(Wt).trigger_description)!=null?bs:""}`)}),c(La,Za)};x(It,La=>{e(Wt).bound?e(Wt).trigger_description&&La(za,1):La(Gt)})}c(bt,_a)},Vt=fe(()=>{var bt;return((bt=e(B))==null?void 0:bt.backend)==="portal"&&!e(K).disabled&&e(q).get(e(K).id)});x(at,bt=>{e(Vt)&&bt(tt)})}var Xt=i(g,2),ea=n(Xt),Kt=i(Xt,2),Dt=n(Kt),fa=n(Dt),Qt=i(Dt,2),ya=i(Qt,2);{var Pa=bt=>{var Wt=Bu(),_a=i(mt(Wt),2),It=i(_a,2);L("click",_a,()=>{xe(e(K).id),l(b,null)}),L("click",It,()=>l(b,null)),c(bt,Wt)},Ja=bt=>{var Wt=qu();L("click",Wt,()=>l(b,e(K).id,!0)),c(bt,Wt)};x(ya,bt=>{e(b)===e(K).id?bt(Pa):bt(Ja,-1)})}w((bt,Wt,_a)=>{Be=Me(be,1,"binding-item glass svelte-w4d8v7",null,Be,bt),At=Me(Et,1,"binding-title svelte-w4d8v7",null,At,Wt),y(ia,e(K).label||e(K).id),y(we,e(K).gesture),y(ea,_a),y(fa,e(K).disabled?"Enable":"Disable")},[()=>({disabled:e(K).disabled,"has-conflict":e(K).keys&&e(K).keys.length>0&&e(P).has(ee(e(K).keys,e(K).gesture)),"active-conflict":!e(K).disabled&&e(K).keys&&e(K).keys.length>0&&e(R).has(ee(e(K).keys,e(K).gesture))}),()=>({"has-conflict":!e(K).disabled&&e(K).keys&&e(K).keys.length>0&&e(R).has(ee(e(K).keys,e(K).gesture))}),()=>ve(e(K))]),L("click",Dt,()=>Ee(e(K).id)),L("click",Qt,()=>se(e(K))),c(U,be)},U=>{var K=Uu();c(U,K)});var nt=i(Ue,2);{var De=U=>{var K=vp(),be=n(K),Be=n(be),Ye=n(Be),St=n(Ye),na=i(Ye,2),ft=i(Be,2),Rt=n(ft),Et=i(n(Rt),2),At=i(Rt,2),ia=i(n(At),2),Ut=i(At,2),Oe=n(Ut),Ze=i(n(Oe),2),j=i(Oe,2);_t(j,21,()=>e(v).target_ids||[],ht,(Xe,pt,$t)=>{var Yt=Gu(),Ca=n(Yt),wa=n(Ca),Ua=n(wa),Ta=i(wa,2);{var Wa=Oa=>{var aa=Hu(),Ms=mt(aa),N=i(Ms,2),Le=n(N);_t(Le,17,()=>e(d),ht,(dt,yt)=>{var Ht=Wu(),ta=n(Ht);w(ua=>{var Va,Ra;Ht.disabled=ua,y(ta,`${(Va=e(yt).label)!=null?Va:""} (${(Ra=e(yt).delivery)!=null?Ra:""})`)},[()=>e(v).target_ids.includes(e(yt).id)&&e(yt).id!==e(pt)]),L("click",Ht,ua=>{ua.preventDefault(),ua.stopPropagation(),e(v).target_ids[$t]=e(yt).id,l(A,null)}),c(dt,Ht)});var $e=i(Le,2);L("click",Ms,()=>l(A,null)),L("click",$e,dt=>{dt.preventDefault(),dt.stopPropagation(),l(A,null),et($t)}),c(Oa,aa)};x(Ta,Oa=>{e(A)===$t&&Oa(Wa)})}var is=i(Ca,2);{var Gs=Oa=>{var aa=Ku();L("click",aa,()=>he($t)),c(Oa,aa)};x(is,Oa=>{$t>0&&Oa(Gs)})}w(Oa=>y(Ua,Oa),[()=>I(e(pt))]),L("click",wa,()=>l(A,e(A)===$t?null:$t,!0)),c(Xe,Yt)});var g=i(Ut,2),T=i(n(g),2);da(T,{get options(){return e(_e)},get value(){return e(v).gesture},set value(Xe){e(v).gesture=Xe}});var Te=i(T,2);{var we=Xe=>{var pt=Yu(),$t=n(pt);w(()=>{var Yt;return y($t,((Yt=e(B))==null?void 0:Yt.backend)==="mint_dbus"?"Your desktop delivers VoxCtrl's shortcuts itself and only reports the key going down, never coming back up — so hold and double-tap styles cannot work here and are not offered.":`${e(ye)} gesture style${e(ye)===1?"":"s"} are hidden because the way this system delivers shortcuts cannot produce them.`)}),c(Xe,pt)};x(Te,Xe=>{e(ye)>0&&Xe(we)})}var ze=i(Te,2);{var qe=Xe=>{var pt=Ju();c(Xe,pt)},Ne=fe(()=>e(v).gesture&&!e(J).includes(e(v).gesture));x(ze,Xe=>{e(Ne)&&Xe(qe)})}var at=i(g,2);{var tt=Xe=>{var pt=Zu(),$t=i(n(pt),2),Yt=i($t,2),Ca=n(Yt);w(()=>y(Ca,e(v).gesture==="double_tap_hold"?"How long the second tap must stay held before recording starts. Keeps a plain double-tap from being read as a double-tap-and-hold.":"Minimum duration to keep keys pressed to count as a 'hold'.")),He($t,()=>e(v).hold_threshold_ms,wa=>e(v).hold_threshold_ms=wa),c(Xe,pt)};x(at,Xe=>{(e(v).gesture==="hold"||e(v).gesture==="double_tap_hold")&&Xe(tt)})}var Vt=i(at,2);{var Xt=Xe=>{var pt=Xu(),$t=i(n(pt),2);He($t,()=>e(v).tap_ms,Yt=>e(v).tap_ms=Yt),c(Xe,pt)};x(Vt,Xe=>{(e(v).gesture==="double_tap"||e(v).gesture==="double_tap_hold")&&Xe(Xt)})}var ea=i(Vt,2),Kt=n(ea),Dt=i(n(Kt),2),fa=n(Dt);{var Qt=Xe=>{var pt=ep(),$t=mt(pt),Yt=i(n($t),2),Ca=n(Yt),wa=i($t,2);{var Ua=Ta=>{var Wa=Qu(),is=n(Wa);w(()=>y(is,e(pe))),c(Ta,Wa)};x(wa,Ta=>{e(pe)&&Ta(Ua)})}w(Ta=>y(Ca,Ta),[()=>e(ke).length>0?e(ke).join(" + ").replace(/KEY_/g,""):"Press your physical shortcut combination now..."]),c(Xe,pt)},ya=Xe=>{var pt=sp(),$t=n(pt);{var Yt=wa=>{var Ua=ap(),Ta=mt(Ua);_t(Ta,21,()=>e(v).keys,ht,(Wa,is)=>{var Gs=tp(),Oa=n(Gs);w(aa=>y(Oa,aa),[()=>e(is).replace("KEY_","")]),c(Wa,Gs)}),c(wa,Ua)},Ca=wa=>{var Ua=je("⚠️ Click/Focus here to press keys!");c(wa,Ua)};x($t,wa=>{e(v).keys.length>0?wa(Yt):wa(Ca,-1)})}c(Xe,pt)};x(fa,Xe=>{e(_)==="keys"?Xe(Qt):Xe(ya,-1)})}var Pa=i(Kt,2);{var Ja=Xe=>{var pt=np(),$t=i(n(pt),2),Yt=i(n($t));w(()=>{var Ca;return y(Yt,` ${(Ca=e(k).message)!=null?Ca:""}`)}),c(Xe,pt)},bt=Xe=>{var pt=ip(),$t=i(n(pt),2),Yt=n($t);w(()=>y(Yt,e(k).message)),c(Xe,pt)},Wt=Xe=>{var pt=rp(),$t=i(n(pt)),Yt=n($t);w(()=>y(Yt,e(k).accelerator)),c(Xe,pt)};x(Pa,Xe=>{var pt;e(k)&&!e(k).accepted?Xe(Ja):e(k)&&e(k).problem?Xe(bt,1):(pt=e(k))!=null&&pt.accelerator&&e(Z)&&Xe(Wt,2)})}var _a=i(Pa,2);{var It=Xe=>{var pt=lp();c(Xe,pt)};x(_a,Xe=>{e(te)&&Xe(It)})}var Gt=i(ea,2),za=i(n(Gt),2),La=n(za),Za=i(za,2);{var ms=Xe=>{var pt=dp(),$t=n(pt),Yt=i(n($t),2),Ca=i($t,2),wa=i(n(Ca),2);js(()=>He(wa,()=>e(me),aa=>l(me,aa))),en(wa,aa=>Ae==null?void 0:Ae(aa));var Ua=i(Ca,2),Ta=i(n(Ua),2);Tt(Ta,"placeholder","e.g. write a haiku about {text}"),js(()=>He(Ta,()=>e(re),aa=>l(re,aa))),en(Ta,aa=>Ae==null?void 0:Ae(aa));var Wa=i(Ta,2);{var is=aa=>{var Ms=op(),N=i(n(Ms));N.textContent="{text}",c(aa,Ms)},Gs=fe(()=>e(re)&&!e(re).includes("{text}")),Oa=aa=>{var Ms=cp(),N=i(n(Ms));N.textContent="{text}",c(aa,Ms)};x(Wa,aa=>{e(Gs)?aa(is):aa(Oa,-1)})}w(aa=>Me(Ta,1,aa,"svelte-w4d8v7"),[()=>qa(e(re)&&!e(re).includes("{text}")?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":"")]),He(Yt,()=>e(O),aa=>l(O,aa)),c(Xe,pt)};x(Za,Xe=>{e(C)&&Xe(ms)})}var bs=i(Gt,2),rn=i(n(bs),2),ln=n(rn),on=i(ft,2),kt=n(on),Mt=i(kt,2);w(Xe=>{y(St,e(f)?"Create Hotkey Binding":"Edit Hotkey Binding"),Et.disabled=!e(f),Me(Dt,1,Xe,"svelte-w4d8v7")},[()=>qa(["border-2 rounded-desktop p-4 text-center cursor-pointer outline-none transition-all duration-200 flex flex-col items-center justify-center min-h-[70px]",e(_)==="keys"?"border-solid border-[#f43f5e] bg-[rgba(244,63,94,0.05)] animate-border-pulse":e(te)?"border-solid border-[#fbbf24] bg-[rgba(251,191,36,0.05)] hover:border-[#fbbf24]/80":"border-dashed border-white/5 bg-black/25 hover:border-accent-blue hover:bg-black/35 focus:border-accent-blue focus:bg-black/35"].join(" "))]),L("click",na,()=>{l(v,null),l(_,null)}),He(Et,()=>e(v).id,Xe=>e(v).id=Xe),He(ia,()=>e(v).label,Xe=>e(v).label=Xe),L("click",Ze,Re),L("click",Dt,()=>l(_,"keys")),Os("focus",Dt,()=>l(_,"keys")),Os("blur",Dt,()=>ot()),L("keydown",Dt,Ie),L("keyup",Dt,Qe),sa(La,()=>e(C),Xe=>l(C,Xe)),sa(ln,()=>e($),Xe=>l($,Xe)),L("click",kt,()=>{l(v,null),l(_,null)}),L("click",Mt,ne),c(U,K)};x(nt,U=>{e(v)&&U(De)})}var Ge=i(nt,2);{var lt=U=>{Jo(U,{isNew:!0,get existingTargets(){return e(d)},isNested:!0,onSave:X,onCancel:Q,get editingTarget(){return e(m)},set editingTarget(K){l(m,K,!0)}})};x(Ge,U=>{e(m)&&U(lt)})}L("click",it,H),c(s,de),Ot(),o()}pa(["click","keydown","keyup"]);var fp=p('
      '),_p=p('
      '),hp=p('
      '),gp=p('
      '),mp=p('
      '),bp=p('
      '),yp=p('
      Speech: Plays transcribed text via TTS
      '),wp=p('
      '),kp=p('Delete? ',1),xp=p(''),Tp=p('
      '),Sp=p('
      🎯

      No output targets defined. Create one to route your transcription output!

      '),Ep=p(`

      Output Commands

      Define routing destinations where transcribed text is typed, copied, piped, or sent over network sockets.

      Saying a command by name. Start dictation and say “VoxCtrl”, then the command's name, then what you want to send — for - example “VoxCtrl notes, remember to call the plumber” routes remember to call the plumber to the command named notes. - Everything after the name is the text. Natural phrasing works too - (“VoxCtrl, add this to my notes: …”). Say nothing of the sort and - dictation goes wherever your hotkey already points.

      `,1);function Cp(s,a){Lt(a,!0);let t=S(wt([])),r=S(wt([])),o=S(null),d=S(!1),u=S(null),v=S(null);Zt(async()=>{l(t,await E("get_targets"),!0),l(r,await E("get_bindings"),!0)});async function f(){try{await E("save_targets",{targets:e(t)}),console.log("Targets auto-saved successfully!")}catch(ee){console.error("Failed to save targets:",ee)}}async function _(){try{await E("save_bindings",{bindings:e(r)}),console.log("Bindings auto-saved successfully!")}catch(ee){console.error("Failed to save bindings:",ee)}}function b(){l(d,!0),l(o,{id:"new_target_"+Math.random().toString(36).substring(2,6),label:"New Target",delivery:"inject",file_prefix:"- ",file_timestamp:!0,file_timestamp_format:"%Y-%m-%dT%H:%M:%SZ",file_mode:"append",http_method:"POST",http_json_template:{text:"{text}"},webhook_json_template:{text:"{text}"},mcp_tool:"speak_text",mcp_args:{text:"{text}"},chat_max_history:20,chat_timeout_secs:120,chat_reply_mode:"speak",strip_newlines:!1,processing:{}},!0)}function m(ee){l(d,!1),l(u,ee.id,!0);const P=JSON.parse(JSON.stringify(ee));P.processing||(P.processing={}),P.file_mode||(P.file_mode="append"),l(o,P,!0)}function h(){l(o,null),l(u,null)}async function M(){if(e(o)){if(e(d))l(t,[...e(t),e(o)],!0);else{if(e(u)&&e(u)!==e(o).id){let ee=!1;l(r,e(r).map(P=>{let R=!1,te=P.target_ids?[...P.target_ids]:[P.target_id];for(let Ae=0;Aeee.id===e(u)?e(o):ee),!0)}l(o,null),l(u,null),await f()}}async function A(ee){const P=e(r).filter(R=>(R.target_ids&&R.target_ids.length>0?R.target_ids:[R.target_id]).includes(ee)).map(R=>R.label||R.id);if(P.length>0){alert(`Cannot delete target. It is currently being used by hotkeys: ${P.join(", ")}`);return}l(t,e(t).filter(R=>R.id!==ee),!0),await f()}var $=Ep(),C=mt($),O=i(n(C),4),le=i(O,2);_t(le,21,()=>e(t),ht,(ee,P)=>{var R=Tp(),te=n(R),Ae=n(te),Pe=n(Ae),Y=n(Pe),B=i(Pe,2),ge=n(B),ae=i(Ae,2);{var G=ke=>{var D=fp(),k=n(D);w(()=>{var V;return y(k,`Cmd: ${(V=e(P).command)!=null?V:""}`)}),c(ke,D)};x(ae,ke=>{e(P).delivery==="exec"&&ke(G)})}var ue=i(ae,2);{var Se=ke=>{var D=_p(),k=n(D);w(()=>{var V;return y(k,`File: ${(V=e(P).file_path)!=null?V:""}`)}),c(ke,D)};x(ue,ke=>{e(P).delivery==="file"&&ke(Se)})}var ie=i(ue,2);{var q=ke=>{var D=hp(),k=n(D);w(()=>{var V,z;return y(k,`Socket: ${(V=e(P).socket_host)!=null?V:""}:${(z=e(P).socket_port)!=null?z:""}`)}),c(ke,D)};x(ie,ke=>{e(P).delivery==="socket"&&ke(q)})}var J=i(ie,2);{var ye=ke=>{var D=gp(),k=n(D),V=i(k);{var z=Z=>{var pe=je();w(()=>{var ce;return y(pe,`→ ${(ce=e(P).response_pipe)!=null?ce:""}`)}),c(Z,pe)};x(V,Z=>{e(P).response_pipe&&Z(z)})}w(()=>{var Z;return y(k,`Pipe: ${(Z=e(P).pipe_path)!=null?Z:""} `)}),c(ke,D)};x(J,ke=>{e(P).delivery==="pipe"&&ke(ye)})}var _e=i(J,2);{var oe=ke=>{var D=mp(),k=n(D);w(()=>{var V;return y(k,`API: ${(V=e(P).http_url||e(P).webhook_url)!=null?V:""}`)}),c(ke,D)};x(_e,ke=>{(e(P).delivery==="http"||e(P).delivery==="webhook")&&ke(oe)})}var W=i(_e,2);{var ve=ke=>{var D=bp(),k=n(D);w(()=>{var V;return y(k,`MCP Tool: ${(V=e(P).mcp_tool||"speak_text")!=null?V:""}`)}),c(ke,D)};x(W,ke=>{e(P).delivery==="mcp"&&ke(ve)})}var I=i(W,2);{var H=ke=>{var D=yp();c(ke,D)};x(I,ke=>{e(P).delivery==="speak"&&ke(H)})}var se=i(I,2);{var Ee=ke=>{var D=wp(),k=n(D);w(()=>{var V,z,Z;return y(k,`Chat: ${(V=e(P).chat_model||"no model")!=null?V:""} @ ${(z=e(P).chat_url||"no endpoint")!=null?z:""} → ${(Z=e(P).chat_reply_mode||"speak")!=null?Z:""}`)}),c(ke,D)};x(se,ke=>{e(P).delivery==="chat"&&ke(Ee)})}var Re=i(se,2),he=n(Re),ne=i(he,2);{var xe=ke=>{var D=kp(),k=i(mt(D),2),V=i(k,2);L("click",k,()=>{A(e(P).id),l(v,null)}),L("click",V,()=>l(v,null)),c(ke,D)},Je=ke=>{var D=xp();L("click",D,()=>l(v,e(P).id,!0)),c(ke,D)};x(ne,ke=>{e(v)===e(P).id?ke(xe):ke(Je,-1)})}w(()=>{y(Y,e(P).label),y(ge,e(P).delivery)}),L("click",he,()=>m(e(P))),c(ee,R)},ee=>{var P=Sp();c(ee,P)});var re=i(C,2);{var me=ee=>{Jo(ee,{get isNew(){return e(d)},get existingTargets(){return e(t)},isNested:!1,onSave:M,onCancel:h,get editingTarget(){return e(o)},set editingTarget(P){l(o,P,!0)}})};x(re,ee=>{e(o)&&ee(me)})}L("click",O,b),c(s,$),Ot()}pa(["click"]);var Ap=p('

      Use CUDA GPU acceleration (ONNX Runtime). Falls back to CPU if unavailable.

      ',1),Mp=p('

      Runs synthesis on the GPU via Vulkan. Falls back to the CPU whenever no Vulkan device can be opened.

      ',1),Pp=p('

      Runs synthesis on the GPU via Vulkan. Falls back to the CPU whenever no Vulkan device can be opened.

      ',1),Dp=p('

      Runs synthesis on the GPU via Vulkan. Falls back to the CPU whenever no Vulkan device can be opened.

      ',1),Ip=p('
      Run speed
      '),zp=p('

      '),Lp=p('

      '),Op=p('⏳ Checking local voice files...'),Rp=p(' '),Np=p('
      '),Fp=p('

      '),Vp=p('

      Piper Voice

      Voice directory (leave blank for default)

      Default voice directory: ~/.local/share/voxctrl/piper-voices/

      '),$p=p('⏳ Checking local model files...'),Bp=p('⏳ Downloading VoxCPM2 model weights from HuggingFace (4.5 GB)...'),qp=p('
      '),jp=p("Currently using the HF_TOKEN environment variable.",1),Up=p(`

      VoxCPM2 Voice

      ⚡ OpenBMB VoxCPM2 — 2B Autoregressive Diffusion TTS

      Runs through audio.cpp with optional Vulkan acceleration. Supports reference Voice Cloning and Ultimate Cloning (reference audio + transcript matching). Licensed under Apache 2.0.

      Voice Design (prompt-based) isn't offered here: audio.cpp's current VoxCPM2 build doesn't - act on the prompt yet, an upstream limitation. Voice Cloning below works correctly.

      Shared Voice Folder (leave blank for default)

      Default directory: ~/.local/share/voxctrl/cloned-tts-voices/

      Enable Ultimate Cloning

      When enabled, VoxCPM2 reads a companion .txt transcript file next to the .wav reference audio (e.g. voice_name.txt alongside voice_name.wav) for maximum phoneme alignment, nuanced breathing, and exact prosodic preservation.

      VoxCPM2 model files are hosted on HuggingFace at huggingface.co/openbmb/VoxCPM2. - An optional token can avoid anonymous download rate limits — set it once in the General tab.

      Model directory (leave blank for default)

      Default directory: ~/.local/share/voxctrl/models/voxcpm2/

      Loads the model at startup so the first reply doesn't pay the load cost.

      `),Wp=p('⏳ Checking local model files...'),Hp=p('⏳ Downloading Breeze-TTS-2 model weights from HuggingFace...'),Kp=p('
      '),Gp=p(`

      Breeze-TTS-2 Voice

      ⚠️ Non-Commercial License Warning

      Breeze-TTS-2 model weights are released under the BreezeBlue Research and Non-Commercial License. - Commercial use requires a personal or commercial license directly from the creator (RESONIA, INC.).

      Voice Design (prompt-based) isn't offered here: it doesn't reliably apply the described - voice and quality suffers compared to Voice Cloning below, which works correctly.

      Shared Voice Folder (leave blank for default)

      Default directory: ~/.local/share/voxctrl/cloned-tts-voices/

      ⚠️ Voice Cloning Transcript Required

      Unlike Pocket-TTS and VoxCPM2, Breeze-TTS-2 cannot clone a voice without a transcript. - Drop reference .wav audio files into your shared voice folder along with a - matching text file (e.g. voice_name.txt) containing exactly what is spoken - in the audio — cloning fails without one.

      Breeze-TTS-2 runs through the audio.cpp engine, which downloads the model on its first use - here — no HuggingFace token required.

      Model directory (leave blank for default)

      Default directory: ~/.local/share/voxctrl/models/breeze-tts-2/

      Loads the model at startup so the first reply doesn't pay the load cost.

      `),Yp=p('⏳ Checking local model files...'),Jp=p('⏳ Downloading Pocket-TTS model & voice clip (may take a few minutes)...'),Zp=p('
      '),Xp=p('

      '),Qp=p(`

      Pocket-TTS Voice

      Pocket-TTS runs through the audio.cpp engine, which downloads the model and voice clip on - their first use here — no HuggingFace token required.

      Custom voice directory (leave blank for default)

      Drop a .wav reference clip into this folder to add it to the voice list — - the filename (without extension) becomes the voice's id, e.g. narrator.wav adds - "Narrator (Custom)". Naming a clip after a built-in voice (e.g. alba.wav) replaces - that voice's reference clip. Default: ~/.local/share/voxctrl/cloned-tts-voices/

      Loads the model at startup so the first reply doesn't pay the load cost.

      `),ef=p(`

      This build cannot run this engine. The ONNX half is behind an opt-in - cargo feature, so Test TTS stays disabled until the app is rebuilt with it:
      npm run tauri dev -- --features inflect-micro
      npm run tauri build -- --features inflect-micro
      The -- is required, or npm consumes the flag itself. Downloading the - model works either way — only synthesis needs the feature.

      `),tf=p('⏳ Checking local model files...'),af=p('⏳ Downloading Inflect-Micro-v2 model (~38 MB)...'),sf=p('
      '),nf=p('
       
      '),rf=p('
       
      '),lf=p(`

      Inflect Micro

      A 9.4M-parameter VITS model (38 MB) with a single fixed English voice at 24 kHz, so - there is no voice to choose. Needs espeak-ng installed for phonemization.

      The model is deterministic for a fixed seed, so the same text always produces identical - audio. Change it to resample the prosody.

      Higher values give more expressive but less predictable delivery. Default is 0.667.

      Loads the ONNX graphs at launch so the first spoken response has no load delay.

      Model directory (leave blank for default)

      Point this at an existing copy of the model to skip downloading. Default: ~/.local/share/voxctrl/models/inflect-micro/

      Model diagnostics

      Reports the tensor names the downloaded export declares. Useful if synthesis fails with a - message about an input that could not be mapped.

      `),of=p('

      ',1),cf=p(`

      The model stays in memory for the whole session — the fastest possible response, at - the cost of holding its memory even while TTS sits unused.

      `),df=p('
      '),vf=p(' '),uf=p('
      (Click / Tab here to record a new stop key)',1),pf=p(''),ff=p('
      →
      '),_f=p('

      No pronunciation snippets defined.

      '),hf=p('

      Text to Speech

      TTS Engine

      Model Memory

      Playback

      Stop Key Bind

      Press a key combo to immediately stop TTS playback — works even when this window is hidden.

      TTS Snippets (Pronunciation Guide)

      Type a word (e.g. "voxctrl") ➔ its spoken expansion/pronunciation (e.g. "vox control"). Only affects speech playback.

      ');function gf(s,a){Lt(a,!0);let t=Ft(a,"cfg",15);function r(){Nt.set(t()),Vs.set(!0)}let o=S(null),d=S(0),u=S(!1),v=null,f=null,_=null,b=null,m=S(!1),h=S(null),M=0;function A(){l(u,!0),l(d,0),l(o,null),M=performance.now(),v&&clearInterval(v),v=setInterval(()=>{l(d,Math.round(performance.now()-M),!0),e(d)>1e4&&(clearInterval(v),l(u,!1),l(o,null))},10)}const $=["en-us-libritts-high","en-us-amy-low","en-us-kathleen-low","en-gb-southern_english_female-low","en-us-ryan-high","en-us-ryan-medium","en-us-ryan-low","en-us-lessac-medium","en-us-lessac-low","en-us-danny-low","en-gb-alan-low"];let C=S(wt({})),O=S(!1),le=S(!1),re=S(!1),me=S(null);async function ee(){l(O,!0);const N={};for(const Le of $)try{N[Le]=await E("check_voice_downloaded",{voiceName:Le,voiceDir:t().tts.voice_dir})}catch($e){console.error("Failed to check download status for voice "+Le,$e),N[Le]=!1}l(C,N,!0),l(O,!1)}async function P(N){if(!e(le)){l(le,!0);try{await E("download_voice",{voiceName:N,voiceDir:t().tts.voice_dir}),e(C)[N]=!0}catch(Le){alert(`Failed to download voice: ${Le}`)}finally{l(le,!1)}}}async function R(){const N=t().tts.voice_dir;if(!N){l(me,null);return}const Le=await E("check_directory_exists",{path:N});l(me,Le?null:"This folder does not exist. Please create it first or leave blank for the default location.",!0),e(me)||await ee()}function te(){r()}function Ae(N){N.key==="Enter"&&N.currentTarget.blur()}async function Pe(){r()}async function Y(){if(e(re))return;try{await ml(t())}catch(dt){l(h,`Failed to save configuration: ${dt}`);return}if(e(m)){l(m,!1);try{await E("stop_tts")}catch(dt){console.error("Failed to stop TTS:",dt)}}l(re,!0),l(h,null),A();let N="TTS",Le=null;t().tts.engine==="piper"?(N="Piper",Le=t().tts.voice):t().tts.engine==="pocket_tts"?(N="Pocket-TTS",Le=t().tts.pocket_tts.voice):t().tts.engine==="breeze_tts_2"?(N="Breeze-TTS-2",Le=null):t().tts.engine==="vox_cpm_2"?(N="VoxCPM2",Le=null):t().tts.engine==="inflect_micro"?(N="Inflect Micro",Le=null):t().tts.engine==="espeak"&&(N="eSpeak-NG",Le=null);const $e=`Hi this is ${N} speaking from VoxCtrl`;try{await E("speak_text",{text:$e,voice:Le})}catch(dt){l(h,`${dt}`),clearInterval(v),l(u,!1),l(re,!1)}}let B=S(!1);function ge(){if(!t().tts.enabled)return"Enable text-to-speech above first.";if(e(B))return"Switching engine...";if(e(m))return null;if(e(re))return"Already speaking.";if(t().tts.engine==="inflect_micro"){if(!e(Re))return"This build was compiled without the `inflect-micro` feature, so this engine cannot synthesize. Rebuild with: npm run tauri dev -- --features inflect-micro";if(e(ne))return"Checking local model files...";if(e(xe))return"Downloading the model...";if(!e(he))return"Download the model first."}if(t().tts.engine==="breeze_tts_2"){if(e(st))return"Checking local model files...";if(e(it))return"Downloading the model...";if(!e(We))return"Download the model first."}if(t().tts.engine==="vox_cpm_2"){if(e(de))return"Checking local model files...";if(e(Ue))return"Downloading the model...";if(!e(X))return"Download the model first."}return null}function ae(){return!t().tts.enabled||e(B)?!0:e(m)?!1:e(re)?!0:t().tts.engine==="piper"?e(O)||e(le)||!e(C)[t().tts.voice]:t().tts.engine==="pocket_tts"?e(Ie)||e(Qe)||!e(ce):t().tts.engine==="breeze_tts_2"?e(st)||e(it)||!e(We):t().tts.engine==="vox_cpm_2"?e(de)||e(Ue)||!e(X):t().tts.engine==="inflect_micro"?e(ne)||e(xe)||!e(he)||!e(Re):!1}let G=S(wt([])),ue=S(null);function Se(){return t().tts.engine==="vox_cpm_2"?t().tts.vox_cpm_2.voice_dir||"":t().tts.engine==="breeze_tts_2"?t().tts.breeze_tts_2.voice_dir||"":t().tts.pocket_tts.voice_dir||""}function ie(){if(!e(G)||e(G).length===0)return;const N=e(G)[0].id;let Le=!1;(!t().tts.vox_cpm_2.cloned_voice||!e(G).some($e=>$e.id===t().tts.vox_cpm_2.cloned_voice))&&(t(t().tts.vox_cpm_2.cloned_voice=N,!0),Le=!0),(!t().tts.breeze_tts_2.cloned_voice||!e(G).some($e=>$e.id===t().tts.breeze_tts_2.cloned_voice))&&(t(t().tts.breeze_tts_2.cloned_voice=N,!0),Le=!0),(!t().tts.pocket_tts.voice||!e(G).some($e=>$e.id===t().tts.pocket_tts.voice))&&(t(t().tts.pocket_tts.voice=N,!0),Le=!0),Le&&r()}ka(()=>{ie(),t().tts.vox_cpm_2.voice_mode!=="clone"&&(t(t().tts.vox_cpm_2.voice_mode="clone",!0),r()),t().tts.breeze_tts_2.voice_mode!=="clone"&&(t(t().tts.breeze_tts_2.voice_mode="clone",!0),r())});async function q(){try{l(G,await E("list_pocket_tts_voices",{voiceDir:Se()}),!0),ie()}catch(N){console.error("list_pocket_tts_voices:",N)}}async function J(N){const Le=typeof N=="string"?N:Se();if(!Le){l(ue,null),await q();return}const $e=await E("check_directory_exists",{path:Le});l(ue,$e?null:"This folder does not exist. Please create it first or leave blank for the default location.",!0),e(ue)||await q()}function ye(){r()}function _e(N){N.key==="Enter"&&N.currentTarget.blur()}let oe=fe(()=>$.map(N=>({value:N,label:`${N}${e(C)[N]?" ✔":""}`}))),W=fe(()=>e(G).map(N=>({value:N.id,label:N.label})));const ve=[{value:"always_loaded",label:"Always loaded (fastest response)"},{value:"on_demand",label:"Load when needed, unload when idle (saves memory)"}];let I=fe(()=>{var N;return Math.round(((N=t().tts.idle_unload_secs)!=null?N:900)/60)});function H(){t().tts.memory_mode==="on_demand"&&!t().tts.idle_unload_secs&&t(t().tts.idle_unload_secs=900,!0),r()}function se(N){const Le=Number(N.currentTarget.value),$e=Math.min(480,Math.max(1,Math.round(Le)||15));t(t().tts.idle_unload_secs=$e*60,!0),r()}const Ee=[{value:"vox_cpm_2",label:"VoxCPM2 (neural, voice cloning & design)"},{value:"breeze_tts_2",label:"Breeze-TTS-2 (neural, voice design)"},{value:"pocket_tts",label:"Pocket-TTS (neural, voice cloning)"},{value:"piper",label:"Piper (neural, high quality)"},{value:"inflect_micro",label:"Inflect Micro (neural, 38 MB)"},{value:"espeak",label:"eSpeak-NG (lightweight)"}];let Re=S(!0),he=S(!1),ne=S(!1),xe=S(!1),Je=S(null),ke=S(!1),D=S(null);async function k(){try{l(Re,await E("inflect_micro_available"),!0)}catch(N){console.error("inflect_micro_available:",N),l(Re,!1)}}async function V(){l(ne,!0);try{l(he,await E("check_inflect_micro_downloaded",{modelDir:t().tts.inflect_micro.model_dir}),!0)}catch(N){console.error("check_inflect_micro_downloaded:",N),l(he,!1)}finally{l(ne,!1)}}async function z(){if(!e(xe)){l(xe,!0),l(D,null);try{await E("download_inflect_micro",{modelDir:t().tts.inflect_micro.model_dir}),l(he,!0)}catch(N){l(D,`${N}`)}finally{l(xe,!1)}}}async function Z(){if(!e(ke)){l(ke,!0),l(Je,null);try{const N=await E("inflect_micro_inspect",{modelDir:t().tts.inflect_micro.model_dir});l(Je,JSON.stringify(N,null,2),!0)}catch(N){l(Je,`${N}`)}finally{l(ke,!1)}}}function pe(){r()}let ce=S(!1),Ie=S(!1),Qe=S(!1);async function ot(){l(Ie,!0);try{l(ce,await E("check_pocket_tts_ready",{voice:t().tts.pocket_tts.voice,voiceDir:t().tts.pocket_tts.voice_dir}),!0)}catch(N){console.error("check_pocket_tts_ready:",N),l(ce,!1)}finally{l(Ie,!1)}}async function et(){if(!e(Qe)){l(Qe,!0);try{await E("download_pocket_tts",{voice:t().tts.pocket_tts.voice,voiceDir:t().tts.pocket_tts.voice_dir,hfToken:t().tts.hf_token}),l(ce,!0)}catch(N){alert(`Failed to download Pocket-TTS assets: ${N}`)}finally{l(Qe,!1)}}}function Q(){r(),l(ce,!1),ot()}let X=S(!1),de=S(!1),Ue=S(!1);async function Ce(){l(de,!0);try{l(X,await E("check_vox_cpm_2_ready",{modelDir:t().tts.vox_cpm_2.model_dir}),!0)}catch(N){console.error("check_vox_cpm_2_ready:",N),l(X,!1)}finally{l(de,!1)}}async function Fe(){if(!e(Ue)){l(Ue,!0);try{const N=t().tts.hf_token;await E("download_vox_cpm_2",{modelDir:t().tts.vox_cpm_2.model_dir,hfToken:N}),l(X,!0)}catch(N){alert(`Failed to download VoxCPM2 assets: ${N}`)}finally{l(Ue,!1)}}}let We=S(!1),st=S(!1),it=S(!1);async function Ke(){l(st,!0);try{l(We,await E("check_breeze_tts_2_ready",{modelDir:t().tts.breeze_tts_2.model_dir}),!0)}catch(N){console.error("check_breeze_tts_2_ready:",N),l(We,!1)}finally{l(st,!1)}}async function rt(){if(!e(it)){l(it,!0);try{const N=t().tts.hf_token;await E("download_breeze_tts_2",{modelDir:t().tts.breeze_tts_2.model_dir,hfToken:N}),l(We,!0)}catch(N){alert(`Failed to download Breeze-TTS-2 assets: ${N}`)}finally{l(it,!1)}}}let ct=S(null);const nt=fe(()=>!!e(ct));async function De(){r(),l(B,!0);try{t().tts.engine==="vox_cpm_2"?(t(t().tts.vox_cpm_2.voice_mode="clone",!0),l(X,!1),await Ce(),await q()):t().tts.engine==="breeze_tts_2"?(t(t().tts.breeze_tts_2.voice_mode="clone",!0),l(We,!1),await Ke(),await q()):t().tts.engine==="pocket_tts"?(l(ce,!1),await q(),await ot()):t().tts.engine==="inflect_micro"?(l(he,!1),await k(),await V()):t().tts.engine==="piper"&&(t().tts.voice_dir?await R():await ee())}finally{setTimeout(()=>{l(B,!1)},400)}}Zt(async()=>{E("hf_token_env").then(N=>l(ct,N&&N.trim()?N.trim():null,!0)).catch(()=>l(ct,null)),t().tts.voice_dir?R():ee(),q(),t().tts.engine==="vox_cpm_2"&&Ce(),t().tts.engine==="breeze_tts_2"&&Ke(),t().tts.engine==="pocket_tts"&&ot(),t().tts.engine==="inflect_micro"&&(await k(),V()),f=await oa("tts-playback-start",()=>{e(u)&&(clearInterval(v),l(o,e(d),!0),l(u,!1)),l(re,!1),l(m,!0)}),_=await oa("tts-playback-end",()=>{l(m,!1),e(re)&&(clearInterval(v),l(u,!1),l(re,!1))}),b=await oa("tts-error",N=>{l(h,N.payload,!0),clearInterval(v),l(u,!1),l(o,null),l(re,!1),l(m,!1)})}),mr(()=>{v&&clearInterval(v),f&&f(),_&&_(),b&&b()});let Ge=S(!1),lt=S(wt([]));function U(N,Le){const $e=Le.toUpperCase();return N==="Control"?"KEY_LEFTCTRL":N==="Alt"?"KEY_LEFTALT":N==="Shift"?"KEY_LEFTSHIFT":N==="Meta"||N==="OS"||N==="Super"?"KEY_LEFTMETA":$e==="SPACE"?"KEY_SPACE":$e==="ENTER"?"KEY_ENTER":$e==="ESCAPE"||$e==="ESC"?"KEY_ESC":$e==="TAB"?"KEY_TAB":$e==="BACKSPACE"?"KEY_BACKSPACE":$e==="DELETE"?"KEY_DELETE":$e.startsWith("KEY")?$e:$e.startsWith("DIGIT")?`KEY_${$e.replace("DIGIT","")}`:$e.startsWith("ARROW")?`KEY_${$e.replace("ARROW","")}`:$e.startsWith("F")&&$e.length>1?`KEY_${$e}`:N.length===1?`KEY_${N.toUpperCase()}`:`KEY_${$e}`}function K(N){if(!e(Ge))return;N.preventDefault(),N.stopPropagation();const Le=U(N.key,N.code);e(lt).includes(Le)||l(lt,[...e(lt),Le],!0),N.key==="Escape"&&(t(t().tts.stop_key=[...e(lt)],!0),r(),l(lt,[],!0),l(Ge,!1))}function be(N){e(Ge)&&(N.preventDefault(),N.stopPropagation(),e(lt).length>0&&(t(t().tts.stop_key=[...e(lt)],!0),r()),l(lt,[],!0),l(Ge,!1))}function Be(){e(lt).length>0&&(t(t().tts.stop_key=[...e(lt)],!0),r(),l(lt,[],!0)),l(Ge,!1)}let Ye=S(wt(Object.entries(t().tts.snippets||{}).map(([N,Le])=>({key:N,val:Le})))),St=!1;ka(()=>{const N=e(Ye),Le={};for(const{key:ta,val:ua}of N)ta.trim()&&(Le[ta.trim()]=ua.trim());const $e=t().tts.snippets||{},dt=Object.keys($e),yt=Object.keys(Le);let Ht=dt.length!==yt.length;if(!Ht){for(const ta of yt)if($e[ta]!==Le[ta]){Ht=!0;break}}Ht&&(t(t().tts.snippets=Le,!0),St&&r()),St=!0});function na(){l(Ye,[...e(Ye),{key:"",val:""}],!0)}function ft(N){l(Ye,e(Ye).filter((Le,$e)=>$e!==N),!0)}var Rt=hf(),Et=i(n(Rt),2),At=i(n(Et),2),ia=i(n(At),2),Ut=i(At,2),Oe=i(n(Ut),2);da(Oe,{get options(){return Ee},onchange:De,get value(){return t().tts.engine},set value(N){t(t().tts.engine=N,!0)}});var Ze=i(Ut,2);{var j=N=>{var Le=Ap(),$e=mt(Le),dt=i(n($e),2);L("change",dt,r),sa(dt,()=>t().tts.gpu,yt=>t(t().tts.gpu=yt,!0)),c(N,Le)},g=N=>{var Le=Mp(),$e=mt(Le),dt=i(n($e),2);L("change",dt,r),sa(dt,()=>t().tts.pocket_tts.gpu,yt=>t(t().tts.pocket_tts.gpu=yt,!0)),c(N,Le)},T=N=>{var Le=Pp(),$e=mt(Le),dt=i(n($e),2);L("change",dt,r),sa(dt,()=>t().tts.breeze_tts_2.gpu,yt=>t(t().tts.breeze_tts_2.gpu=yt,!0)),c(N,Le)},Te=N=>{var Le=Dp(),$e=mt(Le),dt=i(n($e),2);L("change",dt,r),sa(dt,()=>t().tts.vox_cpm_2.gpu,yt=>t(t().tts.vox_cpm_2.gpu=yt,!0)),c(N,Le)};x(Ze,N=>{t().tts.engine==="piper"?N(j):t().tts.engine==="pocket_tts"?N(g,1):t().tts.engine==="breeze_tts_2"?N(T,2):t().tts.engine==="vox_cpm_2"&&N(Te,3)})}var we=i(Ze,2),ze=n(we),qe=n(ze),Ne=i(ze,2),at=i(we,2),tt=n(at),Vt=n(tt),Xt=i(tt,2);{var ea=N=>{var Le=Ip(),$e=i(n(Le),2);let dt;var yt=n($e);w(()=>{dt=Me($e,1,"run-speed-value svelte-1q9seip",null,dt,{counting:e(u)}),y(yt,e(u)?`${e(d)} ms`:`${e(o)} ms`)}),c(N,Le)};x(Xt,N=>{(e(u)||e(o)!==null)&&N(ea)})}var Kt=i(at,2);{var Dt=N=>{var Le=zp(),$e=n(Le);w(()=>{var dt;return y($e,`❌ ${(dt=e(h))!=null?dt:""}`)}),c(N,Le)};x(Kt,N=>{e(h)&&N(Dt)})}var fa=i(Kt,2);{var Qt=N=>{var Le=Lp(),$e=n(Le);w(dt=>y($e,`Test TTS unavailable: ${dt!=null?dt:""}`),[()=>ge()]),c(N,Le)},ya=fe(()=>!e(h)&&ae()&&ge());x(fa,N=>{e(ya)&&N(Qt)})}var Pa=i(Et,2);{var Ja=N=>{var Le=Vp(),$e=i(n(Le),2),dt=i(n($e),2);da(dt,{get options(){return e(oe)},onchange:Pe,get value(){return t().tts.voice},set value(ra){t(t().tts.voice=ra,!0)}});var yt=i($e,2),Ht=n(yt);{var ta=ra=>{var Pt=Op();c(ra,Pt)},ua=ra=>{var Pt=Rp(),xt=n(Pt);w(()=>{var ca;return y(xt,`⏳ Downloading ${(ca=t().tts.voice)!=null?ca:""} (model + config)...`)}),c(ra,Pt)},Va=ra=>{var Pt=Np(),xt=n(Pt),ca=n(xt),Na=i(xt,2),Qa=n(Na);w(()=>{Me(xt,1,qa(e(C)[t().tts.voice]?"status-downloaded":"status-missing"),"svelte-1q9seip"),y(ca,e(C)[t().tts.voice]?"✔ Voice downloaded and ready":"❌ Voice files missing"),Na.disabled=e(C)[t().tts.voice]||e(le),y(Qa,e(C)[t().tts.voice]?"Downloaded":"📥 Download")}),L("click",Na,()=>P(t().tts.voice)),c(ra,Pt)};x(Ht,ra=>{e(O)?ra(ta):e(le)?ra(ua,1):ra(Va,-1)})}var Ra=i(yt,2),ha=i(n(Ra),2);let $a;var Xa=i(ha,2);{var ys=ra=>{var Pt=Fp(),xt=n(Pt);w(()=>y(xt,e(me))),c(ra,Pt)};x(Xa,ra=>{e(me)&&ra(ys)})}w(()=>$a=Me(ha,1,"svelte-1q9seip",null,$a,{"field-input-error":!!e(me)})),L("change",ha,te),Os("blur",ha,R),L("keydown",ha,Ae),He(ha,()=>t().tts.voice_dir,ra=>t(t().tts.voice_dir=ra,!0)),c(N,Le)};x(Pa,N=>{t().tts.engine==="piper"&&N(Ja)})}var bt=i(Pa,2);{var Wt=N=>{var Le=Up(),$e=i(n(Le),6),dt=i(n($e),2);da(dt,{get options(){return e(W)},defaultToFirst:!0,onchange:r,get value(){return t().tts.vox_cpm_2.cloned_voice},set value(Bt){t(t().tts.vox_cpm_2.cloned_voice=Bt,!0)}});var yt=i($e,2),Ht=i(n(yt),2),ta=i(yt,4),ua=i(n(ta),2),Va=i(ta,4),Ra=n(Va);{var ha=Bt=>{var rs=$p();c(Bt,rs)},$a=Bt=>{var rs=Bp();c(Bt,rs)},Xa=Bt=>{var rs=qp(),ai=n(rs),kr=n(ai),qt=i(ai,2),Fa=n(qt);w(()=>{Me(ai,1,qa(e(X)?"status-downloaded":"status-missing"),"svelte-1q9seip"),y(kr,e(X)?"✔ Model weights downloaded and ready":"❌ Model files missing"),qt.disabled=e(X)||e(Ue),y(Fa,e(X)?"Downloaded":"📥 Download")}),L("click",qt,Fe),c(Bt,rs)};x(Ra,Bt=>{e(de)?Bt(ha):e(Ue)?Bt($a,1):Bt(Xa,-1)})}var ys=i(Va,2),ra=i(n(ys),5);{var Pt=Bt=>{var rs=jp();c(Bt,rs)};x(ra,Bt=>{e(nt)&&Bt(Pt)})}var xt=i(ys,2),ca=i(n(xt),2),Na=i(xt,4),Qa=i(n(Na),2);L("change",Ht,()=>{r(),J(t().tts.vox_cpm_2.voice_dir)}),He(Ht,()=>t().tts.vox_cpm_2.voice_dir,Bt=>t(t().tts.vox_cpm_2.voice_dir=Bt,!0)),L("change",ua,r),sa(ua,()=>t().tts.vox_cpm_2.ultimate_cloning,Bt=>t(t().tts.vox_cpm_2.ultimate_cloning=Bt,!0)),L("change",ca,r),He(ca,()=>t().tts.vox_cpm_2.model_dir,Bt=>t(t().tts.vox_cpm_2.model_dir=Bt,!0)),L("change",Qa,r),sa(Qa,()=>t().tts.vox_cpm_2.prewarm,Bt=>t(t().tts.vox_cpm_2.prewarm=Bt,!0)),c(N,Le)};x(bt,N=>{t().tts.engine==="vox_cpm_2"&&N(Wt)})}var _a=i(bt,2);{var It=N=>{var Le=Gp(),$e=i(n(Le),6),dt=i(n($e),2);da(dt,{get options(){return e(W)},defaultToFirst:!0,onchange:r,get value(){return t().tts.breeze_tts_2.cloned_voice},set value(Pt){t(t().tts.breeze_tts_2.cloned_voice=Pt,!0)}});var yt=i($e,2),Ht=i(n(yt),2),ta=i(yt,6),ua=n(ta);{var Va=Pt=>{var xt=Wp();c(Pt,xt)},Ra=Pt=>{var xt=Hp();c(Pt,xt)},ha=Pt=>{var xt=Kp(),ca=n(xt),Na=n(ca),Qa=i(ca,2),Bt=n(Qa);w(()=>{Me(ca,1,qa(e(We)?"status-downloaded":"status-missing"),"svelte-1q9seip"),y(Na,e(We)?"✔ Model weights downloaded and ready":"❌ Model files missing"),Qa.disabled=e(We)||e(it),y(Bt,e(We)?"Downloaded":"📥 Download")}),L("click",Qa,rt),c(Pt,xt)};x(ua,Pt=>{e(st)?Pt(Va):e(it)?Pt(Ra,1):Pt(ha,-1)})}var $a=i(ta,4),Xa=i(n($a),2),ys=i($a,4),ra=i(n(ys),2);L("change",Ht,()=>{r(),J(t().tts.breeze_tts_2.voice_dir)}),He(Ht,()=>t().tts.breeze_tts_2.voice_dir,Pt=>t(t().tts.breeze_tts_2.voice_dir=Pt,!0)),L("change",Xa,r),He(Xa,()=>t().tts.breeze_tts_2.model_dir,Pt=>t(t().tts.breeze_tts_2.model_dir=Pt,!0)),L("change",ra,r),sa(ra,()=>t().tts.breeze_tts_2.prewarm,Pt=>t(t().tts.breeze_tts_2.prewarm=Pt,!0)),c(N,Le)};x(_a,N=>{t().tts.engine==="breeze_tts_2"&&N(It)})}var Gt=i(_a,2);{var za=N=>{var Le=Qp(),$e=i(n(Le),2),dt=i(n($e),2);da(dt,{get options(){return e(W)},defaultToFirst:!0,onchange:Q,get value(){return t().tts.pocket_tts.voice},set value(xt){t(t().tts.pocket_tts.voice=xt,!0)}});var yt=i($e,2),Ht=n(yt);{var ta=xt=>{var ca=Yp();c(xt,ca)},ua=xt=>{var ca=Jp();c(xt,ca)},Va=xt=>{var ca=Zp(),Na=n(ca),Qa=n(Na),Bt=i(Na,2),rs=n(Bt);w(()=>{Me(Na,1,qa(e(ce)?"status-downloaded":"status-missing"),"svelte-1q9seip"),y(Qa,e(ce)?"✔ Model and voice clip downloaded and ready":"❌ Model files missing"),Bt.disabled=e(ce)||e(Qe),y(rs,e(ce)?"Downloaded":"📥 Download")}),L("click",Bt,et),c(xt,ca)};x(Ht,xt=>{e(Ie)?xt(ta):e(Qe)?xt(ua,1):xt(Va,-1)})}var Ra=i(yt,4),ha=i(n(Ra),2);let $a;var Xa=i(ha,2);{var ys=xt=>{var ca=Xp(),Na=n(ca);w(()=>y(Na,e(ue))),c(xt,ca)};x(Xa,xt=>{e(ue)&&xt(ys)})}var ra=i(Ra,4),Pt=i(n(ra),2);w(()=>$a=Me(ha,1,"svelte-1q9seip",null,$a,{"field-input-error":!!e(ue)})),L("change",ha,ye),Os("blur",ha,J),L("keydown",ha,_e),He(ha,()=>t().tts.pocket_tts.voice_dir,xt=>t(t().tts.pocket_tts.voice_dir=xt,!0)),L("change",Pt,r),sa(Pt,()=>t().tts.pocket_tts.prewarm,xt=>t(t().tts.pocket_tts.prewarm=xt,!0)),c(N,Le)};x(Gt,N=>{t().tts.engine==="pocket_tts"&&N(za)})}var La=i(Gt,2);{var Za=N=>{var Le=lf(),$e=i(n(Le),4);{var dt=qt=>{var Fa=ef();c(qt,Fa)};x($e,qt=>{e(Re)||qt(dt)})}var yt=i($e,2),Ht=n(yt);{var ta=qt=>{var Fa=tf();c(qt,Fa)},ua=qt=>{var Fa=af();c(qt,Fa)},Va=qt=>{var Fa=sf(),cn=n(Fa),$i=n(cn),xr=i(cn,2),ec=n(xr);w(()=>{Me(cn,1,qa(e(he)?"status-downloaded":"status-missing"),"svelte-1q9seip"),y($i,e(he)?"✔ Model downloaded and ready":"❌ Model files missing"),xr.disabled=e(he)||e(xe),y(ec,e(he)?"Downloaded":"📥 Download")}),L("click",xr,z),c(qt,Fa)};x(Ht,qt=>{e(ne)?qt(ta):e(xe)?qt(ua,1):qt(Va,-1)})}var Ra=i(yt,2);{var ha=qt=>{var Fa=nf(),cn=n(Fa);w(()=>{var $i;return y(cn,`❌ ${($i=e(D))!=null?$i:""}`)}),c(qt,Fa)};x(Ra,qt=>{e(D)&&qt(ha)})}var $a=i(Ra,2),Xa=i(n($a),2),ys=i($a,4),ra=i(n(ys),2),Pt=i(ys,4),xt=i(n(Pt),2),ca=i(Pt,4),Na=i(n(ca),2),Qa=i(ca,4),Bt=i(n(Qa),2),rs=n(Bt),ai=i(Qa,4);{var kr=qt=>{var Fa=rf(),cn=n(Fa);w(()=>y(cn,e(Je))),c(qt,Fa)};x(ai,qt=>{e(Je)&&qt(kr)})}w(()=>{Bt.disabled=!e(he)||e(ke),y(rs,e(ke)?"Inspecting...":"🔍 Inspect graphs")}),L("change",Xa,pe),He(Xa,()=>t().tts.inflect_micro.seed,qt=>t(t().tts.inflect_micro.seed=qt,!0)),L("change",ra,pe),He(ra,()=>t().tts.inflect_micro.noise_scale,qt=>t(t().tts.inflect_micro.noise_scale=qt,!0)),L("change",xt,pe),sa(xt,()=>t().tts.inflect_micro.prewarm,qt=>t(t().tts.inflect_micro.prewarm=qt,!0)),L("change",Na,pe),He(Na,()=>t().tts.inflect_micro.model_dir,qt=>t(t().tts.inflect_micro.model_dir=qt,!0)),L("click",Bt,Z),c(N,Le)};x(La,N=>{t().tts.engine==="inflect_micro"&&N(Za)})}var ms=i(La,2),bs=i(n(ms),2),rn=i(n(bs),2);da(rn,{get options(){return ve},onchange:H,get value(){return t().tts.memory_mode},set value(N){t(t().tts.memory_mode=N,!0)}});var ln=i(bs,2);{var on=N=>{var Le=of(),$e=mt(Le),dt=i(n($e),2),yt=i($e,2),Ht=n(yt);w(()=>{var ta;br(dt,e(I)),y(Ht,`The model is loaded the moment VoxCtrl knows it will be needed — as soon as you start - dictating to a target that speaks — and stays primed while you keep using it. The - countdown restarts on every use, so it only unloads after ${(ta=e(I))!=null?ta:""} - ${e(I)===1?"minute":"minutes"} of no speech. The first reply after an - unload takes a few seconds longer while the model loads again.`)}),L("change",dt,se),c(N,Le)},kt=N=>{var Le=cf();c(N,Le)};x(ln,N=>{t().tts.memory_mode==="on_demand"?N(on):N(kt,-1)})}var Mt=i(ms,2),Xe=i(n(Mt),2),pt=i(n(Xe),2),$t=i(Xe,2),Yt=i(n($t),4),Ca=n(Yt);{var wa=N=>{var Le=df(),$e=i(n(Le),2),dt=n($e);w(yt=>y(dt,yt),[()=>e(lt).length>0?e(lt).join(" + ").replace(/KEY_/g,""):"Press your physical shortcut combination now..."]),c(N,Le)},Ua=N=>{var Le=pf(),$e=n(Le);{var dt=Ht=>{var ta=uf(),ua=mt(ta);_t(ua,21,()=>t().tts.stop_key,ht,(Va,Ra)=>{var ha=vf(),$a=n(ha);w(Xa=>y($a,Xa),[()=>e(Ra).replace("KEY_","")]),c(Va,ha)}),c(Ht,ta)},yt=Ht=>{var ta=je("⚠️ Click/Focus here to press a stop key!");c(Ht,ta)};x($e,Ht=>{t().tts.stop_key.length>0?Ht(dt):Ht(yt,-1)})}c(N,Le)};x(Ca,N=>{e(Ge)?N(wa):N(Ua,-1)})}var Ta=i(Mt,2),Wa=n(Ta),is=i(n(Wa),2),Gs=i(Wa,2),Oa=n(Gs);_t(Oa,17,()=>e(Ye),ht,(N,Le,$e)=>{var dt=ff(),yt=n(dt),Ht=i(yt,4),ta=i(Ht,2);He(yt,()=>e(Ye)[$e].key,ua=>e(Ye)[$e].key=ua),He(Ht,()=>e(Ye)[$e].val,ua=>e(Ye)[$e].val=ua),L("click",ta,()=>ft($e)),c(N,dt)});var aa=i(Oa,2);{var Ms=N=>{var Le=_f();c(N,Le)};x(aa,N=>{e(Ye).length===0&&N(Ms)})}w((N,Le,$e,dt)=>{y(qe,`Speed (${N!=null?N:""}×)`),tt.disabled=Le,Tt(tt,"title",$e),y(Vt,e(re)?"Speaking...":e(m)?"⏹ Stop & Test":"Test TTS"),Me(Yt,1,dt,"svelte-1q9seip")},[()=>t().tts.speed.toFixed(2),()=>ae(),()=>{var N;return(N=ge())!=null?N:"Speak a test phrase"},()=>qa(["border-2 rounded-desktop p-6 text-center cursor-pointer outline-none transition-all duration-200 flex flex-col items-center justify-center min-h-[80px]",e(Ge)?"border-solid border-[#f43f5e] bg-[rgba(244,63,94,0.05)] animate-border-pulse":"border-dashed border-white/5 bg-black/25 hover:border-accent-blue hover:bg-black/35 focus:border-accent-blue focus:bg-black/35"].join(" "))]),L("change",ia,r),sa(ia,()=>t().tts.enabled,N=>t(t().tts.enabled=N,!0)),L("change",Ne,r),He(Ne,()=>t().tts.speed,N=>t(t().tts.speed=N,!0)),L("click",tt,Y),L("change",pt,r),sa(pt,()=>t().tts.response_overlay,N=>t(t().tts.response_overlay=N,!0)),L("click",Yt,()=>l(Ge,!0)),Os("focus",Yt,()=>l(Ge,!0)),Os("blur",Yt,Be),L("keydown",Yt,K),L("keyup",Yt,be),L("click",is,na),c(s,Rt),Ot()}pa(["change","click","keydown","keyup"]);var mf=p(''),bf=p(`⚠️ The model isn't available on this server. Post-processing will fail with a 404 — pick a model from the list above or pull it on the server.`),yf=p(" "),wf=p('Select the Custom preset to edit the system and user prompts.'),kf=p('⚠️ The user prompt must contain the placeholder.'),xf=p('Use where your dictated speech should be inserted.'),Tf=p(`

      OpenAI API LLM Post-Processing

      Connect to any OpenAI-compatible API server — a local server or a hosted - provider. The URL defaults to a local server; point it anywhere you like and - supply an API key when the server requires one.

      Connection

      Default Prompts

      The system prompt tells the model how to transform your speech. The user - prompt is the message sent to the model — it must contain , which is replaced with whatever you dictate. - Built-in presets are read-only; choose Custom to edit the - prompts yourself.

      System Prompt
      User Prompt
      `);function Sf(s,a){Lt(a,!0);let t=Ft(a,"cfg",15);function r(){Nt.set(t()),Vs.set(!0)}let o=S(!1),d=S(null),u=S(wt([])),v=fe(()=>[...e(u).map(he=>({value:he,label:he})),...t().openai.model&&!e(u).includes(t().openai.model)?[{value:t().openai.model,label:`${t().openai.model} (not found)`}]:[]]);const f=[{value:"clean",label:"Clean (grammar fix)"},{value:"formal",label:"Formal"},{value:"casual",label:"Casual"},{value:"bullet",label:"Bullet points"},{value:"concise",label:"Concise (summarize)"},{value:"custom",label:"Custom (editable)"}],_={clean:"Fix grammar and punctuation only. Return only the corrected text, no commentary.",formal:"Rewrite the user's text in formal professional language. Return only the result.",casual:"Rewrite the user's text in casual conversational language. Return only the result.",bullet:"Convert the user's text to a bullet-point list. Return only the list.",concise:"Summarize the user's text concisely in 1-2 sentences. Return only the summary."};let b=fe(()=>t().openai.mode==="custom");function m(){const he=_[t().openai.mode];he!==void 0&&(t(t().openai.system_prompt=he,!0),t(t().openai.user_prompt="{text}",!0)),r()}let h=fe(()=>t().openai.user_prompt.includes("{text}")),M=fe(()=>e(u).length>0&&!!t().openai.model&&!e(u).includes(t().openai.model));async function A(){l(o,!0),l(d,null);try{const he=await E("test_openai",{endpoint:t().openai.endpoint,apiKey:t().openai.api_key,timeoutSecs:t().openai.timeout_secs});l(d,{success:he.success,message:he.message},!0),he.success&&(l(u,he.models,!0),!t().openai.model&&he.models.length>0&&(t(t().openai.model=he.models[0],!0),r()))}catch(he){l(d,{success:!1,message:he.toString()},!0)}finally{l(o,!1)}}Zt(()=>{A()});var $=Tf(),C=i(n($),4),O=i(n(C),2),le=i(n(O),2),re=i(O,2),me=i(n(re),2),ee=i(re,2),P=i(n(ee),2);{var R=he=>{da(he,{get options(){return e(v)},onchange:r,get value(){return t().openai.model},set value(ne){t(t().openai.model=ne,!0)}})},te=he=>{var ne=mf();L("change",ne,r),He(ne,()=>t().openai.model,xe=>t(t().openai.model=xe,!0)),c(he,ne)};x(P,he=>{e(u).length>0?he(R):he(te,-1)})}var Ae=i(ee,2);{var Pe=he=>{var ne=bf(),xe=i(n(ne)),Je=n(xe);w(()=>y(Je,t().openai.model)),c(he,ne)};x(Ae,he=>{e(M)&&he(Pe)})}var Y=i(Ae,2),B=i(n(Y),2),ge=i(Y,2),ae=n(ge),G=n(ae),ue=i(ae,2);{var Se=he=>{var ne=yf(),xe=n(ne);w(()=>{Me(ne,1,`status-msg ${e(d).success?"success":"error"}`,"svelte-1bvctpo"),y(xe,e(d).message)}),c(he,ne)};x(ue,he=>{e(d)&&he(Se)})}var ie=i(C,2),q=i(n(ie),2),J=i(n(q));J.textContent="{text}";var ye=i(q,2),_e=i(n(ye),2);da(_e,{get options(){return f},onchange:m,get value(){return t().openai.mode},set value(he){t(t().openai.mode=he,!0)}});var oe=i(ye,2),W=i(n(oe),2),ve=i(oe,2),I=i(n(ve),2);Tt(I,"placeholder","{text}");var H=i(I,2);{var se=he=>{var ne=wf();c(he,ne)},Ee=he=>{var ne=kf(),xe=i(n(ne));xe.textContent="{text}",c(he,ne)},Re=he=>{var ne=xf(),xe=i(n(ne));xe.textContent="{text}",c(he,ne)};x(H,he=>{e(b)?e(h)?he(Re,-1):he(Ee,1):he(se)})}w(()=>{ae.disabled=e(o),y(G,e(o)?"⏳ Testing...":"🔌 Test Connection"),W.readOnly=!e(b),Me(W,1,qa(e(b)?"":"locked"),"svelte-1bvctpo"),I.readOnly=!e(b),Me(I,1,qa(e(b)?e(h)?"":"invalid":"locked"),"svelte-1bvctpo")}),L("change",le,r),He(le,()=>t().openai.endpoint,he=>t(t().openai.endpoint=he,!0)),L("change",me,r),He(me,()=>t().openai.api_key,he=>t(t().openai.api_key=he,!0)),L("change",B,r),He(B,()=>t().openai.timeout_secs,he=>t(t().openai.timeout_secs=he,!0)),L("click",ae,A),L("change",W,r),He(W,()=>t().openai.system_prompt,he=>t(t().openai.system_prompt=he,!0)),L("change",I,r),He(I,()=>t().openai.user_prompt,he=>t(t().openai.user_prompt=he,!0)),c(s,$),Ot()}pa(["change","click"]);var Ef=p(' '),Cf=p('⏳ Downloading'),Af=p('Missing'),Mf=p('⏳ Checking S1-mini model files...'),Pf=p('⏳ Downloading S1-mini model (s1-mini-q4_k_m.gguf & tokenizer.json)...'),Df=p(' '),If=p('
      ❌ Model files missing
      '),zf=p('
      ',1),Lf=p('

      These features are covered by S1-mini when enabled.

      '),Of=p('
      →
      '),Rf=p('

      No snippets defined.

      '),Nf=p(`

      Post-Processing

      S1-mini Dictation Cleanup

      Note: S1-Mini is a ~480 MB download.

      Basic Text Cleanup

      Custom Dictionary

      Provide a comma-separated list of words (e.g. names or jargon like "Waylin, Rufer, Enola, Kenz") that are hard to spell. The transcription process will correct these in the final text.

      Snippets

      Type a trigger word → it expands to the replacement text.

      `);function Ff(s,a){Lt(a,!0);let t=Ft(a,"cfg",15);t().engine&&!t().engine.s1_mini&&t(t().engine.s1_mini={enabled:!1,styling:"semi-formal"},!0);function r(){Nt.set(t()),Vs.set(!0)}let o=S(!1),d=S(!1),u=S(!1),v=S(null);const f={cuda:"CUDA (NVIDIA)",vulkan:"Vulkan (AMD/Intel/NVIDIA)",coreml:"CoreML (Apple)",webgpu:"WebGPU (AMD/Intel/NVIDIA)"},_=D=>{var k;return(k=f[D])!=null?k:D};function b(){t().engine.s1_mini||t(t().engine.s1_mini={enabled:!1,styling:"semi-formal"},!0)}async function m(){l(d,!0);try{l(o,await E("check_s1_mini_downloaded"),!0)}catch(D){console.error("Failed to check S1-mini download status",D),l(o,!1)}finally{l(d,!1)}}async function h(){if(!e(u)){l(u,!0);try{await E("download_s1_mini_model"),l(o,!0)}catch(D){alert(`Failed to download S1-mini model: ${D}`)}finally{l(u,!1)}}}async function M(){b(),r(),t().engine.s1_mini.enabled&&!e(o)&&await h()}let A=fe(()=>{var D;return!!((D=t().engine.s1_mini)!=null&&D.enabled)});Zt(async()=>{var D;b(),m();try{const k=await E("accelerator_support");l(v,(D=k.s1_mini_gpu)!=null?D:null,!0)}catch(k){console.error("Failed to query GPU support",k)}});let $=S(wt(Object.entries(t().features.snippets).map(([D,k])=>({key:D,val:k})))),C=!1;ka(()=>{const D=e($),k={};for(const{key:ce,val:Ie}of D)ce.trim()&&(k[ce.trim()]=Ie.trim());const V=t().features.snippets||{},z=Object.keys(V),Z=Object.keys(k);let pe=z.length!==Z.length;if(!pe){for(const ce of Z)if(V[ce]!==k[ce]){pe=!0;break}}pe&&(t(t().features.snippets=k,!0),C&&r()),C=!0});function O(){l($,[...e($),{key:"",val:""}],!0)}function le(D){l($,e($).filter((k,V)=>V!==D),!0)}let re=fe(()=>t().features.custom_vocabulary?t().features.custom_vocabulary.join(", "):"");function me(D){const k=D.target;t(t().features.custom_vocabulary=k.value.split(",").map(V=>V.trim()).filter(V=>V.length>0),!0),r()}function ee(D){function k(){D.style.height="auto",D.style.height=`${D.scrollHeight}px`}D.addEventListener("input",k);const V=setTimeout(k,0);return{update(){k()},destroy(){clearTimeout(V),D.removeEventListener("input",k)}}}var P=Nf(),R=i(n(P),2),te=n(R),Ae=i(n(te),2);{var Pe=D=>{var k=Ef(),V=n(k);w(z=>y(V,`✔ Ready ${z!=null?z:""}`),[()=>e(v)?`(${_(e(v))})`:"(CPU)"]),c(D,k)},Y=D=>{var k=Cf();c(D,k)},B=D=>{var k=Af();c(D,k)};x(Ae,D=>{e(o)?D(Pe):e(u)?D(Y,1):e(A)&&D(B,2)})}var ge=i(te,2),ae=i(n(ge),2),G=i(ge,4);{var ue=D=>{var k=zf(),V=mt(k),z=n(V);{var Z=et=>{var Q=Mf();c(et,Q)},pe=et=>{var Q=Pf();c(et,Q)},ce=et=>{var Q=Df(),X=n(Q);w(de=>y(X,`✔ Model downloaded and ready ${de!=null?de:""}`),[()=>e(v)?`(${_(e(v))} GPU accelerated)`:"on CPU"]),c(et,Q)},Ie=et=>{var Q=If(),X=i(n(Q),2);L("click",X,h),c(et,Q)};x(z,et=>{e(d)?et(Z):e(u)?et(pe,1):e(o)?et(ce,2):et(Ie,-1)})}var Qe=i(V,2),ot=i(n(Qe),2);da(ot,{options:[{value:"semi-formal",label:"Semi-formal (Default)"},{value:"casual",label:"Casual"},{value:"formal",label:"Formal"},{value:"verbatim",label:"Verbatim"},{value:"concise",label:"Concise"}],onchange:r,get value(){return t().engine.s1_mini.styling},set value(et){t(t().engine.s1_mini.styling=et,!0)}}),c(D,k)};x(G,D=>{e(A)&&D(ue)})}var Se=i(R,2);let ie;var q=i(n(Se),2);{var J=D=>{var k=Lf();c(D,k)};x(q,D=>{e(A)&&D(J)})}var ye=i(q,2),_e=i(n(ye),2),oe=i(ye,2),W=i(n(oe),2),ve=i(oe,2),I=i(n(ve),2),H=i(Se,2),se=i(n(H),4);en(se,D=>ee==null?void 0:ee(D));var Ee=i(H,2),Re=n(Ee),he=i(n(Re),2),ne=i(Re,2),xe=n(ne);_t(xe,17,()=>e($),ht,(D,k,V)=>{var z=Of(),Z=n(z),pe=i(Z,4),ce=i(pe,2);He(Z,()=>e($)[V].key,Ie=>e($)[V].key=Ie),He(pe,()=>e($)[V].val,Ie=>e($)[V].val=Ie),L("click",ce,()=>le(V)),c(D,z)});var Je=i(xe,2);{var ke=D=>{var k=Rf();c(D,k)};x(Je,D=>{e($).length===0&&D(ke)})}w(()=>{ie=Me(Se,1,"field-group svelte-1s1a8xn",null,ie,{"disabled-section":e(A)}),_e.disabled=e(A),W.disabled=e(A),I.disabled=e(A),br(se,e(re))}),L("change",ae,M),sa(ae,()=>t().engine.s1_mini.enabled,D=>t(t().engine.s1_mini.enabled=D,!0)),L("change",_e,r),sa(_e,()=>t().features.remove_fillers,D=>t(t().features.remove_fillers=D,!0)),L("change",W,r),sa(W,()=>t().features.spoken_punctuation,D=>t(t().features.spoken_punctuation=D,!0)),L("change",I,r),sa(I,()=>t().features.auto_format_lists,D=>t(t().features.auto_format_lists=D,!0)),L("input",se,me),L("click",he,O),c(s,P),Ot()}pa(["change","click","input"]);async function Zo(s,a){await E("plugin:shell|open",{path:s,with:a})}async function Vf(s={}){return typeof s=="object"&&Object.freeze(s),await E("plugin:dialog|save",{options:s})}var $f=p(""),Bf=p(""),qf=p('
      '),jf=p('
      '),Uf=p(''),Wf=p('

      Building the report…

      '),Hf=p('
       
      '),Kf=p('

      Title: · Report ID

      ',1),Gf=p('

      Fill in the summary and description above and the finished report appears here.

      '),Yf=p(''),Jf=p(''),Zf=p(''),Xf=p(''),Qf=p('
      '),e_=p('
      '),t_=p("Send report files it for you — no GitHub account needed.",1),a_=p("This build has no automatic submission set up, so the routes below are the ones to use. Submit bug report opens the pre-filled issue form on GitHub and copies the report to your clipboard so you can submit directly.",1),s_=p('
      Saved to
      '),n_=p(''),i_=p("
      "),r_=p(`

      Report a Bug

      VoxCtrl 0.5.0 added a Windows build, and a Windows GPU build is on its way. Neither has been - through anyone's hands but the developer's yet, so if something is broken, this page is the - fastest way to say so — and it is the only part of VoxCtrl that ever sends anything about - your machine anywhere.

      What gets sent

      ✓ Included
      • What you write below. This is the only text of yours that travels.
      • Version and build — which VoxCtrl, installed how, with which GPU features compiled in.
      • Operating system, kernel or Windows build, and CPU architecture.
      • Hardware — CPU model, core count, total memory, display adapter name.
      • Desktop and session (Linux), and your language, e.g. en.
      • Settings, with everything below stripped out first.
      • Output targets and hotkeys — how many, of which kinds, which keys. Not their names or contents.
      • The tail of VoxCtrl's log, up to 400 lines.
      ✕ Never included
      • Anything you have dictated. The log is written so transcribed text cannot reach it in the first place.
      • API keys and access tokens. Reported only as set or not set.
      • Your name, username, hostname, email or IP address.
      • File paths. A folder setting is reported as "default" or "custom", never as a path.
      • Custom vocabulary, snippets and prompts. Counted, never quoted.
      • Target names, shell commands, URLs and webhook secrets.
      • Audio. No recording, no sample, ever.

      Nothing here happens on its own. There is no telemetry, no background reporting, and nothing - is sent until you press a button on this page — and you can read the whole report first. - The rules are enforced in code and tested in CI; the log this quotes is at .

      What went wrong

      Write it as if to someone who cannot see your screen. Please do not paste logs or settings - here — they are attached already.

      The report

      Open on GitHub fills in the issue form in your browser and waits for you to - press Submit there. Save, Copy and Email put the report in your - hands to send however you like — attach the saved file to an email to .

      Limits and the ID that enforces them

      Report ID — a random value made on - this machine, used only to count reports. It is derived from nothing about you or your - computer, and resetting it starts a fresh count.
      `);function l_(s,a){Lt(a,!0);const t=["Recording / hotkeys","Transcription accuracy or speed","Audio input or devices","Text-to-speech","Output targets / routing","Settings window or overlay","Installing or updating","Crash or freeze","Something else"],r=[{value:"always",label:"Every time"},{value:"sometimes",label:"Sometimes"},{value:"once",label:"It happened once"}];let o=wt({summary:"",description:"",area:t[0],frequency:"always"}),d=S(null),u=S(null),v=S(!1),f=S(null),_=S(!1),b=S(!1),m=S(null),h=S(null),M=S(null),A=S(!1),$=S(!1);const C=fe(()=>o.description.trim().length),O=fe(()=>{var j,g;return(g=(j=e(d))==null?void 0:j.limits.min_description_chars)!=null?g:30}),le=fe(()=>{var j,g;return(g=(j=e(d))==null?void 0:j.limits.max_description_chars)!=null?g:4e3}),re=fe(()=>o.summary.trim().length>0&&e(C)>=e(O)&&e(C)<=e(le));async function me(){try{l(d,await E("bug_report_context"),!0)}catch(j){console.error("Failed to read bug report context:",j)}}Zt(me);let ee;ka(()=>{const j={...o};if(!e(re)){l(u,null);return}return ee&&clearTimeout(ee),ee=setTimeout(()=>P(j),400),()=>{ee&&clearTimeout(ee)}});async function P(j){l(v,!0),l(f,null);try{l(u,await E("preview_bug_report",{statement:j}),!0)}catch(g){l(f,String(g),!0),l(u,null)}finally{l(v,!1)}}async function R(){return e(u)||await P({...o}),e(u)}async function te(){var g,T,Te,we,ze,qe,Ne,at;if(!o.summary.trim()){l(h,{type:"error",message:"Please provide a one-line summary above before submitting."},!0);return}if(e(C)l(A,!1),2500)}catch(T){l(h,{type:"error",message:`Could not copy the report: ${T}`},!0)}}async function B(){var T,Te;if(!o.summary.trim()||e(C)l($,!1),3e3),e(d)&&l(d,{...e(d),install_id:j,submissions_last_day:0,submissions_last_month:0},!0)}catch(j){l(f,`Could not reset the report ID: ${j}`)}}var ue=r_(),Se=i(n(ue),4),ie=i(n(Se),4),q=i(n(ie)),J=n(q),ye=i(Se,2),_e=i(n(ye),2),oe=i(n(_e),2),W=i(_e,2),ve=n(W),I=i(n(ve),2);_t(I,21,()=>t,ht,(j,g)=>{var T=$f(),Te=n(T),we={};w(()=>{var ze;y(Te,e(g)),we!==(we=e(g))&&(T.value=(ze=T.__value=e(g))!=null?ze:"")}),c(j,T)});var H=i(ve,2),se=i(n(H),2);_t(se,21,()=>r,ht,(j,g)=>{var T=Bf(),Te=n(T),we={};w(()=>{var ze;y(Te,e(g).label),we!==(we=e(g).value)&&(T.value=(ze=T.__value=e(g).value)!=null?ze:"")}),c(j,T)});var Ee=i(W,2),Re=i(n(Ee),2);Tt(Re,"placeholder",`1. I pressed my dictation hotkey and spoke for ten seconds. -2. The overlay appeared but no text arrived. -3. I expected the text to be typed into my editor.`);var he=i(Re,2);let ne;var xe=n(he),Je=i(xe);{var ke=j=>{var g=je();w(()=>{var T;return y(g,`— at least ${(T=e(O))!=null?T:""} please; steps to reproduce are worth more than anything else here`)}),c(j,g)};x(Je,j=>{e(C){var g=qf(),T=n(g);w(()=>y(T,e(f))),c(j,g)};x(D,j=>{e(f)&&j(k)})}var V=i(D,2);{var z=j=>{var g=jf(),T=n(g);w(()=>y(T,e(u).blocked_reason)),c(j,g)};x(V,j=>{var g;(g=e(u))!=null&&g.blocked_reason&&j(z)})}var Z=i(V,2),pe=n(Z),ce=i(n(pe),2);{var Ie=j=>{var g=Uf(),T=n(g);w(()=>y(T,e(_)?"Hide":"Show me exactly what will be sent")),L("click",g,()=>l(_,!e(_))),c(j,g)};x(ce,j=>{e(u)&&j(Ie)})}var Qe=i(pe,2);{var ot=j=>{var g=Wf();c(j,g)},et=j=>{var g=Kf(),T=mt(g),Te=i(n(T)),we=n(Te),ze=i(Te,2),qe=n(ze),Ne=i(T,2);{var at=tt=>{var Vt=Hf(),Xt=n(Vt);w(()=>y(Xt,e(u).markdown)),c(tt,Vt)};x(Ne,tt=>{e(_)&&tt(at)})}w(tt=>{y(we,e(u).title),y(qe,tt)},[()=>e(u).fingerprint.slice(0,12)]),c(j,g)},Q=j=>{var g=Gf();c(j,g)};x(Qe,j=>{e(v)&&!e(u)?j(ot):e(u)?j(et,1):j(Q,-1)})}var X=i(Qe,2),de=n(X);{var Ue=j=>{var g=Yf(),T=n(g);w(()=>{g.disabled=e(b)||e(u)&&!e(u).can_submit,y(T,e(b)?"Sending…":"Send report")}),L("click",g,te),c(j,g)},Ce=j=>{var g=Jf(),T=n(g);w(()=>{g.disabled=e(b),y(T,e(b)?"Submitting…":"Submit bug report")}),L("click",g,te),c(j,g)};x(de,j=>{var g;(g=e(d))!=null&&g.relay_configured?j(Ue):j(Ce,-1)})}var Fe=i(de,2),We=i(Fe,2),st=i(We,2),it=n(st),Ke=i(st,2),rt=i(X,2);{var ct=j=>{var g=e_(),T=n(g),Te=n(T),we=n(Te),ze=i(Te,2);{var qe=Ne=>{var at=Qf(),tt=n(at);{var Vt=Kt=>{var Dt=Zf();L("click",Dt,()=>ge(e(h).path)),c(Kt,Dt)};x(tt,Kt=>{e(h).path&&Kt(Vt)})}var Xt=i(tt,2);{var ea=Kt=>{var Dt=Xf();L("click",Dt,()=>ae(e(h).url)),c(Kt,Dt)};x(Xt,Kt=>{e(h).url&&Kt(ea)})}c(Ne,at)};x(ze,Ne=>{(e(h).path||e(h).url)&&Ne(qe)})}w(()=>{Me(g,1,qa(e(h).type==="ok"?"ok-alert":"warning-alert"),"svelte-7vrdzs"),y(we,e(h).message)}),c(j,g)};x(rt,j=>{e(h)&&j(ct)})}var nt=i(rt,2),De=n(nt);{var Ge=j=>{var g=t_();c(j,g)},lt=j=>{var g=a_();c(j,g)};x(De,j=>{var g;(g=e(d))!=null&&g.relay_configured?j(Ge):j(lt,-1)})}var U=i(De,10),K=n(U),be=i(nt,2);{var Be=j=>{var g=s_(),T=i(n(g)),Te=n(T);w(()=>y(Te,e(M))),c(j,g)};x(be,j=>{e(M)&&!e(h)&&j(Be)})}var Ye=i(be,2);{var St=j=>{var g=i_();let T;var Te=n(g),we=i(Te);{var ze=qe=>{var Ne=n_();L("click",Ne,()=>ae(e(m).issue_url)),c(qe,Ne)};x(we,qe=>{e(m).issue_url&&qe(ze)})}w(()=>{var qe;T=Me(g,1,"svelte-7vrdzs",null,T,{"ok-alert":e(m).ok,"warning-alert":!e(m).ok}),y(Te,`${(qe=e(m).message)!=null?qe:""} `)}),c(j,g)};x(Ye,j=>{e(m)&&j(St)})}var na=i(Z,2),ft=i(n(na),2),Rt=n(ft),Et=i(ft,2),At=n(Et),ia=i(n(At)),Ut=n(ia),Oe=i(At,2),Ze=n(Oe);w((j,g)=>{var T,Te,we,ze,qe,Ne,at,tt,Vt,Xt,ea,Kt,Dt,fa,Qt,ya,Pa,Ja;y(J,(Te=(T=e(d))==null?void 0:T.log_path)!=null?Te:"…"),Tt(Re,"maxlength",e(le)),ne=Me(he,1,"counter svelte-7vrdzs",null,ne,{short:e(C)>0&&e(C){var j,g;return Math.round(((g=(j=e(d))==null?void 0:j.limits.cooldown_seconds)!=null?g:120)/60)},()=>{var j,g,T;return(T=(g=(j=e(d))==null?void 0:j.install_id)==null?void 0:g.slice(0,12))!=null?T:"…"}]),He(oe,()=>o.summary,j=>o.summary=j),Nl(I,()=>o.area,j=>o.area=j),Nl(se,()=>o.frequency,j=>o.frequency=j),He(Re,()=>o.description,j=>o.description=j),L("click",Fe,Ae),L("click",We,Pe),L("click",st,Y),L("click",Ke,B),L("click",Oe,G),c(s,ue),Ot()}pa(["click"]);class pi extends Jd{constructor(a){super(a)}static async new(a,t,r){return E("plugin:image|new",{rgba:lr(a),width:t,height:r}).then(o=>new pi(o))}static async fromBytes(a){return E("plugin:image|from_bytes",{bytes:lr(a)}).then(t=>new pi(t))}static async fromPath(a){return E("plugin:image|from_path",{path:a}).then(t=>new pi(t))}async rgba(){return E("plugin:image|rgba",{rid:this.rid}).then(a=>new Uint8Array(a))}async size(){return E("plugin:image|size",{rid:this.rid})}}function lr(s){return s==null?null:typeof s=="string"?s:s instanceof pi?s.rid:s}var $l;(function(s){s.Nsis="nsis",s.Msi="msi",s.Deb="deb",s.Rpm="rpm",s.AppImage="appimage",s.App="app"})($l||($l={}));async function o_(){return E("plugin:app|version")}const c_="/assets/voxctrl-CDHFw5hI.gif";var d_=p('
      Custom overlays
      '),v_=p('
      Cloned TTS voices
      '),u_=p(`

      About VoxCtrl

      VoxCtrl

      Native, on-device voice-to-text for Linux and Windows. - Uses whisper.cpp, Moonshine, - and NVIDIA Parakeet for offline transcription and routes speech to any destination.

      System

      FrontendSvelte 5 + Tauri 2
      BackendRust (Tokio async)
      Inferencewhisper.cpp, Moonshine & Parakeet TDT
      Config~/.config/voxctrl/
      Models~/.local/share/voxctrl/models/
      MCP socket/tmp/voxctrl-mcp.sock

      Open Source Attributions

      This application is built possible by these outstanding open-source projects:

      Speech recognition

      whisper.cpp MIT License
      ONNX Runtime MIT / Apache 2.0

      Text-to-speech

      Piper TTS MIT License
      audio.cpp Apache 2.0
      ggml MIT License
      Inflect-Micro-v2 Apache 2.0
      Breeze-TTS-2 (BreezeBlue) Non-Commercial License

      Dictation cleanup

      Core framework & runtime

      Tauri Framework MIT / Apache 2.0
      Svelte & Vite MIT License
      whisper-rs Unlicense
      Rust, Tokio & CPAL MIT / Apache 2.0
      `);function p_(s,a){Lt(a,!0);let t=S("0.1.0"),r=S(""),o=S("");Zt(async()=>{try{l(t,await o_(),!0)}catch(C){console.error("Failed to fetch app version:",C)}try{l(r,await E("get_custom_overlays_dir"),!0)}catch(C){console.error("Failed to fetch custom overlays directory:",C)}try{l(o,await E("get_cloned_tts_voices_dir"),!0)}catch(C){console.error("Failed to fetch cloned TTS voices directory:",C)}});var d=u_(),u=i(n(d),2),v=n(u),f=i(v,2),_=i(n(f),2),b=n(_),m=i(u,2),h=i(n(m),12);{var M=C=>{var O=d_(),le=i(n(O)),re=n(le),me=n(re);w(()=>y(me,e(r))),c(C,O)};x(h,C=>{e(r)&&C(M)})}var A=i(h,2);{var $=C=>{var O=v_(),le=i(n(O)),re=n(le),me=n(re);w(()=>y(me,e(o))),c(C,O)};x(A,C=>{e(o)&&C($)})}w(()=>{var C;Tt(v,"src",c_),y(b,`Version ${(C=e(t))!=null?C:""} — Rust + Tauri Edition`)}),c(s,d),Ot()}var f_=p(''),__=p(''),h_=p(' 🛑 Stop',1),g_=p('🎙️ Record'),m_=p('
      Unsaved changes detected
      '),b_=p('
      ');function y_(s,a){Lt(a,!0);const t=()=>la(Nt,"$config",d),r=()=>la(xa,"$status",d),o=()=>la(Vs,"$configDirty",d),[d,u]=Ma();let v=S("general");const f=[{id:"general",label:"General",icon:"⚙️"},{id:"audio",label:"Audio Input",icon:"🔊"},{id:"engine",label:"Engine",icon:"🧠"},{id:"features",label:"Post-Processing",icon:"✨"},{id:"hotkeys",label:"Hotkeys",icon:"⌨️"},{id:"commands",label:"Output Commands",icon:"🎯"},{id:"visual",label:"Visual Feedback",icon:"🎨"},{id:"tts",label:"TTS",icon:"🗣️"},{id:"openai",label:"OpenAI API",icon:"🤖"},{id:"bugreport",label:"Bug Report",icon:"🐞"},{id:"about",label:"About",icon:"ℹ️"}];async function _(){await ml(t())}async function b(){await E("toggle_recording")}let m="general",h=S(null);ka(()=>{var xe,Je;const ne=e(v);ne!==m&&(m=ne,e(h)&&(e(h).scrollTop=0),(Je=(xe=t())==null?void 0:xe.audio)!=null&&Je.dynamic_stream&&r().recording&&E("stop_recording").catch(ke=>{console.error("Failed to stop recording on activeTab change:",ke)}))}),Zt(()=>{const ne=oa("focus-settings-tab",Je=>{const ke=Je.payload;f.some(D=>D.id===ke)&&l(v,ke,!0)});let xe;return xe=rr.subscribe(Je=>{if(Je){const ke=t();if(ke&&ke.engine&&ke.engine.whisper_cpp){const D=ke.engine.whisper_cpp.model_size;ke.engine.backend==="whisper-cpp"&&E("check_model_downloaded",{modelSize:D,modelDir:ke.engine.whisper_cpp.model_dir||""}).then(async k=>{var V;if(!k&&(l(v,"engine"),(V=ke==null?void 0:ke.ui)!=null&&V.auto_show_settings))try{const{getCurrentWindow:z}=await Hd(async()=>{const{getCurrentWindow:pe}=await Promise.resolve().then(()=>ah);return{getCurrentWindow:pe}},void 0),Z=z();await Z.show(),await Z.setFocus()}catch(z){console.error("Failed to programmatically show settings window on startup:",z)}}).catch(k=>{console.error("Failed to check model download status on startup:",k)})}xe?xe():setTimeout(()=>xe(),0)}}),()=>{ne.then(Je=>Je()).catch(()=>{})}});var M=b_(),A=n(M),$=n(A),C=n($),O=i($,2);_t(O,21,()=>f,ht,(ne,xe)=>{var Je=__();let ke;var D=n(Je),k=n(D),V=i(D,2),z=n(V),Z=i(V,2);{var pe=ce=>{var Ie=f_();c(ce,Ie)};x(Z,ce=>{e(v)===e(xe).id&&ce(pe)})}w(()=>{ke=Me(Je,1,"nav-btn svelte-myrvk6",null,ke,{active:e(v)===e(xe).id}),y(k,e(xe).icon),y(z,e(xe).label)}),L("click",Je,()=>l(v,e(xe).id,!0)),c(ne,Je)});var le=i(O,2),re=n(le);let me;var ee=n(re),P=n(ee),R=i(n(P),2),te=n(R),Ae=i(P,2),Pe=n(Ae),Y=i(ee,2);let B;var ge=n(Y);{var ae=ne=>{var xe=h_();c(ne,xe)},G=ne=>{var xe=g_();c(ne,xe)};x(ge,ne=>{r().recording?ne(ae):ne(G,-1)})}var ue=i(A,2),Se=n(ue),ie=n(Se);{var q=ne=>{uv(ne,{get cfg(){return vn(),t()},set cfg(xe){dn(Nt,xe)}})},J=ne=>{Xv(ne,{get cfg(){return vn(),t()},set cfg(xe){dn(Nt,xe)}})},ye=ne=>{Gv(ne,{get cfg(){return vn(),t()},set cfg(xe){dn(Nt,xe)}})},_e=ne=>{Ff(ne,{get cfg(){return vn(),t()},set cfg(xe){dn(Nt,xe)}})},oe=ne=>{pp(ne,{})},W=ne=>{Cp(ne,{})},ve=ne=>{yv(ne,{get cfg(){return vn(),t()},set cfg(xe){dn(Nt,xe)}})},I=ne=>{gf(ne,{get cfg(){return vn(),t()},set cfg(xe){dn(Nt,xe)}})},H=ne=>{Sf(ne,{get cfg(){return vn(),t()},set cfg(xe){dn(Nt,xe)}})},se=ne=>{l_(ne,{})},Ee=ne=>{p_(ne,{})};x(ie,ne=>{e(v)==="general"?ne(q):e(v)==="audio"?ne(J,1):e(v)==="engine"?ne(ye,2):e(v)==="features"?ne(_e,3):e(v)==="hotkeys"?ne(oe,4):e(v)==="commands"?ne(W,5):e(v)==="visual"?ne(ve,6):e(v)==="tts"?ne(I,7):e(v)==="openai"?ne(H,8):e(v)==="bugreport"?ne(se,9):e(v)==="about"&&ne(Ee,10)})}gl(Se,ne=>l(h,ne),()=>e(h));var Re=i(Se,2);{var he=ne=>{var xe=m_(),Je=i(n(xe),2);L("click",Je,_),c(ne,xe)};x(Re,ne=>{o()&&ne(he)})}w(()=>{var ne;Tt(C,"src",yr),me=Me(re,1,"status-panel svelte-myrvk6",null,me,{recording:r().recording,speaking:r().speaking}),y(te,r().recording?"Recording":r().speaking?"Speaking":"Idle"),y(Pe,`${(ne=r().word_count)!=null?ne:""} words`),B=Me(Y,1,"btn-record svelte-myrvk6",null,B,{active:r().recording})}),L("click",Y,b),c(s,M),Ot(),u()}pa(["click"]);var w_=p(""),k_=p('
      '),x_=p('
      VOXCTRL VOICE CARD
      TARGET •••• VOX
      ');function T_(s,a){Lt(a,!0);const t=()=>la(xa,"$status",r),[r,o]=Ma();let d=Ft(a,"recording",3,!1);Ft(a,"speaking",3,!1);let u=Ft(a,"active",3,!0);const v=20,f=6;let _=S(wt(Array(v).fill(0))),b=null,m,h=0,M=0;const A=fe(()=>t().audio_ready!==!1),$=fe(()=>t().active_target_label||"Focused Window");Zt(()=>{oa("audio-level",ie=>{h=Math.min(1,ie.payload*100)}).then(ie=>{b=ie});let G=0;const ue=new Float32Array(v);function Se(){G+=.016,M+=(h-M)*.35,h*=.86;for(let ie=0;ieue[ie]?q:ue[ie]*.86}l(_,Array.from(ue),!0),m=requestAnimationFrame(Se)}return m=requestAnimationFrame(Se),()=>{b&&b(),cancelAnimationFrame(m)}});function C(G){return G===0?"red":G<=2?"amber":"green"}var O=x_();let le;var re=n(O);let me;var ee=i(n(re),8),P=i(n(ee),2);{var R=G=>{var ue=je("PROC");c(G,ue)},te=G=>{var ue=je("INIT");c(G,ue)},Ae=G=>{var ue=je("REC");c(G,ue)};x(P,G=>{t().processing?G(R):d()&&!e(A)?G(te,1):G(Ae,-1)})}var Pe=i(ee,2);_t(Pe,21,()=>e(_),ht,(G,ue)=>{var Se=k_();_t(Se,21,()=>Array(f),ht,(ie,q,J)=>{var ye=w_();let _e;w(oe=>_e=Me(ye,1,`dot ${oe!=null?oe:""}`,"svelte-1pt4ba2",_e,{lit:f-J<=e(ue)*f}),[()=>C(J)]),c(ie,ye)}),c(G,Se)});var Y=i(Pe,4),B=n(Y);{var ge=G=>{var ue=je("Reading the card…");c(G,ue)},ae=G=>{var ue=je();w(()=>y(ue,e($))),c(G,ue)};x(B,G=>{t().processing?G(ge):G(ae,-1)})}w(()=>{le=Me(O,1,"card-scene svelte-1pt4ba2",null,le,{on:u()}),me=Me(re,1,"card svelte-1pt4ba2",null,me,{processing:t().processing,initializing:d()&&!e(A)})}),c(s,O),Ot(),o()}var S_=p('
      '),E_=p('
      WAVEFORM // OSC-01 TGT ▸
      ');function C_(s,a){Lt(a,!0);const t=()=>la(xa,"$status",r),[r,o]=Ma();let d=Ft(a,"recording",3,!1),u=Ft(a,"active",3,!0);const v=126,f=500,_=78;let b=S(""),m=null,h,M=0,A=0;const $=fe(()=>t().audio_ready!==!1),C=fe(()=>t().active_target_label||"Focused Window");Zt(()=>{oa("audio-level",ye=>{M=Math.min(1,ye.payload*100)}).then(ye=>{m=ye});const ie=new Float32Array(v);let q=0;function J(){q+=.016,A+=(M-A)*.35,M*=.86;let ye=0;if(t().processing)ye=.55*Math.sin(q*9)*(.6+.4*Math.sin(q*1.7));else if(d()&&t().audio_ready===!1)ye=.05*(Math.random()*2-1);else if(d()){const oe=Math.random()*2-1;ye=Math.min(1,A*1.5)*(.45*Math.sin(q*24)+.55*oe)}ie.copyWithin(0,1),ie[v-1]=ye;let _e="";for(let oe=0;oe{m&&m(),cancelAnimationFrame(h)}});var O=E_();let le;var re=n(O),me=n(re),ee=i(n(me),4),P=n(ee);{var R=ie=>{var q=je("· TRANSCRIBING");c(ie,q)},te=ie=>{var q=je("· CALIBRATING");c(ie,q)},Ae=ie=>{var q=je("· LIVE TRACE");c(ie,q)};x(P,ie=>{t().processing?ie(R):d()&&!e($)?ie(te,1):ie(Ae,-1)})}var Pe=i(ee,4),Y=i(n(Pe),2),B=n(Y),ge=i(me,2),ae=i(n(ge),6);_t(ae,16,()=>[1,2,3,4],ht,(ie,q)=>{var J=S_();w(()=>va(J,`left: ${q*20}%`)),c(ie,J)});var G=i(ae,2);Tt(G,"viewBox","0 0 500 78");var ue=n(G),Se=i(ue);w(()=>{le=Me(O,1,"scope svelte-xjziu1",null,le,{on:u(),processing:t().processing,initializing:d()&&!e($)}),y(B,e(C)),Tt(ue,"d",e(b)),Tt(Se,"d",e(b))}),c(s,O),Ot(),o()}var A_=p('
      ⌖
      ');function M_(s,a){Lt(a,!0);const t=()=>la(xa,"$status",r),[r,o]=Ma();let d=Ft(a,"recording",3,!1),u=Ft(a,"active",3,!0),v=S(0),f=null,_,b=0,m=0;const h=fe(()=>t().audio_ready!==!1),M=fe(()=>t().active_target_label||"Focused Window");Zt(()=>{oa("audio-level",ge=>{b=Math.min(1,ge.payload*100)}).then(ge=>{f=ge});function B(){m+=(b-m)*.35,b*=.86,l(v,m,!0),_=requestAnimationFrame(B)}return _=requestAnimationFrame(B),()=>{f&&f(),cancelAnimationFrame(_)}});var A=A_();let $;var C=i(n(A),2),O=i(n(C),2),le=n(O),re=n(le);{var me=B=>{var ge=je("PULSE // ANALYZING");c(B,ge)},ee=B=>{var ge=je("PULSE // ACQUIRING");c(B,ge)},P=B=>{var ge=je("PULSE // TARGET LOCK");c(B,ge)};x(re,B=>{t().processing?B(me):d()&&!e(h)?B(ee,1):B(P,-1)})}var R=i(le,2),te=n(R);{var Ae=B=>{var ge=je("Decoding transmission…");c(B,ge)},Pe=B=>{var ge=je("Connecting mic…");c(B,ge)},Y=B=>{var ge=je();w(()=>y(ge,e(M))),c(B,ge)};x(te,B=>{t().processing?B(Ae):d()&&!e(h)?B(Pe,1):B(Y,-1)})}w(()=>{var B;$=Me(A,1,"radar svelte-13tl5wx",null,$,{on:u(),processing:t().processing,initializing:d()&&!e(h)}),va(A,`--lvl: ${(B=e(v))!=null?B:""}`)}),c(s,A),Ot(),o()}var P_=p('
      '),D_=p('
      OCEAN WAVE
      ');function I_(s,a){Lt(a,!0);const t=()=>la(xa,"$status",r),[r,o]=Ma();let d=Ft(a,"recording",3,!1);Ft(a,"speaking",3,!1);let u=Ft(a,"active",3,!0);const v=380,f=90;let _=S(""),b=S(""),m=S(""),h=S(60),M=null,A,$=0,C=0;const O=fe(()=>t().audio_ready!==!1),le=fe(()=>t().active_target_label||"Focused Window");function re(oe,W,ve,I){let H=`M 0 ${f} L 0 ${I.toFixed(1)}`;for(let se=0;se<=v;se+=8){const Ee=I+Math.sin(se*W+ve)*oe;H+=` L ${se} ${Ee.toFixed(1)}`}return H+` L ${v} ${f} Z`}Zt(()=>{oa("audio-level",ve=>{$=Math.min(1,ve.payload*100)}).then(ve=>{M=ve});let oe=0;function W(){oe+=.016,C+=($-C)*.35,$*=.86;const ve=C,I=t().processing?4+2.5*Math.sin(oe*1.6):0,H=64-ve*20-I,se=56-ve*24-I*1.2,Ee=47-ve*28-I*1.4,Re=(t().processing?5:2.5)+ve*14,he=(t().processing?6:2)+ve*18,ne=(t().processing?7:1.5)+ve*22;l(_,re(Re,.014,oe*2.1,H),!0),l(b,re(he,.022,-oe*3,se),!0),l(m,re(ne,.018,oe*3.9,Ee),!0),l(h,38+Ee-21+Math.sin(oe*2.2)*2.5),A=requestAnimationFrame(W)}return A=requestAnimationFrame(W),()=>{M&&M(),cancelAnimationFrame(A)}});var me=D_();let ee;var P=i(n(me),4),R=n(P);{var te=oe=>{var W=je("deep current — processing");c(oe,W)},Ae=oe=>{var W=je("low tide — preparing");c(oe,W)},Pe=oe=>{var W=je("high tide — listening");c(oe,W)};x(R,oe=>{t().processing?oe(te):d()&&!e(O)?oe(Ae,1):oe(Pe,-1)})}var Y=i(P,2),B=n(Y);Tt(B,"viewBox","0 0 380 90");var ge=n(B),ae=i(ge),G=i(ae),ue=i(Y,2);_t(ue,16,()=>[0,1,2],ht,(oe,W)=>{var ve=P_();w(()=>va(ve,`left: ${64+W*112}px; animation-delay: ${W*1.4}s;`)),c(oe,ve)});var Se=i(ue,2),ie=i(n(Se),2),q=n(ie);{var J=oe=>{var W=je("Sounding the depths…");c(oe,W)},ye=oe=>{var W=je("Casting off…");c(oe,W)},_e=oe=>{var W=je();w(()=>y(W,e(le))),c(oe,W)};x(q,oe=>{t().processing?oe(J):d()&&!e(O)?oe(ye,1):oe(_e,-1)})}w(()=>{var oe;ee=Me(me,1,"ocean svelte-1orgnnz",null,ee,{on:u(),processing:t().processing}),Tt(ge,"d",e(_)),Tt(ae,"d",e(b)),Tt(G,"d",e(m)),va(Se,`top: ${(oe=e(h))!=null?oe:""}px;`)}),c(s,me),Ot(),o()}var z_=p("
      "),L_=p('
      ');function O_(s,a){Lt(a,!0);const t=()=>la(xa,"$status",r),[r,o]=Ma();let d=Ft(a,"recording",3,!1),u=Ft(a,"active",3,!0);const v=5,f=8,_=52;let b=S(wt(Array(v).fill(f))),m=null,h,M=0,A=0;const $=fe(()=>t().audio_ready!==!1),C=fe(()=>t().active_target_label||"Focused Window");function O(G,ue,Se,ie,q,J,ye,_e){const oe=(ue-1)/2,W=1-Math.abs(G-oe)/(oe+1)*.4;let ve;if(J)ve=(Math.sin(ie*4-G*.85)*.5+.5)*W;else if(q&&!ye)ve=0;else if(q){const I=Math.sin(ie*3-G*.8);ve=Math.min(1,Math.max(0,Se*W*(.9+.1*I)*(.85+.3*_e)))}else ve=0;return f+(_-f)*ve}Zt(()=>{oa("audio-level",Se=>{M=Math.min(1,Se.payload*100)}).then(Se=>{m=Se});let G=0;function ue(){G+=.016,A+=(M-A)*.35,M*=.86;const Se=t().audio_ready!==!1,ie=new Array(v);for(let q=0;q{m&&m(),cancelAnimationFrame(h)}});var le=L_();let re;var me=n(le),ee=n(me);let P;var R=i(ee,2),te=n(R);{var Ae=G=>{var ue=je("PROCESSING");c(G,ue)},Pe=G=>{var ue=je("STANDBY");c(G,ue)},Y=G=>{var ue=je("LISTENING");c(G,ue)};x(te,G=>{t().processing?G(Ae):d()&&!e($)?G(Pe,1):G(Y,-1)})}var B=i(me,2);_t(B,21,()=>e(b),ht,(G,ue)=>{var Se=z_();let ie;w(()=>{var q;ie=Me(Se,1,"bar svelte-12wa5lj",null,ie,{dim:d()&&!e($),processing:t().processing}),va(Se,`height: ${(q=e(ue))!=null?q:""}px`)}),c(G,Se)});var ge=i(B,4),ae=n(ge);w(()=>{re=Me(le,1,"mono svelte-12wa5lj",null,re,{on:u()}),P=Me(ee,1,"dot svelte-12wa5lj",null,P,{lit:!t().processing&&!(d()&&!e($)),processing:t().processing,standby:d()&&!e($)}),y(ae,e(C))}),c(s,le),Ot(),o()}var R_=p('
      '),N_=p('
      SPECTRUM // EQ-16 OUT ▸
      ');function F_(s,a){Lt(a,!0);const t=()=>la(xa,"$status",r),[r,o]=Ma();let d=Ft(a,"recording",3,!1),u=Ft(a,"active",3,!0);const v=16,f=6,_=96;let b=S(wt(Array(v).fill(f))),m=null,h,M=0,A=0;const $=fe(()=>t().audio_ready!==!1),C=fe(()=>t().active_target_label||"Focused Window");function O(ue,Se,ie,q,J,ye,_e,oe){const W=ue/(Se-1);let ve;if(ye)ve=Math.pow(Math.sin(q*2.4-W*6)*.5+.5,1.5);else if(J&&!_e)ve=oe*.06;else if(J){const I=2+W*9,H=ue*.7,se=Math.sin(q*I+H)*.5+.5,Ee=1-W*.35;ve=Math.min(1,Math.max(0,ie*Ee*(.35+.65*se)*(.7+.6*oe)))}else ve=0;return f+(_-f)*ve}Zt(()=>{oa("audio-level",ie=>{M=Math.min(1,ie.payload*100)}).then(ie=>{m=ie});let ue=0;function Se(){ue+=.016,A+=(M-A)*.35,M*=.86;const ie=t().audio_ready!==!1,q=new Array(v);for(let J=0;J{m&&m(),cancelAnimationFrame(h)}});var le=N_();let re;var me=n(le),ee=n(me);let P;var R=i(ee,4),te=n(R);{var Ae=ue=>{var Se=je("· ANALYZING");c(ue,Se)},Pe=ue=>{var Se=je("· WARMING UP");c(ue,Se)},Y=ue=>{var Se=je("· LIVE");c(ue,Se)};x(te,ue=>{t().processing?ue(Ae):d()&&!e($)?ue(Pe,1):ue(Y,-1)})}var B=i(R,4),ge=i(n(B),2),ae=n(ge),G=i(me,4);_t(G,21,()=>e(b),ht,(ue,Se)=>{var ie=R_();w(()=>{var q;return va(ie,`height: ${(q=e(Se))!=null?q:""}px; opacity: ${.45+.55*(e(Se)/_)}`)}),c(ue,ie)}),w(()=>{re=Me(le,1,"spectrum svelte-194vixl",null,re,{on:u()}),P=Me(ee,1,"led svelte-194vixl",null,P,{processing:t().processing,standby:d()&&!e($)}),y(ae,e(C))}),c(s,le),Ot(),o()}var V_=p('
      VOXCTRL — /dev/mic0
      ');function $_(s,a){Lt(a,!0);const t=()=>la(xa,"$status",r),[r,o]=Ma();let d=Ft(a,"recording",3,!1),u=Ft(a,"active",3,!0);const v=20;let f=S(wt("·".repeat(v))),_=S(!1),b=null,m,h=0,M=0;const A=fe(()=>t().audio_ready!==!1),$=fe(()=>t().active_target_label||"Focused Window");function C(q,J,ye,_e,oe){const W=v;if(_e){const ve=2*W,I=Math.floor(J*10)%ve,H=IEe===H?"█":"·").join("")}else{if(ye&&!oe)return Array.from({length:W},(ve,I)=>I%4===0?"·":" ").join("");if(ye){const ve=Math.round(Math.min(1,Math.max(0,q))*W);return Array.from({length:W},(I,H)=>H{oa("audio-level",ye=>{h=Math.min(1,ye.payload*100)}).then(ye=>{b=ye});let q=0;function J(){q+=.016,M+=(h-M)*.35,h*=.86;const ye=t().audio_ready!==!1;l(f,C(M,q,d(),t().processing,ye),!0),l(_,Math.sin(q*5.5)>0),m=requestAnimationFrame(J)}return m=requestAnimationFrame(J),()=>{b&&b(),cancelAnimationFrame(m)}});var O=V_();let le;var re=i(n(O),2),me=n(re),ee=n(me),P=i(me,2);let R;var te=n(P);{var Ae=q=>{var J=je("[PROC]");c(q,J)},Pe=q=>{var J=je("[INIT]");c(q,J)},Y=q=>{var J=je("[REC ]");c(q,J)};x(te,q=>{t().processing?q(Ae):d()&&!e(A)?q(Pe,1):q(Y,-1)})}var B=i(te),ge=i(P,2),ae=n(ge);{var G=q=>{var J=je("transcribing audio stream");c(q,J)},ue=q=>{var J=je("connecting input device");c(q,J)},Se=q=>{var J=je("streaming to output");c(q,J)};x(ae,q=>{t().processing?q(G):d()&&!e(A)?q(ue,1):q(Se,-1)})}var ie=i(ae,1,!0);w(()=>{var q,J;le=Me(O,1,"terminal svelte-pvtvge",null,le,{on:u()}),y(ee,`$ voxctrl listen --target "${(q=e($))!=null?q:""}"`),R=Me(P,1,"line2 svelte-pvtvge",null,R,{processing:t().processing,standby:d()&&!e(A)}),y(B,` ${(J=e(f))!=null?J:""}`),y(ie,e(_)?"_":" ")}),c(s,O),Ot(),o()}var B_=p('
      VU
      -20
      0
      +3
      ');function q_(s,a){Lt(a,!0);const t=()=>la(xa,"$status",r),[r,o]=Ma();let d=Ft(a,"recording",3,!1),u=Ft(a,"active",3,!0);const v=144,f=70,_=58,b=-.95,m=.95,h=.016;let M=S(wt(ee(b))),A=null,$,C=0,O=0;const le=fe(()=>t().audio_ready!==!1),re=fe(()=>t().active_target_label||"Focused Window");function me(_e){return b+Math.min(1,Math.max(0,_e))*(m-b)}function ee(_e){const oe=v+Math.sin(_e)*_,W=f-Math.cos(_e)*_;return`M ${v} ${f} L ${oe.toFixed(1)} ${W.toFixed(1)}`}function P(_e,oe,W){const H=256*(oe-_e.x)-24.96*_e.v;_e.v+=H*W,_e.x+=_e.v*W,Math.abs(_e.x-oe)<.001&&Math.abs(_e.v)<.02&&(_e.x=oe,_e.v=0)}Zt(()=>{oa("audio-level",ve=>{C=Math.min(1,ve.payload*100)}).then(ve=>{A=ve});let _e=0;const oe={x:b,v:0};function W(){_e+=h,O+=(C-O)*.35,C*=.86;const ve=t().audio_ready!==!1;let I;t().processing?I=me(.3+.25*Math.abs(Math.sin(_e*2))):d()&&ve?I=me(O):I=b,P(oe,I,h),l(M,ee(oe.x),!0),$=requestAnimationFrame(W)}return $=requestAnimationFrame(W),()=>{A&&A(),cancelAnimationFrame($)}});var R=B_();let te;var Ae=n(R),Pe=i(n(Ae),2),Y=n(Pe);{var B=_e=>{var oe=je("ANALOG // PROCESSING");c(_e,oe)},ge=_e=>{var oe=je("ANALOG // WARMING UP");c(_e,oe)},ae=_e=>{var oe=je("ANALOG // INPUT LEVEL");c(_e,oe)};x(Y,_e=>{t().processing?_e(B):d()&&!e(le)?_e(ge,1):_e(ae,-1)})}var G=i(Pe,4);let ue;var Se=i(Ae,2),ie=i(n(Se),20),q=n(ie),J=i(Se,2),ye=n(J);w(()=>{te=Me(R,1,"vinyl svelte-kq5b5i",null,te,{on:u()}),ue=Me(G,1,"led svelte-kq5b5i",null,ue,{processing:t().processing,standby:d()&&!e(le)}),Tt(q,"d",e(M)),y(ye,e(re))}),c(s,R),Ot(),o()}var j_=p("
      ",1),U_=p(''),W_=p('
      SYSTEM RESPONDING
      '),H_=p('
      ⚡
      '),K_=p('
      RECORDING
      '),G_=p(" ",1),Y_=p('
      ');function J_(s,a){Lt(a,!0);const t=()=>la(xa,"$status",v),r=()=>la(tv,"$recording",v),o=()=>la(Nt,"$config",v),d=()=>la(av,"$speaking",v),u=()=>la(sv,"$mcpRecording",v),[v,f]=Ma(),_=new Set(["waveform","pulse","blue_wave","mono_bars","spectrum","terminal","vinyl","voice_card","none"]);let b=S(!0),m=S(void 0);const h=fe(()=>t().active_target_label||"Focused Window"),M=fe(()=>t().active_target_label||"Focused Window");let A=S(!1),$=S(""),C=S(""),O=null,le=null,re=null,me=fe(()=>r()&&o().ui.show_overlay||d()&&o().tts.enabled&&o().tts.response_overlay||u()&&o().mcp.visual_feedback||e(A)&&o().ui.show_command_overlay),ee=S(!1),P=S(!1),R,te;ka(()=>(e(me)?(R&&clearTimeout(R),l(ee,!0),te&&clearTimeout(te),te=setTimeout(()=>{l(P,!0)},25),ue(o().ui.overlay_style)):(l(P,!1),R=setTimeout(()=>{l(ee,!1)},450)),()=>{R&&clearTimeout(R),te&&clearTimeout(te)}));let Ae=fe(()=>e(m)?e(m).html.replace(/\{\{trigger\}\}/g,e(h)).replace(/\{\{target\}\}/g,e(M)):""),Pe=0,Y=S(0),B=null,ge=null;function ae(){ge===null&&(ge=requestAnimationFrame(G))}function G(){if(l(Y,e(Y)+(Pe-e(Y))*.42),Pe*=.82,Pe<5e-4&&(Pe=0),e(Y)<5e-4&&l(Y,0),e(m)&&window.dispatchEvent(new CustomEvent("voxctrl-status",{detail:{recording:r(),processing:t().processing,speaking:d(),audio_ready:t().audio_ready!==!1,active_target_label:t().active_target_label||"Focused Window",audio_level:e(Y)}})),e(Y)===0&&Pe===0&&!e(ee)){ge=null;return}ge=requestAnimationFrame(G)}ka(()=>{e(ee)&&ae()});function ue(ye){if(_.has(ye)){l(m,void 0);return}E("get_custom_overlay",{name:ye}).then(_e=>{l(m,_e!=null?_e:void 0,!0)}).catch(_e=>{console.error(`Failed to load custom overlay "${ye}":`,_e),l(m,void 0)})}ka(()=>{const ye=o().ui.overlay_style;l(b,!1);const _e=setTimeout(()=>{l(b,!0)},25);return ue(ye),()=>clearTimeout(_e)}),ka(()=>{const ye=document.documentElement;ye.style.setProperty("--voxctrl-audio-level",String(e(Y))),ye.style.setProperty("--voxctrl-recording",r()?"1":"0"),ye.style.setProperty("--voxctrl-processing",t().processing?"1":"0"),ye.style.setProperty("--voxctrl-speaking",d()?"1":"0"),ye.style.setProperty("--voxctrl-mcp-recording",u()?"1":"0"),ye.style.setProperty("--voxctrl-audio-ready",t().audio_ready!==!1?"1":"0")}),Zt(()=>{document.documentElement.classList.add("overlay-window"),document.body.classList.add("overlay-window"),requestAnimationFrame(()=>{requestAnimationFrame(()=>{E("overlay_content_ready").catch(()=>{})})}),document.documentElement.style.setProperty("background","transparent","important"),document.body.style.setProperty("background","transparent","important");const ye=document.getElementById("app");return ye&&ye.style.setProperty("background","transparent","important"),oa("overlay-style-selected",_e=>{ue(_e.payload)}).then(_e=>{re=_e}),oa("audio-level",_e=>{Pe=Math.min(1,_e.payload*100),ae(),window.dispatchEvent(new CustomEvent("voxctrl-audio-level",{detail:_e.payload}))}).then(_e=>{B=_e}),oa("command-executed",_e=>{if(!o().ui.show_command_overlay)return;l($,_e.payload.command,!0),l(C,_e.payload.summary,!0),l(A,!0),O&&clearTimeout(O);const oe=(_e.payload.duration_secs||o().ui.command_overlay_duration_secs||3)*1e3;O=setTimeout(()=>{l(A,!1)},oe)}).then(_e=>{le=_e}),()=>{document.documentElement.classList.remove("overlay-window"),document.body.classList.remove("overlay-window"),B&&B(),le&&le(),re&&re(),O&&clearTimeout(O),ge!==null&&cancelAnimationFrame(ge)}});function Se(ye){return ye.querySelectorAll("script").forEach(oe=>{const W=document.createElement("script");Array.from(oe.attributes).forEach(ve=>{W.setAttribute(ve.name,ve.value)}),W.appendChild(document.createTextNode(oe.innerHTML)),oe.parentNode&&oe.parentNode.replaceChild(W,oe)}),{destroy(){window.dispatchEvent(new CustomEvent("voxctrl-cleanup"))}}}var ie=Y_(),q=n(ie);{var J=ye=>{var _e=G_(),oe=mt(_e);{var W=k=>{C_(k,{get recording(){return r()},get active(){return e(P)}})},ve=k=>{M_(k,{get recording(){return r()},get active(){return e(P)}})},I=k=>{I_(k,{get recording(){return r()},get speaking(){return d()},get active(){return e(P)}})},H=k=>{O_(k,{get recording(){return r()},get active(){return e(P)}})},se=k=>{F_(k,{get recording(){return r()},get active(){return e(P)}})},Ee=k=>{$_(k,{get recording(){return r()},get active(){return e(P)}})},Re=k=>{q_(k,{get recording(){return r()},get active(){return e(P)}})},he=k=>{var V=j_(),z=mt(V);Ll(z,()=>``);var Z=i(z,2);let pe;Ll(Z,()=>e(Ae),!0),en(Z,ce=>Se==null?void 0:Se(ce)),w(()=>pe=Me(Z,1,"custom-overlay-content svelte-rmqsd6",null,pe,{active:e(P)})),c(k,V)},ne=k=>{T_(k,{get recording(){return r()},get speaking(){return d()},get active(){return e(P)}})};x(oe,k=>{o().ui.overlay_style==="waveform"?k(W):o().ui.overlay_style==="pulse"?k(ve,1):o().ui.overlay_style==="blue_wave"?k(I,2):o().ui.overlay_style==="mono_bars"?k(H,3):o().ui.overlay_style==="spectrum"?k(se,4):o().ui.overlay_style==="terminal"?k(Ee,5):o().ui.overlay_style==="vinyl"?k(Re,6):e(m)?k(he,7):o().ui.overlay_style!=="none"&&k(ne,8)})}var xe=i(oe,2);{var Je=k=>{var V=W_();let z;var Z=n(V);_t(Z,20,()=>[0,1,2,3,4],ht,(Qe,ot)=>{var et=U_();w(()=>va(et,`animation-delay: ${ot*.13}s`)),c(Qe,et)});var pe=i(Z,2),ce=i(n(pe),2),Ie=n(ce);w(()=>{var Qe;z=Me(V,1,"system-response-box speaking svelte-rmqsd6",null,z,{on:e(P)}),y(Ie,`▸ ${(Qe=e(M))!=null?Qe:""}`)}),c(k,V)},ke=k=>{var V=H_();let z;var Z=i(n(V),2),pe=n(Z),ce=n(pe),Ie=i(pe,2),Qe=n(Ie);w(ot=>{var et;z=Me(V,1,"system-response-box command svelte-rmqsd6",null,z,{on:e(P)}),y(ce,ot),y(Qe,`▸ ${(et=e(C))!=null?et:""}`)},[()=>e($).toUpperCase()]),c(k,V)},D=k=>{var V=K_();let z;var Z=i(n(V),2),pe=i(n(Z),2),ce=n(pe);w(()=>{var Ie;z=Me(V,1,"system-response-box mcp svelte-rmqsd6",null,z,{on:e(P)}),y(ce,`▸ ${(Ie=e(M))!=null?Ie:""}`)}),c(k,V)};x(xe,k=>{d()?k(Je):e(A)?k(ke,1):u()&&k(D,2)})}c(ye,_e)};x(q,ye=>{e(ee)&&e(b)&&ye(J)})}w(()=>{Tt(ie,"data-recording",r()),Tt(ie,"data-speaking",d()),Tt(ie,"data-processing",t().processing)}),c(s,ie),Ot(),f()}class bl{constructor(...a){this.type="Logical",a.length===1?"Logical"in a[0]?(this.width=a[0].Logical.width,this.height=a[0].Logical.height):(this.width=a[0].width,this.height=a[0].height):(this.width=a[0],this.height=a[1])}toPhysical(a){return new sn(this.width*a,this.height*a)}[gs](){return{width:this.width,height:this.height}}toJSON(){return this[gs]()}}class sn{constructor(...a){this.type="Physical",a.length===1?"Physical"in a[0]?(this.width=a[0].Physical.width,this.height=a[0].Physical.height):(this.width=a[0].width,this.height=a[0].height):(this.width=a[0],this.height=a[1])}toLogical(a){return new bl(this.width/a,this.height/a)}[gs](){return{width:this.width,height:this.height}}toJSON(){return this[gs]()}}class In{constructor(a){this.size=a}toLogical(a){return this.size instanceof bl?this.size:this.size.toLogical(a)}toPhysical(a){return this.size instanceof sn?this.size:this.size.toPhysical(a)}[gs](){return{[`${this.size.type}`]:{width:this.size.width,height:this.size.height}}}toJSON(){return this[gs]()}}class yl{constructor(...a){this.type="Logical",a.length===1?"Logical"in a[0]?(this.x=a[0].Logical.x,this.y=a[0].Logical.y):(this.x=a[0].x,this.y=a[0].y):(this.x=a[0],this.y=a[1])}toPhysical(a){return new us(this.x*a,this.y*a)}[gs](){return{x:this.x,y:this.y}}toJSON(){return this[gs]()}}class us{constructor(...a){this.type="Physical",a.length===1?"Physical"in a[0]?(this.x=a[0].Physical.x,this.y=a[0].Physical.y):(this.x=a[0].x,this.y=a[0].y):(this.x=a[0],this.y=a[1])}toLogical(a){return new yl(this.x/a,this.y/a)}[gs](){return{x:this.x,y:this.y}}toJSON(){return this[gs]()}}class ji{constructor(a){this.position=a}toLogical(a){return this.position instanceof yl?this.position:this.position.toLogical(a)}toPhysical(a){return this.position instanceof us?this.position:this.position.toPhysical(a)}[gs](){return{[`${this.position.type}`]:{x:this.position.x,y:this.position.y}}}toJSON(){return this[gs]()}}var or;(function(s){s[s.Critical=1]="Critical",s[s.Informational=2]="Informational"})(or||(or={}));class Xo{constructor(a){this._preventDefault=!1,this.event=a.event,this.id=a.id}preventDefault(){this._preventDefault=!0}isPreventDefault(){return this._preventDefault}}var Qr;(function(s){s.None="none",s.Normal="normal",s.Indeterminate="indeterminate",s.Paused="paused",s.Error="error"})(Qr||(Qr={}));function wl(){return new kl(window.__TAURI_INTERNALS__.metadata.currentWindow.label,{skip:!0})}async function er(){return E("plugin:window|get_all_windows").then(s=>s.map(a=>new kl(a,{skip:!0})))}const Lr=["tauri://created","tauri://error"];class kl{constructor(a,t={}){var r;this.label=a,this.listeners=Object.create(null),t!=null&&t.skip||E("plugin:window|create",{options:{...t,parent:typeof t.parent=="string"?t.parent:(r=t.parent)===null||r===void 0?void 0:r.label,label:a}}).then(async()=>this.emit("tauri://created")).catch(async o=>this.emit("tauri://error",o))}static async getByLabel(a){var t;return(t=(await er()).find(r=>r.label===a))!==null&&t!==void 0?t:null}static getCurrent(){return wl()}static async getAll(){return er()}static async getFocusedWindow(){for(const a of await er())if(await a.isFocused())return a;return null}async listen(a,t){return this._handleTauriEvent(a,t)?()=>{const r=this.listeners[a];r.splice(r.indexOf(t),1)}:oa(a,t,{target:{kind:"Window",label:this.label}})}async once(a,t){return this._handleTauriEvent(a,t)?()=>{const r=this.listeners[a];r.splice(r.indexOf(t),1)}:Zd(a,t,{target:{kind:"Window",label:this.label}})}async emit(a,t){if(Lr.includes(a)){for(const r of this.listeners[a]||[])r({event:a,id:-1,payload:t});return}return Go(a,t)}async emitTo(a,t,r){if(Lr.includes(t)){for(const o of this.listeners[t]||[])o({event:t,id:-1,payload:r});return}return Xd(a,t,r)}_handleTauriEvent(a,t){return Lr.includes(a)?(a in this.listeners?this.listeners[a].push(t):this.listeners[a]=[t],!0):!1}async scaleFactor(){return E("plugin:window|scale_factor",{label:this.label})}async innerPosition(){return E("plugin:window|inner_position",{label:this.label}).then(a=>new us(a))}async outerPosition(){return E("plugin:window|outer_position",{label:this.label}).then(a=>new us(a))}async innerSize(){return E("plugin:window|inner_size",{label:this.label}).then(a=>new sn(a))}async outerSize(){return E("plugin:window|outer_size",{label:this.label}).then(a=>new sn(a))}async isFullscreen(){return E("plugin:window|is_fullscreen",{label:this.label})}async isMinimized(){return E("plugin:window|is_minimized",{label:this.label})}async isMaximized(){return E("plugin:window|is_maximized",{label:this.label})}async isFocused(){return E("plugin:window|is_focused",{label:this.label})}async isDecorated(){return E("plugin:window|is_decorated",{label:this.label})}async isResizable(){return E("plugin:window|is_resizable",{label:this.label})}async isMaximizable(){return E("plugin:window|is_maximizable",{label:this.label})}async isMinimizable(){return E("plugin:window|is_minimizable",{label:this.label})}async isClosable(){return E("plugin:window|is_closable",{label:this.label})}async isVisible(){return E("plugin:window|is_visible",{label:this.label})}async title(){return E("plugin:window|title",{label:this.label})}async theme(){return E("plugin:window|theme",{label:this.label})}async isAlwaysOnTop(){return E("plugin:window|is_always_on_top",{label:this.label})}async activityName(){return E("plugin:window|activity_name",{label:this.label})}async sceneIdentifier(){return E("plugin:window|scene_identifier",{label:this.label})}async center(){return E("plugin:window|center",{label:this.label})}async requestUserAttention(a){let t=null;return a&&(a===or.Critical?t={type:"Critical"}:t={type:"Informational"}),E("plugin:window|request_user_attention",{label:this.label,value:t})}async setResizable(a){return E("plugin:window|set_resizable",{label:this.label,value:a})}async setEnabled(a){return E("plugin:window|set_enabled",{label:this.label,value:a})}async isEnabled(){return E("plugin:window|is_enabled",{label:this.label})}async setMaximizable(a){return E("plugin:window|set_maximizable",{label:this.label,value:a})}async setMinimizable(a){return E("plugin:window|set_minimizable",{label:this.label,value:a})}async setClosable(a){return E("plugin:window|set_closable",{label:this.label,value:a})}async setTitle(a){return E("plugin:window|set_title",{label:this.label,value:a})}async maximize(){return E("plugin:window|maximize",{label:this.label})}async unmaximize(){return E("plugin:window|unmaximize",{label:this.label})}async toggleMaximize(){return E("plugin:window|toggle_maximize",{label:this.label})}async minimize(){return E("plugin:window|minimize",{label:this.label})}async unminimize(){return E("plugin:window|unminimize",{label:this.label})}async show(){return E("plugin:window|show",{label:this.label})}async hide(){return E("plugin:window|hide",{label:this.label})}async close(){return E("plugin:window|close",{label:this.label})}async destroy(){return E("plugin:window|destroy",{label:this.label})}async setDecorations(a){return E("plugin:window|set_decorations",{label:this.label,value:a})}async setShadow(a){return E("plugin:window|set_shadow",{label:this.label,value:a})}async setEffects(a){return E("plugin:window|set_effects",{label:this.label,value:a})}async clearEffects(){return E("plugin:window|set_effects",{label:this.label,value:null})}async setAlwaysOnTop(a){return E("plugin:window|set_always_on_top",{label:this.label,value:a})}async setAlwaysOnBottom(a){return E("plugin:window|set_always_on_bottom",{label:this.label,value:a})}async setContentProtected(a){return E("plugin:window|set_content_protected",{label:this.label,value:a})}async setSize(a){return E("plugin:window|set_size",{label:this.label,value:a instanceof In?a:new In(a)})}async setMinSize(a){return E("plugin:window|set_min_size",{label:this.label,value:a instanceof In?a:a?new In(a):null})}async setMaxSize(a){return E("plugin:window|set_max_size",{label:this.label,value:a instanceof In?a:a?new In(a):null})}async setSizeConstraints(a){function t(r){return r?{Logical:r}:null}return E("plugin:window|set_size_constraints",{label:this.label,value:{minWidth:t(a==null?void 0:a.minWidth),minHeight:t(a==null?void 0:a.minHeight),maxWidth:t(a==null?void 0:a.maxWidth),maxHeight:t(a==null?void 0:a.maxHeight)}})}async setPosition(a){return E("plugin:window|set_position",{label:this.label,value:a instanceof ji?a:new ji(a)})}async setFullscreen(a){return E("plugin:window|set_fullscreen",{label:this.label,value:a})}async setSimpleFullscreen(a){return E("plugin:window|set_simple_fullscreen",{label:this.label,value:a})}async setFocus(){return E("plugin:window|set_focus",{label:this.label})}async setFocusable(a){return E("plugin:window|set_focusable",{label:this.label,value:a})}async setIcon(a){return E("plugin:window|set_icon",{label:this.label,value:lr(a)})}async setSkipTaskbar(a){return E("plugin:window|set_skip_taskbar",{label:this.label,value:a})}async setCursorGrab(a){return E("plugin:window|set_cursor_grab",{label:this.label,value:a})}async setCursorVisible(a){return E("plugin:window|set_cursor_visible",{label:this.label,value:a})}async setCursorIcon(a){return E("plugin:window|set_cursor_icon",{label:this.label,value:a})}async setBackgroundColor(a){return E("plugin:window|set_background_color",{color:a})}async setCursorPosition(a){return E("plugin:window|set_cursor_position",{label:this.label,value:a instanceof ji?a:new ji(a)})}async setIgnoreCursorEvents(a){return E("plugin:window|set_ignore_cursor_events",{label:this.label,value:a})}async startDragging(){return E("plugin:window|start_dragging",{label:this.label})}async startResizeDragging(a){return E("plugin:window|start_resize_dragging",{label:this.label,value:a})}async setBadgeCount(a){return E("plugin:window|set_badge_count",{label:this.label,value:a})}async setBadgeLabel(a){return E("plugin:window|set_badge_label",{label:this.label,value:a})}async setOverlayIcon(a){return E("plugin:window|set_overlay_icon",{label:this.label,value:a?lr(a):void 0})}async setProgressBar(a){return E("plugin:window|set_progress_bar",{label:this.label,value:a})}async setVisibleOnAllWorkspaces(a){return E("plugin:window|set_visible_on_all_workspaces",{label:this.label,value:a})}async setTitleBarStyle(a){return E("plugin:window|set_title_bar_style",{label:this.label,value:a})}async setTheme(a){return E("plugin:window|set_theme",{label:this.label,value:a})}async onResized(a){return this.listen(ts.WINDOW_RESIZED,t=>{t.payload=new sn(t.payload),a(t)})}async onMoved(a){return this.listen(ts.WINDOW_MOVED,t=>{t.payload=new us(t.payload),a(t)})}async onCloseRequested(a){return this.listen(ts.WINDOW_CLOSE_REQUESTED,async t=>{const r=new Xo(t);await a(r),r.isPreventDefault()||await this.destroy()})}async onDragDropEvent(a){const t=await this.listen(ts.DRAG_ENTER,u=>{a({...u,payload:{type:"enter",paths:u.payload.paths,position:new us(u.payload.position)}})}),r=await this.listen(ts.DRAG_OVER,u=>{a({...u,payload:{type:"over",position:new us(u.payload.position)}})}),o=await this.listen(ts.DRAG_DROP,u=>{a({...u,payload:{type:"drop",paths:u.payload.paths,position:new us(u.payload.position)}})}),d=await this.listen(ts.DRAG_LEAVE,u=>{a({...u,payload:{type:"leave"}})});return()=>{t(),o(),r(),d()}}async onFocusChanged(a){const t=await this.listen(ts.WINDOW_FOCUS,o=>{a({...o,payload:!0})}),r=await this.listen(ts.WINDOW_BLUR,o=>{a({...o,payload:!1})});return()=>{t(),r()}}async onScaleChanged(a){return this.listen(ts.WINDOW_SCALE_FACTOR_CHANGED,a)}async onThemeChanged(a){return this.listen(ts.WINDOW_THEME_CHANGED,a)}}var Bl;(function(s){s.Disabled="disabled",s.Throttle="throttle",s.Suspend="suspend"})(Bl||(Bl={}));var ql;(function(s){s.Default="default",s.FluentOverlay="fluentOverlay"})(ql||(ql={}));var el;(function(s){s.AppearanceBased="appearanceBased",s.Light="light",s.Dark="dark",s.MediumLight="mediumLight",s.UltraDark="ultraDark",s.Titlebar="titlebar",s.Selection="selection",s.Menu="menu",s.Popover="popover",s.Sidebar="sidebar",s.HeaderView="headerView",s.Sheet="sheet",s.WindowBackground="windowBackground",s.HudWindow="hudWindow",s.FullScreenUI="fullScreenUI",s.Tooltip="tooltip",s.ContentBackground="contentBackground",s.UnderWindowBackground="underWindowBackground",s.UnderPageBackground="underPageBackground",s.Mica="mica",s.Blur="blur",s.Acrylic="acrylic",s.Tabbed="tabbed",s.TabbedDark="tabbedDark",s.TabbedLight="tabbedLight"})(el||(el={}));var tl;(function(s){s.FollowsWindowActiveState="followsWindowActiveState",s.Active="active",s.Inactive="inactive"})(tl||(tl={}));function wr(s){return s===null?null:{name:s.name,scaleFactor:s.scaleFactor,position:new us(s.position),size:new sn(s.size),workArea:{position:new us(s.workArea.position),size:new sn(s.workArea.size)}}}async function Z_(){return E("plugin:window|current_monitor").then(wr)}async function X_(){return E("plugin:window|primary_monitor").then(wr)}async function Q_(s,a){return E("plugin:window|monitor_from_point",{x:s,y:a}).then(wr)}async function eh(){return E("plugin:window|available_monitors").then(s=>s.map(wr))}async function th(){return E("plugin:window|cursor_position").then(s=>new us(s))}const ah=Object.freeze(Object.defineProperty({__proto__:null,CloseRequestedEvent:Xo,get Effect(){return el},get EffectState(){return tl},LogicalPosition:yl,LogicalSize:bl,PhysicalPosition:us,PhysicalSize:sn,get ProgressBarStatus(){return Qr},get UserAttentionType(){return or},Window:kl,availableMonitors:eh,currentMonitor:Z_,cursorPosition:th,getAllWindows:er,getCurrentWindow:wl,monitorFromPoint:Q_,primaryMonitor:X_},Symbol.toStringTag,{value:"Module"}));var sh=p('
      Installing the helper packages…

      You may be prompted for your administrator password.

      '),nh=p('
      Checking VoxCtrl setup…
      '),ih=p('

      '),rh=p('

      ',1),lh=p(`

      🔒 VoxCtrl asked your desktop to register its shortcuts and is told nothing - else. It does not read your keyboard, cannot see what you type in other - applications, and needed no special permissions to set up.

      `),oh=p(' '),ch=p('not accepted by your desktop'),dh=p("
    • "),vh=p('
        '),uh=p(`

        Your desktop does not offer the global-shortcuts portal, so VoxCtrl is - reading key events from the X server instead. This needed no permissions - and no setup, and every gesture style works — but in this mode every - keystroke passes through VoxCtrl. Nothing is stored or sent anywhere; a - desktop with portal support (KDE Plasma, GNOME 48+, Hyprland) avoids it - entirely.

        `),ph=p(`

        Your desktop is holding VoxCtrl's shortcuts itself, which is why VoxCtrl - cannot read your keyboard here. It also means the desktop only reports the - key going down, never coming back up: hold and double-tap styles cannot - work on this route, and the Hotkeys tab offers only tap-to-start, - tap-to-stop.

        `),fh=p(`

        Your desktop does not offer the global-shortcuts portal, so VoxCtrl is - falling back to reading input devices — access this machine already had, - which VoxCtrl neither requested nor configured. Shortcuts work, but in this - mode every keystroke passes through VoxCtrl. Nothing is stored or sent - anywhere; if you would rather it did not happen at all, a desktop with - portal support (KDE Plasma, GNOME 48+, Hyprland) avoids it entirely.

        `),_h=p('

        '),hh=p(`

        Global shortcuts require approval from your system. If you closed or cancelled - the desktop keybind prompt without approving, click below to show the prompt again.

        `,1),gh=p('

        '),mh=p('

        Global shortcuts require approval or registration from your system. VoxCtrl will not grant itself keyboard access to work around this.

        ',1),bh=p(' '),yh=p(' '),wh=p(` is missing, so transcriptions cannot be - typed into the focused window.`,1),kh=p(''),xh=p(''),Th=p('
         
        '),Sh=p('
        ',1),Eh=p(' is downloaded and ready.',1),Ch=p('Downloading in the background — no action needed.',1),Ah=p(' is not downloaded yet, so dictation produces no text.',1),Mh=p('
        '),Ph=p('
        ❌
        '),Dh=p(''),Ih=p('
        ');function zh(s,a){Lt(a,!0);let t=S(null),r=S(!1),o=S(!1),d=S(null),u=S(!1),v=S(!1),f=S(!1),_=S(null),b=S(!1),m=S(null),h;async function M(){try{l(t,await E("get_setup_status"),!0)}catch(ae){console.error("Failed to read setup status:",ae)}}Zt(()=>{M(),h=setInterval(M,2e3)}),mr(()=>{h&&clearInterval(h)});async function A(){try{await wl().close()}catch(ae){console.error("Failed to close window natively:",ae)}}async function $(){var ae;l(r,!0),l(d,null);try{await E("install_system_integration"),await M()}catch(G){l(d,(ae=G==null?void 0:G.toString())!=null?ae:"Install failed",!0),l(u,!0)}finally{l(r,!1)}}async function C(){var ae;l(o,!0),l(d,null);try{await E("download_configured_model"),await M()}catch(G){l(d,(ae=G==null?void 0:G.toString())!=null?ae:"Download failed",!0)}finally{l(o,!1)}}async function O(){try{await E("open_settings_tab",{tab:"engine"})}catch(ae){console.error("Failed to open the Engine settings tab:",ae)}}async function le(){var ae;l(f,!0),l(_,null);try{await E("open_shortcut_settings")}catch(G){l(_,(ae=G==null?void 0:G.toString())!=null?ae:"Could not open shortcut settings.",!0)}finally{l(f,!1)}}async function re(){var ae;l(b,!0),l(m,null);try{await E("approve_shortcuts"),await M()}catch(G){l(m,(ae=G==null?void 0:G.toString())!=null?ae:"Failed to configure shortcuts for your desktop.",!0),await M()}finally{l(b,!1)}}async function me(){if(e(t))try{await navigator.clipboard.writeText(e(t).manual_package_commands),l(v,!0),setTimeout(()=>l(v,!1),2e3)}catch(ae){console.error("Clipboard write failed:",ae)}}const ee=fe(()=>e(t)?e(t).hotkeys.backend==="starting"?"busy":e(t).hotkeys_active?"ok":"todo":"busy"),P=fe(()=>e(t)?e(t).missing_injection_tool?"todo":"ok":"busy"),R=fe(()=>e(t)?e(t).model_ready?"ok":e(t).model_auto_downloads?"busy":"todo":"busy"),te=ae=>ae==="ok"?"✅":ae==="busy"?"⏳":"⚠️";var Ae=Ih(),Pe=n(Ae);{var Y=ae=>{var G=sh();c(ae,G)},B=ae=>{var G=nh();c(ae,G)},ge=ae=>{var G=Dh(),ue=n(G),Se=n(ue),ie=n(Se),q=i(Se,2),J=n(q),ye=n(J),_e=i(J,2),oe=n(_e),W=i(ue,2),ve=n(W);let I;var H=n(ve),se=n(H),Ee=i(H,2),Re=i(n(Ee),2),he=n(Re),ne=i(Re,2);{var xe=Oe=>{var Ze=rh(),j=mt(Ze),g=n(j),T=i(j,2),Te=n(T),we=n(Te),ze=i(T,2);{var qe=Ne=>{var at=ih(),tt=n(at);w(()=>y(tt,e(_))),c(Ne,at)};x(ze,Ne=>{e(_)&&Ne(qe)})}w(()=>{var Ne;y(g,`🔧 One more step on KDE: ${(Ne=e(t).hotkeys.manual_enable_hint)!=null?Ne:""}`),Te.disabled=e(f),y(we,e(f)?"Opening…":"Open Shortcut Settings")}),L("click",Te,le),c(Oe,Ze)};x(ne,Oe=>{e(t).hotkeys.needs_manual_enable&&Oe(xe)})}var Je=i(ne,2);{var ke=Oe=>{var Ze=lh();c(Oe,Ze)};x(Je,Oe=>{(e(t).hotkeys.backend==="portal"||e(t).hotkeys.backend==="mint_dbus")&&Oe(ke)})}var D=i(Je,2);{var k=Oe=>{var Ze=vh();_t(Ze,21,()=>e(t).hotkeys.shortcuts,ht,(j,g)=>{var T=dh();let Te;var we=n(T);{var ze=Ne=>{var at=oh(),tt=n(at);w(()=>y(tt,e(g).trigger_description||e(g).requested||"chosen in your desktop settings")),c(Ne,at)},qe=Ne=>{var at=ch();c(Ne,at)};x(we,Ne=>{e(g).bound?Ne(ze):Ne(qe,-1)})}w(()=>Te=Me(T,1,"svelte-45v8pc",null,Te,{unbound:!e(g).bound})),c(j,T)}),c(Oe,Ze)};x(D,Oe=>{e(t).hotkeys_active&&e(t).hotkeys.shortcuts.length>0&&Oe(k)})}var V=i(D,2);{var z=Oe=>{var Ze=uh();c(Oe,Ze)},Z=Oe=>{var Ze=ph();c(Oe,Ze)},pe=Oe=>{var Ze=fh();c(Oe,Ze)},ce=Oe=>{var Ze=hh(),j=i(mt(Ze),2),g=n(j),T=n(g),Te=i(j,2);{var we=ze=>{var qe=_h(),Ne=n(qe);w(()=>y(Ne,e(m))),c(ze,qe)};x(Te,ze=>{e(m)&&ze(we)})}w(()=>{g.disabled=e(b),y(T,e(b)?"Configuring…":"Approve Keybinds")}),L("click",g,re),c(Oe,Ze)},Ie=Oe=>{var Ze=mh(),j=i(mt(Ze),2),g=n(j),T=n(g),Te=i(j,2);{var we=ze=>{var qe=gh(),Ne=n(qe);w(()=>y(Ne,e(m))),c(ze,qe)};x(Te,ze=>{e(m)&&ze(we)})}w(()=>{g.disabled=e(b),y(T,e(b)?"Configuring…":"Approve Shortcuts")}),L("click",g,re),c(Oe,Ze)};x(V,Oe=>{e(t).hotkeys.backend==="x11"?Oe(z):e(t).hotkeys.backend==="mint_dbus"?Oe(Z,1):e(t).hotkeys.backend==="evdev"?Oe(pe,2):e(t).hotkeys.portal_refused?Oe(ce,3):e(t).hotkeys.backend!=="starting"&&Oe(Ie,4)})}var Qe=i(V,2);{var ot=Oe=>{var Ze=bh(),j=n(Ze);w(()=>{var g;return y(j,`Portal reported: ${(g=e(t).hotkeys.portal_error)!=null?g:""}`)}),c(Oe,Ze)};x(Qe,Oe=>{e(t).hotkeys.portal_error&&e(t).hotkeys.backend!=="portal"&&e(t).hotkeys.backend!=="evdev"&&Oe(ot)})}var et=i(Qe,2);{var Q=Oe=>{var Ze=yh(),j=n(Ze);w(()=>{var g;return y(j,`X11 shortcuts: ${(g=e(t).hotkeys.x11_error)!=null?g:""}`)}),c(Oe,Ze)};x(et,Oe=>{e(t).hotkeys.x11_error&&e(t).hotkeys.backend!=="x11"&&e(t).hotkeys.backend!=="portal"&&Oe(Q)})}var X=i(ve,2);let de;var Ue=n(X),Ce=n(Ue),Fe=i(Ue,2),We=i(n(Fe),2),st=n(We);{var it=Oe=>{var Ze=wh(),j=mt(Ze),g=n(j);w(()=>y(g,e(t).missing_injection_tool)),c(Oe,Ze)},Ke=Oe=>{var Ze=je("Ready — transcriptions can be typed straight into the focused window.");c(Oe,Ze)};x(st,Oe=>{e(t).missing_injection_tool?Oe(it):Oe(Ke,-1)})}var rt=i(We,2);{var ct=Oe=>{var Ze=Sh(),j=mt(Ze),g=n(j);{var T=Ne=>{var at=kh();L("click",at,$),c(Ne,at)};x(g,Ne=>{e(t).pkexec_available&&e(t).manual_package_commands&&Ne(T)})}var Te=i(g,2);{var we=Ne=>{var at=xh(),tt=n(at);w(()=>y(tt,e(u)?"Hide manual commands":"Install it manually")),L("click",at,()=>l(u,!e(u))),c(Ne,at)};x(Te,Ne=>{e(t).manual_package_commands&&Ne(we)})}var ze=i(j,2);{var qe=Ne=>{var at=Th(),tt=n(at),Vt=n(tt),Xt=i(tt,2),ea=n(Xt);w(()=>{y(Vt,e(t).manual_package_commands),y(ea,e(v)?"Copied":"Copy commands")}),L("click",Xt,me),c(Ne,at)};x(ze,Ne=>{e(u)&&Ne(qe)})}c(Oe,Ze)};x(rt,Oe=>{e(t).missing_injection_tool&&Oe(ct)})}var nt=i(X,2);let De;var Ge=n(nt),lt=n(Ge),U=i(Ge,2),K=i(n(U),2),be=n(K);{var Be=Oe=>{var Ze=Eh(),j=mt(Ze),g=n(j);w(()=>y(g,e(t).model_size)),c(Oe,Ze)},Ye=Oe=>{var Ze=Ch(),j=i(mt(Ze)),g=n(j);w(()=>y(g,e(t).model_size)),c(Oe,Ze)},St=Oe=>{var Ze=Ah(),j=mt(Ze),g=n(j);w(()=>y(g,e(t).model_size)),c(Oe,Ze)};x(be,Oe=>{e(t).model_ready?Oe(Be):e(t).model_auto_downloads?Oe(Ye,1):Oe(St,-1)})}var na=i(K,2);{var ft=Oe=>{var Ze=Mh(),j=n(Ze),g=n(j),T=i(j,2);w(()=>{j.disabled=e(o),y(g,e(o)?"Downloading…":`Download ${e(t).model_size}`)}),L("click",j,C),L("click",T,O),c(Oe,Ze)};x(na,Oe=>{!e(t).model_ready&&!e(t).model_auto_downloads&&Oe(ft)})}var Rt=i(W,2);{var Et=Oe=>{var Ze=Ph(),j=i(n(Ze),2),g=n(j);w(()=>y(g,e(d))),c(Oe,Ze)};x(Rt,Oe=>{e(d)&&Oe(Et)})}var At=i(Rt,2),ia=n(At),Ut=n(ia);w((Oe,Ze,j)=>{y(ie,e(t).is_complete?"✅":"🛠️"),y(ye,e(t).is_complete?"VoxCtrl is ready":"Finish setting up VoxCtrl"),y(oe,e(t).is_complete?"Press your shortcut anywhere to dictate.":"Dictation is not ready yet — the steps below say why."),I=Me(ve,1,"step svelte-45v8pc",null,I,{done:e(ee)==="ok"}),y(se,Oe),y(he,e(t).hotkeys.detail),de=Me(X,1,"step svelte-45v8pc",null,de,{done:e(P)==="ok"}),y(Ce,Ze),De=Me(nt,1,"step svelte-45v8pc",null,De,{done:e(R)==="ok"}),y(lt,j),y(Ut,e(t).is_complete?"Close":"Continue anyway")},[()=>te(e(ee)),()=>te(e(P)),()=>te(e(R))]),L("click",ia,A),c(ae,G)};x(Pe,ae=>{e(r)?ae(Y):e(t)?ae(ge,-1):ae(B,1)})}c(s,Ae),Ot()}pa(["click"]);const Lh=[{id:"tiny",mb:75,speed:.96,accuracy:.58},{id:"base",mb:142,speed:.88,accuracy:.68},{id:"small",mb:466,speed:.68,accuracy:.8},{id:"medium",mb:1500,speed:.42,accuracy:.9},{id:"large-v3",mb:3100,speed:.22,accuracy:.97}],Oh=[{id:"tiny",mb:100,speed:.98,accuracy:.64},{id:"base",mb:250,speed:.92,accuracy:.77}],Rh=[{id:"tdt-0.6b-v3",mb:665,speed:.95,accuracy:.94}],Nh=[{id:"remote",mb:0,speed:.95,accuracy:.95}],Ui=[{id:"whisper-cpp",name:"whisper.cpp",glyph:"∇",tagline:"Reference-grade accuracy in quiet spaces. Five model sizes from 75 MB to 3.1 GB. CUDA, Vulkan or CPU.",models:Lh,gpu:!0,noiseRetention:.64},{id:"moonshine",name:"Moonshine",glyph:"↯",tagline:"Streaming ONNX model tuned for real rooms — fans, keyboards, traffic. Fast on any CPU, tiny download.",models:Oh,gpu:!1,noiseRetention:.93},{id:"parakeet",name:"Parakeet TDT",glyph:"⚡",tagline:"NVIDIA FastConformer TDT 0.6B. Ultra-fast non-autoregressive transcription, SOTA accuracy, no repetition loops.",models:Rh,gpu:!0,noiseRetention:.88},{id:"remote-openai",name:"Remote Speech Engine",glyph:"🌐",tagline:"Connect to an OpenAI-compatible speech-to-text server on your network or cloud (Faster-Whisper, vLLM, etc.).",models:Nh,gpu:!1,noiseRetention:.92}],Vn=[{id:"toggle",name:"Tap to talk",verb:"tap",desc:"Press once to start, press again to stop. Hands stay free while you speak.",key:[[1,1],[8,0],[1,1],[3,0]],mic:[[1,0],[9,1],[4,0]]},{id:"double_tap",name:"Double-tap to talk",verb:"double-tap",desc:"Two quick presses start dictation; one press stops. Hard to trigger by accident.",key:[[1,1],[.7,0],[1,1],[7,0],[1,1],[3,0]],mic:[[2.7,0],[7.3,1],[4,0]]},{id:"hold",name:"Hold to talk",verb:"hold",desc:"Hold the keys down while speaking, release to stop. Like a walkie-talkie.",key:[[1,0],[9,1],[4,0]],mic:[[1,0],[9,1],[4,0]]},{id:"double_tap_hold",name:"Double-tap & hold",verb:"double-tap and hold",desc:"Tap once, then press and hold. Release to stop. Never collides with a plain shortcut.",key:[[1,1],[.7,0],[8.3,1],[4,0]],mic:[[2.7,0],[6.3,1],[4,0]]}],Ln=[{id:"blue_wave",name:"Ocean Wave",meta:"default · tide-pool waves",glyph:"⊟"},{id:"voice_card",name:"Voice Card",meta:"20×6 LED VU matrix",glyph:"⊟"},{id:"waveform",name:"Waveform",meta:"scrolling oscilloscope",glyph:"⌇"},{id:"pulse",name:"Pulse Ring",meta:"sonar sweep · target lock",glyph:"◌"},{id:"mono_bars",name:"Mono Bars",meta:"black & white 5-bar meter",glyph:"▥"},{id:"spectrum",name:"Neon Spectrum",meta:"16-band equalizer",glyph:"▦"},{id:"terminal",name:"Retro Terminal",meta:"DOS-blue ASCII meter",glyph:"▸"},{id:"vinyl",name:"Analog VU",meta:"vintage needle meter",glyph:"◔"}],Fh=[{id:"top",label:"Top",glyph:"⤒"},{id:"center",label:"Center",glyph:"⊡"},{id:"bottom",label:"Bottom",glyph:"⤓"}],ks=[{id:"vox_cpm_2",name:"VoxCPM2",kind:"neural · 2B autoregressive",quality:.98,speed:.25,mb:2950,note:"2B autoregressive diffusion. SOTA voice realism & cloning. Runs via audio.cpp, best on a Vulkan GPU."},{id:"breeze_tts_2",name:"Breeze-TTS-2",kind:"neural · expressive",quality:.96,speed:.32,mb:5080,note:"Most natural prosody. Runs via audio.cpp, best on a Vulkan GPU or fast CPU.",nonCommercial:!0,licenceUrl:"huggingface.co/BreezeBlue/Breeze-TTS-2"},{id:"pocket_tts",name:"Pocket TTS",kind:"neural · voice cloning",quality:.86,speed:.55,mb:130,note:"Cloned voices, downloaded in-app. Runs via audio.cpp with optional Vulkan acceleration."},{id:"piper",name:"Piper TTS",kind:"onnx · ~11 voices",quality:.72,speed:.8,mb:60,note:"The sweet spot for most machines. Per-voice ~60 MB."},{id:"inflect_micro",name:"Inflect Micro",kind:"compact neural",quality:.55,speed:.92,mb:38,note:"Tiny footprint, still human-ish. Good for laptops."},{id:"espeak",name:"eSpeak-NG",kind:"formant synth",quality:.3,speed:.99,mb:0,note:"Instant, robotic, runs anywhere. Zero download."}],xs=["Welcome","Engine","Hotkey","Overlay","Test","Voice","Done"];function $n(s){return s<=0?"none":s>=1e3?`${(s/1e3).toFixed(1)} GB`:`${Math.round(s)} MB`}function Vh(s,a=ks){const t=Math.max(0,...a.map(r=>r.mb));return t<=0||s<=0?0:Math.min(100,s/t*100)}function tr(s){return`${Math.round(s*100)}%`}function $h(s){return s>.85?"instant":s>.6?"< 1 s":s>.35?"1–3 s":"3–8 s"}function Bh(s){return s>.9?"instant":s>.7?"< 0.5 s":s>.5?"~1 s":"2–4 s"}function Wi(s,a){return Array.from({length:s},(t,r)=>{const o=(r+1)/s;return{h:Math.max(8,Math.round(100*a*(.55+.45*Math.sin(r*1.7+a*5)))),o:o<=a?1:.18}})}function Qo(s){return Array.from({length:s},(a,t)=>({d:(.6+t*7%5*.12).toFixed(2),dl:(t*.07).toFixed(2)}))}function qh(s,a){const t=a.toUpperCase();return s==="Control"?"KEY_LEFTCTRL":s==="Alt"?"KEY_LEFTALT":s==="Shift"?"KEY_LEFTSHIFT":s==="Meta"||s==="OS"||s==="Super"?"KEY_LEFTMETA":t==="SPACE"?"KEY_SPACE":t==="ENTER"?"KEY_ENTER":t==="ESCAPE"||t==="ESC"?"KEY_ESC":t==="TAB"?"KEY_TAB":t==="BACKSPACE"?"KEY_BACKSPACE":t==="DELETE"?"KEY_DELETE":/^KEY[A-Z]$/.test(t)?`KEY_${t.slice(3)}`:t.startsWith("KEY")?t:t.startsWith("DIGIT")?`KEY_${t.replace("DIGIT","")}`:t.startsWith("ARROW")?`KEY_${t.replace("ARROW","")}`:t.startsWith("F")&&t.length>1?`KEY_${t}`:s.length===1?`KEY_${s.toUpperCase()}`:`KEY_${t}`}const jh={KEY_LEFTCTRL:"Ctrl",KEY_RIGHTCTRL:"Ctrl",KEY_LEFTALT:"Alt",KEY_RIGHTALT:"Alt",KEY_LEFTSHIFT:"Shift",KEY_RIGHTSHIFT:"Shift",KEY_LEFTMETA:"Super",KEY_RIGHTMETA:"Super",KEY_SPACE:"Space",KEY_ESC:"Esc",KEY_ENTER:"Enter",KEY_TAB:"Tab",KEY_BACKSPACE:"Backspace",KEY_DELETE:"Delete"};function xl(s){var a;return(a=jh[s])!=null?a:s.replace(/^KEY_/,"")}const Uh=new Set(["KEY_LEFTCTRL","KEY_RIGHTCTRL","KEY_LEFTALT","KEY_RIGHTALT","KEY_LEFTSHIFT","KEY_RIGHTSHIFT","KEY_LEFTMETA","KEY_RIGHTMETA"]);function Wh(s){return s.length>0&&s.every(a=>Uh.has(a))}const Or="default_hold",oi="command",Hh="Command";function Kh(s){return{...s,id:oi,label:Hh,delivery:"command",command:null}}var xi,Ti,Si,Ei,Ci,Ai,Mi,Pi,Di,Ii,zi;class Gh{constructor(){vt(this,xi,S(0));vt(this,Ti,S(0));vt(this,Si,S(!1));vt(this,Ei,S("hold"));vt(this,Ci,S(null));vt(this,Ai,S(!1));vt(this,Mi,S(wt([])));vt(this,Pi,S(null));vt(this,Di,S(wt([])));vt(this,Ii,S(!1));vt(this,zi,S(!1))}get step(){return e(F(this,xi))}set step(a){l(F(this,xi),a,!0)}get visited(){return e(F(this,Ti))}set visited(a){l(F(this,Ti),a,!0)}get leaving(){return e(F(this,Si))}set leaving(a){l(F(this,Si),a,!0)}get gesture(){return e(F(this,Ei))}set gesture(a){l(F(this,Ei),a,!0)}get combo(){return e(F(this,Ci))}set combo(a){l(F(this,Ci),a,!0)}get recording(){return e(F(this,Ai))}set recording(a){l(F(this,Ai),a,!0)}get held(){return e(F(this,Mi))}set held(a){l(F(this,Mi),a,!0)}get captureHint(){return e(F(this,Pi))}set captureHint(a){l(F(this,Pi),a,!0)}get issues(){return e(F(this,Di))}set issues(a){l(F(this,Di),a,!0)}get engineChosen(){return e(F(this,Ii))}set engineChosen(a){l(F(this,Ii),a,!0)}get modelChosen(){return e(F(this,zi))}set modelChosen(a){l(F(this,zi),a,!0)}get gestureInfo(){var a;return(a=Vn.find(t=>t.id===this.gesture))!=null?a:Vn[2]}get displayKeys(){var a;return this.recording?this.held:(a=this.combo)!=null?a:[]}recordIssue(a){this.issues=[...this.issues.filter(t=>t.id!==a.id),a]}clearIssue(a){this.issues=this.issues.filter(t=>t.id!==a)}goTo(a){a===this.step||this.leaving||a<0||a>=xs.length||(this.leaving=!0,this.recording=!1,setTimeout(()=>{this.step=a,this.visited=Math.max(this.visited,a),this.leaving=!1},200))}async ensureCommandTarget(){var o;const a=await E("get_targets");if(a.some(d=>d.id===oi&&d.delivery==="command"))return oi;const t=(o=a.find(d=>d.delivery==="inject"))!=null?o:a[0];if(!t)return"default";const r=[...a.filter(d=>d.id!==oi),Kh(t)];return await E("save_targets",{targets:r}),oi}async saveBinding(){if(!this.combo||this.combo.length===0)return;const a=await this.ensureCommandTarget(),t=await E("get_bindings").catch(()=>[]),r=this.gestureInfo,o={id:Or,label:`Dictate (${r.name})`,keys:[...this.combo],gesture:this.gesture,target_id:a,target_ids:[a],tap_ms:300,hold_threshold_ms:200,disabled:!1,openai_enabled:!1,openai_model:"",openai_mode:"custom",openai_prompt:"",openai_system_prompt:""},d=t.filter(u=>u.id!==Or&&u.id!=="default_toggle"&&u.id!=="__tts_stop__");await E("save_bindings",{bindings:[o,...d]})}async loadBinding(){var a;try{const t=await E("get_bindings"),r=(a=t.find(o=>o.id===Or))!=null?a:t.find(o=>o.id!=="__tts_stop__");r&&r.keys.length>0&&(this.combo=[...r.keys],Vn.some(o=>o.id===r.gesture)&&(this.gesture=r.gesture))}catch(t){console.error("Wizard: failed to read existing bindings:",t)}}reset(){this.step=0,this.visited=0,this.leaving=!1,this.gesture="hold",this.combo=null,this.recording=!1,this.held=[],this.captureHint=null,this.issues=[],this.engineChosen=!1,this.modelChosen=!1}}xi=new WeakMap,Ti=new WeakMap,Si=new WeakMap,Ei=new WeakMap,Ci=new WeakMap,Ai=new WeakMap,Mi=new WeakMap,Pi=new WeakMap,Di=new WeakMap,Ii=new WeakMap,zi=new WeakMap;const Ve=new Gh;function Cs(s){const a={...On(Nt)};s(a),Nt.set(a)}var Yh=p('
        '),Jh=p(`
        VoxCtrl
        // welcome

        Speak to anything on your machine.

        A few minutes of setup. Pick a transcription engine, bind a hotkey, choose how VoxCtrl shows - itself, and test it end to end. Everything runs on this device — nothing leaves it.

        ↺ Nothing is permanent — every choice can be changed later in Settings.
        `);function Zh(s){const a=[{glyph:"∇",n:"01",title:"Transcription engine",desc:"whisper.cpp or Moonshine, sized to your hardware."},{glyph:"⌁",n:"02",title:"Hotkey",desc:"A gesture and a key combo to start talking."},{glyph:"⌬",n:"03",title:"Overlay",desc:"A visual signal while the mic is live — or none."},{glyph:"◉",n:"04",title:"Live test",desc:"Dictate into a box and watch it land."},{glyph:"⊕",n:"05",title:"Voice output",desc:"Optional: let agents talk back through your speakers."}];var t=Jh(),r=n(t),o=n(r),d=i(n(o),4),u=i(r,2);_t(u,5,()=>a,ht,(v,f)=>{var _=Yh(),b=n(_),m=n(b),h=n(m),M=i(m,2),A=n(M),$=i(b,2),C=n($),O=i($,2),le=n(O);w(()=>{y(h,e(f).glyph),y(A,e(f).n),y(C,e(f).title),y(le,e(f).desc)}),c(v,_)}),w(()=>Tt(d,"src",yr)),c(s,t)}var Xh=p(''),Qh=p('
        Discovered models from server:
        '),eg=p("
        "),tg=p('✔ Tested & verified successfully'),ag=p('⚠️ Test connection required to proceed'),sg=p(``);function ng(s,a){Lt(a,!0);const t=()=>la(Nt,"$config",r),[r,o]=Ma();let d=Ft(a,"isOpen",15,!1),u=S(""),v=S(""),f=S("whisper-1"),_=S(""),b=S(30),m=S(!1),h=S(null),M=S(wt([])),A=S(!1),$=!1;ka(()=>{d()&&!$&&Fs(()=>{var te;const R=t().engine.remote_openai;l(u,(R==null?void 0:R.endpoint)||"http://localhost:8000/v1",!0),l(v,(R==null?void 0:R.api_key)||"",!0),l(f,(R==null?void 0:R.model)||"whisper-1",!0),l(_,(R==null?void 0:R.language)||"",!0),l(b,(te=R==null?void 0:R.timeout_secs)!=null?te:30,!0),l(h,null)}),$=d()});function C(){Cs(R=>{R.engine.remote_openai?(R.engine.remote_openai.endpoint=e(u).trim()||"http://localhost:8000/v1",R.engine.remote_openai.api_key=e(v).trim()?e(v).trim():null,R.engine.remote_openai.model=e(f).trim()||"whisper-1",R.engine.remote_openai.language=e(_).trim(),R.engine.remote_openai.timeout_secs=Number(e(b))||30):R.engine.remote_openai={endpoint:e(u).trim()||"http://localhost:8000/v1",api_key:e(v).trim()?e(v).trim():null,model:e(f).trim()||"whisper-1",language:e(_).trim(),timeout_secs:Number(e(b))||30}})}async function O(){var R;if(!e(m)){C(),l(m,!0),l(h,null);try{const te=await E("test_remote_stt",{endpoint:e(u).trim()||"http://localhost:8000/v1",apiKey:e(v).trim()?e(v).trim():null,model:e(f).trim()||"whisper-1",timeoutSecs:Number(e(b))||30});l(h,{success:te.success,message:te.message},!0),te.models&&te.models.length>0&&(l(M,te.models,!0),e(f)||(l(f,te.models[0],!0),C())),te.success&&(l(A,!0),C(),(R=a.onSuccess)==null||R.call(a))}catch(te){l(h,{success:!1,message:te.toString()},!0)}finally{l(m,!1)}}}function le(){C(),d(!1)}function re(R){R.key==="Escape"&&le()}var me=Vi();Os("keydown",Yr,re);var ee=mt(me);{var P=R=>{var te=sg(),Ae=n(te),Pe=n(Ae),Y=i(n(Pe),2),B=i(Pe,2),ge=i(n(B),2),ae=n(ge),G=i(n(ae),2),ue=i(ae,4),Se=i(n(ue),2),ie=i(ue,4),q=i(n(ie),2),J=i(ie,2);{var ye=ce=>{var Ie=Qh(),Qe=i(n(Ie),2);_t(Qe,21,()=>e(M),ht,(ot,et)=>{var Q=Xh();let X;var de=n(Q);w(()=>{X=Me(Q,1,"tag-btn svelte-1c9i6zy",null,X,{active:e(f)===e(et)}),y(de,e(et))}),L("click",Q,()=>{l(f,e(et),!0),C()}),c(ot,Q)}),c(ce,Ie)};x(J,ce=>{e(M).length>0&&ce(ye)})}var _e=i(J,2),oe=i(n(_e),2),W=i(_e,4),ve=i(n(W),2),I=i(W,2),H=n(I),se=n(H);{var Ee=ce=>{var Ie=je("⏳ Testing Connection...");c(ce,Ie)},Re=ce=>{var Ie=je("🧪 Test Connection");c(ce,Ie)};x(se,ce=>{e(m)?ce(Ee):ce(Re,-1)})}var he=i(H,2);{var ne=ce=>{var Ie=eg();let Qe;var ot=n(Ie);{var et=X=>{var de=je();w(()=>{var Ue;return y(de,`✔ ${(Ue=e(h).message)!=null?Ue:""}`)}),c(X,de)},Q=X=>{var de=je();w(()=>{var Ue;return y(de,`⚠️ ${(Ue=e(h).message)!=null?Ue:""}`)}),c(X,de)};x(ot,X=>{e(h).success?X(et):X(Q,-1)})}w(()=>Qe=Me(Ie,1,"status-pill svelte-1c9i6zy",null,Qe,{success:e(h).success,error:!e(h).success})),c(ce,Ie)};x(he,ce=>{e(h)&&ce(ne)})}var xe=i(B,2),Je=n(xe),ke=n(Je);{var D=ce=>{var Ie=tg();c(ce,Ie)},k=ce=>{var Ie=ag();c(ce,Ie)};x(ke,ce=>{e(A)?ce(D):ce(k,-1)})}var V=i(Je,2),z=n(V),Z=i(z,2),pe=n(Z);w(()=>{H.disabled=e(m),y(pe,e(A)?"Done":"Save & Close")}),L("click",te,ce=>{ce.target===ce.currentTarget&&le()}),L("keydown",te,ce=>{ce.key==="Escape"&&le()}),L("click",Y,le),L("change",G,C),He(G,()=>e(u),ce=>l(u,ce)),L("change",Se,C),He(Se,()=>e(v),ce=>l(v,ce)),L("change",q,C),He(q,()=>e(f),ce=>l(f,ce)),L("change",oe,C),He(oe,()=>e(_),ce=>l(_,ce)),L("change",ve,C),He(ve,()=>e(b),ce=>l(b,ce)),L("click",H,O),L("click",z,le),L("click",Z,le),c(R,te)};x(ee,R=>{d()&&R(P)})}c(s,me),Ot(),o()}pa(["click","keydown","change"]);var ig=p(`
        This build was compiled without the Moonshine backend — choosing it runs whisper.cpp - with the model above instead.
        `),rg=p(`
        This build was compiled without the Parakeet backend — choosing it runs whisper.cpp - with the model above instead.
        `),lg=p('
        '),og=p('
        server configuration
        URL
        Model
        Status
        ',1),cg=p(''),dg=p('
        '),vg=p('
        model size
        ',1),ug=p('
        '),pg=p('
        '),fg=p('
        ✓
        ◌ quiet room
        ≋ noisy room
        '),_g=p(' '),hg=p(' '),gg=p(' Checking local models…'),mg=p(' '),bg=p('⚠️ Test connection required before continuing'),yg=p(' '),wg=p('◇ Pick an engine and a model size — they download before the next step'),kg=p(' '),xg=p(`
        // 01 · transcription engine

        Which ears should VoxCtrl use?

        Choose between on-device engines (whisper.cpp, Moonshine, Parakeet TDT) or connect to a Remote Speech Engine over your network. - Pick a model size inside each card or configure your remote endpoint to get started.

        `);function Tg(s,a){Lt(a,!0);const t=()=>la(Nt,"$config",r),[r,o]=Ma(),d=1;let u=S(!0),v=S(!0),f=S(null),_=S(wt({})),b=S(wt({})),m=S(wt({})),h=S(null),M=S(null),A=S(!1),$=S(!1),C=S(!1);const O=fe(()=>t().engine.backend==="remote-openai"?"remote-openai":t().engine.backend==="parakeet"?"parakeet":t().engine.backend==="moonshine"?"moonshine":"whisper-cpp"),le={cuda:"CUDA",vulkan:"Vulkan",coreml:"CoreML"},re=fe(()=>!!e(f)&&t().engine.whisper_cpp.device!=="cpu"),me=fe(()=>{var Q;return e(f)?(Q=le[e(f)])!=null?Q:e(f):""}),ee=fe(()=>{var Q;return e(O)==="remote-openai"?((Q=t().engine.remote_openai)==null?void 0:Q.model)||"whisper-1":e(O)==="parakeet"&&e(v)?t().engine.parakeet.model_size:e(O)==="moonshine"&&e(u)?t().engine.moonshine.model_size:t().engine.whisper_cpp.model_size}),P=fe(()=>e(O)==="remote-openai"?e(C):e(O)==="parakeet"&&e(v)?!!e(m)[e(ee)]:e(O)==="moonshine"&&e(u)?!!e(b)[e(ee)]:!!e(_)[e(ee)]);function R(Q,X){var de;return Q!==e(O)?!1:X.id===(Q==="remote-openai"?((de=t().engine.remote_openai)==null?void 0:de.model)||"whisper-1":Q==="parakeet"?t().engine.parakeet.model_size:Q==="moonshine"?t().engine.moonshine.model_size:t().engine.whisper_cpp.model_size)}function te(Q,X){return Q==="remote-openai"?e(C):Q==="parakeet"?!!e(m)[X.id]:Q==="moonshine"?!!e(b)[X.id]:!!e(_)[X.id]}function Ae(Q){Cs(X=>{X.engine.backend=Q,Q==="remote-openai"&&!X.engine.remote_openai&&(X.engine.remote_openai={endpoint:"http://localhost:8000/v1",api_key:null,model:"whisper-1",language:"",timeout_secs:30})}),Ve.engineChosen=!0,Q==="remote-openai"&&(Ve.modelChosen=!0,l($,!0))}function Pe(Q,X){Cs(de=>{de.engine.backend=Q,Q==="parakeet"?de.engine.parakeet.model_size=X.id:Q==="moonshine"?de.engine.moonshine.model_size=X.id:Q==="remote-openai"?de.engine.remote_openai?de.engine.remote_openai.model=X.id:de.engine.remote_openai={endpoint:"http://localhost:8000/v1",api_key:null,model:X.id,language:"",timeout_secs:30}:de.engine.whisper_cpp.model_size=X.id}),l(M,null),Ve.engineChosen=!0,Ve.modelChosen=!0}function Y(){e(f)&&Cs(Q=>{Q.engine.whisper_cpp.device=e(re)?"cpu":"auto"})}async function B(){const Q=t().engine.whisper_cpp.model_dir,X={};for(const de of Ui[0].models)try{X[de.id]=await E("check_model_downloaded",{modelSize:de.id,modelDir:Q})}catch(Ue){console.error("Wizard: whisper model check failed for",de.id,Ue),X[de.id]=!1}l(_,X,!0)}async function ge(){const Q={},X=Ui.find(de=>de.id==="moonshine");if(X)for(const de of X.models)try{Q[de.id]=await E("check_moonshine_downloaded",{modelSize:de.id})}catch(Ue){console.error("Wizard: moonshine model check failed for",de.id,Ue),Q[de.id]=!1}l(b,Q,!0)}async function ae(){const Q={},X=Ui.find(de=>de.id==="parakeet");if(X)for(const de of X.models)try{Q[de.id]=await E("check_parakeet_downloaded",{modelSize:de.id})}catch(Ue){console.error("Wizard: parakeet model check failed for",de.id,Ue),Q[de.id]=!1}l(m,Q,!0)}async function G(){if(e(O)==="remote-openai")return e(C)?!0:(a.setBlocker(d,"Test the remote connection successfully to continue."),l($,!0),!1);if(e(P))return!0;const Q=e(O),X=e(ee);l(h,X,!0),l(M,null);try{return Q==="parakeet"&&e(v)?(await E("download_parakeet_model",{modelSize:X}),l(m,{...e(m),[X]:!0},!0)):Q==="moonshine"&&e(u)?(await E("download_moonshine_model",{modelSize:X}),l(b,{...e(b),[X]:!0},!0)):(await E("download_model",{modelSize:X,modelDir:t().engine.whisper_cpp.model_dir}),l(_,{...e(_),[X]:!0},!0)),Ve.clearIssue("model-download"),!0}catch(de){return l(M,`${de}`),Ve.recordIssue({id:"model-download",step:d,title:`Speech model "${X}" could not be downloaded — dictation will produce no text.`,detail:`engine=${Q} model=${X} model_dir=${t().engine.whisper_cpp.model_dir||"(default)"} -${de}`}),!1}finally{l(h,null)}}ka(()=>{e(h)?a.setBlocker(d,`Downloading ${e(h)}…`):e(A)?e(O)==="remote-openai"&&!e(C)?a.setBlocker(d,"Test the remote connection successfully to continue."):e(P)?a.setBlocker(d,null):Ve.engineChosen?Ve.modelChosen?a.setBlocker(d,null):a.setBlocker(d,"Choose a model size to continue."):a.setBlocker(d,"Choose a transcription engine to continue."):a.setBlocker(d,"Checking which models are already on disk…")});async function ue(){l(A,!1),await Promise.all([B(),ge(),ae()]),l(A,!0)}Zt(()=>(a.registerGate(d,G),E("moonshine_available").then(Q=>l(u,Q,!0)).catch(()=>l(u,!1)),E("parakeet_available").then(Q=>l(v,Q,!0)).catch(()=>l(v,!1)),E("accelerator_support").then(Q=>{var X;return l(f,(X=Q==null?void 0:Q.whisper_gpu)!=null?X:null,!0)}).catch(()=>l(f,null)),ue(),()=>{a.registerGate(d,null),a.setBlocker(d,null)}));function Se(Q){var st,it;if(Q.id==="remote-openai")return{model:{id:((st=t().engine.remote_openai)==null?void 0:st.model)||"whisper-1",mb:0,speed:.95,accuracy:.95},rows:[{label:"speed",pct:95,value:"network",color:"var(--vx-cyan-0)",dim:!1},{label:"accuracy",pct:95,value:"server",color:"var(--vx-cyan-2)",dim:!1},{label:"RAM",pct:2,value:"offloaded",color:"var(--vx-gold-1)",dim:!1},{label:"VRAM",pct:0,value:"0 MB",color:"var(--vx-gold-0)",dim:!0}],quiet:Wi(12,.95),noisy:Wi(12,.92),quietPct:"server",noisyPct:"server"};const X=Q.id==="parakeet"?t().engine.parakeet.model_size:Q.id==="moonshine"?t().engine.moonshine.model_size:t().engine.whisper_cpp.model_size,de=(it=Q.models.find(Ke=>Ke.id===X))!=null?it:Q.models[0],Ue=Q.gpu&&e(re),Ce=Math.min(1,de.speed+(Ue?.3:0)),Fe=Ue?de.mb*.3:de.mb,We=Ue?de.mb*1.1:0;return{model:de,rows:[{label:"speed",pct:Math.round(Ce*100),value:$h(Ce),color:"var(--vx-cyan-0)",dim:!1},{label:"accuracy",pct:Math.round(de.accuracy*100),value:tr(de.accuracy),color:"var(--vx-cyan-2)",dim:!1},{label:"RAM",pct:Math.max(2,Math.min(100,Math.round(Fe/3400*100))),value:$n(Fe),color:"var(--vx-gold-1)",dim:!1},{label:"VRAM",pct:We?Math.max(2,Math.min(100,Math.round(We/3400*100))):0,value:We?$n(We):Q.gpu?"off":"cpu only",color:"var(--vx-gold-0)",dim:!We}],quiet:Wi(12,de.accuracy),noisy:Wi(12,de.accuracy*Q.noiseRetention),quietPct:tr(de.accuracy),noisyPct:tr(de.accuracy*Q.noiseRetention)}}var ie=xg(),q=n(ie),J=i(n(q),2);let ye;var _e=n(J);let oe;var W=i(_e,2),ve=n(W),I=i(n(ve),2);let H;var se=n(I);{var Ee=Q=>{var X=je("UNAVAILABLE · CPU BUILD");c(Q,X)},Re=Q=>{var X=je();w(()=>{var de;return y(X,`ON · ${(de=e(me))!=null?de:""}`)}),c(Q,X)},he=Q=>{var X=je("OFF · CPU");c(Q,X)};x(se,Q=>{e(f)?e(re)?Q(Re,1):Q(he,-1):Q(Ee)})}var ne=i(ve,2),xe=n(ne);{var Je=Q=>{var X=je(`Moves whisper.cpp weights from RAM to your GPU: faster, less RAM, uses VRAM. Moonshine is - CPU-native and unaffected.`);c(Q,X)},ke=Q=>{var X=je(`This build has no GPU backend compiled in, so both engines run on the CPU. The Vulkan - download accelerates whisper.cpp; Moonshine is CPU-native either way.`);c(Q,X)};x(xe,Q=>{e(f)?Q(Je):Q(ke,-1)})}var D=i(q,2);_t(D,21,()=>Ui,ht,(Q,X)=>{const de=fe(()=>Se(e(X))),Ue=fe(()=>e(O)===e(X).id);var Ce=fg();let Fe;var We=i(n(Ce),2),st=n(We),it=n(st),Ke=n(it),rt=i(it,2),ct=n(rt),nt=i(st,2),De=n(nt),Ge=i(nt,2);{var lt=g=>{var T=ig();c(g,T)},U=g=>{var T=rg();c(g,T)};x(Ge,g=>{e(X).id==="moonshine"&&!e(u)?g(lt):e(X).id==="parakeet"&&!e(v)&&g(U,1)})}var K=i(We,2),be=n(K);{var Be=g=>{var T=og(),Te=i(mt(T),2),we=n(Te),ze=i(n(we),2),qe=n(ze),Ne=i(we,2),at=i(n(Ne),2),tt=n(at),Vt=i(Ne,2),Xt=i(n(Vt),2);let ea;var Kt=n(Xt);{var Dt=It=>{var Gt=je("✔ Verified");c(It,Gt)},fa=It=>{var Gt=je("⚠️ Untested");c(It,Gt)};x(Kt,It=>{e(C)?It(Dt):It(fa,-1)})}var Qt=i(Te,2),ya=n(Qt);let Pa;var Ja=n(ya);{var bt=It=>{var Gt=je("⚙ Configure Server");c(It,Gt)},Wt=It=>{var Gt=je("⚡ Setup & Test");c(It,Gt)};x(Ja,It=>{e(C)?It(bt):It(Wt,-1)})}var _a=i(Qt,2);_t(_a,21,()=>e(de).rows,ht,(It,Gt)=>{var za=lg();let La;var Za=n(za),ms=n(Za),bs=n(ms),rn=i(ms),ln=n(rn),on=i(Za,2),kt=n(on);let Mt;w(()=>{var Xe;La=Me(za,1,"metric svelte-xv54mf",null,La,{dim:e(Gt).dim}),y(bs,e(Gt).label),y(ln,e(Gt).value),Mt=va(kt,"",Mt,{width:`${(Xe=e(Gt).pct)!=null?Xe:""}%`,background:e(Gt).color})}),c(It,za)}),w(()=>{var It,Gt,za;Tt(ze,"title",((It=t().engine.remote_openai)==null?void 0:It.endpoint)||"http://localhost:8000/v1"),y(qe,((Gt=t().engine.remote_openai)==null?void 0:Gt.endpoint)||"http://localhost:8000/v1"),y(tt,((za=t().engine.remote_openai)==null?void 0:za.model)||"whisper-1"),ea=Me(Xt,1,"remote-v svelte-xv54mf",null,ea,{"remote-v-ok":e(C),"remote-v-warn":!e(C)}),Pa=Me(ya,1,"vx-btn vx-btn-sm remote-cfg-btn svelte-xv54mf",null,Pa,{"vx-primary":!e(C)})}),L("click",ya,It=>{It.stopPropagation(),Ae("remote-openai"),l($,!0)}),c(g,T)},Ye=g=>{var T=vg(),Te=i(mt(T),2);_t(Te,21,()=>e(X).models,ht,(ze,qe)=>{var Ne=cg();let at;var tt=n(Ne),Vt=n(tt),Xt=i(tt,2),ea=n(Xt);w((Kt,Dt,fa)=>{at=Me(Ne,1,"size svelte-xv54mf",null,at,Kt),y(Vt,e(qe).id),y(ea,`${Dt!=null?Dt:""}${fa!=null?fa:""}`)},[()=>({on:R(e(X).id,e(qe))}),()=>$n(e(qe).mb),()=>te(e(X).id,e(qe))?" ✔":""]),L("click",Ne,Kt=>{Kt.stopPropagation(),Pe(e(X).id,e(qe))}),c(ze,Ne)});var we=i(Te,2);_t(we,21,()=>e(de).rows,ht,(ze,qe)=>{var Ne=dg();let at;var tt=n(Ne),Vt=n(tt),Xt=n(Vt),ea=i(Vt),Kt=n(ea),Dt=i(tt,2),fa=n(Dt);let Qt;w(()=>{var ya;at=Me(Ne,1,"metric svelte-xv54mf",null,at,{dim:e(qe).dim}),y(Xt,e(qe).label),y(Kt,e(qe).value),Qt=va(fa,"",Qt,{width:`${(ya=e(qe).pct)!=null?ya:""}%`,background:e(qe).color})}),c(ze,Ne)}),c(g,T)};x(be,g=>{e(X).id==="remote-openai"?g(Be):g(Ye,-1)})}var St=i(K,2),na=n(St),ft=n(na),Rt=i(n(ft)),Et=n(Rt),At=i(ft,2);_t(At,21,()=>e(de).quiet,ht,(g,T)=>{var Te=ug();let we;w(()=>{var ze;return we=va(Te,"",we,{height:`${(ze=e(T).h)!=null?ze:""}%`,opacity:e(T).o})}),c(g,Te)});var ia=i(na,2),Ut=n(ia),Oe=i(n(Ut)),Ze=n(Oe),j=i(Ut,2);_t(j,21,()=>e(de).noisy,ht,(g,T)=>{var Te=pg();let we;w(()=>{var ze;return we=va(Te,"",we,{height:`${(ze=e(T).h)!=null?ze:""}%`,opacity:e(T).o})}),c(g,Te)}),w(()=>{Fe=Me(Ce,1,"vx-card engine-card svelte-xv54mf",null,Fe,{"vx-on":e(Ue)}),Tt(Ce,"aria-checked",e(Ue)),y(Ke,e(X).glyph),y(ct,e(X).name),y(De,e(X).tagline),y(Et,e(de).quietPct),y(Ze,e(de).noisyPct)}),L("click",Ce,()=>{Ae(e(X).id),e(X).id==="remote-openai"&&l($,!0)}),L("keydown",Ce,g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),Ae(e(X).id),e(X).id==="remote-openai"&&l($,!0))}),c(Q,Ce)});var k=i(D,2),V=n(k);{var z=Q=>{var X=_g(),de=i(n(X));w(()=>{var Ue;return y(de,` Downloading ${(Ue=e(h))!=null?Ue:""} — this can take a few minutes`)}),c(Q,X)},Z=Q=>{var X=hg(),de=n(X);w(()=>{var Ue;return y(de,`✕ Download failed: ${(Ue=e(M))!=null?Ue:""}`)}),c(Q,X)},pe=Q=>{var X=gg();c(Q,X)},ce=Q=>{var X=Vi(),de=mt(X);{var Ue=Fe=>{var We=mg(),st=n(We);w(()=>{var it;return y(st,`✓ Remote engine connected (${(it=e(ee))!=null?it:""})`)}),c(Fe,We)},Ce=Fe=>{var We=bg();c(Fe,We)};x(de,Fe=>{e(C)?Fe(Ue):Fe(Ce,-1)})}c(Q,X)},Ie=Q=>{var X=yg(),de=n(X);w(()=>{var Ue;return y(de,`✓ ${(Ue=e(ee))!=null?Ue:""} is on disk and ready`)}),c(Q,X)},Qe=Q=>{var X=wg();c(Q,X)},ot=Q=>{var X=kg(),de=n(X);w(()=>{var Ue;return y(de,`↓ ${(Ue=e(ee))!=null?Ue:""} will download when you continue`)}),c(Q,X)};x(V,Q=>{e(h)?Q(z):e(M)?Q(Z,1):e(A)?e(O)==="remote-openai"?Q(ce,3):e(P)?Q(Ie,4):!Ve.engineChosen||!Ve.modelChosen?Q(Qe,5):Q(ot,-1):Q(pe,2)})}var et=i(k,2);ng(et,{onSuccess:()=>{l(C,!0)},get isOpen(){return e($)},set isOpen(Q){l($,Q,!0)}}),w(()=>{ye=Me(J,1,"vx-card gpu-toggle svelte-xv54mf",null,ye,{"vx-on":e(re)}),J.disabled=!e(f),oe=Me(_e,1,"switch svelte-xv54mf",null,oe,{on:e(re)}),H=Me(I,1,"state svelte-xv54mf",null,H,{on:e(re)})}),L("click",J,Y),c(s,ie),Ot(),o()}pa(["click","keydown"]);var Sg=p("
        "),Eg=p("
        "),Cg=p(''),Ag=p('
        '),Mg=p('
        '),Pg=p('+'),Dg=p("
        ",1),Ig=p('
        '),zg=p(' Asking…',1),Lg=p('
        '),Og=p('
        '),Rg=p(`
        // 02 · first key binding

        How do you want to start talking?

        Pick a gesture, then record the keys. Taps keep your hands free while speaking; holds can't be - left running by accident. Double-taps avoid clashes with shortcuts you already use.

        `);function Ng(s,a){Lt(a,!0);const t=2;let r=S(null),o=S(!1),d=S(null);const u=fe(()=>{var W,ve;return(ve=(W=e(r))==null?void 0:W.supported_gestures)!=null&&ve.length?Vn.filter(I=>e(r).supported_gestures.includes(I.id)):Vn}),v=fe(()=>Vn.length-e(u).length),f=fe(()=>{var W;return((W=e(r))==null?void 0:W.is_active)===!0}),_=fe(()=>!!Ve.combo&&Ve.combo.length>0&&e(r)!==null&&!e(r).is_active),b=fe(()=>Ve.recording&&Wh(Ve.held)?"Keep holding and add a regular key — modifiers alone cannot be a shortcut.":null);async function m(){try{l(r,await E("check_hotkey_status"),!0),e(r).is_active&&Ve.clearIssue("shortcut-register")}catch(W){console.error("Wizard: failed to read hotkey status:",W)}}function h(){Ve.recording=!0,Ve.held=[],Ve.captureHint=null,E("set_hotkeys_inhibited",{inhibited:!0}).catch(()=>{})}function M(){Ve.recording=!1,Ve.held=[],E("set_hotkeys_inhibited",{inhibited:!1}).catch(()=>{})}async function A(W){var I;if(W.length===0)return;let ve;try{ve=await E("check_hotkey_keys",{keys:W})}catch(H){console.error("Wizard: hotkey validation failed:",H),Ve.combo=[...W];return}ve.accepted?(Ve.combo=[...W],Ve.captureHint=null,await O()):Ve.captureHint=(I=ve.message)!=null?I:"This key combination cannot be used as a shortcut. Try another."}function $(W){if(!Ve.recording)return;W.preventDefault(),W.stopPropagation();const ve=qh(W.key,W.code);if(W.key==="Escape"&&Ve.held.length===0){M();return}Ve.held.includes(ve)||(Ve.held=[...Ve.held,ve])}function C(W){if(!Ve.recording)return;W.preventDefault(),W.stopPropagation();const ve=[...Ve.held];M(),A(ve)}async function O(){var W;try{await Ve.saveBinding()}catch(ve){console.error("Wizard: failed to save binding:",ve),l(d,`Could not save the binding: ${ve}`),Ve.recordIssue({id:"binding-save",step:t,title:"The hotkey binding could not be written — no shortcut will start dictation.",detail:`keys=${((W=Ve.combo)!=null?W:[]).join("+")} gesture=${Ve.gesture} -${ve}`});return}Ve.clearIssue("binding-save"),await m()}async function le(){var W,ve,I,H,se,Ee;l(o,!0),l(d,null);try{l(r,await E("approve_shortcuts"),!0)}catch(Re){l(d,`${Re}`),Ve.recordIssue({id:"shortcut-register",step:t,title:"Your desktop refused to register the global shortcut.",detail:`backend=${(ve=(W=e(r))==null?void 0:W.backend)!=null?ve:"unknown"} portal_refused=${(H=(I=e(r))==null?void 0:I.portal_refused)!=null?H:"?"} -portal_error=${(Ee=(se=e(r))==null?void 0:se.portal_error)!=null?Ee:"(none)"} -${Re}`}),await m()}finally{l(o,!1)}}async function re(){try{await E("open_shortcut_settings")}catch(W){l(d,`${W}`)}}ka(()=>{let W=null;Ve.recording?W="Press the keys you want to use.":!Ve.combo||Ve.combo.length===0?W="Record a key combination first.":e(_)&&(W="Register the shortcut with your desktop to continue."),a.setBlocker(t,W)}),ka(()=>{const W=e(u);W.length>0&&!W.some(ve=>ve.id===Ve.gesture)&&(Ve.gesture=W[0].id)}),Zt(()=>{a.registerGate(t,async()=>{var I;return await O(),((I=e(r))==null?void 0:I.is_active)!==!1}),Ve.loadBinding(),m();const W=oa("setup-status-changed",()=>void m()),ve=setInterval(()=>{Ve.recording||m()},3e3);return window.addEventListener("keydown",$,!0),window.addEventListener("keyup",C,!0),()=>{clearInterval(ve),W.then(I=>I()).catch(()=>{}),window.removeEventListener("keydown",$,!0),window.removeEventListener("keyup",C,!0),Ve.recording&&M(),a.registerGate(t,null),a.setBlocker(t,null)}});const me=fe(()=>{var W,ve,I,H;return Ve.recording?{label:"listening for keys",hint:(ve=(W=Ve.captureHint)!=null?W:e(b))!=null?ve:"Hold one or more modifiers, then press a key. Esc to cancel.",tone:"rec"}:Ve.combo&&Ve.combo.length>0?{label:"binding captured",hint:(I=Ve.captureHint)!=null?I:"Click anywhere in this area to record a different combination.",tone:"done"}:{label:"click to record",hint:(H=Ve.captureHint)!=null?H:"Needs at least one modifier (Ctrl, Alt, Shift or Super) plus a regular key — e.g. Super + Space.",tone:"idle"}});var ee=Rg(),P=i(n(ee),2),R=n(P),te=n(R);_t(te,17,()=>e(u),ht,(W,ve)=>{const I=fe(()=>Ve.gesture===e(ve).id);var H=Cg();let se;var Ee=n(H),Re=n(Ee),he=n(Re),ne=i(Re,2),xe=n(ne),Je=i(Ee,2),ke=n(Je),D=i(n(ke),2);_t(D,21,()=>e(ve).key,ht,(z,Z)=>{var pe=fe(()=>El(e(Z),2));let ce=()=>e(pe)[0],Ie=()=>e(pe)[1];var Qe=Sg();let ot,et;w(()=>{ot=Me(Qe,1,"svelte-1fbfhk3",null,ot,{on:Ie()&&e(I),lit:Ie()}),et=va(Qe,"",et,{flex:ce()})}),c(z,Qe)});var k=i(ke,2),V=i(n(k),2);_t(V,21,()=>e(ve).mic,ht,(z,Z)=>{var pe=fe(()=>El(e(Z),2));let ce=()=>e(pe)[0],Ie=()=>e(pe)[1];var Qe=Eg();let ot,et;w(()=>{ot=Me(Qe,1,"svelte-1fbfhk3",null,ot,{on:Ie()&&e(I),lit:Ie()}),et=va(Qe,"",et,{flex:ce()})}),c(z,Qe)}),w(()=>{se=Me(H,1,"vx-card gesture svelte-1fbfhk3",null,se,{"vx-on":e(I)}),y(he,e(ve).name),y(xe,e(ve).desc)}),L("click",H,()=>Ve.gesture=e(ve).id),c(W,H)});var Ae=i(te,2);{var Pe=W=>{var ve=Ag(),I=n(ve);w(()=>{var H;return y(I,`${(H=e(v))!=null?H:""} gesture${e(v)===1?"":"s"} hidden — this desktop's shortcut - backend only tells VoxCtrl that a shortcut fired, so it cannot time a hold.`)}),c(W,ve)};x(Ae,W=>{e(v)>0&&W(Pe)})}var Y=i(R,2),B=n(Y);let ge;var ae=n(B);{var G=W=>{var ve=Mg();c(W,ve)};x(ae,W=>{Ve.recording&&W(G)})}var ue=i(ae,2),Se=i(n(ue),1,!0),ie=i(ue,2);_t(ie,21,()=>Ve.displayKeys,ht,(W,ve,I)=>{var H=Dg(),se=mt(H);let Ee;var Re=n(se),he=i(se,2);{var ne=xe=>{var Je=Pg();c(xe,Je)};x(he,xe=>{I{Ee=Me(se,1,"vx-keycap",null,Ee,{"vx-hot":Ve.recording||e(me).tone==="done"}),y(Re,xe)},[()=>xl(e(ve))]),c(W,H)});var q=i(ie,2);let J;var ye=n(q),_e=i(B,2);{var oe=W=>{var ve=Og();let I;var H=n(ve),se=n(H),Ee=i(H,2),Re=n(Ee),he=n(Re),ne=i(Re,2),xe=n(ne);{var Je=pe=>{var ce=je("The binding is registered system-wide. Continue to choose an overlay.");c(pe,ce)},ke=pe=>{var ce=je();w(()=>y(ce,e(r).portal_error)),c(pe,ce)},D=pe=>{var ce=je(`Wayland desktops ask you to confirm global shortcuts. Click below and approve the - dialog your desktop shows — you come straight back here.`);c(pe,ce)};x(xe,pe=>{var ce;e(f)?pe(Je):(ce=e(r))!=null&&ce.portal_error?pe(ke,1):pe(D,-1)})}var k=i(ne,2);{var V=pe=>{var ce=Ig(),Ie=n(ce);w(()=>y(Ie,e(d))),c(pe,ce)};x(k,pe=>{e(d)&&pe(V)})}var z=i(Ee,2);{var Z=pe=>{var ce=Lg(),Ie=n(ce),Qe=i(Ie,2),ot=n(Qe);{var et=X=>{var de=zg();c(X,de)},Q=X=>{var de=je("Register →");c(X,de)};x(ot,X=>{e(o)?X(et):X(Q,-1)})}w(()=>Qe.disabled=e(o)),L("click",Ie,re),L("click",Qe,le),c(pe,ce)};x(z,pe=>{e(f)||pe(Z)})}w(()=>{var pe,ce;I=Me(ve,1,"sys svelte-1fbfhk3",null,I,{ok:e(f)}),y(se,e(f)?"✓":"⌬"),y(he,e(f)?`Shortcuts are live (${(ce=(pe=e(r))==null?void 0:pe.backend)!=null?ce:"ready"})`:"Your desktop still needs to approve the shortcut")}),c(W,ve)};x(_e,W=>{Ve.combo&&Ve.combo.length>0&&W(oe)})}w(()=>{ge=Me(B,1,"recorder svelte-1fbfhk3",null,ge,{rec:e(me).tone==="rec",done:e(me).tone==="done"}),y(Se,e(me).label),J=Me(q,1,"rec-hint svelte-1fbfhk3",null,J,{bad:!!Ve.captureHint}),y(ye,e(me).hint)}),L("click",B,()=>Ve.recording?M():h()),c(s,ee),Ot()}pa(["click"]);const Fg="/assets/blue_wave-DGfyQFFo.webm",Vg="/assets/mono_bars-1wA0h3Fz.webm",$g="/assets/pulse-Cdnh-rAb.webm",Bg="/assets/spectrum-CLEHMZrI.webm",qg="/assets/terminal-CvV88uWw.webm",jg="/assets/vinyl-BG1f8NO1.webm",Ug="/assets/voice_card-BZZeHAB9.webm",Wg="/assets/waveform-DUI2x_EP.webm",Hg="/assets/blue_wave-OqjJ-fxD.webp",Kg="/assets/mono_bars-CPLx02Ku.webp",Gg="/assets/pulse-ESYJH4j2.webp",Yg="/assets/spectrum-DV9agKUG.webp",Jg="/assets/terminal-DhrByqCl.webp",Zg="/assets/vinyl-BfHn3C6g.webp",Xg="/assets/voice_card-QnCU8RiM.webp",Qg="/assets/waveform-B5-owbWT.webp";var em=p('
        '),tm=p('
        '),am=Uo(''),sm=p('
        '),nm=p('
        '),im=p('
        '),rm=p('
        > listening
        '),lm=p(''),om=p('',2),cm=p("
        ",1);function jl(s,a){Lt(a,!0);let t=Ft(a,"seed",3,1),r=Ft(a,"showClip",3,!0);const o=Object.assign({"../../assets/overlays/blue_wave.webm":Fg,"../../assets/overlays/mono_bars.webm":Vg,"../../assets/overlays/pulse.webm":$g,"../../assets/overlays/spectrum.webm":Bg,"../../assets/overlays/terminal.webm":qg,"../../assets/overlays/vinyl.webm":jg,"../../assets/overlays/voice_card.webm":Ug,"../../assets/overlays/waveform.webm":Wg}),d=Object.assign({"../../assets/overlays/blue_wave.webp":Hg,"../../assets/overlays/mono_bars.webp":Kg,"../../assets/overlays/pulse.webp":Gg,"../../assets/overlays/spectrum.webp":Yg,"../../assets/overlays/terminal.webp":Jg,"../../assets/overlays/vinyl.webp":Zg,"../../assets/overlays/voice_card.webp":Xg,"../../assets/overlays/waveform.webp":Qg});function u(Y,B){var ae;const ge=Object.entries(Y).find(([G])=>G.endsWith(`/${B}`));return(ae=ge==null?void 0:ge[1])!=null?ae:null}const v=(()=>{if(typeof document>"u")return!0;const Y=document.createElement("video");return Y.canPlayType('video/webm; codecs="av01.0.05M.08"')!==""||Y.canPlayType("video/webm")!==""})(),f=fe(()=>r()&&v?u(o,`${a.styleId}.webm`):null),_=fe(()=>u(d,`${a.styleId}.webp`));let b=S(!1);ka(()=>{e(f),l(b,!1)});const m=fe(()=>Array.from({length:14},(Y,B)=>{const ge=.3+.7*Math.abs(Math.sin(t()*2.3+B*1.3));return{h:Math.round(ge*100),delay:((B*.11+t()*.07)%1.1).toFixed(2),dur:(.9+B*5%4*.15).toFixed(2)}})),h=fe(()=>a.styleId==="pulse"?"ring":a.styleId==="vinyl"?"needle":a.styleId==="terminal"?"terminal":a.styleId==="waveform"||a.styleId==="blue_wave"?"wave":"bars"),M=fe(()=>a.styleId==="mono_bars");var A=cm(),$=mt(A);let C;var O=n($);{var le=Y=>{var B=tm();_t(B,21,()=>e(m).slice(0,a.styleId==="mono_bars"?5:14),ht,(ge,ae)=>{var G=em();let ue;w(()=>{var Se,ie,q;return ue=va(G,"",ue,{height:`${(Se=e(ae).h)!=null?Se:""}%`,"animation-delay":`${(ie=e(ae).delay)!=null?ie:""}s`,"animation-duration":`${(q=e(ae).dur)!=null?q:""}s`})}),c(ge,G)}),c(Y,B)},re=Y=>{var B=am();c(Y,B)},me=Y=>{var B=sm();c(Y,B)},ee=Y=>{var B=nm();c(Y,B)},P=Y=>{var B=rm(),ge=i(n(B),2);_t(ge,21,()=>e(m).slice(0,10),ht,(ae,G)=>{var ue=im();let Se;w(()=>{var ie;return Se=va(ue,"",Se,{"animation-delay":`${(ie=e(G).delay)!=null?ie:""}s`})}),c(ae,ue)}),c(Y,B)};x(O,Y=>{e(h)==="bars"?Y(le):e(h)==="wave"?Y(re,1):e(h)==="ring"?Y(me,2):e(h)==="needle"?Y(ee,3):Y(P,-1)})}var R=i($,2);{var te=Y=>{var B=lm();w(()=>Tt(B,"src",e(_))),c(Y,B)};x(R,Y=>{e(_)&&Y(te)})}var Ae=i(R,2);{var Pe=Y=>{var B=om();let ge;B.muted=!0,w(()=>{var ae;ge=Me(B,1,"clip svelte-y6l73v",null,ge,{ready:e(b)}),Tt(B,"src",e(f)),Tt(B,"poster",(ae=e(_))!=null?ae:void 0)}),Os("playing",B,()=>l(b,!0)),Os("error",B,()=>l(b,!1)),c(Y,B)};x(Ae,Y=>{e(f)&&Y(Pe)})}w(()=>C=Me($,1,"preview svelte-y6l73v",null,C,{mono:e(M)})),c(s,A),Ot()}var dm=p(''),vm=p(''),um=p(`
        // 03 · on-screen overlay

        Show a signal while listening?

        The overlay appears the moment your hotkey fires and shows live mic level plus the active - target — so you know VoxCtrl is hearing you, and where the words are going. Turn it off for - a silent setup.

        `);function pm(s,a){Lt(a,!0);const t=()=>la(Nt,"$config",r),[r,o]=Ma(),d=fe(()=>t().ui.show_overlay),u=fe(()=>t().ui.overlay_style),v=fe(()=>t().ui.overlay_position),f=fe(()=>{var ie;return(ie=Ln.find(q=>q.id===e(u)))!=null?ie:Ln[0]}),_=fe(()=>{var ie;return(ie={top:16,center:46,bottom:76}[e(v)])!=null?ie:46});function b(ie){Cs(q=>{q.ui.show_overlay=ie})}function m(ie){Cs(q=>{q.ui.overlay_style=ie,q.ui.show_overlay=!0})}function h(ie){Cs(q=>{q.ui.overlay_position=ie})}var M=um(),A=n(M),$=i(n(A),2),C=n($);let O;var le=i(C,2);let re;var me=i(A,2);let ee;var P=n(me),R=n(P),te=n(R),Ae=i(R,2);_t(Ae,21,()=>Ln,ht,(ie,q,J)=>{var ye=dm();let _e;var oe=n(ye),W=n(oe);{let Je=fe(()=>e(q).id===e(u));jl(W,{seed:J+1,get styleId(){return e(q).id},get showClip(){return e(Je)}})}var ve=i(oe,2),I=n(ve),H=n(I),se=n(H),Ee=i(H,2),Re=n(Ee),he=i(I,2);let ne;var xe=n(he);w(()=>{_e=Me(ye,1,"vx-card style-card svelte-ek86vh",null,_e,{"vx-on":e(q).id===e(u)}),y(se,e(q).name),y(Re,e(q).meta),ne=Me(he,1,"style-glyph svelte-ek86vh",null,ne,{on:e(q).id===e(u)}),y(xe,e(q).glyph)}),L("click",ye,()=>m(e(q).id)),c(ie,ye)});var Pe=i(P,2),Y=n(Pe),B=n(Y),ge=i(Y,2),ae=i(n(ge),4);let G;var ue=n(ae);{let ie=fe(()=>Ln.indexOf(e(f))+1);jl(ue,{get seed(){return e(ie)},get styleId(){return e(f).id},showClip:!0})}var Se=i(ge,2);_t(Se,21,()=>Fh,ht,(ie,q)=>{var J=vm();let ye;var _e=n(J),oe=n(_e),W=i(_e,1,!0);w(()=>{ye=Me(J,1,"pos svelte-ek86vh",null,ye,{on:e(q).id===e(v)}),y(oe,e(q).glyph),y(W,e(q).label)}),L("click",J,()=>h(e(q).id)),c(ie,J)}),w(()=>{var ie,q,J;O=Me(C,1,"vx-card mode svelte-ek86vh",null,O,{"vx-on":e(d)}),re=Me(le,1,"vx-card mode svelte-ek86vh",null,re,{"off-on":!e(d)}),ee=Me(me,1,"body svelte-ek86vh",null,ee,{muted:!e(d)}),y(te,`style · ${(ie=Ln.length)!=null?ie:""} built in`),y(B,`position · ${(q=e(v))!=null?q:""}`),G=va(ae,"",G,{top:`${(J=e(_))!=null?J:""}%`})}),L("click",C,()=>b(!0)),L("click",le,()=>b(!1)),c(s,M),Ot(),o()}pa(["click"]);var fm=p('+'),_m=p('
        ',1),hm=p('
        '),gm=p('
        '),mm=p('
        ✓
        It works.
        '),bm=p(`
        // 04 · live test

        Say something.

        Click into the box, then your binding and speak. Your words land where - the cursor is.

        ▸ test.txt
        Nothing happening? The overlay and tray icon show whether VoxCtrl heard the key. You can - continue and come back to this from Settings → Hotkeys at any time.
        `);function ym(s,a){Lt(a,!0);const t=()=>la(Nt,"$config",o),r=()=>la(xa,"$status",o),[o,d]=Ma();let u=S(null),v=S(""),f=S(0),_=S("idle"),b=0,m=0;const h=Qo(28),M=fe(()=>Ve.gestureInfo),A=fe(()=>{var H;return(H=Ve.combo)!=null?H:[]}),$=fe(()=>{var H;return t().engine.backend==="remote-openai"?`Remote Speech Engine · ${((H=t().engine.remote_openai)==null?void 0:H.model)||"whisper-1"}`:t().engine.backend==="parakeet"?`Parakeet TDT · ${t().engine.parakeet.model_size}`:t().engine.backend==="moonshine"?`Moonshine · ${t().engine.moonshine.model_size}`:`whisper.cpp · ${t().engine.whisper_cpp.model_size} · ${t().engine.whisper_cpp.device==="cpu"?"cpu":"gpu/auto"}`}),C=fe(()=>({idle:"waiting for hotkey",recording:"recording",transcribing:"transcribing",success:"delivered"})[e(_)]);let O=!1;ka(()=>{const H=r();H.recording&&!O?(l(_,"recording"),b=performance.now(),m=e(v).length):!H.recording&&H.processing&&e(_)==="recording"&&l(_,"transcribing"),O=H.recording});function le(){if(!e(u))return;const H=e(u).value,se=H.length>m&&H.trim().length>0;l(v,H,!0),se&&(e(_)==="recording"||e(_)==="transcribing")&&(l(f,Math.max(1,Math.round(performance.now()-b)),!0),l(_,"success"))}function re(){l(_,"idle"),l(v,""),m=0,e(u)&&(e(u).value="",e(u).focus())}Zt(()=>{setTimeout(()=>{var H;return(H=e(u))==null?void 0:H.focus()},60)});var me=bm(),ee=n(me),P=n(ee),R=i(n(P),4),te=i(n(R)),Ae=n(te),Pe=i(P,2),Y=n(Pe);_t(Y,17,()=>e(A),ht,(H,se,Ee)=>{var Re=_m(),he=mt(Re),ne=n(he),xe=i(he,2);{var Je=ke=>{var D=fm();c(ke,D)};x(xe,ke=>{Eey(ne,ke),[()=>xl(e(se))]),c(H,Re)});var B=i(Y,2),ge=n(B),ae=i(ee,2);let G;var ue=n(ae),Se=i(n(ue),2),ie=i(n(Se),1,!0),q=i(ue,2);gl(q,H=>l(u,H),()=>e(u));var J=i(q,2);{var ye=H=>{var se=gm();_t(se,21,()=>h,ht,(Ee,Re)=>{var he=hm();let ne;w(()=>{var xe,Je;return ne=va(he,"",ne,{"animation-duration":`${(xe=e(Re).d)!=null?xe:""}s`,"animation-delay":`${(Je=e(Re).dl)!=null?Je:""}s`})}),c(Ee,he)}),c(H,se)};x(J,H=>{(e(_)==="recording"||e(_)==="transcribing")&&H(ye)})}var _e=i(J,2);{var oe=H=>{var se=mm(),Ee=n(se),Re=i(n(Ee),4),he=n(Re),ne=i(Re,2);w(()=>{var xe;return y(he,`Transcribed${t().engine.backend==="remote-openai"?" via Remote Speech Engine":" on-device"} in ${(xe=e(f))!=null?xe:""} ms · delivered via inject`)}),L("click",ne,re),c(H,se)};x(_e,H=>{e(_)==="success"&&H(oe)})}var W=i(ae,2),ve=i(n(W),2),I=n(ve);w(()=>{var H;y(Ae,e(M).verb),y(ge,e(M).name),G=Me(ae,1,"box svelte-oqvphh",null,G,{live:e(_)==="recording"||e(_)==="transcribing",won:e(_)==="success"}),Me(Se,1,`state ${(H=e(_))!=null?H:""}`,"svelte-oqvphh"),y(ie,e(C)),y(I,e($))}),L("input",q,le),c(s,me),Ot(),d()}pa(["input","click"]);var wm=p('
        '),km=p('■ Stop ',1),xm=p('▶ play sample',1),Tm=p('Speaking sample aloud…'),Sm=p('Downloading voice…'),Em=p('Locked (token required)'),Cm=p('Ready for playback'),Am=p('Download voice first'),Mm=p('
        ⚠ Non-commercial license:
        '),Pm=p(''),Dm=p('
        bundled · zero download
        '),Im=p(''),zm=p('
        '),Lm=p(''),Om=p('
        '),Rm=p('Needs a HuggingFace access token — enter one above to unlock this voice.'),Nm=p(' '),Fm=p(`Already downloaded — the token is only needed to fetch the weights, so this voice - works without one.`),Vm=p('This build was compiled without the `inflect-micro` feature, so this engine cannot\n synthesize.'),$m=p('
        '),Bm=p('
        '),qm=p(`
        // 05 · text to speech · optional

        Should VoxCtrl talk back?

        Agents can stream replies back through a response pipe and VoxCtrl speaks them aloud. Richer - voices need bigger models and more time per sentence; lighter engines answer instantly.

        HuggingFace access token optional — speeds up downloads if you have one
        `);function jm(s,a){Lt(a,!0);const t=()=>la(Nt,"$config",r),[r,o]=Ma(),d=5,u=fe(()=>t().tts.enabled),v=fe(()=>t().tts.engine),f=fe(()=>{var g;return(g=ks.find(T=>T.id===e(v)))!=null?g:ks[0]});let _=S(wt({espeak:!0})),b=S(wt({})),m=S(null),h=S(wt({})),M=S(!0),A=S(null);const $=fe(()=>!!e(A)),C=fe(()=>{var g,T;return(T=e(A))!=null?T:((g=t().tts.hf_token)!=null?g:"").trim()}),O=fe(()=>e(C).length>0),le=ks.filter(g=>g.needsHfToken);function re(g){e($)||(l(ee,!1),Cs(T=>{T.tts.hf_token=g.trim()?g.trim():null}))}function me(g){const T=ks.find(Te=>Te.id===g);return!!(T!=null&&T.needsHfToken)&&!e(O)&&!e(_)[g]}let ee=S(!1);const P="hf-token-rejected";function R(g){return`${g}`.toLowerCase().includes(P)}let te=S(null),Ae=S(null);const Pe=Qo(12);let Y=null,B=null,ge=0,ae=!1;const G=300,ue=1500,Se=3e4;function ie(){Y&&(clearTimeout(Y),Y=null),B&&(clearInterval(B),B=null)}function q(){l(te,null),ie()}async function J(){if(!e(te))return;let g;try{g=await E("get_status")}catch(T){console.error("Wizard: status poll failed:",T);return}if(g&&xa.set(g),g!=null&&g.speaking){ae=!0;return}(ae||Date.now()-ge>ue)&&q()}function ye(g,T){const Te={...e(h)};T?Te[g]=T:delete Te[g],l(h,Te,!0)}async function _e(g){var Te,we,ze,qe,Ne,at;const T=On(Nt);try{switch(g){case"espeak":return!0;case"piper":return await E("check_voice_downloaded",{voiceName:T.tts.voice,voiceDir:T.tts.voice_dir});case"pocket_tts":return await E("check_pocket_tts_ready",{voice:T.tts.pocket_tts.voice,voiceDir:T.tts.pocket_tts.voice_dir});case"inflect_micro":return await E("check_inflect_micro_downloaded",{modelDir:(we=(Te=T.tts.inflect_micro)==null?void 0:Te.model_dir)!=null?we:""});case"breeze_tts_2":return await E("check_breeze_tts_2_ready",{modelDir:(qe=(ze=T.tts.breeze_tts_2)==null?void 0:ze.model_dir)!=null?qe:""});case"vox_cpm_2":return await E("check_vox_cpm_2_ready",{modelDir:(at=(Ne=T.tts.vox_cpm_2)==null?void 0:Ne.model_dir)!=null?at:""})}}catch(tt){return console.error("Wizard: TTS readiness check failed for",g,tt),!1}}async function oe(){await Promise.all(ks.map(async g=>{l(b,{...e(b),[g.id]:!0},!0);const T=await _e(g.id);l(_,{...e(_),[g.id]:T},!0),l(b,{...e(b),[g.id]:!1},!0)}))}async function W(g){var Te,we,ze,qe,Ne,at,tt,Vt,Xt,ea,Kt,Dt;if(e(m))return;l(m,g,!0),ye(g,null);const T=On(Nt);try{switch(g){case"piper":await E("download_voice",{voiceName:T.tts.voice,voiceDir:T.tts.voice_dir});break;case"pocket_tts":await E("download_pocket_tts",{voice:(Te=T.tts.pocket_tts)==null?void 0:Te.voice,voiceDir:(we=T.tts.pocket_tts)==null?void 0:we.voice_dir,hfToken:T.tts.hf_token});break;case"inflect_micro":await E("download_inflect_micro",{modelDir:(qe=(ze=T.tts.inflect_micro)==null?void 0:ze.model_dir)!=null?qe:""});break;case"breeze_tts_2":await E("download_breeze_tts_2",{modelDir:(at=(Ne=T.tts.breeze_tts_2)==null?void 0:Ne.model_dir)!=null?at:"",hfToken:T.tts.hf_token});break;case"vox_cpm_2":await E("download_vox_cpm_2",{modelDir:(Vt=(tt=T.tts.vox_cpm_2)==null?void 0:tt.model_dir)!=null?Vt:"",hfToken:T.tts.hf_token});break;case"espeak":break}l(ee,!1),l(_,{...e(_),[g]:!0},!0),Ve.clearIssue(`tts-download-${g}`)}catch(fa){const Qt=ks.find(Pa=>Pa.id===g),ya=R(fa);ya&&l(ee,!0),ye(g,ya?`HuggingFace did not accept that access token, so ${(Xt=Qt==null?void 0:Qt.name)!=null?Xt:g} could not be downloaded. Check the token is a valid read token, and that the same account has accepted the licence at ${(ea=Qt==null?void 0:Qt.licenceUrl)!=null?ea:"huggingface.co"}.`:`${fa}`),Ve.recordIssue({id:`tts-download-${g}`,step:d,title:ya?`${(Kt=Qt==null?void 0:Qt.name)!=null?Kt:g} could not be downloaded — HuggingFace did not accept the access token.`:`${(Dt=Qt==null?void 0:Qt.name)!=null?Dt:g} could not be downloaded — speech output will stay silent.`,detail:`engine=${g} -${fa}`})}finally{l(m,null)}}const ve=["pocket_tts","breeze_tts_2","vox_cpm_2"],I=fe(()=>ve.includes(e(v))),H=fe(()=>e(v)==="pocket_tts"?t().tts.pocket_tts.gpu:e(v)==="breeze_tts_2"?t().tts.breeze_tts_2.gpu:e(v)==="vox_cpm_2"?t().tts.vox_cpm_2.gpu:!1);function se(g){Cs(T=>{e(v)==="pocket_tts"?T.tts.pocket_tts.gpu=g:e(v)==="breeze_tts_2"?T.tts.breeze_tts_2.gpu=g:e(v)==="vox_cpm_2"&&(T.tts.vox_cpm_2.gpu=g)})}function Ee(g){me(g)||Cs(T=>{T.tts.enabled=!0,T.tts.engine=g})}function Re(g){Cs(T=>{T.tts.enabled=g})}async function he(g){if(e(te)){q(),E("stop_tts").catch(()=>{});return}Ee(g),l(Ae,null),l(te,g,!0),ge=Date.now(),ae=!1,ie(),B=setInterval(()=>void J(),G),Y=setTimeout(()=>{q(),l(Ae,"The sample never finished playing. The engine may have failed silently — check Settings → TTS, or try another voice.")},Se);const T=On(Nt),Te=ks.find(ze=>ze.id===g),we=g==="piper"?T.tts.voice:g==="pocket_tts"?T.tts.pocket_tts.voice:null;try{await E("save_config",{newConfig:T}),await E("speak_text",{text:`Hi this is ${Te.name} speaking from VoxCtrl`,voice:we})}catch(ze){l(Ae,`${ze}`),q(),Ve.recordIssue({id:`tts-speak-${g}`,step:d,title:`${Te.name} failed to speak the sample.`,detail:`engine=${g} voice=${we!=null?we:"(fixed)"} -${ze}`})}}ka(()=>{var g;if(!e(u)){a.setBlocker(d,null);return}if(e(m)){a.setBlocker(d,`Downloading ${(g=ks.find(T=>T.id===e(m)))==null?void 0:g.name}…`);return}if(me(e(v))){a.setBlocker(d,"Enter a HuggingFace access token, or pick a voice that does not need one.");return}if(e(v)==="inflect_micro"&&!e(M)){a.setBlocker(d,"This build has no Inflect Micro engine — pick another voice or skip.");return}a.setBlocker(d,e(_)[e(v)]?null:"Download the voice you picked, or turn speech output off to continue.")}),Zt(()=>{oe(),E("hf_token_env").then(T=>l(A,T&&T.trim()?T.trim():null,!0)).catch(()=>l(A,null)),E("inflect_micro_available").then(T=>l(M,T,!0)).catch(()=>l(M,!1));const g=[oa("tts-playback-end",()=>q()),oa("tts-error",T=>{l(Ae,T.payload,!0),q(),Ve.recordIssue({id:"tts-runtime",step:d,title:"The text-to-speech engine reported an error while speaking.",detail:`engine=${On(Nt).tts.engine} -${T.payload}`})})];return()=>{a.setBlocker(d,null),ie();for(const T of g)T.then(Te=>Te()).catch(()=>{});E("stop_tts").catch(()=>{})}});const ne=fe(()=>!!e(_)[e(v)]),xe=fe(()=>me(e(v))),Je=fe(()=>e(v)==="inflect_micro"&&!e(M)),ke=fe(()=>e(ne)&&!e(Je)&&!e(xe)&&!e(m));var D=qm(),k=n(D),V=i(n(k),2),z=n(V);let Z;var pe=i(z,2);let ce;var Ie=i(k,2),Qe=n(Ie),ot=n(Qe);let et;var Q=n(ot);{var X=g=>{var T=km(),Te=i(mt(T),4);_t(Te,21,()=>Pe,ht,(we,ze)=>{var qe=wm();let Ne;w(()=>{var at,tt;return Ne=va(qe,"",Ne,{"animation-duration":`${(at=e(ze).d)!=null?at:""}s`,"animation-delay":`${(tt=e(ze).dl)!=null?tt:""}s`})}),c(we,qe)}),c(g,T)},de=g=>{var T=xm();c(g,T)};x(Q,g=>{e(te)?g(X):g(de,-1)})}var Ue=i(ot,2),Ce=n(Ue),Fe=n(Ce),We=i(Ce,2),st=n(We);{var it=g=>{var T=Tm();c(g,T)},Ke=g=>{var T=Sm();c(g,T)},rt=g=>{var T=Em();c(g,T)},ct=g=>{var T=Cm();c(g,T)},nt=g=>{var T=Am();c(g,T)};x(st,g=>{e(te)?g(it):e(m)?g(Ke,1):e(xe)?g(rt,2):e(ne)?g(ct,3):g(nt,-1)})}var De=i(Qe,2);let Ge;var lt=i(n(De),2),U=n(lt),K=i(U,2);let be;var Be=n(K);{var Ye=g=>{var T=je("did not accept this token");c(g,T)},St=g=>{var T=je("HF_TOKEN environment variable");c(g,T)},na=g=>{var T=je("✓ token saved");c(g,T)},ft=g=>{var T=je("token required for gated voices");c(g,T)};x(Be,g=>{e(ee)?g(Ye):e($)?g(St,1):e(O)?g(na,2):g(ft,-1)})}var Rt=i(Ie,2);{var Et=g=>{var T=Mm(),Te=i(n(T));w(()=>{var we;return y(Te,` ${(we=e(f).name)!=null?we:""} weights are released under a research/non-commercial license. Commercial - use requires a separate license from the model's publisher.`)}),c(g,T)};x(Rt,g=>{e(u)&&e(f).nonCommercial&&!e(_)[e(v)]&&g(Et)})}var At=i(Rt,2);{var ia=g=>{var T=Pm(),Te=n(T),we=i(Te,2),ze=n(we);w(()=>{var qe;qd(Te,e(H)),y(ze,`Vulkan GPU acceleration for ${(qe=e(f).name)!=null?qe:""}`)}),L("change",Te,qe=>se(qe.currentTarget.checked)),c(g,T)};x(At,g=>{e(u)&&e(I)&&g(ia)})}var Ut=i(At,2);let Oe;_t(Ut,21,()=>ks,ht,(g,T)=>{const Te=fe(()=>e(u)&&e(v)===e(T).id),we=fe(()=>!!e(_)[e(T).id]),ze=fe(()=>e(m)===e(T).id),qe=fe(()=>e(T).id==="inflect_micro"&&!e(M)),Ne=fe(()=>me(e(T).id));var at=$m();let tt;var Vt=n(at),Xt=n(Vt),ea=n(Xt),Kt=n(ea),Dt=i(ea,2),fa=n(Dt),Qt=i(Xt,2),ya=n(Qt),Pa=n(ya),Ja=i(Vt,2),bt=n(Ja);{var Wt=kt=>{var Mt=Dm();c(kt,Mt)},_a=kt=>{var Mt=Im();c(kt,Mt)},It=kt=>{var Mt=zm(),Xe=n(Mt);w(pt=>y(Xe,`✓ Downloaded (${pt!=null?pt:""})`),[()=>$n(e(T).mb)]),c(kt,Mt)},Gt=kt=>{var Mt=Lm(),Xe=n(Mt);w(pt=>{Mt.disabled=!!e(m)||e(qe)||e(Ne),y(Xe,`↓ Download ${pt!=null?pt:""}`)},[()=>$n(e(T).mb)]),L("click",Mt,pt=>{pt.stopPropagation(),W(e(T).id)}),c(kt,Mt)};x(bt,kt=>{e(T).mb===0?kt(Wt):e(ze)?kt(_a,1):e(we)?kt(It,2):kt(Gt,-1)})}var za=i(Ja,2);_t(za,21,()=>[{label:"quality",pct:Math.round(e(T).quality*100),value:tr(e(T).quality),color:"var(--vx-cyan-0)"},{label:"speed",pct:Math.round(e(T).speed*100),value:Bh(e(T).speed),color:"var(--vx-cyan-2)"},{label:"model size",pct:Vh(e(T).mb),value:$n(e(T).mb),color:"var(--vx-gold-1)"}],ht,(kt,Mt)=>{var Xe=Om(),pt=n(Xe),$t=n(pt),Yt=n($t),Ca=i($t),wa=n(Ca),Ua=i(pt,2),Ta=n(Ua);let Wa;w(()=>{var is;y(Yt,e(Mt).label),y(wa,e(Mt).value),Wa=va(Ta,"",Wa,{width:`${(is=e(Mt).pct)!=null?is:""}%`,background:e(Mt).color})}),c(kt,Xe)});var La=i(za,2),Za=n(La);{var ms=kt=>{var Mt=Rm();c(kt,Mt)},bs=kt=>{var Mt=Nm(),Xe=n(Mt);w(()=>y(Xe,e(h)[e(T).id])),c(kt,Mt)},rn=kt=>{var Mt=Fm();c(kt,Mt)},ln=kt=>{var Mt=Vm();c(kt,Mt)},on=kt=>{var Mt=je();w(()=>y(Mt,e(T).note)),c(kt,Mt)};x(Za,kt=>{e(Ne)?kt(ms):e(h)[e(T).id]?kt(bs,1):e(T).needsHfToken&&!e(O)&&e(we)?kt(rn,2):e(qe)?kt(ln,3):kt(on,-1)})}w(()=>{tt=Me(at,1,"vx-card card svelte-1yghr3b",null,tt,{"vx-on":e(Te),locked:e(Ne)}),Tt(at,"aria-disabled",e(Ne)),Tt(at,"aria-checked",e(Te)),y(Kt,e(T).name),y(fa,e(T).kind),y(Pa,e(Te)?"✓":"")}),L("click",at,()=>Ee(e(T).id)),L("keydown",at,kt=>{(kt.key==="Enter"||kt.key===" ")&&(kt.preventDefault(),Ee(e(T).id))}),c(g,at)});var Ze=i(Ut,2);{var j=g=>{var T=Bm(),Te=n(T);w(()=>{var we;return y(Te,`⚠ ${(we=e(Ae))!=null?we:""}`)}),c(g,T)};x(Ze,g=>{e(Ae)&&g(j)})}w(g=>{var T;Z=Me(z,1,"vx-card mode svelte-1yghr3b",null,Z,{"vx-on":e(u)}),ce=Me(pe,1,"vx-card mode svelte-1yghr3b",null,ce,{"off-on":!e(u)}),et=Me(ot,1,"vx-btn audition-btn svelte-1yghr3b",null,et,{playing:!!e(te)}),ot.disabled=!e(ke)&&!e(te),Tt(ot,"title",e(te)?"Stop":e(ne)?"Play a sample":e(xe)?"Needs a HuggingFace access token":"Download this voice first"),y(Fe,`Audition: ${(T=e(f).name)!=null?T:""}`),Ge=Me(De,1,"hf-bar svelte-1yghr3b",null,Ge,g),U.readOnly=e($),Tt(U,"title",e($)?"Set by the HF_TOKEN environment variable":"Enter a HuggingFace read token for gated models"),br(U,e(C)),be=Me(K,1,"hf-state svelte-1yghr3b",null,be,{ok:e(O)&&!e(ee),bad:e(ee)}),Oe=Me(Ut,1,"grid svelte-1yghr3b",null,Oe,{muted:!e(u)})},[()=>({needed:e(u)&&(e(ee)||le.some(g=>me(g.id)))})]),L("click",z,()=>Re(!0)),L("click",pe,()=>Re(!1)),L("click",ot,()=>{e(te)?(q(),E("stop_tts").catch(()=>{})):he(e(v))}),L("input",U,g=>re(g.currentTarget.value)),c(s,D),Ot(),o()}pa(["click","input","change","keydown"]);const Um="/assets/record_off-DqBdWxcg.png";var Wm=p('VoxCtrl is ready.',1),Hm=p('Setup is incomplete.',1),Km=p('
        '),Gm=Uo(''),Ym=p('
        '),Jm=p('
        click me ↓
        '),Zm=p(`
        where everything lives
        Every choice is editable
        Nothing you picked here is locked in. Settings holds the same options plus the ones the - wizard skipped — output targets, per-binding LLM cleanup, audio devices and the MCP server.
        • ⌁ Hotkeys gestures & bindings
        • ∇ Engine model & device
        • ⌬ Visual overlay style & position
        • ⊕ TTS voice output
        • ⊳ Output Commands where text goes
        `),Xm=p(''),Qm=p('
         
        '),eb=p(''),tb=p('
        '),ab=p('
        What still needs fixing
        '),sb=p('

        system tray
        Find VoxCtrl in the tray
        Click the icon to open Settings, diagnostics, or toggle TTS memory. Try it:
        📶 🔊 ᛒ
        ⌃
        ');function nb(s,a){Lt(a,!0);const t=()=>la(Nt,"$config",r),[r,o]=Ma();let d=S(!1),u=S(!1),v=S(!0),f=S(!1),_=S(null),b=S(null),m=S(!1);async function h(){l(m,!0);try{l(b,await E("get_setup_status"),!0)}catch(k){console.error("Wizard: could not read setup status:",k),l(b,null)}finally{l(m,!1)}}const M=fe(()=>{var V;if(!e(b))return[];const k=[];return e(b).hotkeys_active||k.push({id:"sys-hotkeys",step:2,title:"No global shortcut is active — pressing your hotkey will do nothing.",detail:`backend=${e(b).hotkeys.backend} portal_refused=${e(b).hotkeys.portal_refused} -portal_error=${(V=e(b).hotkeys.portal_error)!=null?V:"(none)"}`}),!e(b).model_ready&&!e(b).model_auto_downloads&&k.push({id:"sys-model",step:1,title:`Speech model "${e(b).model_size}" is not on disk — dictation will record but produce no text.`,detail:`model_size=${e(b).model_size} model_ready=false auto_downloads=${e(b).model_auto_downloads}`}),e(b).missing_injection_tool&&k.push({id:"sys-inject",step:4,title:`"${e(b).missing_injection_tool}" is not installed — VoxCtrl cannot type text into other windows.`,detail:`missing_injection_tool=${e(b).missing_injection_tool} -install with: ${e(b).manual_package_commands||"(unknown package manager)"}`}),k}),A=fe(()=>{const k=new Set(Ve.issues.map(V=>V.id));return[...Ve.issues,...e(M).filter(V=>!k.has(V.id))]}),$=fe(()=>e(A).length===0),C=fe(()=>{var k;return((k=Ve.combo)!=null?k:[]).map(xl).join(" + ")||"not set"}),O=fe(()=>{var k,V,z,Z,pe;return[{k:"engine",v:t().engine.backend==="remote-openai"?`Remote Speech Engine · ${((k=t().engine.remote_openai)==null?void 0:k.model)||"whisper-1"}`:t().engine.backend==="parakeet"?`Parakeet TDT · ${t().engine.parakeet.model_size}`:t().engine.backend==="moonshine"?`Moonshine · ${t().engine.moonshine.model_size}`:`whisper.cpp · ${t().engine.whisper_cpp.model_size}`},{k:"hotkey",v:`${e(C)} · ${Ve.gestureInfo.name}`},{k:"overlay",v:t().ui.show_overlay?`${(z=(V=Ln.find(ce=>ce.id===t().ui.overlay_style))==null?void 0:V.name)!=null?z:t().ui.overlay_style} · ${t().ui.overlay_position}`:"off"},{k:"voice output",v:t().tts.enabled?(pe=(Z=ks.find(ce=>ce.id===t().tts.engine))==null?void 0:Z.name)!=null?pe:t().tts.engine:"off"}]}),le=fe(()=>{var k,V,z;return["VoxCtrl setup report",`engine: ${t().engine.backend} / ${t().engine.backend==="remote-openai"?((k=t().engine.remote_openai)==null?void 0:k.model)||"whisper-1":t().engine.backend==="parakeet"?t().engine.parakeet.model_size:t().engine.backend==="moonshine"?t().engine.moonshine.model_size:t().engine.whisper_cpp.model_size}`,`device: ${t().engine.whisper_cpp.device}`,`hotkey: ${e(C)} (${Ve.gesture})`,`overlay: ${t().ui.show_overlay?`${t().ui.overlay_style} / ${t().ui.overlay_position}`:"off"}`,`tts: ${t().tts.enabled?t().tts.engine:"off"}`,`shortcut backend: ${(z=(V=e(b))==null?void 0:V.hotkeys.backend)!=null?z:"unknown"}`,"",...e(A).map(Z=>{var pe;return`[${(pe=xs[Z.step])!=null?pe:"setup"}] ${Z.title} -${Z.detail} -`})].join(` -`)});async function re(){try{await navigator.clipboard.writeText(e(le)),l(u,!0),setTimeout(()=>l(u,!1),2e3)}catch(k){console.error("Wizard: clipboard write failed:",k)}}async function me(){l(f,!0),l(_,null);try{const k=await E("wizard_failure_log");try{await navigator.clipboard.writeText(k)}catch(pe){console.error("Wizard: clipboard write failed:",pe)}const V=encodeURIComponent("VoxCtrl Bug Report"),z=encodeURIComponent(`Paste the log contents below and I will get back to you with a fix ASAP. - -`),Z=`mailto:jrufer@gmail.com?subject=${V}&body=${z}`;await E("send_bug_report_email",{mailtoUrl:Z,attachmentPath:null}),l(_,"Log copied to your clipboard — paste it into the email that just opened.")}catch(k){l(_,`Could not open your email app: ${k}`)}finally{l(f,!1)}}async function ee(){try{await E("open_settings_tab",{tab:"general"})}catch(k){console.error("Wizard: could not open Settings:",k)}}Zt(()=>{var k;h(),((k=t().tts)==null?void 0:k.memory_mode)!==void 0&&l(v,t().tts.memory_mode==="on_demand")});function P(){l(v,!e(v)),Nt.update(k=>(k.tts&&(k.tts.memory_mode=e(v)?"on_demand":"always_loaded"),k))}var R=sb(),te=n(R),Ae=n(te);let Pe;var Y=n(Ae),B=i(Ae,2),ge=n(B),ae=i(B,2),G=n(ae);{var ue=k=>{var V=Wm();c(k,V)},Se=k=>{var V=Hm();c(k,V)};x(G,k=>{e($)?k(ue):k(Se,-1)})}var ie=i(ae,2),q=n(ie);{var J=k=>{var V=je(`This window can close. VoxCtrl keeps running quietly in your system tray and listens for - your hotkey in any app.`);c(k,V)},ye=k=>{var V=je();w(()=>{var z;return y(V,`Sorry about that — ${(z=e(A).length)!=null?z:""} problem${e(A).length===1?"":"s"} came up during setup - and will stop VoxCtrl working end to end. Your choices are still saved. The details are on - the right — fix them here or in Settings, or send us the log and we'll take it from there.`)}),c(k,V)};x(q,k=>{e($)?k(J):k(ye,-1)})}var _e=i(ie,2);_t(_e,21,()=>e(O),ht,(k,V)=>{var z=Km(),Z=n(z),pe=n(Z),ce=i(Z,2),Ie=n(ce);w(()=>{y(pe,e(V).k),y(Ie,e(V).v)}),c(k,z)});var oe=i(te,2),W=i(n(oe),6),ve=n(W);{var I=k=>{var V=Ym(),z=n(V),Z=i(z,2),pe=i(Z,2),ce=n(pe),Ie=n(ce);let Qe;var ot=n(Ie);{var et=X=>{var de=Gm();c(X,de)};x(ot,X=>{e(v)&&X(et)})}var Q=i(pe,4);w(()=>Qe=Me(Ie,1,"chk svelte-ujy0nl",null,Qe,{on:e(v)})),L("click",z,ee),L("click",Z,()=>{l(d,!1),h()}),L("click",pe,P),L("click",Q,()=>l(d,!1)),c(k,V)};x(ve,k=>{e(d)&&k(I)})}var H=i(ve,2),se=i(n(H),6),Ee=n(se);let Re;var he=n(Ee),ne=i(Ee,2);{var xe=k=>{var V=Jm();c(k,V)};x(ne,k=>{e(d)||k(xe)})}var Je=i(oe,2);{var ke=k=>{var V=Zm(),z=i(n(V),8);L("click",z,ee),c(k,V)},D=k=>{var V=ab(),z=n(V),Z=n(z),pe=n(Z),ce=n(pe),Ie=i(Z,2),Qe=n(Ie);{var ot=Ke=>{var rt=Xm();c(Ke,rt)};x(Qe,Ke=>{e(m)&&Ke(ot)})}var et=i(z,2);_t(et,21,()=>e(A),Ke=>Ke.id,(Ke,rt)=>{var ct=Qm(),nt=n(ct),De=n(nt),Ge=n(De),lt=i(De,2),U=n(lt),K=i(nt,2),be=n(K);w(()=>{var Be;y(Ge,(Be=xs[e(rt).step])!=null?Be:"setup"),y(U,e(rt).title),y(be,e(rt).detail)}),c(Ke,ct)});var Q=i(et,2),X=n(Q),de=n(X),Ue=i(X,2),Ce=i(Ue,2),Fe=n(Ce);{var We=Ke=>{var rt=eb();c(Ke,rt)};x(Fe,Ke=>{e(f)&&Ke(We)})}var st=i(Q,2);{var it=Ke=>{var rt=tb(),ct=n(rt);w(()=>y(ct,e(_))),c(Ke,rt)};x(st,Ke=>{e(_)&&Ke(it)})}w(()=>{var Ke;y(ce,`problems · ${(Ke=e(A).length)!=null?Ke:""}`),Ie.disabled=e(m),y(de,e(u)?"✓ Copied":"Copy diagnostics"),Ce.disabled=e(f)}),L("click",Ie,h),L("click",X,re),L("click",Ue,ee),L("click",Ce,me),c(k,V)};x(Je,k=>{e($)?k(ke):k(D,-1)})}w(()=>{Pe=Me(Ae,1,"tick svelte-ujy0nl",null,Pe,{warn:!e($)}),y(Y,e($)?"✓":"!"),y(ge,e($)?"// configured":"// finished with problems"),Re=Me(Ee,1,"tray-btn svelte-ujy0nl",null,Re,{on:e(d)}),Tt(he,"src",Um)}),L("click",Ee,()=>l(d,!e(d))),c(s,R),Ot(),o()}pa(["click"]);var ib=p('
        Loading your settings…
        '),rb=p(''),lb=p(''),ob=p('
        '),cb=p('
        '),db=p(' '),vb=p(' Working…',1),ub=p('
        '),pb=p('
        voxctrl // setup
        ');function fb(s,a){Lt(a,!0);const t=()=>la(Nt,"$config",o),r=()=>la(rr,"$configLoaded",o),[o,d]=Ma();let u={};function v(D,k){k?u[D]=k:delete u[D]}let f=S(wt({}));function _(D,k){var V;((V=e(f)[D])!=null?V:null)!==k&&l(f,{...e(f),[D]:k},!0)}let b=S(!1),m=S(null);const h=fe(()=>Ve.step),M=fe(()=>{var D;return(D=e(f)[e(h)])!=null?D:null}),A=fe(()=>e(h)===0?"Get started →":e(h)===5&&!t().tts.enabled?"Skip →":e(h)===xs.length-1?Ve.issues.length>0?"Finish anyway":"Finish":"Continue →");async function $(){if(e(b))return;if(l(m,null),e(h)===xs.length-1){await le();return}const D=u[e(h)];if(D){l(b,!0);try{if(!await D())return}catch(k){l(m,`${k}`);return}finally{l(b,!1)}}Ve.goTo(e(h)+1)}function C(){e(b)||(l(m,null),Ve.goTo(e(h)-1))}let O=S(!1);async function le(){if(!e(O)){l(O,!0);try{await E("save_config",{newConfig:t()}),await E("finish_setup_wizard",{openSettings:!1})}catch(D){l(m,`Could not finish setup: ${D}`),l(O,!1)}}}async function re(){await le()}function me(D){Ve.recordIssue({id:`uncaught-${Ve.issues.filter(k=>k.id.startsWith("uncaught-")).length}`,step:Ve.step,title:"Something went wrong during setup that the wizard did not expect.",detail:D})}Zt(()=>{const D=V=>{var z;me(((z=V.error)==null?void 0:z.stack)||V.message||String(V))},k=V=>{var z,Z;me(((z=V.reason)==null?void 0:z.stack)||((Z=V.reason)==null?void 0:Z.message)||String(V.reason))};return window.addEventListener("error",D),window.addEventListener("unhandledrejection",k),E("wizard_error_test_active").then(V=>{V&&(Ve.recordIssue({id:"simulated-test-failure",step:4,title:"Simulated failure (--simulate-wizard-error) — the live test did not detect any transcribed audio.",detail:"This is a test fixture, not a real failure: it exists so the wizard's error screen (apology, log capture, copy-to-clipboard, email-us) can be verified without needing a genuinely broken hotkey or microphone."}),Ve.visited=xs.length-1,Ve.step=xs.length-1)}).catch(V=>console.error("Wizard: could not check for the error-test flag:",V)),()=>{window.removeEventListener("error",D),window.removeEventListener("unhandledrejection",k)}});var ee=pb(),P=n(ee),R=n(P),te=i(R,8),Ae=n(te),Pe=i(P,2);let Y;var B=n(Pe);{var ge=D=>{var k=ib();c(D,k)},ae=D=>{Zh(D)},G=D=>{Tg(D,{registerGate:v,setBlocker:_})},ue=D=>{Ng(D,{registerGate:v,setBlocker:_})},Se=D=>{pm(D,{})},ie=D=>{ym(D,{})},q=D=>{jm(D,{setBlocker:_})},J=D=>{nb(D,{})};x(B,D=>{r()?e(h)===0?D(ae,1):e(h)===1?D(G,2):e(h)===2?D(ue,3):e(h)===3?D(Se,4):e(h)===4?D(ie,5):e(h)===5?D(q,6):D(J,-1):D(ge)})}var ye=i(Pe,2),_e=n(ye),oe=n(_e);{var W=D=>{var k=rb();w(()=>k.disabled=e(b)),L("click",k,C),c(D,k)},ve=D=>{var k=lb();w(()=>k.disabled=e(O)),L("click",k,re),c(D,k)};x(oe,D=>{e(h)>0?D(W):D(ve,-1)})}var I=i(_e,2);_t(I,21,()=>xs,ht,(D,k,V)=>{var z=cb();let Z;var pe=n(z);let ce;var Ie=n(pe),Qe=n(Ie),ot=i(Ie,2),et=n(ot),Q=i(pe,2);{var X=de=>{var Ue=ob(),Ce=n(Ue);let Fe;w(()=>Fe=va(Ce,"",Fe,{width:V{V{Z=va(z,"",Z,{flex:VVe.visited||e(b),y(Qe,de),y(et,e(k))},[()=>VVe.goTo(V)),c(D,z)});var H=i(I,2),se=n(H);{var Ee=D=>{var k=db(),V=n(k);w(()=>{Tt(k,"title",e(M)),y(V,e(M))}),c(D,k)};x(se,D=>{e(M)&&!e(b)&&D(Ee)})}var Re=i(se,2),he=n(Re);{var ne=D=>{var k=vb();c(D,k)},xe=D=>{var k=je();w(()=>y(k,e(A))),c(D,k)};x(he,D=>{e(b)||e(O)?D(ne):D(xe,-1)})}var Je=i(ye,2);{var ke=D=>{var k=ub(),V=n(k),z=n(V),Z=i(V,2);w(()=>{var pe;return y(z,`⚠ ${(pe=e(m))!=null?pe:""}`)}),L("click",Z,()=>l(m,null)),c(D,k)};x(Je,D=>{e(m)&&D(ke)})}w(()=>{var D;Tt(R,"src",yr),y(Ae,`step ${e(h)+1} / ${(D=xs.length)!=null?D:""} · every choice editable later in Settings`),Y=Me(Pe,1,"vx-screen svelte-18pn5kx",null,Y,{"vx-leaving":Ve.leaving}),Re.disabled=e(b)||e(O)||!!e(M)}),L("click",Re,$),c(s,ee),Ot(),d()}pa(["click"]);function Ul(s){if(!s||s<0)return"";if(s<1024)return`${s} B`;const a=["KB","MB","GB"];let t=s/1024,r=0;for(;t>=1024&&r

        '),gb=p('

        '),mb=p('

        Asking GitHub for the latest release…

        '),bb=p('

        Nothing to install. VoxCtrl checks again the next time it starts.

        '),yb=p(`

        What's new

         
        `),wb=p('

        '),kb=p('

        VoxCtrl keeps running until the download is verified. Nothing is replaced before then.

        '),xb=p('

        The new version is installed. VoxCtrl is closing and will start again in a moment.

        '),Tb=p('

        '),Sb=p('

        Your current version is untouched and still working.

        ',1),Eb=p(" ",1),Cb=p('

        '),Ab=p(''),Mb=p(''),Pb=p(''),Db=p('Automatic checks are off. Turn them back on in Settings → General.'),Ib=p(''),zb=p(''),Lb=p('
        ',1),Ob=p(''),Rb=p('

        ');function Nb(s,a){Lt(a,!0);let t=S("checking"),r=S(null),o=S(""),d=S(null),u=S(null),v=S(!1),f=[];const _=fe(()=>_b(e(d)));Zt(async()=>{f.push(await oa("update-progress",I=>{l(d,I.payload,!0)})),f.push(await oa("update-installed",()=>{l(t,"installed")})),f.push(await oa("update-failed",I=>{l(t,"failed"),l(u,I.payload,!0)})),await b()}),mr(()=>{f.forEach(I=>I())});async function b(){try{let I=await E("get_pending_update");I.update||(I=await E("check_for_update")),l(o,I.current_version,!0),l(r,I.update,!0),l(t,I.update?"available":"up-to-date",!0)}catch(I){l(t,"failed"),l(u,`${I}`)}}async function m(){var I;if((I=e(r))!=null&&I.can_self_update){l(t,"installing"),l(u,null),l(d,{downloaded:0,total:e(r).download_size},!0);try{await E("install_update")}catch(H){l(t,"failed"),l(u,`${H}`)}}}async function h(){await E("dismiss_update")}async function M(){if(e(r)){try{await E("skip_update_version",{version:e(r).version})}catch(I){console.error("Could not record the skipped version:",I)}await h()}}async function A(){try{await E("set_update_auto_check",{enabled:!1}),l(v,!0)}catch(I){console.error("Could not turn off automatic update checks:",I)}}async function $(){var I,H;try{await Zo((H=(I=e(r))==null?void 0:I.release_url)!=null?H:"https://github.com/JRufer/VoxCtrl/releases/latest")}catch(se){console.error("Could not open the release page:",se)}}var C=Rb(),O=n(C),le=n(O),re=n(le),me=i(re,2),ee=n(me),P=n(ee);{var R=I=>{var H=je("VoxCtrl is up to date");c(I,H)},te=I=>{var H=je();w(()=>{var se,Ee;return y(H,`Restarting into ${(Ee=(se=e(r))==null?void 0:se.version)!=null?Ee:""}`)}),c(I,H)},Ae=I=>{var H=je();w(()=>{var se,Ee;return y(H,`Updating to ${(Ee=(se=e(r))==null?void 0:se.version)!=null?Ee:""}`)}),c(I,H)},Pe=I=>{var H=je();w(()=>{var se;return y(H,`VoxCtrl ${(se=e(r).version)!=null?se:""} is available`)}),c(I,H)},Y=I=>{var H=je("Checking for updates…");c(I,H)};x(P,I=>{e(t)==="up-to-date"?I(R):e(t)==="installed"?I(te,1):e(t)==="installing"?I(Ae,2):e(r)?I(Pe,3):I(Y,-1)})}var B=i(ee,2);{var ge=I=>{var H=hb(),se=n(H);w(()=>{var Ee,Re;return y(se,`You have ${(Ee=e(r).current_version)!=null?Ee:""} — ${(Re=e(r).version)!=null?Re:""} is the latest release.`)}),c(I,H)},ae=I=>{var H=gb(),se=n(H);w(()=>{var Ee;return y(se,`Version ${(Ee=e(o))!=null?Ee:""} is the latest release.`)}),c(I,H)};x(B,I=>{e(r)&&e(t)!=="up-to-date"?I(ge):e(t)==="up-to-date"&&I(ae,1)})}var G=i(le,2);{var ue=I=>{var H=mb();c(I,H)},Se=I=>{var H=bb();c(I,H)},ie=I=>{var H=Eb(),se=mt(H);{var Ee=V=>{var z=yb(),Z=i(n(z),2),pe=n(Z);w(()=>y(pe,e(r).notes)),c(V,z)};x(se,V=>{e(r).notes&&V(Ee)})}var Re=i(se,2);{var he=V=>{var z=wb(),Z=n(z);w(()=>y(Z,e(r).unsupported_reason)),c(V,z)};x(Re,V=>{!e(r).can_self_update&&e(r).unsupported_reason&&V(he)})}var ne=i(Re,2);{var xe=V=>{var z=kb(),Z=n(z);let pe;var ce=n(Z),Ie=i(Z,2),Qe=n(Ie);{var ot=Q=>{var X=je();w(()=>{var de,Ue;return y(X,`Downloading ${(Ue=(de=e(r).asset_name)!=null?de:"the update")!=null?Ue:""}…`)}),c(Q,X)},et=Q=>{var X=je();w(de=>{var Ue;return y(X,`Downloading — ${(Ue=e(_))!=null?Ue:""}% of ${de!=null?de:""}`)},[()=>{var de,Ue;return Ul((Ue=(de=e(d))==null?void 0:de.total)!=null?Ue:e(r).download_size)}]),c(Q,X)};x(Qe,Q=>{e(_)===null?Q(ot):Q(et,-1)})}w(()=>{pe=Me(Z,1,"bar svelte-15mrihi",null,pe,{indeterminate:e(_)===null}),va(ce,e(_)===null?"":`width: ${e(_)}%`)}),c(V,z)},Je=V=>{var z=xb();c(V,z)},ke=V=>{var z=Tb(),Z=n(z);w(pe=>y(Z,`VoxCtrl will download ${pe!=null?pe:""}, verify it against the checksum - GitHub published, replace itself and restart. Your settings, models and voices are not - touched.`),[()=>Ul(e(r).download_size)]),c(V,z)};x(ne,V=>{e(t)==="installing"?V(xe):e(t)==="installed"?V(Je,1):e(r).can_self_update&&V(ke,2)})}var D=i(ne,2);{var k=V=>{var z=Sb(),Z=mt(z),pe=n(Z);w(()=>y(pe,e(u))),c(V,z)};x(D,V=>{e(t)==="failed"&&e(u)&&V(k)})}c(I,H)},q=I=>{var H=Cb(),se=n(H);w(()=>y(se,e(u))),c(I,H)};x(G,I=>{e(t)==="checking"?I(ue):e(t)==="up-to-date"?I(Se,1):e(r)?I(ie,2):e(t)==="failed"&&e(u)&&I(q,3)})}var J=i(G,2),ye=n(J);{var _e=I=>{var H=Ab();w(()=>H.disabled=e(t)==="installing"),L("click",H,h),c(I,H)},oe=I=>{var H=Mb();L("click",H,h),c(I,H)},W=I=>{var H=Lb(),se=mt(H),Ee=n(se),Re=i(Ee,2);{var he=z=>{var Z=Pb();L("click",Z,A),c(z,Z)},ne=z=>{var Z=Db();c(z,Z)};x(Re,z=>{e(v)?z(ne,-1):z(he)})}var xe=i(se,2),Je=n(xe),ke=i(Je,2),D=i(ke,2);{var k=z=>{var Z=Ib();L("click",Z,m),c(z,Z)},V=z=>{var Z=zb();L("click",Z,$),c(z,Z)};x(D,z=>{e(r).can_self_update?z(k):z(V,-1)})}L("click",Ee,$),L("click",Je,M),L("click",ke,h),c(I,H)},ve=I=>{var H=Ob();L("click",H,h),c(I,H)};x(ye,I=>{e(t)==="installing"||e(t)==="installed"?I(_e):e(t)==="up-to-date"?I(oe,1):e(r)?I(W,2):I(ve,-1)})}w(()=>Tt(re,"src",yr)),c(s,C),Ot()}pa(["click"]);function Fb(s){const a=window.location.pathname;function t(){return a.startsWith("/overlay")?"overlay":a.startsWith("/udev-warning")?"udev-warning":a.startsWith("/wizard")?"wizard":a.startsWith("/update")?"update":"settings"}const r=t();r==="overlay"&&(document.documentElement.classList.add("overlay-window"),document.body.classList.add("overlay-window"));var o=Vi(),d=mt(o);{var u=m=>{J_(m,{})},v=m=>{zh(m,{})},f=m=>{fb(m,{})},_=m=>{Nb(m,{})},b=m=>{y_(m,{})};x(d,m=>{r==="overlay"?m(u):r==="udev-warning"?m(v,1):r==="wizard"?m(f,2):r==="update"?m(_,3):m(b,-1)})}c(s,o)}Cd(Fb,{target:document.getElementById("app")}); diff --git a/dist/assets/index-DzCsKclX.css b/dist/assets/index-Cu0DrSZY.css similarity index 56% rename from dist/assets/index-DzCsKclX.css rename to dist/assets/index-Cu0DrSZY.css index 3e91c56e..80b0849d 100644 --- a/dist/assets/index-DzCsKclX.css +++ b/dist/assets/index-Cu0DrSZY.css @@ -1 +1 @@ -@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial}}}.btn-action.svelte-da8msw{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-da8msw:hover{border-color:var(--text-muted);background-color:var(--border)}.hint.error.svelte-da8msw{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.svelte-da8msw:disabled{cursor:default;opacity:.6}.link.svelte-da8msw{cursor:pointer;border-style:var(--tw-border-style);padding:calc(var(--spacing,.25rem) * 0);color:inherit;text-underline-offset:2px;background-color:#0000;border-width:0;text-decoration-line:underline}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}.custom-select-wrapper.svelte-1heock4{flex:2;width:100%;min-width:190px;position:relative}.custom-select-trigger.svelte-1heock4{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-right:calc(var(--spacing,.25rem) * 9);text-align:left;--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text);--tw-shadow:0 4px 12px var(--tw-shadow-color,#00000026);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));-webkit-user-select:none;user-select:none;background:var(--surface2) url("data:image/svg+xml;utf8,") no-repeat right 12px center;background-size:10px}.custom-select-trigger.svelte-1heock4:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.custom-select-trigger.svelte-1heock4:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 12%,transparent)}}.custom-select-trigger.svelte-1heock4:hover{background-color:var(--color-obsidian-700)}.custom-select-trigger.svelte-1heock4:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-select-trigger.svelte-1heock4:disabled{cursor:not-allowed;opacity:.5;--tw-translate-y:calc(var(--spacing,.25rem) * 0)!important;translate:var(--tw-translate-x) var(--tw-translate-y)!important}.custom-dropdown-menu.svelte-1heock4{z-index:2000;gap:calc(var(--spacing,.25rem) * .5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 1);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex;overflow-y:auto}.custom-dropdown-item.svelte-1heock4{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);text-align:left;color:var(--text);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;background-color:#0000;border-style:none;font-size:13px;transition-duration:.15s}.custom-dropdown-item.svelte-1heock4:hover{background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.svelte-1heock4:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 4%,transparent)}}.custom-dropdown-item.selected.svelte-1heock4{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.selected.svelte-1heock4{background-color:color-mix(in oklab,var(--accent2) 10%,transparent)}}.custom-dropdown-item.selected.svelte-1heock4{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--accent2)}.custom-dropdown-item.svelte-1heock4:disabled{cursor:not-allowed;opacity:.4}.custom-dropdown-item.svelte-1heock4:disabled:hover{background-color:#0000}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-duration:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-leading:initial}}}.model-status-container.svelte-nfi4ak{margin-bottom:calc(var(--spacing,.25rem) * 3);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);min-height:42px;padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);align-items:center;font-size:13px;display:flex}.status-downloaded.svelte-nfi4ak{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-downloading.svelte-nfi4ak{color:var(--accent2)}.status-checking.svelte-nfi4ak{color:var(--text-muted)}.status-missing-wrapper.svelte-nfi4ak{justify-content:space-between;align-items:center;width:100%;display:flex}.status-missing.svelte-nfi4ak{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-download.svelte-nfi4ak{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}.btn-download.svelte-nfi4ak:hover{background-color:var(--accent2)}.field-input-error.svelte-nfi4ak{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.field-input-error.svelte-nfi4ak:focus{border-color:var(--color-red-500,oklch(63.7% .237 25.331));--tw-shadow:0 0 0 2px var(--tw-shadow-color,#ef444426), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field-error-msg.svelte-nfi4ak{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5);color:var(--color-red-400,oklch(70.4% .191 22.216))}.test-row.svelte-nfi4ak{margin-top:calc(var(--spacing,.25rem) * 4);align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-wrap:wrap;display:flex}.btn-test.svelte-nfi4ak{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding-inline:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}@media (hover:hover){.btn-test.svelte-nfi4ak:hover{background-color:var(--accent2)}}.btn-test.svelte-nfi4ak:disabled{cursor:not-allowed;opacity:.5}.status-pill.svelte-nfi4ak{border-radius:var(--radius);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500)}.status-pill.success.svelte-nfi4ak{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-nfi4ak{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 30%,transparent)}}.status-pill.success.svelte-nfi4ak{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-nfi4ak{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.status-pill.success.svelte-nfi4ak{color:var(--color-emerald-300,oklch(84.5% .143 164.978))}.status-pill.error.svelte-nfi4ak{border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-nfi4ak{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 30%,transparent)}}.status-pill.error.svelte-nfi4ak{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-nfi4ak{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 15%,transparent)}}.status-pill.error.svelte-nfi4ak{color:var(--color-red-300,oklch(80.8% .114 19.571))}.discovered-models.svelte-nfi4ak{margin-bottom:calc(var(--spacing,.25rem) * 3);align-items:center;gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}.model-tags.svelte-nfi4ak{align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);flex-wrap:wrap;display:flex}.tag-btn.svelte-nfi4ak{cursor:pointer;border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));border-radius:.25rem}@media (hover:hover){.tag-btn.svelte-nfi4ak:hover{background-color:var(--border);color:var(--color-white,#fff)}}.tag-btn.active.svelte-nfi4ak{border-color:var(--accent);background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.tag-btn.active.svelte-nfi4ak{background-color:color-mix(in oklab,var(--accent) 10%,transparent)}}.tag-btn.active.svelte-nfi4ak{color:var(--accent)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-tracking:initial;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}.val.svelte-1msnq7i{text-align:right;min-width:36px;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.vu-meter-container.svelte-1msnq7i{margin-block:calc(var(--spacing,.25rem) * 1);margin-bottom:calc(var(--spacing,.25rem) * 3);gap:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 1);flex-direction:column;display:flex}.vu-meter-info.svelte-1msnq7i{align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em);text-transform:uppercase;font-size:10px;display:flex}.vu-label.svelte-1msnq7i{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text-muted)}.vu-status-dot.svelte-1msnq7i{height:calc(var(--spacing,.25rem) * 1.5);width:calc(var(--spacing,.25rem) * 1.5);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));background-color:#444}.vu-status-dot.active.svelte-1msnq7i{--tw-shadow:0 0 8px var(--tw-shadow-color,#39ff14);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#39ff14}.vu-status-text.svelte-1msnq7i{color:var(--text);opacity:.7;margin-left:auto}.vu-meter-bar-wrapper.svelte-1msnq7i{box-sizing:border-box;height:calc(var(--spacing,.25rem) * 3.5);background-color:#0006;width:100%;position:relative}@supports (color:color-mix(in lab,red,red)){.vu-meter-bar-wrapper.svelte-1msnq7i{background-color:color-mix(in oklab,var(--color-black,#000) 40%,transparent)}}.vu-meter-bar-wrapper.svelte-1msnq7i{padding:3px}.vu-meter-bar.svelte-1msnq7i{gap:2px;width:100%;height:100%;display:flex;position:relative}.vu-segment.svelte-1msnq7i{background-color:#ffffff0d;flex:1;height:100%}@supports (color:color-mix(in lab,red,red)){.vu-segment.svelte-1msnq7i{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.vu-segment.svelte-1msnq7i{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:50ms;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:50ms;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.vu-segment.active.svelte-1msnq7i{--tw-shadow:0 0 4px var(--tw-shadow-color,#39ff144d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#39ff14}.vu-segment.active.orange.svelte-1msnq7i{--tw-shadow:0 0 4px var(--tw-shadow-color,#ff6d0080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#ff6d00}.vu-peak-marker.svelte-1msnq7i{pointer-events:none;top:calc(var(--spacing,.25rem) * -.5);bottom:calc(var(--spacing,.25rem) * -.5);--tw-shadow:0 0 6px var(--tw-shadow-color,#ffab00);width:2px;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:left;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:50ms;--tw-ease:linear;background-color:#ffab00;transition-duration:50ms;transition-timing-function:linear;position:absolute}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-leading:initial;--tw-tracking:initial}}}.modal-backdrop.svelte-oc07pw{inset:calc(var(--spacing,.25rem) * 0);z-index:1000;background-color:#0009;justify-content:center;align-items:center;display:flex;position:fixed}@supports (color:color-mix(in lab,red,red)){.modal-backdrop.svelte-oc07pw{background-color:color-mix(in oklab,var(--color-black,#000) 60%,transparent)}}.modal-backdrop.svelte-oc07pw{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.target-modal-backdrop.svelte-oc07pw{z-index:1100!important}.modal.svelte-oc07pw{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);width:90%;max-width:500px;max-height:85vh;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex}.modal-header.svelte-oc07pw{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);justify-content:space-between;align-items:center;display:flex}.modal-header.svelte-oc07pw h3:where(.svelte-oc07pw){margin:calc(var(--spacing,.25rem) * 0);--tw-font-weight:var(--font-weight-bold,700);font-size:15px;font-weight:var(--font-weight-bold,700)}.close-btn.svelte-oc07pw{cursor:pointer;--tw-border-style:none;font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));color:var(--text-muted);background-color:#0000;border-style:none}.close-btn.svelte-oc07pw:hover{color:var(--text)}.modal-body.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 3.5);padding:calc(var(--spacing,.25rem) * 5);flex-direction:column;display:flex;overflow-y:auto}.modal-footer.svelte-oc07pw{justify-content:flex-end;gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);display:flex}.morph-section.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 2.5);border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:1px;border-color:var(--border);background-color:#ffffff05;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.morph-section.svelte-oc07pw{background-color:color-mix(in oklab,var(--color-white,#fff) 2%,transparent)}}.morph-section.svelte-oc07pw{padding:calc(var(--spacing,.25rem) * 3)}.morph-section.svelte-oc07pw h5:where(.svelte-oc07pw),.processing-toggles.svelte-oc07pw h5:where(.svelte-oc07pw){margin:calc(var(--spacing,.25rem) * 0);margin-bottom:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);text-transform:uppercase}.processing-toggles.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding-top:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}.checkbox-field.svelte-oc07pw{cursor:pointer;align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted);display:flex}.checkbox-field.svelte-oc07pw input[type=checkbox]:where(.svelte-oc07pw){cursor:pointer}.checkbox-field.svelte-oc07pw:hover{color:var(--text)}.btn-action.svelte-oc07pw{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-oc07pw:hover{border-color:var(--text-muted);background-color:var(--border)}.btn-action.small.svelte-oc07pw{padding:calc(var(--spacing,.25rem) * 1);padding-inline:calc(var(--spacing,.25rem) * 2);font-size:10px}.btn-action.svelte-oc07pw:disabled{cursor:not-allowed;opacity:.5}.chat-actions.svelte-oc07pw{align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.chat-status.svelte-oc07pw{margin-top:calc(var(--spacing,.25rem) * 1.5);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);display:block}.chat-status.ok.svelte-oc07pw{color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.chat-status.bad.svelte-oc07pw{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.primary.svelte-oc07pw{--tw-border-style:none;background-color:var(--accent);color:var(--color-white,#fff);border-style:none}.btn-action.primary.svelte-oc07pw:hover{opacity:.9}.full-width-input.svelte-oc07pw{width:100%!important}textarea.svelte-oc07pw{resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--text);--tw-shadow:inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}textarea.svelte-oc07pw:hover{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){textarea.svelte-oc07pw:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 15%,transparent)}}textarea.svelte-oc07pw:hover{background-color:var(--color-obsidian-900)}textarea.svelte-oc07pw:focus{border-color:var(--accent2);background-color:var(--color-obsidian-950);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field.col.svelte-oc07pw{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;width:100%}.mcp-container.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 1.5);flex-direction:column;display:flex}.field-label-row.svelte-oc07pw{margin-bottom:calc(var(--spacing,.25rem) * .5);justify-content:space-between;align-items:center;width:100%;display:flex}.field-title.svelte-oc07pw{--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text)}.field-tag.svelte-oc07pw{border-style:var(--tw-border-style);border-width:1px;border-color:var(--accent2);border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-oc07pw{border-color:color-mix(in oklab,var(--accent2) 25%,transparent)}}.field-tag.svelte-oc07pw{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-oc07pw{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.field-tag.svelte-oc07pw{padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-leading:1;--tw-font-weight:var(--font-weight-bold,700);font-size:9px;line-height:1;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em);color:var(--accent2);text-transform:uppercase}p.hint.svelte-oc07pw{margin:calc(var(--spacing,.25rem) * 0);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}p.hint.svelte-oc07pw code:where(.svelte-oc07pw){border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);border-radius:.25rem;font-size:10px}.validation-error-msg.svelte-oc07pw{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-red-400,oklch(70.4% .191 22.216));display:block}.longer-display-label.svelte-oc07pw{min-width:255px!important}.animate-fade-in.svelte-oc07pw{animation:.2s cubic-bezier(.16,1,.3,1) fade-in}@keyframes svelte-oc07pw-fade-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-duration:initial;--tw-leading:initial;--tw-font-weight:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-tracking:initial}}}.backend-banner.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 1);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.backend-banner.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.backend-banner.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;transition-duration:.15s}.backend-banner.private.svelte-w4d8v7{border-color:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.backend-banner.private.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 25%,transparent)}}.backend-banner.private.svelte-w4d8v7{background-color:#00bb7f0f}@supports (color:color-mix(in lab,red,red)){.backend-banner.private.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 6%,transparent)}}.backend-banner.warn.svelte-w4d8v7{border-color:#f99c0040}@supports (color:color-mix(in lab,red,red)){.backend-banner.warn.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.backend-banner.warn.svelte-w4d8v7{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.backend-banner.warn.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.backend-banner.broken.svelte-w4d8v7{border-color:#fb2c3640}@supports (color:color-mix(in lab,red,red)){.backend-banner.broken.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 25%,transparent)}}.backend-banner.broken.svelte-w4d8v7{background-color:#fb2c360f}@supports (color:color-mix(in lab,red,red)){.backend-banner.broken.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 6%,transparent)}}.manual-enable-banner.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 1);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0040;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.manual-enable-banner.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.manual-enable-banner.svelte-w4d8v7{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.manual-enable-banner.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.manual-enable-banner.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;transition-duration:.15s}.banner-toggle.svelte-w4d8v7{cursor:pointer;align-items:center;gap:calc(var(--spacing,.25rem) * 2.5);--tw-border-style:none;width:100%;padding:calc(var(--spacing,.25rem) * 0);text-align:left;color:var(--text);-webkit-user-select:none;user-select:none;background-color:#0000;border-style:none;display:flex}.banner-title.svelte-w4d8v7{--tw-leading:var(--leading-normal,1.5);font-size:12.5px;line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);flex:1}.banner-chevron.svelte-w4d8v7{height:calc(var(--spacing,.25rem) * 4);width:calc(var(--spacing,.25rem) * 4);color:var(--text-muted);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));flex-shrink:0}.banner-chevron.expanded.svelte-w4d8v7{color:var(--text);rotate:180deg}.banner-content.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 2);width:100%;min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);border-top-style:var(--tw-border-style);border-color:#ffffff0d;border-top-width:1px;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.banner-content.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.banner-content.svelte-w4d8v7{padding-top:calc(var(--spacing,.25rem) * 2);padding-left:calc(var(--spacing,.25rem) * 6.5);font-size:12.5px}.backend-icon.svelte-w4d8v7{font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));--tw-leading:1;flex-shrink:0;line-height:1}.backend-detail.svelte-w4d8v7{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.backend-detail.error.svelte-w4d8v7{color:var(--color-red-400,oklch(70.4% .191 22.216))}.manual-enable-actions.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1)}.keys-rejected.svelte-w4d8v7{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3640;display:flex}@supports (color:color-mix(in lab,red,red)){.keys-rejected.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 25%,transparent)}}.keys-rejected.svelte-w4d8v7{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.keys-rejected.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.keys-rejected.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:var(--color-red-300,oklch(80.8% .114 19.571))}.keys-fragile.svelte-w4d8v7{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0040;display:flex}@supports (color:color-mix(in lab,red,red)){.keys-fragile.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.keys-fragile.svelte-w4d8v7{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.keys-fragile.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.keys-fragile.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:var(--color-amber-200,oklch(92.4% .12 95.746))}.keys-accepted.svelte-w4d8v7{color:#5ee9b5e6;font-size:11.5px}@supports (color:color-mix(in lab,red,red)){.keys-accepted.svelte-w4d8v7{color:color-mix(in oklab,var(--color-emerald-300,oklch(84.5% .143 164.978)) 90%,transparent)}}.keys-accepted.svelte-w4d8v7 code:where(.svelte-w4d8v7){background-color:#ffffff0d;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.keys-accepted.svelte-w4d8v7 code:where(.svelte-w4d8v7){background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.keys-accepted.svelte-w4d8v7 code:where(.svelte-w4d8v7){padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace)}.hotkeys-section.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 5);padding-bottom:calc(var(--spacing,.25rem) * 10);flex-direction:column;display:flex}.section-header.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 2);justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 5);display:flex}.description.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.bindings-list.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.binding-item.svelte-w4d8v7{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));background-color:#1a1f2e66;display:flex}.binding-item.svelte-w4d8v7:hover{border-color:var(--accent2);--tw-shadow:0 4px 20px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.binding-item.disabled.svelte-w4d8v7{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.binding-item.disabled.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.binding-item.disabled.svelte-w4d8v7{opacity:.55;background-image:repeating-linear-gradient(-45deg,#0000,#0000 10px,#00000040 10px 20px)}.binding-content.svelte-w4d8v7{min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex}.binding-header-row.svelte-w4d8v7{justify-content:space-between;align-items:center;width:100%;display:flex}.binding-title.svelte-w4d8v7{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.binding-row2.svelte-w4d8v7{justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.binding-targets.svelte-w4d8v7{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.binding-actions.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);justify-content:flex-end;align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);border-top-style:var(--tw-border-style);border-color:#ffffff0d;border-top-width:1px;display:flex}@supports (color:color-mix(in lab,red,red)){.binding-actions.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.binding-actions.svelte-w4d8v7{padding-top:calc(var(--spacing,.25rem) * 2)}.confirm-label.svelte-w4d8v7{color:var(--text-muted);font-size:11px}kbd.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);--tw-shadow:0 1px 0 var(--tw-shadow-color,#0006);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:.25rem}.empty-state.svelte-w4d8v7{border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:2px;border-color:var(--border);background-color:#00000026;flex-direction:column;grid-column:1/-1;justify-content:center;align-items:center;display:flex}@supports (color:color-mix(in lab,red,red)){.empty-state.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-black,#000) 15%,transparent)}}.empty-state.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 10);text-align:center}.empty-icon.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 2);font-size:32px}.empty-state.svelte-w4d8v7 p:where(.svelte-w4d8v7){margin:calc(var(--spacing,.25rem) * 0);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.btn-action.svelte-w4d8v7{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-w4d8v7:hover{border-color:var(--text-muted);background-color:var(--border)}.btn-action.primary.svelte-w4d8v7{--tw-border-style:none;background-color:var(--accent);color:var(--color-white,#fff);border-style:none}.btn-action.primary.svelte-w4d8v7:hover{opacity:.9}.btn-action.small.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 1);padding-inline:calc(var(--spacing,.25rem) * 2);font-size:11px}.btn-action.danger.svelte-w4d8v7{border-color:#ff656833}@supports (color:color-mix(in lab,red,red)){.btn-action.danger.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 20%,transparent)}}.btn-action.danger.svelte-w4d8v7{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.danger.svelte-w4d8v7:hover{border-color:var(--color-red-400,oklch(70.4% .191 22.216));background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.btn-action.danger.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 10%,transparent)}}.btn-add-wide.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 4);cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent2);width:100%;padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-style:none;display:flex}.btn-add-wide.svelte-w4d8v7:hover{--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-add-wide.svelte-w4d8v7:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.badge.svelte-w4d8v7{border-radius:var(--radius-xl,.75rem);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-semibold,600);font-size:10px;font-weight:var(--font-weight-semibold,600);text-transform:uppercase}.warn-note.svelte-w4d8v7{color:var(--accent-amber,#f0b429);font-size:11px;line-height:1.45}.badge.gesture.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.badge.gesture.svelte-w4d8v7{border-color:color-mix(in oklab,var(--accent2) 30%,transparent)}}.badge.gesture.svelte-w4d8v7{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.badge.gesture.svelte-w4d8v7{background-color:color-mix(in oklab,var(--accent2) 15%,transparent)}}.badge.gesture.svelte-w4d8v7{color:var(--accent2)}.badge.openai.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.badge.openai.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 30%,transparent)}}.badge.openai.svelte-w4d8v7{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.badge.openai.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.badge.openai.svelte-w4d8v7{color:var(--color-emerald-200,oklch(90.5% .093 164.15))}.badge.s1-mini.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.badge.s1-mini.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 30%,transparent)}}.badge.s1-mini.svelte-w4d8v7{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.badge.s1-mini.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.badge.s1-mini.svelte-w4d8v7{color:var(--color-cyan-200,oklch(91.7% .08 205.041))}.modal-backdrop.svelte-w4d8v7{inset:calc(var(--spacing,.25rem) * 0);z-index:1000;background-color:#0009;justify-content:center;align-items:center;display:flex;position:fixed}@supports (color:color-mix(in lab,red,red)){.modal-backdrop.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-black,#000) 60%,transparent)}}.modal-backdrop.svelte-w4d8v7{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.modal.svelte-w4d8v7{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);width:90%;max-width:500px;max-height:85vh;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex}.modal-header.svelte-w4d8v7{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);justify-content:space-between;align-items:center;display:flex}.modal-header.svelte-w4d8v7 h3:where(.svelte-w4d8v7){margin:calc(var(--spacing,.25rem) * 0);--tw-font-weight:var(--font-weight-bold,700);font-size:15px;font-weight:var(--font-weight-bold,700)}.close-btn.svelte-w4d8v7{cursor:pointer;--tw-border-style:none;font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));color:var(--text-muted);background-color:#0000;border-style:none}.close-btn.svelte-w4d8v7:hover{color:var(--text)}.modal-body.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 3.5);padding:calc(var(--spacing,.25rem) * 5);flex-direction:column;display:flex;overflow-y:auto}.modal-footer.svelte-w4d8v7{justify-content:flex-end;gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);display:flex}.morph-section.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 2.5);border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:1px;border-color:var(--border);background-color:#ffffff05;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.morph-section.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-white,#fff) 2%,transparent)}}.morph-section.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 3)}.processing-toggles.svelte-w4d8v7 h5:where(.svelte-w4d8v7){margin:calc(var(--spacing,.25rem) * 0);margin-bottom:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);text-transform:uppercase}.processing-toggles.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding-top:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}.checkbox-field.svelte-w4d8v7{cursor:pointer;align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted);display:flex}.checkbox-field.svelte-w4d8v7 input[type=checkbox]:where(.svelte-w4d8v7){cursor:pointer}.checkbox-field.svelte-w4d8v7:hover{color:var(--text)}.btn-add-inline.svelte-w4d8v7{cursor:pointer;--tw-border-style:none;padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));background-color:#0000;border-style:none;border-radius:.25rem}.btn-add-inline.svelte-w4d8v7:hover{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.btn-add-inline.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.btn-add-inline.svelte-w4d8v7:hover{color:var(--color-white,#fff)}.target-selects-list.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;width:100%;display:flex}.target-select-row.svelte-w4d8v7{align-items:center;gap:calc(var(--spacing,.25rem) * 2);width:100%;display:flex}.btn-remove-inline.svelte-w4d8v7{box-sizing:border-box;cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3633;justify-content:center;align-items:center;height:34px;display:flex}@supports (color:color-mix(in lab,red,red)){.btn-remove-inline.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.btn-remove-inline.svelte-w4d8v7{background-color:#fb2c3614}@supports (color:color-mix(in lab,red,red)){.btn-remove-inline.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 8%,transparent)}}.btn-remove-inline.svelte-w4d8v7{padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-red-400,oklch(70.4% .191 22.216));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-remove-inline.svelte-w4d8v7:hover{border-color:var(--color-red-500,oklch(63.7% .237 25.331));background-color:var(--color-red-500,oklch(63.7% .237 25.331));color:var(--color-white,#fff);--tw-shadow:0 2px 8px var(--tw-shadow-color,#ef444440);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.longer-display-label.svelte-w4d8v7{min-width:255px!important}.openai-target-settings.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 2.5);margin-bottom:calc(var(--spacing,.25rem) * 3.5);margin-left:calc(var(--spacing,.25rem) * 2.5);gap:calc(var(--spacing,.25rem) * 2);border-left-style:var(--tw-border-style);border-left-width:2px;border-color:var(--accent);padding-left:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}textarea.svelte-w4d8v7{resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--text);--tw-shadow:inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}textarea.svelte-w4d8v7:hover{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){textarea.svelte-w4d8v7:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 15%,transparent)}}textarea.svelte-w4d8v7:hover{background-color:var(--color-obsidian-900)}textarea.svelte-w4d8v7:focus{border-color:var(--accent2);background-color:var(--color-obsidian-950);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field.col.svelte-w4d8v7{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;width:100%}.field-label-row.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * .5);justify-content:space-between;align-items:center;width:100%;display:flex}.field-title.svelte-w4d8v7{--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text)}.field-tag.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:var(--accent2);border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-w4d8v7{border-color:color-mix(in oklab,var(--accent2) 25%,transparent)}}.field-tag.svelte-w4d8v7{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-w4d8v7{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.field-tag.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-leading:1;--tw-font-weight:var(--font-weight-bold,700);font-size:9px;line-height:1;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em);color:var(--accent2);text-transform:uppercase}p.hint.svelte-w4d8v7{margin:calc(var(--spacing,.25rem) * 0);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}p.hint.svelte-w4d8v7 code:where(.svelte-w4d8v7){border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);border-radius:.25rem;font-size:10px}.validation-error-msg.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-red-400,oklch(70.4% .191 22.216));display:block}.binding-item.has-conflict.svelte-w4d8v7{border-color:#f99c0073!important}@supports (color:color-mix(in lab,red,red)){.binding-item.has-conflict.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 45%,transparent)!important}}.binding-item.active-conflict.svelte-w4d8v7{background-color:#f99c000f;position:relative}@supports (color:color-mix(in lab,red,red)){.binding-item.active-conflict.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.binding-item.active-conflict.svelte-w4d8v7:hover{border-color:#f99c00b3!important}@supports (color:color-mix(in lab,red,red)){.binding-item.active-conflict.svelte-w4d8v7:hover{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 70%,transparent)!important}}.binding-item.active-conflict.svelte-w4d8v7:hover{--tw-shadow:0 4px 20px var(--tw-shadow-color,#fbbf2426);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.binding-title.has-conflict.svelte-w4d8v7{padding-right:75px}.conflict-marker.svelte-w4d8v7{top:calc(var(--spacing,.25rem) * 2.5);right:calc(var(--spacing,.25rem) * 3.5);background-color:var(--color-amber-400,oklch(82.8% .189 84.429));padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-extrabold,800);font-size:9px;font-weight:var(--font-weight-extrabold,800);color:var(--color-neutral-900,oklch(20.5% 0 0));--tw-shadow:0 2px 6px var(--tw-shadow-color,#fbbf2440);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:.25rem;position:absolute}.conflict-alert-banner.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 3);align-items:center;gap:calc(var(--spacing,.25rem) * 2.5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0040;display:flex}@supports (color:color-mix(in lab,red,red)){.conflict-alert-banner.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.conflict-alert-banner.svelte-w4d8v7{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.conflict-alert-banner.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.conflict-alert-banner.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);color:var(--color-amber-400,oklch(82.8% .189 84.429))}.warning-icon.svelte-w4d8v7{font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));flex-shrink:0}.animate-fade-in.svelte-w4d8v7{animation:.2s cubic-bezier(.16,1,.3,1) fade-in}@keyframes svelte-w4d8v7-fade-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}.custom-select-wrapper.svelte-w4d8v7{flex:1;min-width:190px;position:relative}.custom-select-trigger.svelte-w4d8v7{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-right:calc(var(--spacing,.25rem) * 9);text-align:left;--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text);--tw-shadow:0 4px 12px var(--tw-shadow-color,#00000026);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));-webkit-user-select:none;user-select:none;background:var(--surface2) url("data:image/svg+xml;utf8,") no-repeat right 12px center;background-size:10px}.custom-select-trigger.svelte-w4d8v7:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.custom-select-trigger.svelte-w4d8v7:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 12%,transparent)}}.custom-select-trigger.svelte-w4d8v7:hover{background-color:var(--color-obsidian-700)}.custom-select-trigger.svelte-w4d8v7:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-select-backdrop.svelte-w4d8v7{inset:calc(var(--spacing,.25rem) * 0);z-index:199;position:fixed}.custom-dropdown-menu.svelte-w4d8v7{right:calc(var(--spacing,.25rem) * 0);left:calc(var(--spacing,.25rem) * 0);z-index:200;margin-top:calc(var(--spacing,.25rem) * 1);max-height:calc(var(--spacing,.25rem) * 60);gap:calc(var(--spacing,.25rem) * .5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 1);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex;position:absolute;overflow-y:auto}.custom-dropdown-item.svelte-w4d8v7{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);text-align:left;color:var(--text);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;background-color:#0000;border-style:none;font-size:13px;transition-duration:.15s}.custom-dropdown-item.svelte-w4d8v7:hover{background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 4%,transparent)}}.custom-dropdown-item.svelte-w4d8v7:disabled{cursor:not-allowed;opacity:.4}.custom-dropdown-item.svelte-w4d8v7:disabled:hover{background-color:#0000}.custom-dropdown-item.create-new.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f40;margin-top:calc(var(--spacing,.25rem) * 1)!important}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.create-new.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 25%,transparent)}}.custom-dropdown-item.create-new.svelte-w4d8v7{background-color:#002c22cc}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.create-new.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-emerald-950,oklch(26.2% .051 172.552)) 80%,transparent)}}.custom-dropdown-item.create-new.svelte-w4d8v7{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.custom-dropdown-item.create-new.svelte-w4d8v7:hover{background-color:#004e3be6!important}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.create-new.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--color-emerald-900,oklch(37.8% .077 168.94)) 90%,transparent)!important}}.custom-dropdown-item.create-new.svelte-w4d8v7 .plus-icon:where(.svelte-w4d8v7){margin-right:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800);color:var(--color-emerald-300,oklch(84.5% .143 164.978))}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.targets-section.svelte-134kctg{gap:calc(var(--spacing,.25rem) * 5);padding-bottom:calc(var(--spacing,.25rem) * 10);flex-direction:column;display:flex}.section-header.svelte-134kctg{margin-bottom:calc(var(--spacing,.25rem) * 2);justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 5);display:flex}.description.svelte-134kctg{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.usage-note.svelte-134kctg{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.usage-note.svelte-134kctg{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.usage-note.svelte-134kctg{padding:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.usage-note.svelte-134kctg strong:where(.svelte-134kctg){--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.usage-note.svelte-134kctg em:where(.svelte-134kctg){font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);font-style:normal}.bindings-list.svelte-134kctg{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.binding-item.svelte-134kctg{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));background-color:#1a1f2e66;display:flex}.binding-item.svelte-134kctg:hover{border-color:var(--accent2);--tw-shadow:0 4px 20px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.binding-content.svelte-134kctg{min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex}.binding-row2.svelte-134kctg{justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.binding-title.svelte-134kctg{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.badge.svelte-134kctg{border-radius:var(--radius-xl,.75rem);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-semibold,600);font-size:10px;font-weight:var(--font-weight-semibold,600);text-transform:uppercase}.badge.delivery.svelte-134kctg{border-style:var(--tw-border-style);border-width:1px;border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.badge.delivery.svelte-134kctg{border-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 30%,transparent)}}.badge.delivery.svelte-134kctg{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.badge.delivery.svelte-134kctg{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.badge.delivery.svelte-134kctg{color:var(--color-cyan-300,oklch(86.5% .127 207.078))}.binding-targets.svelte-134kctg{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.binding-actions.svelte-134kctg{margin-top:calc(var(--spacing,.25rem) * 1);justify-content:flex-end;align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);border-top-style:var(--tw-border-style);border-color:#ffffff0d;border-top-width:1px;display:flex}@supports (color:color-mix(in lab,red,red)){.binding-actions.svelte-134kctg{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.binding-actions.svelte-134kctg{padding-top:calc(var(--spacing,.25rem) * 2)}.confirm-label.svelte-134kctg{color:var(--text-muted);font-size:11px}.btn-action.svelte-134kctg{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-134kctg:hover{border-color:var(--text-muted);background-color:var(--border)}.btn-action.small.svelte-134kctg{padding:calc(var(--spacing,.25rem) * 1);padding-inline:calc(var(--spacing,.25rem) * 2);font-size:11px}.btn-action.danger.svelte-134kctg{border-color:#ff656833}@supports (color:color-mix(in lab,red,red)){.btn-action.danger.svelte-134kctg{border-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 20%,transparent)}}.btn-action.danger.svelte-134kctg{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.danger.svelte-134kctg:hover{border-color:var(--color-red-400,oklch(70.4% .191 22.216));background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.btn-action.danger.svelte-134kctg:hover{background-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 10%,transparent)}}.btn-add-wide.svelte-134kctg{margin-bottom:calc(var(--spacing,.25rem) * 4);cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent2);width:100%;padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-style:none;display:flex}.btn-add-wide.svelte-134kctg:hover{--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-add-wide.svelte-134kctg:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.empty-state.svelte-134kctg{border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:2px;border-color:var(--border);background-color:#00000026;flex-direction:column;grid-column:1/-1;justify-content:center;align-items:center;display:flex}@supports (color:color-mix(in lab,red,red)){.empty-state.svelte-134kctg{background-color:color-mix(in oklab,var(--color-black,#000) 15%,transparent)}}.empty-state.svelte-134kctg{padding:calc(var(--spacing,.25rem) * 10);text-align:center}.empty-icon.svelte-134kctg{margin-bottom:calc(var(--spacing,.25rem) * 2);font-size:32px}.empty-state.svelte-134kctg p:where(.svelte-134kctg){margin:calc(var(--spacing,.25rem) * 0);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-leading:initial}}}.row.svelte-1q9seip{margin-top:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 2);display:flex}.btn-preview.svelte-1q9seip{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-preview.svelte-1q9seip:hover:not(:disabled){background-color:var(--border);color:var(--accent)}.btn-preview.svelte-1q9seip:disabled{cursor:not-allowed;opacity:.4}.idle-minutes-input.svelte-1q9seip{width:calc(var(--spacing,.25rem) * 20);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 2.5);text-align:right;color:var(--text);font-size:13px}.voice-status-container.svelte-1q9seip{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);min-height:42px;padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);align-items:center;font-size:13px;display:flex}.status-downloaded.svelte-1q9seip{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-downloading.svelte-1q9seip{color:var(--accent2)}.status-checking.svelte-1q9seip{color:var(--text-muted)}.status-missing-wrapper.svelte-1q9seip{justify-content:space-between;align-items:center;width:100%;display:flex}.status-missing.svelte-1q9seip{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-download.svelte-1q9seip{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}.btn-download.svelte-1q9seip:hover:not(:disabled){background-color:var(--accent2)}.btn-download.svelte-1q9seip:disabled{cursor:not-allowed;border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);color:var(--text-muted);opacity:.5}.field-input-error.svelte-1q9seip{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.field-input-error.svelte-1q9seip:focus{border-color:var(--color-red-500,oklch(63.7% .237 25.331));--tw-shadow:0 0 0 2px var(--tw-shadow-color,#ef444426), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field-error-msg.svelte-1q9seip{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5);color:var(--color-red-400,oklch(70.4% .191 22.216))}.range-input.svelte-1q9seip{width:100%;accent-color:var(--accent)}.number-input.svelte-1q9seip{width:calc(var(--spacing,.25rem) * 20)}.tts-test-row.svelte-1q9seip{justify-content:space-between;align-items:center;width:100%;display:flex}.tts-error-msg.svelte-1q9seip{overflow-wrap:break-word;width:100%}.run-speed-container.svelte-1q9seip{border:1px solid var(--border);border-radius:var(--radius);background:#ffffff05;align-items:center;gap:8px;padding:6px 12px;font-size:12px;font-weight:500;display:flex}.run-speed-label.svelte-1q9seip{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;font-size:10px}.run-speed-value.svelte-1q9seip{color:var(--accent);font-family:JetBrains Mono,monospace;font-weight:600}.run-speed-value.counting.svelte-1q9seip{color:var(--accent2);text-shadow:0 0 8px #38bdf84d}.non-commercial-warning.svelte-1q9seip{margin-bottom:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 1.5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0066;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.non-commercial-warning.svelte-1q9seip{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 40%,transparent)}}.non-commercial-warning.svelte-1q9seip{background-color:#4619014d}@supports (color:color-mix(in lab,red,red)){.non-commercial-warning.svelte-1q9seip{background-color:color-mix(in oklab,var(--color-amber-950,oklch(27.9% .077 45.635)) 30%,transparent)}}.non-commercial-warning.svelte-1q9seip{padding:calc(var(--spacing,.25rem) * 3)}.warning-header.svelte-1q9seip{align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-amber-400,oklch(82.8% .189 84.429));display:flex}.warning-icon.svelte-1q9seip{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)))}.warning-text.svelte-1q9seip{margin:calc(var(--spacing,.25rem) * 0);--tw-leading:var(--leading-relaxed,1.625);max-width:none;font-size:12px;line-height:var(--leading-relaxed,1.625);color:#fee685cc}@supports (color:color-mix(in lab,red,red)){.warning-text.svelte-1q9seip{color:color-mix(in oklab,var(--color-amber-200,oklch(92.4% .12 95.746)) 80%,transparent)}}.field-input-textarea.svelte-1q9seip{margin-top:calc(var(--spacing,.25rem) * 1);box-sizing:border-box;resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}.field-input-textarea.svelte-1q9seip:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#4fc3f733);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.engine-radio-group.svelte-1q9seip{margin-top:calc(var(--spacing,.25rem) * 1.5);gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;width:100%;display:flex}.engine-radio-option.svelte-1q9seip{cursor:pointer;gap:calc(var(--spacing,.25rem) * 1);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);padding:calc(var(--spacing,.25rem) * 3);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));flex-direction:column;display:flex}.engine-radio-option.svelte-1q9seip:hover{border-color:var(--accent2);background-color:var(--surface2)}.engine-radio-option.selected.svelte-1q9seip{border-color:var(--accent);background-color:var(--surface2)}.engine-radio-header.svelte-1q9seip{align-items:center;gap:calc(var(--spacing,.25rem) * 2.5);display:flex}.engine-radio-name.svelte-1q9seip{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--text)}.engine-radio-desc.svelte-1q9seip{margin-left:calc(var(--spacing,.25rem) * 6);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);color:var(--text-muted)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.hint.svelte-1bvctpo{margin-bottom:calc(var(--spacing,.25rem) * 4);max-width:520px;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-300)}.field.col.svelte-1bvctpo{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1.5);flex-direction:column}textarea.svelte-1bvctpo{resize:vertical;border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;padding:calc(var(--spacing,.25rem) * 2);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--text);border-radius:.25rem;font-size:13px}textarea.invalid.svelte-1bvctpo{border-color:var(--color-red-500,oklch(63.7% .237 25.331));--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){textarea.invalid.svelte-1bvctpo{--tw-ring-color:color-mix(in oklab, var(--color-red-500,oklch(63.7% .237 25.331)) 20%, transparent)}}textarea.locked.svelte-1bvctpo{cursor:not-allowed;background-color:#0003}@supports (color:color-mix(in lab,red,red)){textarea.locked.svelte-1bvctpo{background-color:color-mix(in oklab,var(--color-black,#000) 20%,transparent)}}textarea.locked.svelte-1bvctpo{opacity:.6}.validation-error.svelte-1bvctpo{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-red-400,oklch(70.4% .191 22.216))}.field-hint.svelte-1bvctpo{color:var(--color-obsidian-300);font-size:11px}code.svelte-1bvctpo{background-color:#ffffff0d;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){code.svelte-1bvctpo{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}code.svelte-1bvctpo{padding-inline:calc(var(--spacing,.25rem) * 1);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue)}.action-row.svelte-1bvctpo{margin-top:calc(var(--spacing,.25rem) * 3.5);align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding-top:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}.btn-test.svelte-1bvctpo{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);width:100%;padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-style:none}.btn-test.svelte-1bvctpo:hover:not(:disabled){--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-test.svelte-1bvctpo:active:not(:disabled){--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.btn-test.svelte-1bvctpo:disabled{cursor:not-allowed;opacity:.6}.status-msg.svelte-1bvctpo{text-align:center;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600)}.status-msg.success.svelte-1bvctpo{color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-msg.error.svelte-1bvctpo{color:var(--color-red-400,oklch(70.4% .191 22.216))}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-leading:initial}}}.custom-vocab-input.svelte-1s1a8xn{margin-top:calc(var(--spacing,.25rem) * 2);box-sizing:border-box;resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;min-height:80px;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}.custom-vocab-input.svelte-1s1a8xn:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#4fc3f733);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-vocab-input.svelte-1s1a8xn::placeholder{color:var(--text-muted);opacity:.5}.model-status-container.svelte-1s1a8xn{margin-bottom:calc(var(--spacing,.25rem) * 3);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);min-height:42px;padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);align-items:center;font-size:13px;display:flex}.status-downloaded.svelte-1s1a8xn{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-downloading.svelte-1s1a8xn{color:var(--accent2)}.status-checking.svelte-1s1a8xn{color:var(--text-muted)}.status-missing-wrapper.svelte-1s1a8xn{justify-content:space-between;align-items:center;width:100%;display:flex}.status-missing.svelte-1s1a8xn{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-download.svelte-1s1a8xn{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}.btn-download.svelte-1s1a8xn:hover{background-color:var(--accent2)}.status-pill.svelte-1s1a8xn{border-radius:var(--radius);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500)}.status-pill.success.svelte-1s1a8xn{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-1s1a8xn{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 30%,transparent)}}.status-pill.success.svelte-1s1a8xn{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-1s1a8xn{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.status-pill.success.svelte-1s1a8xn{color:var(--color-emerald-300,oklch(84.5% .143 164.978))}.status-pill.error.svelte-1s1a8xn{border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-1s1a8xn{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 30%,transparent)}}.status-pill.error.svelte-1s1a8xn{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-1s1a8xn{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 15%,transparent)}}.status-pill.error.svelte-1s1a8xn{color:var(--color-red-300,oklch(80.8% .114 19.571))}.status-pill.downloading.svelte-1s1a8xn{border-style:var(--tw-border-style);border-width:1px;border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.status-pill.downloading.svelte-1s1a8xn{border-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 30%,transparent)}}.status-pill.downloading.svelte-1s1a8xn{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.status-pill.downloading.svelte-1s1a8xn{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.status-pill.downloading.svelte-1s1a8xn{color:var(--color-cyan-300,oklch(86.5% .127 207.078))}.field-title-col.svelte-1s1a8xn{margin-right:calc(var(--spacing,.25rem) * 4);flex-direction:column;flex:1;display:flex}.field-title-col.svelte-1s1a8xn span:where(.svelte-1s1a8xn){--tw-font-weight:var(--font-weight-medium,500);font-size:13px;font-weight:var(--font-weight-medium,500);color:var(--color-obsidian-100)}.field-title-col.svelte-1s1a8xn .hint:where(.svelte-1s1a8xn){margin-top:calc(var(--spacing,.25rem) * .5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.s1-mini-note.svelte-1s1a8xn{margin-top:calc(var(--spacing,.25rem) * -1);--tw-font-weight:var(--font-weight-medium,500);font-size:11.5px;font-weight:var(--font-weight-medium,500);color:var(--color-accent-blue);opacity:.9}.disabled-section.svelte-1s1a8xn{pointer-events:none;opacity:.5}.disabled-note.svelte-1s1a8xn{color:var(--color-accent-blue);opacity:.9}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.lede.svelte-7vrdzs{--tw-leading:var(--leading-relaxed,1.625);font-size:13px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.disclosure.svelte-7vrdzs{border-color:#38bdf840}@supports (color:color-mix(in lab,red,red)){.disclosure.svelte-7vrdzs{border-color:color-mix(in oklab,var(--color-accent-blue) 25%,transparent)}}.disclosure.svelte-7vrdzs{background-color:#38bdf80a}.ledger.svelte-7vrdzs{gap:calc(var(--spacing,.25rem) * 4);grid-template-columns:repeat(auto-fit,minmax(240px,1fr));display:grid}.ledger-col.svelte-7vrdzs ul:where(.svelte-7vrdzs){margin-top:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 1.5);--tw-leading:var(--leading-relaxed,1.625);font-size:11.5px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted);flex-direction:column;display:flex}.ledger-col.svelte-7vrdzs li:where(.svelte-7vrdzs){border-left-style:var(--tw-border-style);padding-left:calc(var(--spacing,.25rem) * 3);border-left-width:1px}.ledger-head.svelte-7vrdzs{--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em);text-transform:uppercase}.included.svelte-7vrdzs .ledger-head:where(.svelte-7vrdzs){color:var(--color-accent-green)}.included.svelte-7vrdzs li:where(.svelte-7vrdzs){border-color:#10b9814d}.excluded.svelte-7vrdzs .ledger-head:where(.svelte-7vrdzs){color:#f87171}.excluded.svelte-7vrdzs li:where(.svelte-7vrdzs){border-color:#f871714d}.ledger-col.svelte-7vrdzs strong{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.field-caption.svelte-7vrdzs{--tw-font-weight:var(--font-weight-medium,500);font-size:13px;font-weight:var(--font-weight-medium,500);color:var(--text)}.two-up.svelte-7vrdzs{gap:calc(var(--spacing,.25rem) * 4);grid-template-columns:repeat(auto-fit,minmax(200px,1fr));display:grid}.text-input.svelte-7vrdzs{box-sizing:border-box;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}.text-input.svelte-7vrdzs:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#4fc3f733);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.description.svelte-7vrdzs{resize:vertical;--tw-leading:var(--leading-relaxed,1.625);min-height:150px;line-height:var(--leading-relaxed,1.625)}.counter.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--text-muted);font-size:11px}.counter.short.svelte-7vrdzs{color:#f59e0b}.preview.svelte-7vrdzs{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);width:100%;max-height:340px;padding:calc(var(--spacing,.25rem) * 3);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word;white-space:pre-wrap;color:var(--text-muted);overflow:auto}.actions.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}.btn-primary.svelte-7vrdzs{border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 10px var(--tw-shadow-color,#38bdf840);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-primary.svelte-7vrdzs:hover:not(:disabled){--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 14px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-primary.svelte-7vrdzs:disabled{cursor:not-allowed;opacity:.4;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.btn-secondary.svelte-7vrdzs{border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;flex-shrink:0}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-7vrdzs{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.btn-secondary.svelte-7vrdzs{padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-secondary.svelte-7vrdzs:hover{border-color:#38bdf866}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-7vrdzs:hover{border-color:color-mix(in oklab,var(--color-accent-blue) 40%,transparent)}}.btn-secondary.svelte-7vrdzs:hover{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-7vrdzs:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 8%,transparent)}}.link-button.svelte-7vrdzs{margin-left:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);text-decoration-line:underline}.alert-body.svelte-7vrdzs{gap:calc(var(--spacing,.25rem) * 1.5);flex-direction:column;width:100%;display:flex}.alert-msg.svelte-7vrdzs{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625)}.alert-actions.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-wrap:wrap;display:flex}.ok-alert.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:#10b981;border-radius:var(--radius);background-color:#10b9811a;border:1px solid #10b98140;padding:10px 14px;display:flex}code.svelte-7vrdzs{background-color:var(--color-obsidian-950);color:var(--color-accent-blue);border:1px solid var(--border);border-radius:4px;padding:2px 6px;font-family:monospace;font-size:10px}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-font-weight:initial;--tw-leading:initial;--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial}}}.about-card.svelte-4mufsx{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 5);flex-direction:row!important}.logo.svelte-4mufsx{height:calc(var(--spacing,.25rem) * 16);width:calc(var(--spacing,.25rem) * 16);border-radius:var(--radius-xl,.75rem);object-fit:contain;--tw-drop-shadow-size:drop-shadow(0 4px 24px var(--tw-drop-shadow-color,#38bdf859));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.app-name.svelte-4mufsx{margin-bottom:calc(var(--spacing,.25rem) * 1);font-size:var(--text-2xl,1.5rem);line-height:var(--tw-leading,var(--text-2xl--line-height,calc(2 / 1.5)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700)}.app-version.svelte-4mufsx{margin-bottom:calc(var(--spacing,.25rem) * 2.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}p.svelte-4mufsx{--tw-leading:var(--leading-relaxed,1.625);max-width:400px;font-size:13px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}a.svelte-4mufsx{color:var(--accent2);font-size:13px;text-decoration-line:none}a.svelte-4mufsx:hover{text-decoration-line:underline}.kv.svelte-4mufsx{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding-block:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));justify-content:space-between;display:flex}.kv.svelte-4mufsx span:where(.svelte-4mufsx):first-child{color:var(--text-muted)}.credits-hint.svelte-4mufsx{margin-bottom:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.credits-list.svelte-4mufsx{margin-top:calc(var(--spacing,.25rem) * 1);gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.credit-item.svelte-4mufsx{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding-block:calc(var(--spacing,.25rem) * 1.5);justify-content:space-between;align-items:center;display:flex}.credit-item.svelte-4mufsx:last-child{--tw-border-style:none;border-style:none}.credit-name-link.svelte-4mufsx{--tw-font-weight:var(--font-weight-normal,400);font-size:13px;font-weight:var(--font-weight-normal,400);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));text-decoration-line:none}.credit-name-link.svelte-4mufsx:hover{color:var(--color-accent-blue);text-decoration-line:underline}.credit-license.svelte-4mufsx{border-style:var(--tw-border-style);border-width:1px;border-color:#38bdf826;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.credit-license.svelte-4mufsx{border-color:color-mix(in oklab,var(--color-accent-blue) 15%,transparent)}}.credit-license.svelte-4mufsx{background-color:#38bdf814}@supports (color:color-mix(in lab,red,red)){.credit-license.svelte-4mufsx{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.credit-license.svelte-4mufsx{padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-normal,400);font-size:10px;font-weight:var(--font-weight-normal,400);color:var(--color-accent-blue)}.credit-license.non-commercial.svelte-4mufsx{border-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.credit-license.non-commercial.svelte-4mufsx{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 30%,transparent)}}.credit-license.non-commercial.svelte-4mufsx{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.credit-license.non-commercial.svelte-4mufsx{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.credit-license.non-commercial.svelte-4mufsx{color:var(--color-amber-400,oklch(82.8% .189 84.429))}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}.settings-root.svelte-myrvk6{background-color:var(--bg);width:100vw;height:100vh;color:var(--text);display:flex;overflow:hidden}.sidebar.svelte-myrvk6{z-index:10;border-right-style:var(--tw-border-style);border-right-width:1px;border-color:var(--border);background-color:var(--color-obsidian-900);width:fit-content;min-width:135px;padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * 5);--tw-shadow:4px 0 24px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);flex-direction:column;flex-shrink:0;display:flex}.brand.svelte-myrvk6{margin-bottom:calc(var(--spacing,.25rem) * 4);align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-bottom-style:var(--tw-border-style);border-color:#ffffff08;border-bottom-width:1px;display:flex}@supports (color:color-mix(in lab,red,red)){.brand.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.brand.svelte-myrvk6{padding-inline:calc(var(--spacing,.25rem) * 1);padding-block:calc(var(--spacing,.25rem) * 1.5);padding-bottom:calc(var(--spacing,.25rem) * 4);white-space:nowrap}.brand-logo.svelte-myrvk6{height:calc(var(--spacing,.25rem) * 5);width:calc(var(--spacing,.25rem) * 5);object-fit:contain;--tw-drop-shadow-size:drop-shadow(0 2px 8px var(--tw-drop-shadow-color,#38bdf84d));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);flex-shrink:0;animation:4s ease-in-out infinite floating}@keyframes svelte-myrvk6-floating{0%,to{transform:translateY(0)rotate(0)}50%{transform:translateY(-3px)rotate(3deg)}}.brand-text.svelte-myrvk6{white-space:nowrap;flex-direction:column;display:flex;overflow:hidden}.brand-name.svelte-myrvk6{--tw-leading:1.1;--tw-font-weight:850;--tw-tracking:-.5px;letter-spacing:-.5px;white-space:nowrap;color:var(--color-white,#fff);font-size:15px;font-weight:850;line-height:1.1}.brand-tag.svelte-myrvk6{margin-top:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-bold,700);font-size:7px;font-weight:var(--font-weight-bold,700);--tw-tracking:.12em;letter-spacing:.12em;white-space:nowrap;color:var(--color-accent-blue)}.sidebar-nav.svelte-myrvk6{gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex;overflow-y:auto}.nav-btn.svelte-myrvk6{align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 2);text-align:left;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);white-space:nowrap;color:var(--color-obsidian-300);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));display:flex;position:relative}.nav-btn.svelte-myrvk6:hover{--tw-translate-x:2px;translate:var(--tw-translate-x) var(--tw-translate-y);background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.nav-btn.svelte-myrvk6:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.nav-btn.svelte-myrvk6:hover{color:var(--color-white,#fff)}.nav-btn.active.svelte-myrvk6{--tw-translate-x:2px;translate:var(--tw-translate-x) var(--tw-translate-y);background-color:#38bdf814;scale:1.01}@supports (color:color-mix(in lab,red,red)){.nav-btn.active.svelte-myrvk6{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.nav-btn.active.svelte-myrvk6{color:var(--color-accent-blue)}.nav-btn.svelte-myrvk6:active{--tw-translate-x:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y);scale:.97}.nav-icon.svelte-myrvk6{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.nav-btn.svelte-myrvk6:hover .nav-icon:where(.svelte-myrvk6){rotate:5deg;scale:1.18}.nav-active-pill.svelte-myrvk6{top:15%;right:calc(var(--spacing,.25rem) * 0);background-color:var(--color-accent-blue);--tw-shadow:-2px 0 8px var(--tw-shadow-color,var(--color-accent-blue));width:3px;height:70%;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:99px 0 0 99px;position:absolute}.sidebar-footer.svelte-myrvk6{border-top-style:var(--tw-border-style);border-color:#ffffff08;border-top-width:1px}@supports (color:color-mix(in lab,red,red)){.sidebar-footer.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.sidebar-footer.svelte-myrvk6{padding-top:calc(var(--spacing,.25rem) * 4)}.status-panel.svelte-myrvk6{gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-shadow:inset 0 2px 6px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.25s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.25s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));flex-direction:column;display:flex}.status-panel.recording.svelte-myrvk6{border-color:#38bdf840}@supports (color:color-mix(in lab,red,red)){.status-panel.recording.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-accent-blue) 25%,transparent)}}.status-panel.recording.svelte-myrvk6{--tw-shadow:0 4px 20px var(--tw-shadow-color,#38bdf81a), inset 0 2px 6px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.status-header.svelte-myrvk6{align-items:flex-start;gap:calc(var(--spacing,.25rem) * .5);white-space:nowrap;flex-direction:column;display:flex}.status-indicator.svelte-myrvk6{align-items:center;gap:calc(var(--spacing,.25rem) * 1);white-space:nowrap;display:flex}.status-dot.svelte-myrvk6{background-color:var(--color-obsidian-300);width:5px;height:5px;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-radius:3.40282e38px}.status-panel.recording.svelte-myrvk6 .status-dot:where(.svelte-myrvk6){background-color:var(--color-accent-blue);--tw-shadow:0 0 8px var(--tw-shadow-color,var(--color-accent-blue));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);animation:1.2s infinite heartBeat}.status-panel.speaking.svelte-myrvk6 .status-dot:where(.svelte-myrvk6){background-color:var(--color-accent-green);--tw-shadow:0 0 8px var(--tw-shadow-color,var(--color-accent-green));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@keyframes svelte-myrvk6-heartBeat{0%,to{transform:scale(1)}50%{transform:scale(1.4)}}.status-label.svelte-myrvk6{--tw-font-weight:var(--font-weight-bold,700);font-size:10px;font-weight:var(--font-weight-bold,700);white-space:nowrap;color:var(--color-obsidian-300)}.status-panel.recording.svelte-myrvk6 .status-label:where(.svelte-myrvk6){color:var(--color-accent-blue)}.word-count.svelte-myrvk6{--tw-font-weight:var(--font-weight-semibold,600);font-size:9px;font-weight:var(--font-weight-semibold,600);white-space:nowrap;color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.word-count.svelte-myrvk6{color:color-mix(in oklab,var(--color-white,#fff) 30%,transparent)}}.btn-record.svelte-myrvk6{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#38bdf833;width:100%;position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.btn-record.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-accent-blue) 20%,transparent)}}.btn-record.svelte-myrvk6{background-color:#38bdf814}@supports (color:color-mix(in lab,red,red)){.btn-record.svelte-myrvk6{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.btn-record.svelte-myrvk6{padding-inline:calc(var(--spacing,.25rem) * 1);padding-block:calc(var(--spacing,.25rem) * 1.5);text-align:center;--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);white-space:nowrap;color:var(--color-accent-blue);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf80d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-record.svelte-myrvk6:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);border-color:var(--color-accent-blue);background-color:var(--color-accent-blue);color:var(--color-white,#fff);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf840);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.btn-record.svelte-myrvk6:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y);scale:.97}.btn-record.active.svelte-myrvk6{border-color:var(--color-accent-blue);background-color:var(--color-accent-blue);color:var(--color-white,#fff);--tw-shadow:0 4px 16px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pulse-ring.svelte-myrvk6{pointer-events:none;top:calc(var(--spacing,.25rem) * 0);left:calc(var(--spacing,.25rem) * 0);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-accent-blue);opacity:0;width:100%;height:100%;animation:1.6s ease-out infinite ripple;position:absolute}@keyframes svelte-myrvk6-ripple{0%{opacity:.5;transform:scale(1)}to{opacity:0;transform:scale(1.15,1.3)}}.btn-text.svelte-myrvk6{z-index:2;position:relative}.content-container.svelte-myrvk6{z-index:1;background-color:var(--bg);flex-direction:column;flex:1;display:flex;position:relative;overflow:hidden}.content-container.svelte-myrvk6:has(.modal-backdrop){z-index:100}.tab-content.svelte-myrvk6{z-index:1;flex:1;padding:30px;overflow-y:auto}.floating-save-container.svelte-myrvk6{right:calc(var(--spacing,.25rem) * 6);bottom:calc(var(--spacing,.25rem) * 6);z-index:100;align-items:center;gap:calc(var(--spacing,.25rem) * 3.5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-accent-blue);background-color:var(--color-obsidian-900);padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 4);--tw-shadow:0 10px 30px var(--tw-shadow-color,#0006), 0 0 12px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);animation:.3s cubic-bezier(.175,.885,.32,1.275) forwards popUp;display:flex;position:absolute}@keyframes svelte-myrvk6-popUp{0%{opacity:0;transform:translateY(20px)scale(.9)}to{opacity:1;transform:translateY(0)scale(1)}}.save-hint.svelte-myrvk6{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-300)}.btn-save.svelte-myrvk6{border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 10px var(--tw-shadow-color,#38bdf840);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-save.svelte-myrvk6:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 14px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);scale:1.02}.btn-save.svelte-myrvk6:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y);scale:.97}.card-scene.svelte-1pt4ba2{perspective:900px;pointer-events:none;-webkit-user-select:none;user-select:none}.card.svelte-1pt4ba2{position:relative;width:340px;height:152px;border-radius:16px;overflow:hidden;background:linear-gradient(135deg,#181b24,#0b0d12 55%,#141925);border:1px solid rgba(255,255,255,.12);box-shadow:0 18px 44px #0009;font-family:Outfit,Inter,sans-serif;transform:rotateY(88deg);opacity:0;transition:transform .38s cubic-bezier(.175,.885,.32,1.2),opacity .3s ease,border-color .3s ease}.on.svelte-1pt4ba2 .card:where(.svelte-1pt4ba2){transform:rotateY(0);opacity:1}.card.processing.svelte-1pt4ba2{border-color:#38bdf866}.sheen.svelte-1pt4ba2{position:absolute;top:-20px;bottom:-20px;width:64px;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.06) 50%,transparent 100%);animation:svelte-1pt4ba2-sheen-drift 6.5s linear infinite}@keyframes svelte-1pt4ba2-sheen-drift{0%{left:-70px}to{left:410px}}.chip.svelte-1pt4ba2{position:absolute;left:20px;top:18px;width:38px;height:28px;border-radius:6px;background:linear-gradient(160deg,#f6d27a,#d9a946 55%,#b9842b)}.chip-line.svelte-1pt4ba2{position:absolute;background:#462d0073}.chip-line.h1.svelte-1pt4ba2{left:0;right:0;top:9px;height:1.5px}.chip-line.h2.svelte-1pt4ba2{left:0;right:0;top:18px;height:1.5px}.chip-line.v.svelte-1pt4ba2{top:0;bottom:0;left:18px;width:1.5px}.brand.svelte-1pt4ba2{position:absolute;left:68px;top:16px;color:#f3f4f6;font-size:14px;font-weight:850;letter-spacing:.08em}.brand-sub.svelte-1pt4ba2{position:absolute;left:68px;top:34px;color:#ffffff61;font-size:7.5px;font-weight:800;letter-spacing:.4em}.stamp.svelte-1pt4ba2{position:absolute;right:20px;top:18px;display:inline-flex;align-items:center;gap:5px;height:20px;padding:0 9px;border-radius:5px;border:1px solid rgba(244,63,94,.5);background:#f43f5e14;color:#f43f5e;font-size:8.5px;font-weight:850;letter-spacing:.18em}.initializing.svelte-1pt4ba2 .stamp:where(.svelte-1pt4ba2){border-color:#f59e0b80;background:#f59e0b14;color:#f59e0b}.processing.svelte-1pt4ba2 .stamp:where(.svelte-1pt4ba2){border-color:#38bdf880;background:#38bdf814;color:#38bdf8}.stamp-dot.svelte-1pt4ba2{width:6px;height:6px;border-radius:50%;background:currentColor;animation:svelte-1pt4ba2-stamp-blink 1.15s ease-in-out infinite}@keyframes svelte-1pt4ba2-stamp-blink{0%,to{opacity:.35}50%{opacity:1}}.matrix.svelte-1pt4ba2{position:absolute;left:22px;top:56px;width:296px;height:51px;display:flex;gap:4px}.col.svelte-1pt4ba2{display:flex;flex-direction:column;gap:3px}.dot.svelte-1pt4ba2{width:11px;height:6px;border-radius:2px;opacity:.1;transition:opacity .05s linear}.dot.lit.svelte-1pt4ba2{opacity:.95}.dot.red.svelte-1pt4ba2{background:#f43f5e}.dot.amber.svelte-1pt4ba2{background:#fbbf24}.dot.green.svelte-1pt4ba2{background:#34d399}.processing.svelte-1pt4ba2 .dot:where(.svelte-1pt4ba2){background:#22d3ee}.field-label.svelte-1pt4ba2{position:absolute;left:22px;top:118px;color:#ffffff4d;font-size:7px;font-weight:800;letter-spacing:.36em}.field-value.svelte-1pt4ba2{position:absolute;left:22px;top:128px;max-width:200px;color:#e5e7eb;font-size:11.5px;font-weight:750;letter-spacing:.04em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.card-number.svelte-1pt4ba2{position:absolute;right:22px;top:128px;color:#ffffff38;font-size:11px;font-weight:700;letter-spacing:.18em}.scope.svelte-xjziu1{width:540px;height:124px;background:linear-gradient(180deg,#07140c,#030a07);border:1px solid rgba(74,222,128,.25);border-radius:10px;box-shadow:0 10px 36px #0009,0 0 18px #22c55e24;overflow:hidden;pointer-events:none;-webkit-user-select:none;user-select:none;transform:scaleY(.04);opacity:0;transition:transform .32s cubic-bezier(.175,.885,.32,1.2),opacity .28s ease}.scope.on.svelte-xjziu1{transform:scaleY(1);opacity:1}.scope-inner.svelte-xjziu1{width:100%;height:100%;padding:10px 20px 12px;display:flex;flex-direction:column;gap:8px}.header.svelte-xjziu1{display:flex;align-items:center;gap:8px;height:18px;font-family:Outfit,Inter,sans-serif}.led.svelte-xjziu1{width:7px;height:7px;border-radius:50%;background:#4ade80;box-shadow:0 0 7px #4ade80;animation:svelte-xjziu1-led-blink 1.1s ease-in-out infinite;flex-shrink:0}.initializing.svelte-xjziu1 .led:where(.svelte-xjziu1){background:#f59e0b;box-shadow:0 0 7px #f59e0b}.processing.svelte-xjziu1 .led:where(.svelte-xjziu1){background:#38bdf8;box-shadow:0 0 7px #38bdf8}@keyframes svelte-xjziu1-led-blink{0%,to{opacity:.4}50%{opacity:1}}.title.svelte-xjziu1{color:#bbf7d0;font-size:10px;font-weight:800;letter-spacing:.12em}.subtitle.svelte-xjziu1{color:#bbf7d059;font-size:9px;font-weight:500;letter-spacing:.1em}.spacer.svelte-xjziu1{flex:1}.target-chip.svelte-xjziu1{display:inline-flex;align-items:center;gap:5px;background:#4ade800f;border:1px solid rgba(74,222,128,.3);border-radius:4px;padding:2px 8px}.tgt.svelte-xjziu1{color:#4ade80;font-size:8.5px;font-weight:800;letter-spacing:.1em}.tgt-label.svelte-xjziu1{color:#d1fae5;font-size:8.5px;font-weight:700;letter-spacing:.06em;max-width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stage.svelte-xjziu1{position:relative;flex:1}.grid-h.svelte-xjziu1{position:absolute;left:0;right:0;height:1px;background:#4ade8012}.g1.svelte-xjziu1{top:25%}.g2.svelte-xjziu1{top:50%;background:#4ade8024}.g3.svelte-xjziu1{top:75%}.grid-v.svelte-xjziu1{position:absolute;top:0;bottom:0;width:1px;background:#4ade800d}svg.svelte-xjziu1{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.trace.svelte-xjziu1{fill:none;stroke:#a7f3d0;stroke-width:1.8;vector-effect:non-scaling-stroke}.glow.svelte-xjziu1{fill:none;stroke:#4ade80;stroke-width:6;opacity:.16;vector-effect:non-scaling-stroke}.initializing.svelte-xjziu1 .trace:where(.svelte-xjziu1){stroke:#fcd34d}.initializing.svelte-xjziu1 .glow:where(.svelte-xjziu1){stroke:#f59e0b}.processing.svelte-xjziu1 .trace:where(.svelte-xjziu1){stroke:#7dd3fc}.processing.svelte-xjziu1 .glow:where(.svelte-xjziu1){stroke:#38bdf8}.radar.svelte-13tl5wx{--tone: #ff6b35;--tone-soft: rgba(255, 107, 53, .4);display:flex;align-items:center;gap:24px;pointer-events:none;-webkit-user-select:none;user-select:none}.radar.initializing.svelte-13tl5wx{--tone: #f59e0b;--tone-soft: rgba(245, 158, 11, .4)}.radar.processing.svelte-13tl5wx{--tone: #38bdf8;--tone-soft: rgba(56, 189, 248, .4)}.dial.svelte-13tl5wx{position:relative;width:124px;height:124px;border-radius:50%;background:radial-gradient(circle,#10181c,#06090b 85%,#04070a);border:1.2px solid var(--tone-soft);box-shadow:0 12px 34px #0000008c,0 0 22px color-mix(in srgb,var(--tone) 20%,transparent);overflow:hidden;transform:translateY(30px) scale(.85);opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.25),opacity .28s ease}.on.svelte-13tl5wx .dial:where(.svelte-13tl5wx){transform:translateY(0) scale(1);opacity:1}.range-ring.svelte-13tl5wx{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);border-radius:50%;border:1px solid rgba(255,255,255,.1)}.r1.svelte-13tl5wx{width:92px;height:92px}.r2.svelte-13tl5wx{width:56px;height:56px;border-color:#ffffff24}.axis.svelte-13tl5wx{position:absolute;background:#ffffff12}.axis.h.svelte-13tl5wx{left:0;right:0;top:50%;height:1px}.axis.v.svelte-13tl5wx{top:0;bottom:0;left:50%;width:1px}.sweep.svelte-13tl5wx{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;background:conic-gradient(from 0deg,transparent 0deg,transparent 300deg,color-mix(in srgb,var(--tone) 35%,transparent) 350deg,var(--tone) 360deg);animation:svelte-13tl5wx-sweep-rotate 1.5s linear infinite;opacity:.7}@keyframes svelte-13tl5wx-sweep-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.pulse-ring.svelte-13tl5wx{position:absolute;top:50%;left:50%;width:118px;height:118px;margin:-59px 0 0 -59px;border-radius:50%;border:1.5px solid var(--tone);opacity:0;animation:svelte-13tl5wx-ring-expand 1.4s cubic-bezier(.1,.7,.3,1) infinite}.p2.svelte-13tl5wx{animation-delay:.7s}@keyframes svelte-13tl5wx-ring-expand{0%{transform:scale(.18);opacity:calc(.25 + var(--lvl) * .65)}to{transform:scale(1);opacity:0}}.blip.svelte-13tl5wx{position:absolute;border-radius:50%;background:color-mix(in srgb,var(--tone) 60%,#ffffff);animation:svelte-13tl5wx-blip-flash 1.5s linear infinite}.b1.svelte-13tl5wx{left:88px;top:42px;width:5px;height:5px}.b2.svelte-13tl5wx{left:36px;top:86px;width:4px;height:4px;animation-delay:.55s}@keyframes svelte-13tl5wx-blip-flash{0%{opacity:1}55%{opacity:.05}to{opacity:.05}}.core.svelte-13tl5wx{position:absolute;top:50%;left:50%;width:12px;height:12px;margin:-6px 0 0 -6px;border-radius:50%;background:var(--tone);box-shadow:0 0 14px var(--tone);transform:scale(calc(1 + var(--lvl) * 1.6));transition:transform .05s linear}.plate.svelte-13tl5wx{display:flex;align-items:center;gap:10px;width:200px;height:52px;padding:0 12px;background:#0a0c10f0;border:1px solid rgba(255,255,255,.08);border-radius:10px;position:relative;transform:translate(-22px);opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.25) .06s,opacity .28s ease .06s}.on.svelte-13tl5wx .plate:where(.svelte-13tl5wx){transform:translate(0);opacity:1}.plate.svelte-13tl5wx:after{content:"";position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;border-radius:10px;border:1px solid var(--tone);animation:svelte-13tl5wx-lock-pulse 1.15s ease-in-out infinite;pointer-events:none}@keyframes svelte-13tl5wx-lock-pulse{0%,to{opacity:.25}50%{opacity:.85}}.reticle.svelte-13tl5wx{color:var(--tone);font-size:22px;line-height:1;animation:svelte-13tl5wx-lock-pulse 1.15s ease-in-out infinite}.plate-text.svelte-13tl5wx{display:flex;flex-direction:column;gap:2px;min-width:0;font-family:Outfit,Inter,sans-serif}.caption.svelte-13tl5wx{color:#ffffff59;font-size:7.5px;font-weight:800;letter-spacing:.18em}.label.svelte-13tl5wx{color:#e5e7eb;font-size:12px;font-weight:750;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ocean.svelte-1orgnnz{position:relative;width:380px;height:128px;border-radius:24px;overflow:hidden;background:linear-gradient(180deg,#081220f5,#030912f7);border:1.2px solid rgba(34,211,238,.25);box-shadow:0 14px 40px #0009,0 0 24px #0891b238;pointer-events:none;-webkit-user-select:none;user-select:none;font-family:Outfit,Inter,sans-serif;opacity:0;transform:translateY(16px);transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .3s ease}.ocean.on.svelte-1orgnnz{opacity:1;transform:translateY(0)}.ocean.processing.svelte-1orgnnz{border-color:#38bdf859}.moon.svelte-1orgnnz{position:absolute;top:10px;right:62px;width:22px;height:22px;border-radius:50%;background:#e0f2fed9;box-shadow:0 0 16px #bae6fd99;animation:svelte-1orgnnz-moon-glow 2.4s ease-in-out infinite}@keyframes svelte-1orgnnz-moon-glow{0%,to{opacity:.55}50%{opacity:.8}}.title.svelte-1orgnnz{position:absolute;left:18px;top:12px;color:#bae6fd8c;font-size:9.5px;font-weight:800;letter-spacing:.22em}.subtitle.svelte-1orgnnz{position:absolute;left:18px;top:25px;color:#7dd3fc59;font-size:8px;font-weight:500;letter-spacing:.08em}.water.svelte-1orgnnz{position:absolute;left:0;right:0;top:38px;height:90px;transform:translateY(92px);transition:transform .45s cubic-bezier(.22,1,.36,1)}.on.svelte-1orgnnz .water:where(.svelte-1orgnnz){transform:translateY(0)}svg.svelte-1orgnnz{display:block;width:100%;height:100%}.w1.svelte-1orgnnz{fill:#0284c759;stroke:#0284c733;stroke-width:1}.w2.svelte-1orgnnz{fill:#06b6d473;stroke:#06b6d440;stroke-width:1}.w3.svelte-1orgnnz{fill:#22d3ee99;stroke:#a5f3fc8c;stroke-width:1.5}.processing.svelte-1orgnnz .w1:where(.svelte-1orgnnz){fill:#1e40af66}.processing.svelte-1orgnnz .w2:where(.svelte-1orgnnz){fill:#3b82f673}.processing.svelte-1orgnnz .w3:where(.svelte-1orgnnz){fill:#60a5fa8c;stroke:#93c5fd99}.bubble.svelte-1orgnnz{position:absolute;bottom:-8px;width:5px;height:5px;border-radius:50%;border:1px solid rgba(165,243,252,.7);background:#a5f3fc1f;animation:svelte-1orgnnz-bubble-rise 4.2s linear infinite;opacity:0}@keyframes svelte-1orgnnz-bubble-rise{0%{transform:translateY(0);opacity:0}12%{opacity:.55}85%{opacity:.25}to{transform:translateY(-78px);opacity:0}}.buoy.svelte-1orgnnz{position:absolute;left:50%;transform:translate(-50%);display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 12px 0 10px;border-radius:12px;background:#082f49eb;border:1px solid rgba(125,211,252,.5);opacity:0;transition:opacity .3s ease .2s}.on.svelte-1orgnnz .buoy:where(.svelte-1orgnnz){opacity:1}.buoy-dot.svelte-1orgnnz{width:7px;height:7px;border-radius:50%;background:#22d3ee;animation:svelte-1orgnnz-moon-glow 1.15s ease-in-out infinite;flex-shrink:0}.processing.svelte-1orgnnz .buoy-dot:where(.svelte-1orgnnz){background:#60a5fa}.buoy-label.svelte-1orgnnz{color:#e0f2fe;font-size:10px;font-weight:700;max-width:130px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mono.svelte-12wa5lj{width:190px;height:112px;background:#000;border:1px solid rgba(255,255,255,.16);border-radius:6px;position:relative;font-family:Outfit,Inter,sans-serif;pointer-events:none;-webkit-user-select:none;user-select:none;opacity:0;transition:opacity .28s ease}.mono.on.svelte-12wa5lj{opacity:1}.status.svelte-12wa5lj{position:absolute;left:18px;top:14px;display:flex;align-items:center;gap:6px}.dot.svelte-12wa5lj{width:6px;height:6px;border-radius:3px;border:1px solid rgba(245,245,245,.7);background:transparent}.dot.lit.svelte-12wa5lj{background:#f5f5f5;animation:svelte-12wa5lj-mono-blink 1.2s ease-in-out infinite}.dot.processing.svelte-12wa5lj{animation:svelte-12wa5lj-mono-blink-dim 1.2s ease-in-out infinite}.dot.standby.svelte-12wa5lj{opacity:.35}@keyframes svelte-12wa5lj-mono-blink{0%,to{opacity:.5}50%{opacity:1}}@keyframes svelte-12wa5lj-mono-blink-dim{0%,to{opacity:.3}50%{opacity:1}}.status-text.svelte-12wa5lj{color:#ffffff8c;font-size:8px;font-weight:700;letter-spacing:.25em}.bars.svelte-12wa5lj{position:absolute;left:18px;bottom:28px;width:154px;height:52px;display:flex;align-items:flex-end;justify-content:center;gap:14px}.bar.svelte-12wa5lj{width:12px;background:#f5f5f5;border-radius:6px;opacity:1;transition:height .05s linear,opacity .2s ease}.bar.dim.svelte-12wa5lj{opacity:.3}.bar.processing.svelte-12wa5lj{opacity:.55}.baseline.svelte-12wa5lj{position:absolute;left:18px;bottom:28px;width:154px;height:1px;background:#ffffff1f}.target.svelte-12wa5lj{position:absolute;left:18px;bottom:6px;width:154px;text-align:center;color:#fff6;font-size:8.5px;font-weight:600;letter-spacing:.03em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.spectrum.svelte-194vixl{width:440px;height:132px;background:linear-gradient(160deg,#1b0c2e,#0a0614);border:1px solid rgba(232,121,249,.25);border-radius:16px;box-shadow:0 0 26px #c084fc38;position:relative;overflow:hidden;pointer-events:none;-webkit-user-select:none;user-select:none;transform:scaleY(.04);transform-origin:bottom center;opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .16s ease}.spectrum.on.svelte-194vixl{transform:scaleY(1);opacity:1}.header.svelte-194vixl{position:absolute;left:20px;top:12px;right:20px;height:16px;display:flex;align-items:center;gap:8px;font-family:Outfit,Inter,sans-serif}.led.svelte-194vixl{width:7px;height:7px;border-radius:50%;background:#e879f9;box-shadow:0 0 6px #e879f9;animation:svelte-194vixl-spectrum-blink 1.2s ease-in-out infinite;flex-shrink:0}.led.standby.svelte-194vixl{background:#f59e0b;box-shadow:0 0 6px #f59e0b}.led.processing.svelte-194vixl{background:#38bdf8;box-shadow:0 0 6px #38bdf8}@keyframes svelte-194vixl-spectrum-blink{0%,to{opacity:.4}50%{opacity:1}}.title.svelte-194vixl{color:#f5d0fe;font-size:10px;font-weight:800;letter-spacing:.15em}.subtitle.svelte-194vixl{color:#f5d0fe59;font-size:9px;font-weight:500;letter-spacing:.1em}.spacer.svelte-194vixl{flex:1}.chip.svelte-194vixl{display:inline-flex;align-items:center;gap:5px;background:#e879f914;border:1px solid rgba(232,121,249,.3);border-radius:4px;padding:2px 8px}.tgt.svelte-194vixl{color:#e879f9;font-size:8.5px;font-weight:800;letter-spacing:.1em}.tgt-label.svelte-194vixl{color:#fae8ff;font-size:8.5px;font-weight:700;letter-spacing:.06em;max-width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bars.svelte-194vixl{position:absolute;left:20px;right:20px;bottom:16px;display:flex;gap:6.5px;align-items:flex-end;height:96px}.bar.svelte-194vixl{width:19px;border-radius:3px;background:linear-gradient(180deg,#f0abfc,#c084fc 45%,#38bdf8);transition:height .05s linear}.floor.svelte-194vixl{position:absolute;left:20px;right:20px;bottom:16px;height:1px;background:#e879f926}.terminal.svelte-pvtvge{width:380px;height:130px;background:#0d1b4c;border:1.5px solid rgba(125,211,252,.35);border-radius:8px;box-shadow:0 0 20px #080f3099;overflow:hidden;pointer-events:none;-webkit-user-select:none;user-select:none;transform:scaleY(.04);transform-origin:top center;opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .16s ease}.terminal.on.svelte-pvtvge{transform:scaleY(1);opacity:1}.titlebar.svelte-pvtvge{height:24px;background:#ffffff0f;display:flex;align-items:center;gap:6px;padding:0 12px;font-family:Outfit,Inter,sans-serif}.dot.svelte-pvtvge{width:8px;height:8px;border-radius:50%;background:#ffffff38}.titletext.svelte-pvtvge{color:#e0f2fe8c;font-size:9px;font-weight:700;letter-spacing:.1em}.body.svelte-pvtvge{padding:12px 16px;display:flex;flex-direction:column;gap:8px}.line1.svelte-pvtvge{color:#bae6fdb3;font-size:10px;font-weight:600;font-family:SF Mono,Menlo,Consolas,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.line2.svelte-pvtvge{color:#fff;font-size:11px;font-weight:700;letter-spacing:.05em;font-family:SF Mono,Menlo,Consolas,monospace}.line2.standby.svelte-pvtvge{color:#fcd34d}.line2.processing.svelte-pvtvge{color:#7dd3fc}.line3.svelte-pvtvge{color:#bae6fd73;font-size:9.5px;font-weight:500;font-family:SF Mono,Menlo,Consolas,monospace}.vinyl.svelte-kq5b5i{width:320px;height:132px;background:linear-gradient(180deg,#f7ecd9,#e7d6b8);border:1.5px solid rgba(120,89,53,.35);border-radius:14px;box-shadow:0 0 22px #00000059;position:relative;pointer-events:none;-webkit-user-select:none;user-select:none;transform:translateY(16px);opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .28s ease}.vinyl.on.svelte-kq5b5i{transform:translateY(0);opacity:1}.header.svelte-kq5b5i{position:absolute;left:16px;top:12px;right:16px;height:14px;display:flex;align-items:center;gap:8px;font-family:Outfit,Inter,sans-serif}.vu-label.svelte-kq5b5i{color:#5b4530;font-size:12px;font-weight:900;letter-spacing:.17em}.subtitle.svelte-kq5b5i{color:#5b45308c;font-size:8px;font-weight:700;letter-spacing:.19em}.spacer.svelte-kq5b5i{flex:1}.led.svelte-kq5b5i{width:8px;height:8px;border-radius:50%;background:#dc2626;box-shadow:0 0 6px #dc2626;animation:svelte-kq5b5i-vinyl-blink 1.2s ease-in-out infinite;flex-shrink:0}.led.standby.svelte-kq5b5i{background:#f59e0b;box-shadow:0 0 6px #f59e0b}.led.processing.svelte-kq5b5i{background:#38bdf8;box-shadow:0 0 6px #38bdf8}@keyframes svelte-kq5b5i-vinyl-blink{0%,to{opacity:.4}50%{opacity:1}}.face.svelte-kq5b5i{position:absolute;left:16px;top:30px;width:288px;height:72px;background:#fffcf48c;border:1px solid rgba(120,89,53,.25);border-radius:8px}.tick.svelte-kq5b5i{position:absolute;top:14px;width:1.5px;height:22px;background:#5b453066}.tick.red.svelte-kq5b5i{background:#dc2626;height:30px}.scale-label.svelte-kq5b5i{position:absolute;color:#5b453080;font-size:7px;font-family:Outfit,Inter,sans-serif}.scale-label.red.svelte-kq5b5i{color:#dc2626;font-weight:800}.needle-svg.svelte-kq5b5i{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.needle.svelte-kq5b5i{fill:none;stroke:#292524;stroke-width:2px;vector-effect:non-scaling-stroke}.pivot.svelte-kq5b5i{position:absolute;left:138px;top:64px;width:12px;height:12px;border-radius:50%;background:#292524}.target.svelte-kq5b5i{position:absolute;left:16px;bottom:12px;width:288px;color:#5b4530a6;font-size:9.5px;font-weight:700;font-family:Outfit,Inter,sans-serif;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}html,body,#app{background:transparent!important;background-color:transparent!important;box-shadow:none!important;border:none!important;outline:none!important;overflow:hidden!important;will-change:transform,opacity;backface-visibility:hidden}*:focus{outline:none!important;box-shadow:none!important}.overlay-root.svelte-rmqsd6{width:100%;height:100%;background:transparent!important;display:flex;align-items:center;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;overflow:hidden!important}.system-response-box.svelte-rmqsd6{position:absolute;z-index:10;display:flex;align-items:center;gap:10px;height:46px;padding:0 20px;border-radius:23px;font-family:Outfit,Inter,system-ui,sans-serif;opacity:0;transform:translateY(20px);transition:transform .34s cubic-bezier(.175,.885,.32,1.25),opacity .28s ease}.system-response-box.on.svelte-rmqsd6{opacity:1;transform:translateY(0)}.system-response-box.speaking.svelte-rmqsd6{background:#042f24f0;border:1.2px solid rgba(16,185,129,.55);box-shadow:0 10px 28px #00000080,0 0 18px #10b98140;color:#a7f3d0}.system-response-box.command.svelte-rmqsd6{background:#1e103cf0;border:1.2px solid rgba(168,85,247,.65);box-shadow:0 10px 28px #00000080,0 0 18px #a855f74d;color:#e9d5ff}.system-response-box.mcp.svelte-rmqsd6{background:#4c0519f0;border:1.2px solid rgba(244,63,94,.55);box-shadow:0 10px 28px #00000080,0 0 18px #f43f5e40;color:#fecdd3}.cmd-icon.svelte-rmqsd6{font-size:16px;line-height:1;color:#c084fc;animation:svelte-rmqsd6-flash 1.5s infinite ease-in-out}.mini-eq.svelte-rmqsd6{display:flex;align-items:center;gap:2.5px;height:22px}.eq-bar.svelte-rmqsd6{width:3px;height:8px;border-radius:1.5px;background:#34d399;animation:svelte-rmqsd6-eq-bounce .8s ease-in-out infinite alternate}@keyframes svelte-rmqsd6-eq-bounce{0%{height:7px}to{height:21px}}.pill-text.svelte-rmqsd6{display:flex;flex-direction:column;gap:1px;min-width:0}.pill-title.svelte-rmqsd6{font-size:10px;font-weight:850;letter-spacing:.15em}.pill-target.svelte-rmqsd6{font-size:8.5px;font-weight:600;opacity:.55;max-width:180px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pulse-dot.svelte-rmqsd6{width:10px;height:10px;background-color:#f43f5e;border-radius:50%;animation:svelte-rmqsd6-flash 1.2s infinite ease-in-out}@keyframes svelte-rmqsd6-flash{0%,to{opacity:.3;transform:scale(.9)}50%{opacity:1;transform:scale(1.15)}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.diagnostic-window.svelte-45v8pc{background-color:var(--color-obsidian-950);width:100vw;height:100vh;padding:calc(var(--spacing,.25rem) * 5);color:var(--text);justify-content:center;align-items:flex-start;display:flex;overflow-y:auto}.modal-card.svelte-45v8pc{width:100%;max-width:520px;animation:.3s cubic-bezier(.175,.885,.32,1.2) forwards scaleUp}.head.svelte-45v8pc{margin-bottom:calc(var(--spacing,.25rem) * 5);align-items:flex-start;gap:calc(var(--spacing,.25rem) * 3);display:flex}.head-icon.svelte-45v8pc{--tw-leading:1;flex-shrink:0;font-size:32px;line-height:1}.title.svelte-45v8pc{font-size:var(--text-xl,1.25rem);line-height:var(--tw-leading,var(--text-xl--line-height,calc(1.75 / 1.25)));--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800);--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em);color:var(--color-white,#fff)}.subtitle.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--color-obsidian-400);font-size:12.5px}.steps.svelte-45v8pc{margin:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 2.5);padding:calc(var(--spacing,.25rem) * 0);flex-direction:column;list-style-type:none;display:flex}.step.svelte-45v8pc{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 3);border-radius:var(--radius-lg,.5rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;display:flex}@supports (color:color-mix(in lab,red,red)){.step.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.step.svelte-45v8pc{padding:calc(var(--spacing,.25rem) * 3)}.step.done.svelte-45v8pc{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.step.done.svelte-45v8pc{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.step.done.svelte-45v8pc{background-color:#0000}.step-icon.svelte-45v8pc{--tw-leading:calc(var(--spacing,.25rem) * 6);font-size:16px;line-height:calc(var(--spacing,.25rem) * 6);flex-shrink:0}.step-body.svelte-45v8pc{min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex}.step-title.svelte-45v8pc{--tw-font-weight:var(--font-weight-bold,700);font-size:13.5px;font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff)}.step-detail.svelte-45v8pc{--tw-leading:var(--leading-relaxed,1.625);font-size:12.5px;line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-300)}.step-detail.svelte-45v8pc code:where(.svelte-45v8pc){background-color:#ffffff0d;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.step-detail.svelte-45v8pc code:where(.svelte-45v8pc){background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.step-detail.svelte-45v8pc code:where(.svelte-45v8pc){padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue)}.warn-note.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.warn-note.svelte-45v8pc{color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.privacy-note.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:#5ee9b5e6}@supports (color:color-mix(in lab,red,red)){.privacy-note.svelte-45v8pc{color:color-mix(in oklab,var(--color-emerald-300,oklch(84.5% .143 164.978)) 90%,transparent)}}.muted.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--color-obsidian-400);font-size:11px}.shortcut-list.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 1.5);padding:calc(var(--spacing,.25rem) * 0);flex-wrap:wrap;list-style-type:none;display:flex}.shortcut-keys.svelte-45v8pc{background-color:#ffffff0d;border-radius:.25rem;display:inline-block}@supports (color:color-mix(in lab,red,red)){.shortcut-keys.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.shortcut-keys.svelte-45v8pc{padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);font-size:11px}.shortcut-list.svelte-45v8pc li.unbound:where(.svelte-45v8pc) .shortcut-keys:where(.svelte-45v8pc){color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.shortcut-list.svelte-45v8pc li.unbound:where(.svelte-45v8pc) .shortcut-keys:where(.svelte-45v8pc){color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.step-actions.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 2);align-items:center;gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}.manual.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#0006}@supports (color:color-mix(in lab,red,red)){.manual.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-black,#000) 40%,transparent)}}.manual.svelte-45v8pc{padding:calc(var(--spacing,.25rem) * 2.5)}.manual.svelte-45v8pc pre:where(.svelte-45v8pc){margin:calc(var(--spacing,.25rem) * 0);max-height:180px;font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);word-break:break-all;white-space:pre-wrap;color:var(--color-obsidian-200);overflow-y:auto}.error-container.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 4);align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3633;border-radius:.25rem;width:100%;display:flex}@supports (color:color-mix(in lab,red,red)){.error-container.svelte-45v8pc{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.error-container.svelte-45v8pc{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.error-container.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.error-container.svelte-45v8pc{padding:calc(var(--spacing,.25rem) * 3);text-align:left;color:var(--color-red-400,oklch(70.4% .191 22.216));font-size:12px}.error-icon.svelte-45v8pc{flex-shrink:0}.error-msg.svelte-45v8pc{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word}.modal-actions.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 5);justify-content:flex-end;display:flex}.btn-primary.svelte-45v8pc{cursor:pointer;border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-bold,700);font-size:12.5px;font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 14px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-primary.svelte-45v8pc:hover:not(:disabled){--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 18px var(--tw-shadow-color,#38bdf873);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-primary.svelte-45v8pc:disabled{cursor:default;opacity:.6;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.btn-secondary.svelte-45v8pc{cursor:pointer;border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-800);padding-inline:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-semibold,600);font-size:12.5px;font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-300);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-secondary.svelte-45v8pc:hover{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-45v8pc:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 10%,transparent)}}.btn-secondary.svelte-45v8pc:hover{background-color:var(--color-obsidian-700);color:var(--color-white,#fff)}.btn-link.svelte-45v8pc{cursor:pointer;border-style:var(--tw-border-style);padding:calc(var(--spacing,.25rem) * 0);--tw-font-weight:var(--font-weight-semibold,600);font-size:12px;font-weight:var(--font-weight-semibold,600);color:var(--color-accent-blue);text-underline-offset:2px;background-color:#0000;border-width:0;text-decoration-line:underline}.loading-container.svelte-45v8pc{justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-direction:column;width:100%;height:100%;display:flex}.loading-label.svelte-45v8pc{text-align:center;--tw-font-weight:var(--font-weight-semibold,600);font-size:13.5px;font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-200)}.hint.svelte-45v8pc{text-align:center;max-width:280px;color:var(--color-obsidian-400);font-size:11.5px}.spinner.svelte-45v8pc{height:calc(var(--spacing,.25rem) * 7);width:calc(var(--spacing,.25rem) * 7);animation:var(--animate-spin,spin 1s linear infinite);border-style:var(--tw-border-style);border-width:2.5px;border-color:#ffffff0d;border-radius:3.40282e38px}@supports (color:color-mix(in lab,red,red)){.spinner.svelte-45v8pc{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.spinner.svelte-45v8pc{border-top-color:var(--color-accent-blue)}@keyframes svelte-45v8pc-scaleUp{0%{opacity:0;transform:scale(.98)}to{opacity:1;transform:none}}.vx-wizard{--vx-bg-0: #0e1116;--vx-bg-1: #14181f;--vx-bg-2: #1a1f28;--vx-bg-3: #232a35;--vx-bg-4: #2d3540;--vx-line: #2a313c;--vx-line-2: #3a4350;--vx-txt-0: #e8edf3;--vx-txt-1: #b6bfcb;--vx-txt-2: #7e8896;--vx-txt-3: #555f6c;--vx-cyan-0: #22d4ef;--vx-cyan-1: #7ae8f8;--vx-cyan-2: #5cc4d8;--vx-cyan-d: #0d8ea3;--vx-cyan-b: rgba(34, 212, 239, .45);--vx-gold-0: #e8a019;--vx-gold-1: #f5c842;--vx-gold-glow: rgba(232, 160, 25, .3);--vx-good: #6ad48a;--vx-warn: #ffb454;--vx-bad: #f4636e;--vx-mono: ui-monospace, "JetBrains Mono", SFMono-Regular, Consolas, monospace;--vx-ease: cubic-bezier(.21, .6, .35, 1);--vx-sel-bg: linear-gradient(180deg, rgba(34, 212, 239, .07), rgba(34, 212, 239, .01)), var(--vx-bg-1);--vx-sel-shadow: 0 18px 40px -20px rgba(34, 212, 239, .35), 0 0 0 1px rgba(34, 212, 239, .15);--vx-panel-shadow: 0 12px 36px rgba(0, 0, 0, .5), 0 0 0 1px var(--vx-line);--vx-btn-shadow: 0 6px 24px rgba(34, 212, 239, .25), 0 0 0 1px rgba(34, 212, 239, .4) inset;color:var(--vx-txt-0);background:var(--vx-bg-0)}.vx-wizard .vx-eyebrow{font-family:var(--vx-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--vx-cyan-2)}.vx-wizard .vx-label{font-family:var(--vx-mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--vx-txt-3)}.vx-wizard h2.vx-title{margin:8px 0 6px;font-size:30px;letter-spacing:-.03em;line-height:1.05;font-weight:600}.vx-wizard p.vx-lede{margin:0;font-size:14px;line-height:1.5;color:var(--vx-txt-1)}.vx-wizard p.vx-lede b{color:var(--vx-txt-0);font-weight:600}.vx-wizard .vx-card{border:1px solid var(--vx-line);border-radius:14px;background:var(--vx-bg-1);cursor:pointer;text-align:left;color:inherit;font:inherit;transition:border-color .28s var(--vx-ease),background .28s var(--vx-ease),box-shadow .28s var(--vx-ease)}.vx-wizard .vx-card:hover:not(.vx-on){border-color:var(--vx-line-2)}.vx-wizard .vx-card.vx-on{border-color:var(--vx-cyan-b);background:var(--vx-sel-bg);box-shadow:var(--vx-sel-shadow)}.vx-wizard .vx-check{width:24px;height:24px;flex:none;border-radius:50%;border:1px solid var(--vx-line-2);background:transparent;display:grid;place-items:center;font-family:var(--vx-mono);font-size:12px;color:#00222a;transition:all .25s}.vx-wizard .vx-card.vx-on .vx-check{border-color:var(--vx-cyan-0);background:var(--vx-cyan-0)}.vx-wizard .vx-check>span{opacity:0;transition:opacity .2s}.vx-wizard .vx-card.vx-on .vx-check>span{opacity:1}.vx-wizard .vx-btn{height:44px;padding:0 18px;border-radius:10px;border:1px solid var(--vx-line);background:#ffffff08;color:var(--vx-txt-0);font:inherit;font-size:13.5px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:8px;transition:all .2s}.vx-wizard .vx-btn:hover:not(:disabled){border-color:var(--vx-line-2);background:#ffffff0f}.vx-wizard .vx-btn.vx-primary{border-color:#fff3;background:linear-gradient(180deg,var(--vx-cyan-0),var(--vx-cyan-d));color:#00222a;box-shadow:var(--vx-btn-shadow)}.vx-wizard .vx-btn.vx-primary:hover:not(:disabled){background:linear-gradient(180deg,var(--vx-cyan-1),var(--vx-cyan-0))}.vx-wizard .vx-btn.vx-ghost{border-color:transparent;background:transparent;color:var(--vx-txt-1)}.vx-wizard .vx-btn.vx-ghost:hover:not(:disabled){background:#ffffff0a;color:var(--vx-txt-0)}.vx-wizard .vx-btn:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}.vx-wizard .vx-meter{height:8px;border-radius:999px;background:var(--vx-bg-4);overflow:hidden}.vx-wizard .vx-meter>div{height:100%;border-radius:999px;transition:width .6s var(--vx-ease),background .4s}.vx-wizard .vx-keycap{min-width:56px;height:56px;padding:0 16px;border-radius:12px;display:grid;place-items:center;font-family:var(--vx-mono);font-size:16px;font-weight:500;background:linear-gradient(180deg,var(--vx-bg-3),var(--vx-bg-2));color:var(--vx-txt-0);border:1px solid var(--vx-line-2);box-shadow:0 4px 0 var(--vx-bg-0),inset 0 1px #ffffff14;transition:all .25s}.vx-wizard .vx-keycap.vx-hot{background:linear-gradient(180deg,#22d4ef40,#22d4ef14);color:var(--vx-cyan-1);border-color:var(--vx-cyan-b);box-shadow:0 4px #0d8ea399,inset 0 1px #ffffff14}.vx-wizard .vx-plus{font-family:var(--vx-mono);color:var(--vx-txt-3);font-size:18px}.vx-wizard .vx-pill{display:inline-flex;align-items:center;gap:8px;padding:7px 13px;border-radius:999px;border:1px solid var(--vx-line);background:#ffffff05;font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-txt-2)}.vx-wizard .vx-pill.vx-ok{border-color:#6ad48a66;color:var(--vx-good)}.vx-wizard .vx-pill.vx-busy{border-color:var(--vx-cyan-b);color:var(--vx-cyan-1)}.vx-wizard .vx-pill.vx-err{border-color:#f4636e73;color:var(--vx-bad)}@keyframes vxPulse{0%,to{opacity:1}50%{opacity:.35}}@keyframes vxPop{0%{opacity:0;transform:translateY(6px) scale(.98)}to{opacity:1;transform:none}}@keyframes vxRing{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:none}}@keyframes vxScan{0%{transform:translate(-100%)}to{transform:translate(100%)}}@keyframes vxBar{0%,to{transform:scaleY(.35)}50%{transform:scaleY(1)}}@keyframes vxSpin{to{transform:rotate(360deg)}}.vx-wizard .vx-spinner{width:13px;height:13px;border-radius:50%;border:2px solid rgba(34,212,239,.25);border-top-color:var(--vx-cyan-0);animation:vxSpin .7s linear infinite;flex:none}.welcome.svelte-1gicu21{flex:1;min-height:0;display:grid;grid-template-columns:1.1fr 1fr;gap:48px;align-items:center}.halo.svelte-1gicu21{position:relative;width:96px;height:96px;display:grid;place-items:center;margin-bottom:22px}.ring.svelte-1gicu21{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;border:1px solid rgba(34,212,239,.25);animation:vxPulse 2.4s infinite}.ring.inner.svelte-1gicu21{top:12px;right:12px;bottom:12px;left:12px;border-color:#22d4ef26;animation-delay:.6s}.halo.svelte-1gicu21 img:where(.svelte-1gicu21){width:52px;height:52px;border-radius:12px;box-shadow:0 0 16px #22d4ef66}h1.svelte-1gicu21{margin:12px 0 14px;font-size:clamp(30px,4vw,50px);line-height:1.02;letter-spacing:-.035em;font-weight:600}h1.svelte-1gicu21 span:where(.svelte-1gicu21){color:var(--vx-gold-1)}.intro.svelte-1gicu21 p:where(.svelte-1gicu21){margin:0;max-width:560px;font-size:15px;line-height:1.55;color:var(--vx-txt-1)}.reassure.svelte-1gicu21{margin-top:22px;display:inline-flex;align-items:center;gap:10px;padding:9px 14px;border:1px solid rgba(34,212,239,.25);border-radius:999px;background:#22d4ef0a;font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-cyan-2)}.reassure.svelte-1gicu21 span:where(.svelte-1gicu21){color:var(--vx-gold-1)}.cards.svelte-1gicu21{display:grid;grid-template-columns:1fr 1fr;gap:12px}.step-card.svelte-1gicu21{padding:16px 18px;background:linear-gradient(180deg,#ffffff05,#fff0);cursor:default}.head.svelte-1gicu21{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.glyph.svelte-1gicu21{font-family:var(--vx-mono);font-size:20px;color:var(--vx-cyan-1)}.num.svelte-1gicu21{font-family:var(--vx-mono);font-size:11px;color:var(--vx-txt-3)}.title.svelte-1gicu21{font-weight:600;font-size:14.5px;margin-bottom:4px}.desc.svelte-1gicu21{font-size:12.5px;line-height:1.45;color:var(--vx-txt-2)}@media (max-width: 1000px){.welcome.svelte-1gicu21{grid-template-columns:1fr;gap:24px;align-content:start}}.modal-backdrop.svelte-1c9i6zy{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b8;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);display:flex;align-items:center;justify-content:center;z-index:1200;padding:20px;animation:svelte-1c9i6zy-fadeIn .2s ease-out}@keyframes svelte-1c9i6zy-fadeIn{0%{opacity:0}to{opacity:1}}.modal-card.svelte-1c9i6zy{width:100%;max-width:580px;max-height:90vh;background:var(--vx-bg-1);border:1px solid var(--vx-line-2);border-radius:18px;box-shadow:0 24px 60px #000000b3,0 0 0 1px #22d4ef33;display:flex;flex-direction:column;overflow:hidden;color:var(--vx-txt-0)}.modal-header.svelte-1c9i6zy{display:flex;align-items:center;justify-content:space-between;padding:16px 22px;border-bottom:1px solid var(--vx-line);background:var(--vx-bg-2)}.modal-title-row.svelte-1c9i6zy{display:flex;align-items:center;gap:10px}.modal-glyph.svelte-1c9i6zy{font-size:20px}.modal-header.svelte-1c9i6zy h3:where(.svelte-1c9i6zy){margin:0;font-size:16px;font-weight:600;letter-spacing:-.01em;color:var(--vx-txt-0)}.close-btn.svelte-1c9i6zy{background:transparent;border:none;color:var(--vx-txt-2);font-size:16px;cursor:pointer;padding:6px;border-radius:8px;transition:all .2s;line-height:1}.close-btn.svelte-1c9i6zy:hover{color:var(--vx-txt-0);background:#ffffff14}.modal-body.svelte-1c9i6zy{padding:20px 22px;overflow-y:auto;display:flex;flex-direction:column;gap:16px}.modal-hint.svelte-1c9i6zy{margin:0;font-size:12.5px;line-height:1.5;color:var(--vx-txt-2)}.modal-hint.svelte-1c9i6zy code:where(.svelte-1c9i6zy),.field-hint.svelte-1c9i6zy code:where(.svelte-1c9i6zy){background:var(--vx-bg-4);color:var(--vx-cyan-1);padding:2px 5px;border-radius:4px;font-family:var(--vx-mono);font-size:11px;border:1px solid var(--vx-line)}.field-group.svelte-1c9i6zy{display:flex;flex-direction:column;gap:12px;background:#ffffff05;border:1px solid var(--vx-line);border-radius:14px;padding:16px 18px}.field.svelte-1c9i6zy{display:flex;flex-direction:column;gap:6px}.field-title.svelte-1c9i6zy{font-size:12.5px;font-weight:500;color:var(--vx-txt-1)}.vx-input.svelte-1c9i6zy{width:100%;height:38px;padding:0 12px;background:var(--vx-bg-0);border:1px solid var(--vx-line-2);border-radius:8px;color:var(--vx-txt-0);font-family:inherit;font-size:13px;outline:none;transition:border-color .2s,box-shadow .2s;box-sizing:border-box}.vx-input.svelte-1c9i6zy:focus{border-color:var(--vx-cyan-0);box-shadow:0 0 0 2px var(--vx-cyan-b)}.vx-input.svelte-1c9i6zy::placeholder{color:var(--vx-txt-3)}.field-hint.svelte-1c9i6zy{margin:-4px 0 4px;font-size:11px;line-height:1.45;color:var(--vx-txt-3)}.discovered-models.svelte-1c9i6zy{display:flex;flex-direction:column;gap:6px;margin-top:-4px}.model-tags.svelte-1c9i6zy{display:flex;flex-wrap:wrap;gap:6px}.tag-btn.svelte-1c9i6zy{font-size:11.5px;padding:3px 9px;border-radius:6px;background:var(--vx-bg-3);border:1px solid var(--vx-line-2);color:var(--vx-txt-2);cursor:pointer;transition:all .2s}.tag-btn.svelte-1c9i6zy:hover{color:var(--vx-txt-0);border-color:var(--vx-cyan-0)}.tag-btn.active.svelte-1c9i6zy{background:#22d4ef26;border-color:var(--vx-cyan-0);color:var(--vx-cyan-1);font-weight:600}.test-row.svelte-1c9i6zy{display:flex;align-items:center;gap:12px;margin-top:8px;flex-wrap:wrap}.btn-test.svelte-1c9i6zy{height:36px;padding:0 16px;border-radius:8px;background:var(--vx-bg-4);border:1px solid var(--vx-line-2);color:var(--vx-txt-0);font-size:12.5px;font-weight:600;cursor:pointer;transition:all .2s;display:inline-flex;align-items:center;gap:6px}.btn-test.svelte-1c9i6zy:hover:not(:disabled){background:var(--vx-line-2);border-color:var(--vx-cyan-0)}.btn-test.svelte-1c9i6zy:disabled{opacity:.5;cursor:not-allowed}.status-pill.svelte-1c9i6zy{padding:6px 12px;border-radius:8px;font-size:11.5px;font-weight:500;line-height:1.35;word-break:break-word;max-width:100%}.status-pill.success.svelte-1c9i6zy{background:#6ad48a26;color:var(--vx-good);border:1px solid rgba(106,212,138,.3)}.status-pill.error.svelte-1c9i6zy{background:#f4636e26;color:var(--vx-bad);border:1px solid rgba(244,99,110,.3)}.modal-footer.svelte-1c9i6zy{padding:14px 22px;border-top:1px solid var(--vx-line);background:var(--vx-bg-2);display:flex;align-items:center;justify-content:space-between;gap:12px}.footer-status.svelte-1c9i6zy{font-size:12px}.status-msg.ok.svelte-1c9i6zy{color:var(--vx-good);font-weight:500}.status-msg.warn.svelte-1c9i6zy{color:var(--vx-warn)}.footer-actions.svelte-1c9i6zy{display:flex;gap:10px}.engine-step.svelte-xv54mf{flex:1;min-height:0;display:flex;flex-direction:column;gap:10px}.head.svelte-xv54mf{display:flex;gap:20px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-xv54mf{max-width:760px;min-width:0}.copy.svelte-xv54mf .vx-title:where(.svelte-xv54mf){margin:4px 0 3px;font-size:26px}.copy.svelte-xv54mf .vx-lede:where(.svelte-xv54mf){margin:2px 0 0;font-size:13px;line-height:1.4}.gpu-toggle.svelte-xv54mf{flex:none;width:380px;display:flex;align-items:center;gap:12px;padding:8px 14px}.gpu-toggle.svelte-xv54mf:disabled{opacity:.55;cursor:default}.switch.svelte-xv54mf{width:44px;height:26px;border-radius:999px;position:relative;flex:none;background:var(--vx-bg-4);border:1px solid var(--vx-line-2);transition:background .3s}.switch.on.svelte-xv54mf{background:var(--vx-cyan-0)}.knob.svelte-xv54mf{position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 2px 6px #0006;transition:left .28s var(--vx-ease)}.switch.on.svelte-xv54mf .knob:where(.svelte-xv54mf){left:20px}.gpu-copy.svelte-xv54mf{display:block}.gpu-title.svelte-xv54mf{display:flex;align-items:center;gap:6px;font-weight:600;font-size:13px}.gpu-title.svelte-xv54mf .glyph:where(.svelte-xv54mf){font-family:var(--vx-mono);color:var(--vx-cyan-1)}.state.svelte-xv54mf{font-family:var(--vx-mono);font-size:10px;letter-spacing:.1em;color:var(--vx-txt-3);transition:color .3s}.state.on.svelte-xv54mf{color:var(--vx-cyan-1)}.gpu-desc.svelte-xv54mf{display:block;font-size:11px;color:var(--vx-txt-2);margin-top:2px;line-height:1.35}.engines.svelte-xv54mf{flex:1;min-height:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.engine-card.svelte-xv54mf{position:relative;padding:14px 18px;border-radius:14px;display:grid;grid-template-columns:1fr 144px;gap:10px 14px;align-content:start}.left-col.svelte-xv54mf{min-width:0}.corner.svelte-xv54mf{position:absolute;top:12px;right:12px;width:22px;height:22px}.engine-head.svelte-xv54mf{grid-column:1 / -1}.name-row.svelte-xv54mf{display:flex;align-items:center;gap:8px;margin-bottom:2px}.engine-glyph.svelte-xv54mf{font-family:var(--vx-mono);font-size:20px;color:var(--vx-cyan-1);line-height:1}.engine-name.svelte-xv54mf{font-size:17px;font-weight:600;letter-spacing:-.02em;line-height:1.1}.tagline.svelte-xv54mf{font-size:12px;color:var(--vx-txt-2);line-height:1.35;max-width:92%}.warn.svelte-xv54mf{margin-top:6px;padding:6px 9px;border-radius:8px;border:1px solid rgba(255,180,84,.3);background:#ffb4540f;color:var(--vx-warn);font-size:11px;line-height:1.35}.sizes.svelte-xv54mf{display:flex;gap:4px;margin-top:5px;flex-wrap:wrap;min-width:0}.size.svelte-xv54mf{height:40px;flex:1 1 0;max-width:96px;min-width:0;padding:0 4px;border-radius:8px;border:1px solid var(--vx-line);background:#ffffff05;color:var(--vx-txt-1);font-family:var(--vx-mono);cursor:pointer;transition:all .22s;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:2px;white-space:nowrap}.size.svelte-xv54mf:hover{border-color:var(--vx-line-2)}.size.on.svelte-xv54mf{border-color:var(--vx-cyan-b);background:#22d4ef1f;color:var(--vx-cyan-1)}.size-id.svelte-xv54mf{font-size:11.5px;font-weight:600;line-height:1.1;white-space:nowrap}.size-mb.svelte-xv54mf{font-size:9.5px;line-height:1.1;opacity:.75;white-space:nowrap}.remote-summary-box.svelte-xv54mf{margin-top:5px;padding:7px 10px;background:#00000040;border:1px solid var(--vx-line);border-radius:8px;display:flex;flex-direction:column;gap:4px}.remote-row.svelte-xv54mf{display:flex;justify-content:space-between;align-items:center;gap:8px;font-family:var(--vx-mono);font-size:10.5px}.remote-k.svelte-xv54mf{color:var(--vx-txt-2);flex:none}.remote-v.svelte-xv54mf{color:var(--vx-txt-0);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:240px;text-align:right}.remote-v-ok.svelte-xv54mf{color:var(--vx-good);font-weight:600}.remote-v-warn.svelte-xv54mf{color:var(--vx-warn);font-weight:600}.remote-btn-row.svelte-xv54mf{margin-top:6px}.remote-cfg-btn.svelte-xv54mf{width:100%;height:32px;font-size:11.5px}.metrics.svelte-xv54mf{margin-top:14px;display:flex;flex-direction:column;gap:7px}.metric.svelte-xv54mf{display:flex;flex-direction:column;transition:opacity .3s}.metric.dim.svelte-xv54mf{opacity:.45}.metric-head.svelte-xv54mf{display:flex;justify-content:space-between;font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-2);margin-bottom:3px;line-height:1.2}.metric-head.svelte-xv54mf span:where(.svelte-xv54mf):last-child{color:var(--vx-txt-1)}.right-col.svelte-xv54mf{width:144px;display:flex;flex-direction:column;gap:8px}.spark.svelte-xv54mf{width:144px;height:80px;box-sizing:border-box;padding:7px 9px;border-radius:10px;border:1px solid var(--vx-line);background:#00000040;display:flex;flex-direction:column}.spark-head.svelte-xv54mf{display:flex;justify-content:space-between;font-family:var(--vx-mono);font-size:10px;color:var(--vx-txt-2);margin-bottom:5px;flex:none;line-height:1.2}.spark-head.svelte-xv54mf span:where(.svelte-xv54mf):last-child{color:var(--vx-txt-0)}.spark-bars.svelte-xv54mf{display:flex;align-items:flex-end;gap:3px;flex:1;min-height:0}.spark-bars.svelte-xv54mf>div:where(.svelte-xv54mf){flex:1;border-radius:2px;background:var(--vx-cyan-0);transition:height .6s var(--vx-ease),opacity .4s}.status-row.svelte-xv54mf{flex:none;display:flex;justify-content:flex-end}@media (max-width: 1100px){.head.svelte-xv54mf{flex-direction:column;align-items:stretch;gap:10px}.gpu-toggle.svelte-xv54mf{width:100%}.engines.svelte-xv54mf{grid-template-columns:1fr}}.hotkey-step.svelte-1fbfhk3{flex:1;min-height:0;display:flex;flex-direction:column;gap:14px}.copy.svelte-1fbfhk3{max-width:820px;min-width:0}.body.svelte-1fbfhk3{flex:1;min-height:0;display:grid;grid-template-columns:minmax(300px,1fr) 1.6fr;gap:14px}.gestures.svelte-1fbfhk3{display:grid;grid-auto-rows:min-content;gap:10px;align-content:start}.gesture.svelte-1fbfhk3{padding:12px 16px;display:grid;grid-template-columns:1fr 130px;gap:14px;align-items:center}.g-name.svelte-1fbfhk3{font-weight:600;font-size:14.5px;margin-bottom:3px}.g-desc.svelte-1fbfhk3{font-size:12px;color:var(--vx-txt-2);line-height:1.4}.tracks.svelte-1fbfhk3{display:grid;gap:5px}.track-row.svelte-1fbfhk3{display:grid;grid-template-columns:24px 1fr;gap:6px;align-items:center}.track-label.svelte-1fbfhk3{font-family:var(--vx-mono);font-size:9.5px;color:var(--vx-txt-3);letter-spacing:.1em}.track.svelte-1fbfhk3{display:flex;gap:2px;height:9px}.track.svelte-1fbfhk3>div:where(.svelte-1fbfhk3){border-radius:2px;background:var(--vx-bg-3);transition:background .3s}.track.svelte-1fbfhk3>div.lit:where(.svelte-1fbfhk3){background:var(--vx-txt-2)}.track.svelte-1fbfhk3>div.on:where(.svelte-1fbfhk3){background:var(--vx-cyan-0)}.hidden-note.svelte-1fbfhk3{padding:10px 12px;border-radius:10px;border:1px dashed var(--vx-line-2);font-size:12px;line-height:1.45;color:var(--vx-txt-2)}.right.svelte-1fbfhk3{display:flex;flex-direction:column;gap:12px;min-height:0}.recorder.svelte-1fbfhk3{position:relative;overflow:hidden;flex:1;min-height:220px;border-radius:18px;border:1px dashed var(--vx-line-2);background:#ffffff04;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;cursor:pointer;font:inherit;color:inherit;transition:all .3s var(--vx-ease)}.recorder.rec.svelte-1fbfhk3{border-color:var(--vx-cyan-b);background:#22d4ef0d;box-shadow:0 0 0 1px #22d4ef26,0 0 40px #22d4ef1f}.recorder.done.svelte-1fbfhk3{border-color:var(--vx-cyan-b);background:var(--vx-bg-1);box-shadow:0 0 0 1px #22d4ef1a}.scan.svelte-1fbfhk3{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,transparent,rgba(34,212,239,.08),transparent);animation:vxScan 1.6s linear infinite;pointer-events:none}.rec-label.svelte-1fbfhk3{font-family:var(--vx-mono);font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--vx-txt-2);display:flex;align-items:center;gap:8px;transition:color .3s}.recorder.rec.svelte-1fbfhk3 .rec-label:where(.svelte-1fbfhk3){color:var(--vx-cyan-1)}.recorder.done.svelte-1fbfhk3 .rec-label:where(.svelte-1fbfhk3){color:var(--vx-good)}.dot.svelte-1fbfhk3{width:8px;height:8px;border-radius:50%;background:currentColor;box-shadow:0 0 10px currentColor;animation:vxPulse 1.4s infinite}.keycaps.svelte-1fbfhk3{display:flex;gap:10px;align-items:center;min-height:64px}.rec-hint.svelte-1fbfhk3{font-size:13px;color:var(--vx-txt-2);text-align:center;max-width:520px;line-height:1.5;padding:0 20px}.rec-hint.bad.svelte-1fbfhk3{color:var(--vx-warn)}.sys.svelte-1fbfhk3{flex:none;padding:14px 18px;border-radius:14px;border:1px solid var(--vx-line);background:var(--vx-bg-1);display:flex;gap:16px;align-items:center;animation:vxPop .3s var(--vx-ease)}.sys.ok.svelte-1fbfhk3{border-color:#6ad48a66}.sys-glyph.svelte-1fbfhk3{font-family:var(--vx-mono);font-size:26px;color:var(--vx-gold-1)}.sys.ok.svelte-1fbfhk3 .sys-glyph:where(.svelte-1fbfhk3){color:var(--vx-good)}.sys-copy.svelte-1fbfhk3{flex:1;min-width:0}.sys-title.svelte-1fbfhk3{font-weight:600;font-size:14px}.sys-desc.svelte-1fbfhk3{font-size:12.5px;color:var(--vx-txt-2);line-height:1.45;margin-top:2px}.sys-err.svelte-1fbfhk3{margin-top:6px;font-size:12px;color:var(--vx-bad);line-height:1.4}.sys-actions.svelte-1fbfhk3{display:flex;gap:8px;flex:none}@media (max-width: 1100px){.body.svelte-1fbfhk3{grid-template-columns:1fr}}.preview.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;color:var(--vx-cyan-0);background:radial-gradient(120% 120% at 50% 120%,rgba(34,212,239,.1),transparent 70%)}.preview.mono.svelte-y6l73v{color:#dfe6ee;background:none}.still.svelte-y6l73v,.clip.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover;display:block;pointer-events:none}.clip.svelte-y6l73v{opacity:0;transition:opacity .35s ease}.clip.ready.svelte-y6l73v{opacity:1}.bars.svelte-y6l73v{display:flex;align-items:flex-end;justify-content:center;gap:3px;width:64%;height:56%}.bars.svelte-y6l73v>div:where(.svelte-y6l73v){flex:1;min-height:10%;border-radius:2px;background:currentColor;transform-origin:bottom;animation-name:vxBar;animation-iteration-count:infinite;animation-timing-function:ease-in-out;opacity:.9}.wave.svelte-y6l73v{width:76%;height:46%;color:inherit;animation:svelte-y6l73v-waveShift 2.6s linear infinite}@keyframes svelte-y6l73v-waveShift{0%{transform:translate(0)}to{transform:translate(-16%)}}.ring-wrap.svelte-y6l73v{position:relative;width:46%;aspect-ratio:1;display:grid;place-items:center}.ring.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;border:1.5px solid currentColor;opacity:.4;animation:vxPulse 1.8s ease-in-out infinite}.ring.r2.svelte-y6l73v{top:22%;right:22%;bottom:22%;left:22%;animation-delay:.5s}.ring-core.svelte-y6l73v{width:26%;aspect-ratio:1;border-radius:50%;background:currentColor;animation:vxPulse 1.8s ease-in-out infinite;animation-delay:.25s}.dial.svelte-y6l73v{position:relative;width:62%;aspect-ratio:2 / 1;display:grid;place-items:end center}.dial-arc.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:999px 999px 0 0;border:1.5px solid currentColor;border-bottom:0;opacity:.35}.needle.svelte-y6l73v{position:absolute;bottom:0;left:50%;width:2px;height:82%;background:var(--vx-gold-1);transform-origin:bottom center;animation:svelte-y6l73v-needleSwing 2.2s ease-in-out infinite}@keyframes svelte-y6l73v-needleSwing{0%,to{transform:rotate(-38deg)}50%{transform:rotate(34deg)}}.terminal.svelte-y6l73v{width:76%;font-family:var(--vx-mono);font-size:9px;color:#7ab8ff;display:grid;gap:5px}.blocks.svelte-y6l73v{display:flex;gap:2px;height:10px}.blocks.svelte-y6l73v>div:where(.svelte-y6l73v){flex:1;background:#7ab8ff;transform-origin:bottom;animation:vxBar 1.1s ease-in-out infinite}.overlay-step.svelte-ek86vh{flex:1;min-height:0;display:flex;flex-direction:column;gap:14px}.head.svelte-ek86vh{display:flex;gap:24px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-ek86vh{max-width:720px;min-width:0}.choice.svelte-ek86vh{display:grid;grid-template-columns:1fr 1fr;gap:10px;flex:none;width:520px}.mode.svelte-ek86vh{height:66px;padding:0 16px;display:flex;align-items:center;gap:12px}.mode.off-on.svelte-ek86vh{border-color:var(--vx-line-2);background:var(--vx-bg-3);box-shadow:0 0 0 1px var(--vx-line-2)}.mode-glyph.svelte-ek86vh{font-family:var(--vx-mono);font-size:22px;color:var(--vx-txt-2)}.mode-glyph.on.svelte-ek86vh{color:var(--vx-cyan-1)}.mode-title.svelte-ek86vh{display:block;font-weight:600;font-size:14px}.mode-desc.svelte-ek86vh{display:block;font-size:12px;color:var(--vx-txt-2)}.body.svelte-ek86vh{flex:1;min-height:0;display:grid;grid-template-columns:1.7fr 1fr;gap:16px;transition:opacity .4s,filter .4s}.body.muted.svelte-ek86vh{opacity:.18;filter:grayscale(1) blur(1px);pointer-events:none}.styles.svelte-ek86vh,.position.svelte-ek86vh{display:flex;flex-direction:column;min-height:0}.style-grid.svelte-ek86vh{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:8px}.style-card.svelte-ek86vh{overflow:hidden;padding:0;display:flex;flex-direction:column;min-height:0}.thumb.svelte-ek86vh{position:relative;aspect-ratio:16 / 9;background:#05070a;overflow:hidden}.style-meta.svelte-ek86vh{flex:none;display:flex;align-items:center;justify-content:space-between;padding:8px 12px}.style-name.svelte-ek86vh{font-weight:600;font-size:13px}.style-sub.svelte-ek86vh{font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-2)}.style-glyph.svelte-ek86vh{font-family:var(--vx-mono);font-size:14px;color:var(--vx-txt-3);transition:color .3s}.style-glyph.on.svelte-ek86vh{color:var(--vx-cyan-1)}.screen.svelte-ek86vh{position:relative;aspect-ratio:16 / 10;border-radius:12px;border:1px solid var(--vx-line-2);background:linear-gradient(180deg,var(--vx-bg-2),var(--vx-bg-0));overflow:hidden;box-shadow:var(--vx-panel-shadow);margin-top:8px}.grid-lines.svelte-ek86vh{position:absolute;top:0;right:0;bottom:0;left:0;background-image:linear-gradient(to right,rgba(255,255,255,.03) 1px,transparent 1px),linear-gradient(to bottom,rgba(255,255,255,.03) 1px,transparent 1px);background-size:28px 28px}.taskbar.svelte-ek86vh{position:absolute;left:0;right:0;bottom:0;height:7%;background:#00000080;border-top:1px solid var(--vx-line)}.floating.svelte-ek86vh{position:absolute;left:50%;transform:translate(-50%,-50%);width:44%;aspect-ratio:16 / 9;border-radius:8px;overflow:hidden;border:1px solid rgba(34,212,239,.4);box-shadow:0 0 24px #22d4ef40;background:#05070a;transition:top .5s var(--vx-ease)}.pos-buttons.svelte-ek86vh{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:10px}.pos.svelte-ek86vh{height:46px;border-radius:10px;border:1px solid var(--vx-line);background:#ffffff05;color:var(--vx-txt-1);font:inherit;font-size:13px;font-weight:600;cursor:pointer;transition:all .25s;display:flex;align-items:center;justify-content:center;gap:8px}.pos.svelte-ek86vh:hover{border-color:var(--vx-line-2)}.pos.on.svelte-ek86vh{border-color:var(--vx-cyan-b);background:#22d4ef1f;color:var(--vx-cyan-1)}.pos-glyph.svelte-ek86vh{font-family:var(--vx-mono)}@media (max-width: 1100px){.head.svelte-ek86vh{flex-direction:column;align-items:stretch}.choice.svelte-ek86vh{width:100%}.body.svelte-ek86vh{grid-template-columns:1fr}.style-grid.svelte-ek86vh{grid-template-columns:repeat(2,1fr)}}.test-step.svelte-oqvphh{flex:1;min-height:0;display:flex;flex-direction:column;gap:14px}.head.svelte-oqvphh{display:flex;gap:24px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-oqvphh{max-width:640px;min-width:0}.combo.svelte-oqvphh{display:flex;gap:10px;align-items:center;flex:none}.gesture-pill.svelte-oqvphh{margin-left:10px;font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-txt-2);padding:6px 12px;border:1px solid var(--vx-line);border-radius:999px}.box.svelte-oqvphh{position:relative;flex:1;min-height:0;border-radius:18px;border:1px solid var(--vx-line);background:var(--vx-bg-1);transition:all .4s var(--vx-ease);overflow:hidden;display:flex;flex-direction:column}.box.live.svelte-oqvphh{border-color:var(--vx-cyan-b);box-shadow:0 0 40px #22d4ef26}.box.won.svelte-oqvphh{border-color:#6ad48a80;box-shadow:0 0 40px #6ad48a26}.box-head.svelte-oqvphh{flex:none;display:flex;align-items:center;justify-content:space-between;padding:10px 18px;border-bottom:1px solid var(--vx-line)}.file.svelte-oqvphh{font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-txt-2)}.state.svelte-oqvphh{font-family:var(--vx-mono);font-size:11px;letter-spacing:.1em;display:flex;align-items:center;gap:8px;color:var(--vx-txt-3);transition:color .3s}.state.recording.svelte-oqvphh{color:var(--vx-cyan-0)}.state.transcribing.svelte-oqvphh{color:var(--vx-gold-1)}.state.success.svelte-oqvphh{color:var(--vx-good)}.dot.svelte-oqvphh{width:7px;height:7px;border-radius:50%;background:currentColor;box-shadow:0 0 8px currentColor;animation:vxPulse 1.4s infinite}textarea.svelte-oqvphh{display:block;flex:1;min-height:180px;width:100%;padding:22px;border:0;background:transparent;color:var(--vx-txt-0);font-family:inherit;font-size:19px;line-height:1.6;resize:none;caret-color:var(--vx-cyan-0);outline:none}.wave.svelte-oqvphh{position:absolute;left:0;right:0;bottom:0;height:64px;display:flex;align-items:center;justify-content:center;gap:4px;background:linear-gradient(180deg,transparent,rgba(34,212,239,.1));pointer-events:none}.wave.svelte-oqvphh>div:where(.svelte-oqvphh){width:4px;height:30px;border-radius:2px;background:var(--vx-cyan-0);transform-origin:center;animation-name:vxBar;animation-iteration-count:infinite;animation-timing-function:ease-in-out}.won-overlay.svelte-oqvphh{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;text-align:center;background:#0e1116db;animation:vxPop .35s var(--vx-ease)}.tick.svelte-oqvphh{width:84px;height:84px;margin:0 auto 16px;border-radius:50%;border:2px solid var(--vx-good);display:grid;place-items:center;color:var(--vx-good);font-family:var(--vx-mono);font-size:36px;box-shadow:0 0 30px #6ad48a59;animation:vxRing .5s var(--vx-ease)}.won-title.svelte-oqvphh{font-size:26px;font-weight:600;letter-spacing:-.02em}.won-sub.svelte-oqvphh{font-size:14px;color:var(--vx-txt-2);margin:6px 0 18px}.foot.svelte-oqvphh{flex:none;display:flex;justify-content:space-between;align-items:center;gap:20px;font-size:12.5px;color:var(--vx-txt-2)}.engine.svelte-oqvphh{font-family:var(--vx-mono);font-size:11px;white-space:nowrap}@media (max-width: 1000px){.head.svelte-oqvphh{flex-direction:column;align-items:stretch;gap:12px}}.voice-step.svelte-1yghr3b{flex:1;min-height:0;display:flex;flex-direction:column;gap:12px}.head.svelte-1yghr3b{display:flex;gap:20px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-1yghr3b{max-width:680px;min-width:0}.copy.svelte-1yghr3b .vx-lede:where(.svelte-1yghr3b){margin:4px 0 0;font-size:13px;line-height:1.45}.choice.svelte-1yghr3b{display:grid;grid-template-columns:1fr 1fr;gap:10px;flex:none;width:480px}.mode.svelte-1yghr3b{height:58px;padding:0 14px;display:flex;align-items:center;gap:10px}.mode.off-on.svelte-1yghr3b{border-color:var(--vx-line-2);background:var(--vx-bg-3);box-shadow:0 0 0 1px var(--vx-line-2)}.mode-glyph.svelte-1yghr3b{font-family:var(--vx-mono);font-size:20px;color:var(--vx-txt-2)}.mode-glyph.on.svelte-1yghr3b{color:var(--vx-cyan-1)}.mode-title.svelte-1yghr3b{display:block;font-weight:600;font-size:13.5px}.mode-desc.svelte-1yghr3b{display:block;font-size:11.5px;color:var(--vx-txt-2)}.toolbar.svelte-1yghr3b{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:8px 14px;border:1px solid var(--vx-line);border-radius:10px;background:#ffffff05;flex:none;transition:opacity .4s,filter .4s}.audition-panel.svelte-1yghr3b{display:flex;align-items:center;gap:14px;min-width:0}.audition-btn.svelte-1yghr3b{height:38px;padding:0 16px;display:inline-flex;align-items:center;gap:8px;font-size:13px;font-weight:600;border-radius:8px;background:#22d4ef17;border:1px solid var(--vx-cyan-0);color:var(--vx-cyan-0);cursor:pointer;transition:all .2s}.audition-btn.svelte-1yghr3b:hover:not(:disabled){background:#22d4ef2e;box-shadow:0 0 12px #22d4ef40}.audition-btn.svelte-1yghr3b:disabled{opacity:.4;cursor:not-allowed;border-color:var(--vx-line-2);color:var(--vx-txt-3);background:#ffffff08}.audition-btn.playing.svelte-1yghr3b{border-color:var(--vx-gold-1);color:var(--vx-gold-1);background:#eab3081f}.tri.svelte-1yghr3b{font-family:var(--vx-mono);font-size:14px;color:inherit}.stop-icon.svelte-1yghr3b{font-size:14px;color:inherit}.btn-text.svelte-1yghr3b{font-family:var(--vx-mono);font-size:12px;letter-spacing:.02em}.play-bars.svelte-1yghr3b{display:flex;align-items:center;gap:2.5px;height:18px;margin-left:4px}.play-bars.svelte-1yghr3b>div:where(.svelte-1yghr3b){width:3px;height:18px;border-radius:1.5px;background:currentColor;transform-origin:center;animation-name:vxBar;animation-iteration-count:infinite;animation-timing-function:ease-in-out}.audition-meta.svelte-1yghr3b{display:flex;flex-direction:column;gap:2px}.audition-label.svelte-1yghr3b{font-size:12px;color:var(--vx-cyan-0);font-weight:600}.audition-hint.svelte-1yghr3b{font-size:11px;font-family:var(--vx-mono)}.audition-hint.svelte-1yghr3b .ready:where(.svelte-1yghr3b){color:var(--vx-good)}.audition-hint.svelte-1yghr3b .good:where(.svelte-1yghr3b){color:var(--vx-cyan-0)}.audition-hint.svelte-1yghr3b .warn:where(.svelte-1yghr3b){color:var(--vx-gold-1)}.audition-hint.svelte-1yghr3b .bad:where(.svelte-1yghr3b){color:var(--vx-bad)}.audition-hint.svelte-1yghr3b .dim:where(.svelte-1yghr3b){color:var(--vx-txt-3)}.hf-bar.svelte-1yghr3b{display:flex;align-items:center;gap:12px;padding:4px 10px;border-radius:8px;border:1px solid transparent;background:#0003}.hf-bar.needed.svelte-1yghr3b{border-color:color-mix(in srgb,var(--vx-gold-1) 45%,transparent);background:color-mix(in srgb,var(--vx-gold-1) 6%,transparent)}.hf-header.svelte-1yghr3b{display:flex;flex-direction:column;gap:1px;text-align:right}.hf-title.svelte-1yghr3b{font-size:11.5px;font-weight:600}.hf-sub.svelte-1yghr3b{font-size:10px;color:var(--vx-txt-3)}.hf-control.svelte-1yghr3b{display:flex;flex-direction:column;gap:2px}.hf-input.svelte-1yghr3b{width:170px;padding:5px 8px;font-size:11.5px;font-family:inherit;color:inherit;background:#00000073;border:1px solid var(--vx-line);border-radius:6px;outline:none;transition:border-color .2s}.hf-input.svelte-1yghr3b:focus{border-color:var(--vx-cyan-0)}.hf-input[readonly].svelte-1yghr3b{color:var(--vx-txt-2);cursor:not-allowed}.hf-state.svelte-1yghr3b{font-size:9.5px;font-family:var(--vx-mono);color:var(--vx-txt-3);white-space:nowrap}.hf-state.ok.svelte-1yghr3b{color:var(--vx-good)}.hf-state.bad.svelte-1yghr3b{color:var(--vx-bad)}.non-commercial-notice.svelte-1yghr3b{flex:none;padding:8px 12px;border-radius:8px;border:1px solid color-mix(in srgb,var(--vx-gold-1) 45%,transparent);background:color-mix(in srgb,var(--vx-gold-1) 6%,transparent);font-size:12px;line-height:1.4}.gpu-toggle-row.svelte-1yghr3b{flex:none;display:flex;align-items:center;gap:8px;font-size:12.5px;padding:2px}.gpu-toggle-hint.svelte-1yghr3b{color:var(--vx-txt-3);font-size:11px}.grid.svelte-1yghr3b{flex:1;min-height:0;display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(2,minmax(0,1fr));gap:10px;transition:opacity .4s,filter .4s}.grid.muted.svelte-1yghr3b{opacity:.18;filter:grayscale(1) blur(1px);pointer-events:none}.card.svelte-1yghr3b{padding:12px 14px;display:flex;flex-direction:column;gap:8px;min-height:0;cursor:pointer;transition:all .2s}.card.locked.svelte-1yghr3b{opacity:.55}.card.locked.svelte-1yghr3b .name:where(.svelte-1yghr3b){color:var(--vx-txt-2)}.card-head.svelte-1yghr3b{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}.card-title-group.svelte-1yghr3b{display:flex;align-items:baseline;gap:8px;min-width:0}.name.svelte-1yghr3b{font-weight:600;font-size:14.5px;letter-spacing:-.01em;white-space:nowrap}.kind.svelte-1yghr3b{font-family:var(--vx-mono);font-size:10px;color:var(--vx-txt-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions.svelte-1yghr3b{display:grid}.dl.svelte-1yghr3b{height:30px;width:100%;font-size:11.5px;padding:0 10px}.bundled.svelte-1yghr3b{height:30px;display:flex;align-items:center;justify-content:center;border-radius:8px;border:1px dashed var(--vx-line);font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-3);text-align:center}.bundled.ok.svelte-1yghr3b{border-style:solid;border-color:#6ad48a59;color:var(--vx-good)}.metrics.svelte-1yghr3b{display:flex;flex-direction:column;gap:8px}.metric-head.svelte-1yghr3b{display:flex;justify-content:space-between;font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-2);margin-bottom:4px}.metric-head.svelte-1yghr3b span:where(.svelte-1yghr3b):last-child{color:var(--vx-txt-1)}.note.svelte-1yghr3b{font-size:11px;color:var(--vx-txt-2);line-height:1.35;margin-top:auto;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.bad.svelte-1yghr3b{color:var(--vx-bad);word-break:break-word}.note.svelte-1yghr3b .ok:where(.svelte-1yghr3b){color:var(--vx-good)}.play-error.svelte-1yghr3b{flex:none;font-size:12px;color:var(--vx-bad)}@media (max-width: 1100px){.grid.svelte-1yghr3b{grid-template-columns:repeat(2,1fr);grid-template-rows:repeat(3,minmax(0,1fr))}.head.svelte-1yghr3b{flex-direction:column;align-items:stretch}.choice.svelte-1yghr3b{width:100%}}@media (max-width: 800px){.toolbar.svelte-1yghr3b{flex-direction:column;align-items:stretch}.hf-header.svelte-1yghr3b{text-align:left}.hf-input.svelte-1yghr3b{width:100%}}.done-step.svelte-ujy0nl{flex:1;min-height:0;display:grid;grid-template-columns:.95fr 1fr 1fr;gap:18px;align-items:stretch}.hero.svelte-ujy0nl{display:flex;flex-direction:column;justify-content:center}.tick.svelte-ujy0nl{width:76px;height:76px;margin:0 0 20px;border-radius:50%;border:2px solid var(--vx-gold-0);display:grid;place-items:center;color:var(--vx-gold-1);font-family:var(--vx-mono);font-size:32px;box-shadow:0 0 30px var(--vx-gold-glow);animation:vxRing .6s var(--vx-ease)}.tick.warn.svelte-ujy0nl{border-color:var(--vx-bad);color:var(--vx-bad);box-shadow:0 0 30px #f4636e4d}h2.svelte-ujy0nl{margin:10px 0;font-size:clamp(28px,3.2vw,44px);letter-spacing:-.035em;line-height:1.02;font-weight:600}h2.svelte-ujy0nl span:where(.svelte-ujy0nl){color:var(--vx-gold-1)}h2.svelte-ujy0nl span.bad-word:where(.svelte-ujy0nl){color:var(--vx-bad)}.hero.svelte-ujy0nl p:where(.svelte-ujy0nl){margin:0 0 20px;font-size:14.5px;line-height:1.55;color:var(--vx-txt-1)}.summary.svelte-ujy0nl{display:grid;grid-template-columns:1fr 1fr;gap:10px 14px;padding:14px 16px;border-radius:14px;border:1px solid var(--vx-line);background:linear-gradient(180deg,rgba(34,212,239,.04),transparent)}.summary-value.svelte-ujy0nl{font-size:13px;font-weight:600;color:var(--vx-txt-0);margin-top:3px;word-break:break-word}.panel.svelte-ujy0nl{padding:20px;border-radius:18px;border:1px solid var(--vx-line);background:var(--vx-bg-1);display:flex;flex-direction:column;min-height:0}.panel.problems.svelte-ujy0nl{border-color:#f4636e66}.panel-head.svelte-ujy0nl{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.panel-title.svelte-ujy0nl{font-weight:600;font-size:16px;margin:6px 0 4px}.panel-desc.svelte-ujy0nl{font-size:13px;color:var(--vx-txt-2);line-height:1.5;margin-bottom:16px}.issue-list.svelte-ujy0nl{flex:1;min-height:0;overflow:auto;margin:10px 0 12px;display:grid;gap:10px;align-content:start}.issue.svelte-ujy0nl{border:1px solid var(--vx-line);border-radius:12px;background:#f4636e0a;padding:11px 12px}.issue-head.svelte-ujy0nl{display:flex;gap:9px;align-items:baseline}.issue-step.svelte-ujy0nl{flex:none;font-family:var(--vx-mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--vx-bad)}.issue-title.svelte-ujy0nl{font-size:13px;line-height:1.45;color:var(--vx-txt-0)}.issue-detail.svelte-ujy0nl{margin:8px 0 0;padding:8px 10px;border-radius:8px;background:#00000059;font-family:var(--vx-mono);font-size:11px;line-height:1.5;color:var(--vx-txt-2);white-space:pre-wrap;word-break:break-word;max-height:150px;overflow:auto}.problem-actions.svelte-ujy0nl{display:flex;gap:8px;margin-top:auto}.log-status.svelte-ujy0nl{margin-top:8px;font-size:12px;line-height:1.4;color:var(--vx-txt-2)}.mock-screen.svelte-ujy0nl{position:relative;flex:1;min-height:230px;border-radius:12px;border:1px solid var(--vx-line-2);background:linear-gradient(180deg,var(--vx-bg-2),var(--vx-bg-0));overflow:hidden}.mock-bar.svelte-ujy0nl{position:absolute;left:0;right:0;bottom:0;height:40px;background:#0000008c;border-top:1px solid var(--vx-line);display:flex;align-items:center;justify-content:flex-end;padding:0 14px;gap:12px}.mock-sys-icon.svelte-ujy0nl{font-size:11px;color:var(--vx-txt-3);opacity:.65;-webkit-user-select:none;user-select:none}.mock-sys-icon.chevron.svelte-ujy0nl{font-size:14px;margin-left:2px}.tray-btn-wrap.svelte-ujy0nl{position:relative;display:inline-flex;align-items:center;justify-content:center}.tray-btn.svelte-ujy0nl{width:32px;height:32px;border-radius:6px;border:1px solid transparent;background:transparent;cursor:pointer;display:grid;place-items:center;transition:all .2s}.tray-btn.svelte-ujy0nl:hover{background:#ffffff14}.tray-btn.on.svelte-ujy0nl{border-color:#ffffff40;background:#ffffff1f}.tray-btn.svelte-ujy0nl img:where(.svelte-ujy0nl){width:22px;height:22px;display:block;object-fit:contain}.tray-menu.svelte-ujy0nl{position:absolute;right:14px;bottom:48px;width:275px;padding:6px;border-radius:8px;border:1px solid rgba(255,255,255,.15);background:#1f232a;box-shadow:0 10px 30px #000000b3;animation:vxPop .18s var(--vx-ease);z-index:10}.tray-row.svelte-ujy0nl{width:100%;border:none;background:transparent;padding:6px 8px;border-radius:5px;display:flex;align-items:center;gap:8px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:13.5px;color:#e6edf3;text-align:left;cursor:pointer;transition:background .15s,color .15s}.tray-row.svelte-ujy0nl:hover{background:#ffffff14;color:#fff}.chk-gutter.svelte-ujy0nl{width:18px;height:18px;flex:none;display:flex;align-items:center;justify-content:center}.chk.svelte-ujy0nl{width:16px;height:16px;border-radius:4px;border:1px solid rgba(255,255,255,.3);background:#ffffff0f;display:flex;align-items:center;justify-content:center;transition:all .15s ease}.chk.on.svelte-ujy0nl{background:#1d8cf8;border-color:#38bdf8}.tray-icon.svelte-ujy0nl{width:20px;font-size:15px;display:flex;align-items:center;justify-content:center;flex:none}.tray-label.svelte-ujy0nl{flex:1;white-space:nowrap;letter-spacing:-.01em}.tray-label.no-icon.svelte-ujy0nl{padding-left:2px}.tray-sep.svelte-ujy0nl{height:1px;background:#ffffff1f;margin:5px 6px}.click-me.svelte-ujy0nl{position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;gap:2px;font-family:var(--vx-mono);font-size:11px;letter-spacing:.05em;color:var(--vx-cyan-1);white-space:nowrap;pointer-events:none;animation:svelte-ujy0nl-vxNudge 1.6s ease-in-out infinite}.arrow.svelte-ujy0nl{font-size:14px;font-weight:700;line-height:1}@keyframes svelte-ujy0nl-vxNudge{0%,to{transform:translate(-50%) translateY(0)}50%{transform:translate(-50%) translateY(4px)}}.where.svelte-ujy0nl{list-style:none;padding:0;margin:0 0 16px;display:grid;gap:2px}.where.svelte-ujy0nl li:where(.svelte-ujy0nl){display:flex;align-items:center;gap:9px;padding:7px 10px;font-size:12.5px;color:var(--vx-txt-1)}.where.svelte-ujy0nl .glyph:where(.svelte-ujy0nl){font-family:var(--vx-mono);color:var(--vx-cyan-2);width:16px}.where.svelte-ujy0nl .tag:where(.svelte-ujy0nl){margin-left:auto;font-family:var(--vx-mono);font-size:10px;color:var(--vx-txt-3)}.open-settings.svelte-ujy0nl{margin-top:auto;align-self:flex-start}.vx-btn.small.svelte-ujy0nl{height:34px;padding:0 12px;font-size:12px}@media (max-width: 1100px){.done-step.svelte-ujy0nl{grid-template-columns:1fr;align-content:start}}.vx-root.svelte-18pn5kx{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;overflow:hidden}.vx-titlebar.svelte-18pn5kx{height:46px;flex:none;display:flex;align-items:center;gap:9px;padding:0 18px;border-bottom:1px solid var(--vx-line);background:#0e1116b3;z-index:2}.vx-logo.svelte-18pn5kx{width:20px;height:20px;border-radius:5px}.vx-brand.svelte-18pn5kx{font-weight:600;font-size:14.5px;letter-spacing:-.01em}.vx-brand.svelte-18pn5kx span:where(.svelte-18pn5kx){color:var(--vx-cyan-0)}.vx-mono.svelte-18pn5kx{font-family:var(--vx-mono);font-size:11px;letter-spacing:.1em}.vx-dim.svelte-18pn5kx{color:var(--vx-txt-2)}.vx-faint.svelte-18pn5kx{color:var(--vx-txt-3)}.vx-spacer.svelte-18pn5kx{flex:1}.vx-screen.svelte-18pn5kx{flex:1;min-height:0;display:flex;flex-direction:column;padding:22px 32px 16px;overflow:auto;opacity:1;transform:none;transition:opacity .2s ease,transform .2s var(--vx-ease)}.vx-screen.vx-leaving.svelte-18pn5kx{opacity:0;transform:translateY(10px)}.vx-loading.svelte-18pn5kx{margin:auto;display:flex;align-items:center;gap:10px;color:var(--vx-txt-2);font-size:13.5px}.vx-footer.svelte-18pn5kx{flex:none;display:grid;grid-template-columns:170px 1fr auto;align-items:center;gap:28px;border-top:1px solid var(--vx-line);background:#0e1116cc;padding:10px 32px 12px;z-index:3}.vx-nav-left.svelte-18pn5kx,.vx-nav-right.svelte-18pn5kx{display:flex;align-items:center;gap:12px}.vx-nav-right.svelte-18pn5kx{justify-content:flex-end}.vx-skip.svelte-18pn5kx{font-weight:500;color:var(--vx-txt-3)}.vx-blocker.svelte-18pn5kx{max-width:340px;font-size:12px;line-height:1.35;color:var(--vx-txt-2);text-align:right}.vx-track.svelte-18pn5kx,.vx-track-cell.svelte-18pn5kx{display:flex;align-items:center;min-width:0}.vx-track-step.svelte-18pn5kx{display:flex;flex-direction:column;align-items:center;gap:6px;min-width:62px;padding:4px 6px;border:0;background:transparent;font:inherit;color:var(--vx-txt-3);cursor:pointer;transition:color .3s}.vx-track-step.svelte-18pn5kx:disabled{cursor:default}.vx-track-step.vx-done.svelte-18pn5kx{color:var(--vx-txt-1)}.vx-track-step.vx-cur.svelte-18pn5kx{color:var(--vx-txt-0)}.vx-ring.svelte-18pn5kx{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-family:var(--vx-mono);font-size:12px;border:1px solid var(--vx-line-2);background:transparent;color:var(--vx-txt-3);transition:all .35s var(--vx-ease)}.vx-track-step.vx-done.svelte-18pn5kx .vx-ring:where(.svelte-18pn5kx){border-color:#22d4ef66;background:#22d4ef1a;color:var(--vx-cyan-1)}.vx-track-step.vx-cur.svelte-18pn5kx .vx-ring:where(.svelte-18pn5kx){border-color:var(--vx-cyan-0);background:var(--vx-cyan-0);color:#00222a;box-shadow:0 0 16px #22d4ef73}.vx-track-label.svelte-18pn5kx{font-size:11px;font-weight:500;white-space:nowrap}.vx-track-step.vx-cur.svelte-18pn5kx .vx-track-label:where(.svelte-18pn5kx){font-weight:600}.vx-track-line.svelte-18pn5kx{flex:1;min-width:8px;height:2px;margin:0 2px 19px;border-radius:1px;background:var(--vx-bg-4);overflow:hidden}.vx-track-line.svelte-18pn5kx>div:where(.svelte-18pn5kx){height:100%;background:var(--vx-cyan-0);transition:width .5s var(--vx-ease)}.vx-toast.svelte-18pn5kx{position:fixed;left:50%;bottom:84px;transform:translate(-50%);display:flex;align-items:center;gap:14px;max-width:70vw;padding:11px 14px;border-radius:10px;border:1px solid rgba(244,99,110,.45);background:#2a1215;color:#ffb3b8;font-size:13px;box-shadow:var(--vx-panel-shadow);animation:vxPop .25s var(--vx-ease);z-index:20}.vx-toast.svelte-18pn5kx button:where(.svelte-18pn5kx){border:0;background:transparent;color:inherit;cursor:pointer;font-size:13px}@media (max-width: 1000px){.vx-footer.svelte-18pn5kx{grid-template-columns:110px 1fr auto;gap:16px;padding:10px 18px 12px}.vx-track-label.svelte-18pn5kx{display:none}.vx-track-line.svelte-18pn5kx{margin-bottom:0}.vx-screen.svelte-18pn5kx{padding:18px 20px 14px}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}main.svelte-15mrihi{background-color:var(--color-obsidian-950);width:100vw;height:100vh;padding:calc(var(--spacing,.25rem) * 5);color:var(--text);justify-content:center;align-items:flex-start;display:flex;overflow-y:auto}.card.svelte-15mrihi{gap:calc(var(--spacing,.25rem) * 4);flex-direction:column;width:100%;max-width:520px;display:flex}header.svelte-15mrihi{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 3);display:flex}.logo.svelte-15mrihi{height:calc(var(--spacing,.25rem) * 11);width:calc(var(--spacing,.25rem) * 11);border-radius:var(--radius-xl,.75rem);flex-shrink:0}h1.svelte-15mrihi{font-size:var(--text-lg,1.125rem);line-height:var(--tw-leading,var(--text-lg--line-height,calc(1.75 / 1.125)));--tw-leading:var(--leading-tight,1.25);line-height:var(--leading-tight,1.25);--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800);--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em);color:var(--color-white,#fff)}h2.svelte-15mrihi{margin-bottom:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em);color:var(--color-obsidian-400);text-transform:uppercase}.sub.svelte-15mrihi{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--color-obsidian-400);font-size:12.5px}.body.svelte-15mrihi{--tw-leading:var(--leading-relaxed,1.625);font-size:13px;line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-200)}.hint.svelte-15mrihi{--tw-leading:var(--leading-relaxed,1.625);font-size:11.5px;line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-400)}.notes-block.svelte-15mrihi{border-radius:var(--radius-lg,.5rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.notes-block.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.notes-block.svelte-15mrihi{padding:calc(var(--spacing,.25rem) * 3)}.notes.svelte-15mrihi{margin:calc(var(--spacing,.25rem) * 0);max-height:240px;font-family:var(--font-sans,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word;white-space:pre-wrap;color:var(--color-obsidian-200);overflow-y:auto}.warn.svelte-15mrihi{border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0033;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.warn.svelte-15mrihi{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 20%,transparent)}}.warn.svelte-15mrihi{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.warn.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.warn.svelte-15mrihi{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12.5px;line-height:var(--leading-relaxed,1.625);color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.warn.svelte-15mrihi{color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.error.svelte-15mrihi{border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3633;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.error.svelte-15mrihi{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.error.svelte-15mrihi{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.error.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.error.svelte-15mrihi{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12.5px;line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word;color:var(--color-red-400,oklch(70.4% .191 22.216))}.progress-block.svelte-15mrihi{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.bar.svelte-15mrihi{height:calc(var(--spacing,.25rem) * 2);background-color:#ffffff0d;border-radius:3.40282e38px;width:100%;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.bar.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.fill.svelte-15mrihi{background-color:var(--color-accent-blue);height:100%;transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-radius:3.40282e38px}.bar.indeterminate.svelte-15mrihi .fill:where(.svelte-15mrihi){width:33.3333%;animation:var(--animate-pulse,pulse 2s cubic-bezier(.4, 0, .6, 1) infinite)}footer.svelte-15mrihi{margin-top:calc(var(--spacing,.25rem) * 1);justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-wrap:wrap;display:flex}.left-actions.svelte-15mrihi{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;display:flex}.right-actions.svelte-15mrihi{align-items:center;gap:calc(var(--spacing,.25rem) * 2);margin-left:auto;display:flex}.btn-primary.svelte-15mrihi{cursor:pointer;border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-bold,700);font-size:12.5px;font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 14px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-primary.svelte-15mrihi:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 18px var(--tw-shadow-color,#38bdf873);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-secondary.svelte-15mrihi{cursor:pointer;border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-800);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-semibold,600);font-size:12.5px;font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-300);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-secondary.svelte-15mrihi:hover{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-15mrihi:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 10%,transparent)}}.btn-secondary.svelte-15mrihi:hover{background-color:var(--color-obsidian-700);color:var(--color-white,#fff)}.btn-secondary.svelte-15mrihi:disabled,.btn-primary.svelte-15mrihi:disabled{cursor:default;opacity:.6;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.link.svelte-15mrihi{cursor:pointer;border-style:var(--tw-border-style);padding:calc(var(--spacing,.25rem) * 0);text-align:left;--tw-font-weight:var(--font-weight-semibold,600);font-size:12px;font-weight:var(--font-weight-semibold,600);color:var(--color-accent-blue);text-underline-offset:2px;background-color:#0000;border-width:0;text-decoration-line:underline}.link.muted.svelte-15mrihi{--tw-font-weight:var(--font-weight-normal,400);font-weight:var(--font-weight-normal,400);color:var(--color-obsidian-400);text-decoration-line:none}.link.muted.svelte-15mrihi:hover{color:var(--color-obsidian-200);text-decoration-line:underline}.centered.svelte-15mrihi{justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 8);flex-direction:column;display:flex}.spinner.svelte-15mrihi{height:calc(var(--spacing,.25rem) * 7);width:calc(var(--spacing,.25rem) * 7);animation:var(--animate-spin,spin 1s linear infinite);border-style:var(--tw-border-style);border-width:2.5px;border-color:#ffffff0d;border-radius:3.40282e38px}@supports (color:color-mix(in lab,red,red)){.spinner.svelte-15mrihi{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.spinner.svelte-15mrihi{border-top-color:var(--color-accent-blue)}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--color-obsidian-950:#08090b;--color-obsidian-900:#0d0e12;--color-obsidian-800:#14171f;--color-obsidian-700:#1e222d;--color-obsidian-300:#9ca3af;--color-obsidian-100:#e5e7eb;--color-accent-tangerine:#ff6b35;--color-accent-blue:#38bdf8;--color-accent-green:#10b981;--radius-desktop:6px;--animate-border-pulse:border-pulse 1.5s infinite;--animate-flash:flash 1s infinite;--transition-snappy:all .25s cubic-bezier(.175, .885, .32, 1.2);--transition-snappy-fast:all .15s cubic-bezier(.175, .885, .32, 1.275)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,var(--font-sans,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"));font-feature-settings:var(--default-font-feature-settings,initial);font-variation-settings:var(--default-font-variation-settings,initial);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace));font-feature-settings:var(--default-mono-font-feature-settings,initial);font-variation-settings:var(--default-mono-font-variation-settings,initial);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing,.25rem) * 0)}.-top-0\.5{top:calc(var(--spacing,.25rem) * -.5)}.top-0{top:calc(var(--spacing,.25rem) * 0)}.top-2\.5{top:calc(var(--spacing,.25rem) * 2.5)}.top-\[15\%\]{top:15%}.right-0{right:calc(var(--spacing,.25rem) * 0)}.right-3\.5{right:calc(var(--spacing,.25rem) * 3.5)}.right-6{right:calc(var(--spacing,.25rem) * 6)}.-bottom-0\.5{bottom:calc(var(--spacing,.25rem) * -.5)}.bottom-6{bottom:calc(var(--spacing,.25rem) * 6)}.left-0{left:calc(var(--spacing,.25rem) * 0)}.isolate{isolation:isolate}.z-10{z-index:10}.z-\[100\]{z-index:100}.z-\[200\]{z-index:200}.z-\[2000\]{z-index:2000}.col-span-full{grid-column:1/-1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing,.25rem) * 0)}.my-1{margin-block:calc(var(--spacing,.25rem) * 1)}.mt-0\.5{margin-top:calc(var(--spacing,.25rem) * .5)}.mt-1{margin-top:calc(var(--spacing,.25rem) * 1)}.mt-1\.5{margin-top:calc(var(--spacing,.25rem) * 1.5)}.mt-2{margin-top:calc(var(--spacing,.25rem) * 2)}.mt-2\.5{margin-top:calc(var(--spacing,.25rem) * 2.5)}.mt-3\.5{margin-top:calc(var(--spacing,.25rem) * 3.5)}.mt-4{margin-top:calc(var(--spacing,.25rem) * 4)}.mt-6{margin-top:calc(var(--spacing,.25rem) * 6)}.mb-1{margin-bottom:calc(var(--spacing,.25rem) * 1)}.mb-2{margin-bottom:calc(var(--spacing,.25rem) * 2)}.mb-3{margin-bottom:calc(var(--spacing,.25rem) * 3)}.mb-3\.5{margin-bottom:calc(var(--spacing,.25rem) * 3.5)}.mb-4{margin-bottom:calc(var(--spacing,.25rem) * 4)}.mb-5{margin-bottom:calc(var(--spacing,.25rem) * 5)}.ml-2\.5{margin-left:calc(var(--spacing,.25rem) * 2.5)}.ml-4{margin-left:calc(var(--spacing,.25rem) * 4)}.ml-6{margin-left:calc(var(--spacing,.25rem) * 6)}.box-border{box-sizing:border-box}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\.5{height:calc(var(--spacing,.25rem) * 1.5)}.h-2{height:calc(var(--spacing,.25rem) * 2)}.h-3\.5{height:calc(var(--spacing,.25rem) * 3.5)}.h-4{height:calc(var(--spacing,.25rem) * 4)}.h-5{height:calc(var(--spacing,.25rem) * 5)}.h-7{height:calc(var(--spacing,.25rem) * 7)}.h-11{height:calc(var(--spacing,.25rem) * 11)}.h-16{height:calc(var(--spacing,.25rem) * 16)}.h-\[5px\]{height:5px}.h-\[70\%\]{height:70%}.h-full{height:100%}.h-screen{height:100vh}.max-h-60{max-height:calc(var(--spacing,.25rem) * 60)}.max-h-\[85vh\]{max-height:85vh}.max-h-\[180px\]{max-height:180px}.max-h-\[240px\]{max-height:240px}.max-h-\[340px\]{max-height:340px}.min-h-\[42px\]{min-height:42px}.min-h-\[70px\]{min-height:70px}.min-h-\[80px\]{min-height:80px}.min-h-\[150px\]{min-height:150px}.w-1\.5{width:calc(var(--spacing,.25rem) * 1.5)}.w-1\/3{width:33.3333%}.w-2{width:calc(var(--spacing,.25rem) * 2)}.w-4{width:calc(var(--spacing,.25rem) * 4)}.w-5{width:calc(var(--spacing,.25rem) * 5)}.w-7{width:calc(var(--spacing,.25rem) * 7)}.w-11{width:calc(var(--spacing,.25rem) * 11)}.w-16{width:calc(var(--spacing,.25rem) * 16)}.w-20{width:calc(var(--spacing,.25rem) * 20)}.w-\[2px\]{width:2px}.w-\[3px\]{width:3px}.w-\[5px\]{width:5px}.w-\[90\%\]{width:90%}.w-fit{width:fit-content}.w-full{width:100%}.w-screen{width:100vw}.max-w-\[280px\]{max-width:280px}.max-w-\[500px\]{max-width:500px}.max-w-\[520px\]{max-width:520px}.min-w-0{min-width:calc(var(--spacing,.25rem) * 0)}.min-w-\[36px\]{min-width:36px}.min-w-\[135px\]{min-width:135px}.min-w-\[190px\]{min-width:190px}.flex-1{flex:1}.flex-\[2\]{flex:2}.flex-shrink,.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-y-0\.5{--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-\[1px\]{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-\[0\.97\]{scale:.97}.scale-\[1\.01\]{scale:1.01}.scale-\[1\.02\]{scale:1.02}.scale-\[1\.18\]{scale:1.18}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.transform\!{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)!important}.animate-\[floating_4s_ease-in-out_infinite\]{animation:4s ease-in-out infinite floating}.animate-\[ripple_1\.6s_infinite_ease-out\]{animation:1.6s ease-out infinite ripple}.animate-border-pulse{animation:var(--animate-border-pulse)}.animate-flash{animation:var(--animate-flash)}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-y{resize:vertical}.list-none{list-style-type:none}.flex-col{flex-direction:column}.flex-row\!{flex-direction:row!important}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing,.25rem) * .5)}.gap-1{gap:calc(var(--spacing,.25rem) * 1)}.gap-1\.5{gap:calc(var(--spacing,.25rem) * 1.5)}.gap-2{gap:calc(var(--spacing,.25rem) * 2)}.gap-2\.5{gap:calc(var(--spacing,.25rem) * 2.5)}.gap-3{gap:calc(var(--spacing,.25rem) * 3)}.gap-3\.5{gap:calc(var(--spacing,.25rem) * 3.5)}.gap-4{gap:calc(var(--spacing,.25rem) * 4)}.gap-5{gap:calc(var(--spacing,.25rem) * 5)}.gap-\[2px\]{gap:2px}.gap-\[10px\]{gap:10px}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded\!{border-radius:.25rem!important}.rounded-\[99px_0_0_99px\]{border-radius:99px 0 0 99px}.rounded-\[var\(--radius\)\]{border-radius:var(--radius)}.rounded-desktop{border-radius:var(--radius-desktop)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg,.5rem)}.rounded-md{border-radius:var(--radius-md,.375rem)}.rounded-xl{border-radius:var(--radius-xl,.75rem)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[2\.5px\]{border-style:var(--tw-border-style);border-width:2.5px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-none\!{--tw-border-style:none!important;border-style:none!important}.border-solid{--tw-border-style:solid;border-style:solid}.border-\[\#f43f5e\]{border-color:#f43f5e}.border-\[\#fbbf24\]{border-color:#fbbf24}.border-\[var\(--accent\)\]{border-color:var(--accent)}.border-\[var\(--accent2\)\],.border-\[var\(--accent2\)\]\/25{border-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--accent2\)\]\/25{border-color:color-mix(in oklab,var(--accent2) 25%,transparent)}}.border-\[var\(--border\)\]{border-color:var(--border)}.border-\[var\(--color-accent-blue\)\]{border-color:var(--color-accent-blue)}.border-\[var\(--color-accent-blue\)\]\/15{border-color:#38bdf826}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-accent-blue\)\]\/15{border-color:color-mix(in oklab,var(--color-accent-blue) 15%,transparent)}}.border-\[var\(--color-accent-blue\)\]\/20{border-color:#38bdf833}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-accent-blue\)\]\/20{border-color:color-mix(in oklab,var(--color-accent-blue) 20%,transparent)}}.border-\[var\(--color-accent-blue\)\]\/25{border-color:#38bdf840}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-accent-blue\)\]\/25{border-color:color-mix(in oklab,var(--color-accent-blue) 25%,transparent)}}.border-amber-500\/20{border-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/20{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 20%,transparent)}}.border-amber-500\/25{border-color:#f99c0040}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/25{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.border-amber-500\/40{border-color:#f99c0066}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/40{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 40%,transparent)}}.border-amber-500\/70\!{border-color:#f99c00b3!important}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/70\!{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 70%,transparent)!important}}.border-emerald-500\/25{border-color:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/25{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 25%,transparent)}}.border-red-500{border-color:var(--color-red-500,oklch(63.7% .237 25.331))}.border-red-500\!{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.border-red-500\/20{border-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.border-red-500\/20{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.border-red-500\/25{border-color:#fb2c3640}@supports (color:color-mix(in lab,red,red)){.border-red-500\/25{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 25%,transparent)}}.border-slate-500\/30{border-color:#62748e4d}@supports (color:color-mix(in lab,red,red)){.border-slate-500\/30{border-color:color-mix(in oklab,var(--color-slate-500,oklch(55.4% .046 257.417)) 30%,transparent)}}.border-white\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.border-white\/5{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.border-white\/12{border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.border-white\/12{border-color:color-mix(in oklab,var(--color-white,#fff) 12%,transparent)}}.border-white\/15{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.border-white\/15{border-color:color-mix(in oklab,var(--color-white,#fff) 15%,transparent)}}.border-white\/\[0\.03\]{border-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.03\]{border-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.border-white\/\[0\.05\]{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.05\]{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.border-yellow-500\/30{border-color:#edb2004d}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/30{border-color:color-mix(in oklab,var(--color-yellow-500,oklch(79.5% .184 86.047)) 30%,transparent)}}.border-t-\[var\(--color-accent-blue\)\]{border-top-color:var(--color-accent-blue)}.bg-\[\#1e2436\]{background-color:#1e2436}.bg-\[\#39ff14\]{background-color:#39ff14}.bg-\[\#444\]{background-color:#444}.bg-\[\#ff6d00\]{background-color:#ff6d00}.bg-\[\#ffab00\]{background-color:#ffab00}.bg-\[rgba\(244\,63\,94\,0\.05\)\]{background-color:#f43f5e0d}.bg-\[rgba\(251\,191\,36\,0\.05\)\]{background-color:#fbbf240d}.bg-\[var\(--accent\)\]{background-color:var(--accent)}.bg-\[var\(--accent2\)\],.bg-\[var\(--accent2\)\]\/8{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--accent2\)\]\/8{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.bg-\[var\(--accent2\)\]\/10{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--accent2\)\]\/10{background-color:color-mix(in oklab,var(--accent2) 10%,transparent)}}.bg-\[var\(--accent2\)\]\/15{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--accent2\)\]\/15{background-color:color-mix(in oklab,var(--accent2) 15%,transparent)}}.bg-\[var\(--bg\)\]{background-color:var(--bg)}.bg-\[var\(--border\)\]{background-color:var(--border)}.bg-\[var\(--color-accent-blue\)\]{background-color:var(--color-accent-blue)}.bg-\[var\(--color-accent-blue\)\]\/8{background-color:#38bdf814}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--color-accent-blue\)\]\/8{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.bg-\[var\(--color-accent-green\)\]{background-color:var(--color-accent-green)}.bg-\[var\(--color-obsidian-300\)\]{background-color:var(--color-obsidian-300)}.bg-\[var\(--color-obsidian-700\)\]{background-color:var(--color-obsidian-700)}.bg-\[var\(--color-obsidian-800\)\]{background-color:var(--color-obsidian-800)}.bg-\[var\(--color-obsidian-900\)\]{background-color:var(--color-obsidian-900)}.bg-\[var\(--color-obsidian-950\)\]{background-color:var(--color-obsidian-950)}.bg-\[var\(--surface2\)\]{background-color:var(--surface2)}.bg-accent-blue{background-color:var(--color-accent-blue)}.bg-accent-blue\!{background-color:var(--color-accent-blue)!important}.bg-amber-400{background-color:var(--color-amber-400,oklch(82.8% .189 84.429))}.bg-amber-500\/6{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/6{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.bg-amber-950\/30{background-color:#4619014d}@supports (color:color-mix(in lab,red,red)){.bg-amber-950\/30{background-color:color-mix(in oklab,var(--color-amber-950,oklch(27.9% .077 45.635)) 30%,transparent)}}.bg-black\/25{background-color:#00000040}@supports (color:color-mix(in lab,red,red)){.bg-black\/25{background-color:color-mix(in oklab,var(--color-black,#000) 25%,transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black,#000) 40%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black,#000) 60%,transparent)}}.bg-cyan-500\/15{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.bg-cyan-500\/15{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.bg-emerald-500\/6{background-color:#00bb7f0f}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/6{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 6%,transparent)}}.bg-emerald-500\/15{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/15{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.bg-emerald-950\/80{background-color:#002c22cc}@supports (color:color-mix(in lab,red,red)){.bg-emerald-950\/80{background-color:color-mix(in oklab,var(--color-emerald-950,oklch(26.2% .051 172.552)) 80%,transparent)}}.bg-red-400\/10{background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.bg-red-400\/10{background-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 10%,transparent)}}.bg-red-500{background-color:var(--color-red-500,oklch(63.7% .237 25.331))}.bg-red-500\/6{background-color:#fb2c360f}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/6{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 6%,transparent)}}.bg-red-500\/8{background-color:#fb2c3614}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/8{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 8%,transparent)}}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.bg-red-500\/15{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/15{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 15%,transparent)}}.bg-slate-500\/10{background-color:#62748e1a}@supports (color:color-mix(in lab,red,red)){.bg-slate-500\/10{background-color:color-mix(in oklab,var(--color-slate-500,oklch(55.4% .046 257.417)) 10%,transparent)}}.bg-transparent{background-color:#0000}.bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/5{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.bg-white\/\[0\.02\]{background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.02\]{background-color:color-mix(in oklab,var(--color-white,#fff) 2%,transparent)}}.bg-white\/\[0\.03\]{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.03\]{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.bg-white\/\[0\.05\]{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.05\]{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.bg-white\/\[0\.08\]{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-white,#fff) 8%,transparent)}}.bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500,oklch(79.5% .184 86.047)) 10%,transparent)}}.object-contain{object-fit:contain}.p-0{padding:calc(var(--spacing,.25rem) * 0)}.p-0\.5{padding:calc(var(--spacing,.25rem) * .5)}.p-1{padding:calc(var(--spacing,.25rem) * 1)}.p-1\.5{padding:calc(var(--spacing,.25rem) * 1.5)}.p-2{padding:calc(var(--spacing,.25rem) * 2)}.p-2\.5{padding:calc(var(--spacing,.25rem) * 2.5)}.p-3{padding:calc(var(--spacing,.25rem) * 3)}.p-4{padding:calc(var(--spacing,.25rem) * 4)}.p-5{padding:calc(var(--spacing,.25rem) * 5)}.p-6{padding:calc(var(--spacing,.25rem) * 6)}.p-10{padding:calc(var(--spacing,.25rem) * 10)}.p-\[3px\]{padding:3px}.p-\[30px\]{padding:30px}.px-1{padding-inline:calc(var(--spacing,.25rem) * 1)}.px-1\.5{padding-inline:calc(var(--spacing,.25rem) * 1.5)}.px-1\.5\!{padding-inline:calc(var(--spacing,.25rem) * 1.5)!important}.px-2{padding-inline:calc(var(--spacing,.25rem) * 2)}.px-2\.5{padding-inline:calc(var(--spacing,.25rem) * 2.5)}.px-3{padding-inline:calc(var(--spacing,.25rem) * 3)}.px-3\.5{padding-inline:calc(var(--spacing,.25rem) * 3.5)}.px-4{padding-inline:calc(var(--spacing,.25rem) * 4)}.px-5{padding-inline:calc(var(--spacing,.25rem) * 5)}.py-0\.5{padding-block:calc(var(--spacing,.25rem) * .5)}.py-0\.5\!{padding-block:calc(var(--spacing,.25rem) * .5)!important}.py-1{padding-block:calc(var(--spacing,.25rem) * 1)}.py-1\.5{padding-block:calc(var(--spacing,.25rem) * 1.5)}.py-2{padding-block:calc(var(--spacing,.25rem) * 2)}.py-5{padding-block:calc(var(--spacing,.25rem) * 5)}.pt-2{padding-top:calc(var(--spacing,.25rem) * 2)}.pt-3\.5{padding-top:calc(var(--spacing,.25rem) * 3.5)}.pt-4{padding-top:calc(var(--spacing,.25rem) * 4)}.pt-\[14px\]{padding-top:14px}.pr-9{padding-right:calc(var(--spacing,.25rem) * 9)}.pb-4{padding-bottom:calc(var(--spacing,.25rem) * 4)}.pl-3{padding-left:calc(var(--spacing,.25rem) * 3)}.pl-3\.5{padding-left:calc(var(--spacing,.25rem) * 3.5)}.pl-4{padding-left:calc(var(--spacing,.25rem) * 4)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace)}.text-2xl{font-size:var(--text-2xl,1.5rem);line-height:var(--tw-leading,var(--text-2xl--line-height,calc(2 / 1.5)))}.text-base{font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ))}.text-lg{font-size:var(--text-lg,1.125rem);line-height:var(--tw-leading,var(--text-lg--line-height,calc(1.75 / 1.125)))}.text-sm{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)))}.text-xl{font-size:var(--text-xl,1.25rem);line-height:var(--tw-leading,var(--text-xl--line-height,calc(1.75 / 1.25)))}.text-xs{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)))}.text-\[7px\]{font-size:7px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11\.5px\]{font-size:11.5px}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-\[12px\]\!{font-size:12px!important}.text-\[13\.5px\]{font-size:13.5px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[32px\]{font-size:32px}.leading-5{--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5)}.leading-6{--tw-leading:calc(var(--spacing,.25rem) * 6);line-height:calc(var(--spacing,.25rem) * 6)}.leading-\[1\.1\]{--tw-leading:1.1;line-height:1.1}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625)}.font-\[850\]{--tw-font-weight:850;font-weight:850}.font-bold{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800)}.font-extrabold\!{--tw-font-weight:var(--font-weight-extrabold,800)!important;font-weight:var(--font-weight-extrabold,800)!important}.font-medium{--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500)}.font-normal{--tw-font-weight:var(--font-weight-normal,400);font-weight:var(--font-weight-normal,400)}.font-semibold{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600)}.tracking-\[-0\.5px\]{--tw-tracking:-.5px;letter-spacing:-.5px}.tracking-\[0\.06em\]{--tw-tracking:.06em;letter-spacing:.06em}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-tight{--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em)}.tracking-wide{--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em)}.tracking-wider{--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--accent\)\]{color:var(--accent)}.text-\[var\(--accent2\)\]{color:var(--accent2)}.text-\[var\(--color-accent-blue\)\]{color:var(--color-accent-blue)}.text-\[var\(--color-obsidian-200\)\]{color:var(--color-obsidian-200)}.text-\[var\(--color-obsidian-300\)\]{color:var(--color-obsidian-300)}.text-\[var\(--color-obsidian-400\)\]{color:var(--color-obsidian-400)}.text-\[var\(--text\)\]{color:var(--text)}.text-\[var\(--text-muted\)\]{color:var(--text-muted)}.text-accent-blue{color:var(--color-accent-blue)}.text-amber-200\/80{color:#fee685cc}@supports (color:color-mix(in lab,red,red)){.text-amber-200\/80{color:color-mix(in oklab,var(--color-amber-200,oklch(92.4% .12 95.746)) 80%,transparent)}}.text-amber-300\/90{color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.text-amber-300\/90{color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.text-amber-400{color:var(--color-amber-400,oklch(82.8% .189 84.429))}.text-black{color:var(--color-black,#000)}.text-black\!{color:var(--color-black,#000)!important}.text-cyan-200{color:var(--color-cyan-200,oklch(91.7% .08 205.041))}.text-cyan-300{color:var(--color-cyan-300,oklch(86.5% .127 207.078))}.text-emerald-200{color:var(--color-emerald-200,oklch(90.5% .093 164.15))}.text-emerald-300{color:var(--color-emerald-300,oklch(84.5% .143 164.978))}.text-emerald-300\/90{color:#5ee9b5e6}@supports (color:color-mix(in lab,red,red)){.text-emerald-300\/90{color:color-mix(in oklab,var(--color-emerald-300,oklch(84.5% .143 164.978)) 90%,transparent)}}.text-emerald-400{color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.text-neutral-900{color:var(--color-neutral-900,oklch(20.5% 0 0))}.text-obsidian-300{color:var(--color-obsidian-300)}.text-red-300{color:var(--color-red-300,oklch(80.8% .114 19.571))}.text-red-400{color:var(--color-red-400,oklch(70.4% .191 22.216))}.text-slate-100{color:var(--color-slate-100,oklch(96.8% .007 247.896))}.text-slate-200{color:var(--color-slate-200,oklch(92.9% .013 255.508))}.text-slate-300{color:var(--color-slate-300,oklch(86.9% .022 252.894))}.text-white{color:var(--color-white,#fff)}.text-white\/30{color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.text-white\/30{color:color-mix(in oklab,var(--color-white,#fff) 30%,transparent)}}.text-yellow-200{color:var(--color-yellow-200,oklch(94.5% .129 101.54))}.text-yellow-500{color:var(--color-yellow-500,oklch(79.5% .184 86.047))}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.not-italic{font-style:normal}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.no-underline{text-decoration-line:none}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-55{opacity:.55}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_6px_\#ffab00\]{--tw-shadow:0 0 6px var(--tw-shadow-color,#ffab00);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_8px_var\(--color-accent-blue\)\]{--tw-shadow:0 0 8px var(--tw-shadow-color,var(--color-accent-blue));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_2px_6px_rgba\(56\,189\,248\,0\.05\)\]{--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf80d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_4px_12px_rgba\(0\,0\,0\,0\.15\)\]{--tw-shadow:0 4px 12px var(--tw-shadow-color,#00000026);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_4px_14px_rgba\(56\,189\,248\,0\.3\)\]{--tw-shadow:0 4px 14px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_6px_14px_rgba\(56\,189\,248\,0\.35\)\]{--tw-shadow:0 6px 14px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_6px_18px_rgba\(56\,189\,248\,0\.45\)\]{--tw-shadow:0 6px 18px var(--tw-shadow-color,#38bdf873);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_10px_30px_rgba\(0\,0\,0\,0\.4\)\,_0_0_12px_rgba\(56\,189\,248\,0\.15\)\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#0006), 0 0 12px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_10px_30px_rgba\(0\,0\,0\,0\.5\)\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[inset_0_2px_4px_rgba\(0\,0\,0\,0\.2\)\]{--tw-shadow:inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2\!{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.ring-red-500\/20\!{--tw-ring-color:#fb2c3633!important}@supports (color:color-mix(in lab,red,red)){.ring-red-500\/20\!{--tw-ring-color:color-mix(in oklab, var(--color-red-500,oklch(63.7% .237 25.331)) 20%, transparent)!important}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.brightness-110{--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_0_6px_rgba\(234\,179\,8\,0\.3\)\]{--tw-drop-shadow-size:drop-shadow(0 0 6px var(--tw-drop-shadow-color,#eab3084d));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_0_10px_rgba\(56\,189\,248\,0\.6\)\]{--tw-drop-shadow-size:drop-shadow(0 0 10px var(--tw-drop-shadow-color,#38bdf899));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_2px_8px_rgba\(56\,189\,248\,0\.3\)\]{--tw-drop-shadow-size:drop-shadow(0 2px 8px var(--tw-drop-shadow-color,#38bdf84d));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_4px_24px_rgba\(56\,189\,248\,0\.35\)\]{--tw-drop-shadow-size:drop-shadow(0 4px 24px var(--tw-drop-shadow-color,#38bdf859));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter\!{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)!important}.backdrop-blur-\[4px\]{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-\[left\]{transition-property:left;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-250{--tw-duration:.25s;transition-duration:.25s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-\[50ms\]{--tw-duration:50ms;transition-duration:50ms}.ease-in-out{--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1))}.ease-out{--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.hover\:border-\[\#fbbf24\]\/80:hover{border-color:#fbbf24cc}.hover\:border-accent-blue:hover{border-color:var(--color-accent-blue)}.hover\:bg-\[var\(--accent2\)\]:hover{background-color:var(--accent2)}.hover\:bg-\[var\(--border\)\]:hover{background-color:var(--border)}.hover\:bg-black\/35:hover{background-color:#00000059}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/35:hover{background-color:color-mix(in oklab,var(--color-black,#000) 35%,transparent)}}.hover\:text-white:hover{color:var(--color-white,#fff)}}.focus\:border-accent-blue:focus{border-color:var(--color-accent-blue)}.focus\:border-red-500\!:focus{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.focus\:bg-black\/35:focus{background-color:#00000059}@supports (color:color-mix(in lab,red,red)){.focus\:bg-black\/35:focus{background-color:color-mix(in oklab,var(--color-black,#000) 35%,transparent)}}.focus\:ring-red-500\/20\!:focus{--tw-ring-color:#fb2c3633!important}@supports (color:color-mix(in lab,red,red)){.focus\:ring-red-500\/20\!:focus{--tw-ring-color:color-mix(in oklab, var(--color-red-500,oklch(63.7% .237 25.331)) 20%, transparent)!important}}.disabled\:opacity-50:disabled{opacity:.5}}section{flex-direction:column;gap:20px;max-width:650px;animation:.25s cubic-bezier(.175,.885,.32,1.15) forwards slideIn;display:flex}@keyframes slideIn{0%{opacity:0;transform:translateY(6px)scale(.995)}to{opacity:1;transform:none}}h2{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em);color:var(--color-obsidian-100);margin-bottom:2px;font-size:20px}h3{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em);text-transform:uppercase;color:var(--color-accent-blue);margin-bottom:8px;font-size:11px}.field-group{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;flex-direction:column;gap:16px;padding:18px 20px;transition:all .2s ease-out;display:flex}.field-group:hover{background-color:#ffffff0d;border-color:#ffffff1f}.field{cursor:pointer;justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 4);padding-top:4px;padding-bottom:4px;display:flex}.field.col{align-items:stretch;gap:calc(var(--spacing,.25rem) * 1.5);flex-direction:column;width:100%}.field span{color:var(--text);flex:1;font-size:13px;font-weight:500;transition:color .15s ease-out}.field:hover span{color:#fff}.field select{min-width:190px;padding:8px 36px 8px 12px;font-size:13px}.hint{color:var(--text-muted);margin-top:4px;font-size:11px;line-height:1.625}.hint code{background-color:var(--color-obsidian-950);color:var(--color-accent-blue);border:1px solid var(--border);border-radius:4px;padding:2px 6px;font-family:monospace;font-size:10px}.field-label-row{justify-content:space-between;align-items:center;width:100%;margin-bottom:2px;display:flex}.btn-add-inline{color:var(--accent2);cursor:pointer;border-radius:var(--radius);background:0 0;border:none;padding:4px 8px;font-size:11px;font-weight:700;transition:all .15s ease-out}.btn-add-inline:hover{color:#fff;background-color:#38bdf81a}.dynamic-list{flex-direction:column;gap:8px;width:100%;margin-top:4px;display:flex}.dynamic-list-row{align-items:center;gap:calc(var(--spacing,.25rem) * 2);width:100%;display:flex}.dynamic-list-row input,.dynamic-list-row select{min-width:calc(var(--spacing,.25rem) * 0)}.btn-remove-inline{box-sizing:border-box;color:#f87171;cursor:pointer;border-radius:var(--radius);background-color:#ef444414;border:1px solid #ef444433;justify-content:center;align-items:center;height:34px;padding:6px 12px;font-size:12px;font-weight:700;transition:all .15s ease-out;display:flex}.btn-remove-inline:hover{color:#fff;background-color:#ef4444;border-color:#ef4444;box-shadow:0 2px 8px #ef444440}.warning-alert{align-items:center;gap:calc(var(--spacing,.25rem) * 2);color:#f59e0b;border-radius:var(--radius);background-color:#f59e0b1a;border:1px solid #f59e0b40;margin-top:4px;padding:10px 14px;font-size:12px;font-weight:500;animation:.25s cubic-bezier(.175,.885,.32,1.15) forwards slideIn;display:flex}@keyframes border-pulse{0%,to{border-color:#f43f5e66}50%{border-color:#f43f5e}}@keyframes flash{0%,to{opacity:1}50%{opacity:.3}}:root{--bg:var(--color-obsidian-950);--surface:var(--color-obsidian-900);--surface2:var(--color-obsidian-800);--accent:var(--color-accent-blue);--accent2:var(--color-accent-blue);--text:var(--color-obsidian-100);--text-muted:var(--color-obsidian-300);--border:#ffffff0d;--radius:var(--radius-desktop);--recording-color:var(--color-accent-tangerine);--idle-color:var(--color-accent-blue);--speaking-color:var(--color-accent-green);--transition-spring:var(--transition-snappy);--transition-spring-fast:var(--transition-snappy-fast)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body,#app{width:100%;height:100%;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;font-family:Outfit,Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;overflow:hidden}html.overlay-window,body.overlay-window,body.overlay-window #app{box-shadow:none!important;background:0 0!important;border:none!important;outline:none!important;overflow:hidden!important}body.overlay-window *{box-shadow:none!important;outline:none!important}body.overlay-window ::-webkit-scrollbar{width:0!important;height:0!important;display:none!important}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#ffffff0f;border-radius:99px;transition:background .2s}::-webkit-scrollbar-thumb:hover{background:#ffffff26}.sr-only{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}button{cursor:pointer;font-family:inherit;font-size:inherit;background:0 0;border:none;outline:none}input,select,textarea{font-family:inherit;font-size:inherit;outline:none}select{-webkit-appearance:none;appearance:none;background:var(--surface2) url("data:image/svg+xml;utf8,") no-repeat right 12px center;color:var(--text);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;transition:var(--transition-snappy-fast);background-size:10px;padding:8px 36px 8px 12px;box-shadow:0 4px 12px #00000026}select:hover{background-color:var(--color-obsidian-700);border-color:#ffffff1f;transform:translateY(-1px)}select:focus{border-color:var(--accent2);box-shadow:0 0 0 2px #38bdf826}select option{background-color:var(--color-obsidian-900);color:var(--text);padding:10px 12px}select:-webkit-autofill{-webkit-text-fill-color:var(--text)!important;-webkit-box-shadow:0 0 0px 1000px var(--color-obsidian-900) inset!important}select:-webkit-autofill:hover{-webkit-text-fill-color:var(--text)!important;-webkit-box-shadow:0 0 0px 1000px var(--color-obsidian-900) inset!important}select:-webkit-autofill:focus{-webkit-text-fill-color:var(--text)!important;-webkit-box-shadow:0 0 0px 1000px var(--color-obsidian-900) inset!important}.interactive-spring{transition:var(--transition-snappy)}.interactive-spring:hover{transform:scale(1.02)translateY(-1px)}.interactive-spring:active{transform:scale(.97)translateY(0)}input[type=checkbox]{-webkit-appearance:none;appearance:none;background:var(--color-obsidian-700);cursor:pointer;width:36px;height:20px;transition:var(--transition-spring-fast);border:1px solid var(--border);border-radius:99px;outline:none;position:relative}input[type=checkbox]:before{content:"";background:var(--color-obsidian-300);width:14px;height:14px;transition:var(--transition-spring-fast);border-radius:50%;position:absolute;top:2px;left:2px}input[type=checkbox]:checked{background:var(--color-accent-blue);border-color:var(--color-accent-blue)}input[type=checkbox]:checked:before{background:#fff;left:18px;box-shadow:0 2px 4px #0003}input[type=checkbox]:hover{border-color:#ffffff26}input[type=number],input[type=text],input[type=password]{background:var(--color-obsidian-950);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);min-width:170px;transition:var(--transition-spring-fast);outline:none;padding:8px 12px;font-size:13px;box-shadow:inset 0 2px 4px #0003}input[type=number]:hover,input[type=text]:hover,input[type=password]:hover{background-color:var(--color-obsidian-900);border-color:#ffffff26}input[type=number]:focus,input[type=text]:focus,input[type=password]:focus{border-color:var(--accent2);background-color:var(--color-obsidian-950);box-shadow:0 0 0 2px #38bdf826,inset 0 2px 4px #0003}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false} +@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial}}}.btn-action.svelte-da8msw{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-da8msw:hover{border-color:var(--text-muted);background-color:var(--border)}.hint.error.svelte-da8msw{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.svelte-da8msw:disabled{cursor:default;opacity:.6}.link.svelte-da8msw{cursor:pointer;border-style:var(--tw-border-style);padding:calc(var(--spacing,.25rem) * 0);color:inherit;text-underline-offset:2px;background-color:#0000;border-width:0;text-decoration-line:underline}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}.custom-select-wrapper.svelte-1heock4{flex:2;width:100%;min-width:190px;position:relative}.custom-select-trigger.svelte-1heock4{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-right:calc(var(--spacing,.25rem) * 9);text-align:left;--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text);--tw-shadow:0 4px 12px var(--tw-shadow-color,#00000026);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));-webkit-user-select:none;user-select:none;background:var(--surface2) url("data:image/svg+xml;utf8,") no-repeat right 12px center;background-size:10px}.custom-select-trigger.svelte-1heock4:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.custom-select-trigger.svelte-1heock4:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 12%,transparent)}}.custom-select-trigger.svelte-1heock4:hover{background-color:var(--color-obsidian-700)}.custom-select-trigger.svelte-1heock4:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-select-trigger.svelte-1heock4:disabled{cursor:not-allowed;opacity:.5;--tw-translate-y:calc(var(--spacing,.25rem) * 0)!important;translate:var(--tw-translate-x) var(--tw-translate-y)!important}.custom-dropdown-menu.svelte-1heock4{z-index:2000;gap:calc(var(--spacing,.25rem) * .5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 1);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex;overflow-y:auto}.custom-dropdown-item.svelte-1heock4{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);text-align:left;color:var(--text);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;background-color:#0000;border-style:none;font-size:13px;transition-duration:.15s}.custom-dropdown-item.svelte-1heock4:hover{background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.svelte-1heock4:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 4%,transparent)}}.custom-dropdown-item.selected.svelte-1heock4{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.selected.svelte-1heock4{background-color:color-mix(in oklab,var(--accent2) 10%,transparent)}}.custom-dropdown-item.selected.svelte-1heock4{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--accent2)}.custom-dropdown-item.svelte-1heock4:disabled{cursor:not-allowed;opacity:.4}.custom-dropdown-item.svelte-1heock4:disabled:hover{background-color:#0000}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-duration:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-leading:initial}}}.model-status-container.svelte-nfi4ak{margin-bottom:calc(var(--spacing,.25rem) * 3);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);min-height:42px;padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);align-items:center;font-size:13px;display:flex}.status-downloaded.svelte-nfi4ak{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-downloading.svelte-nfi4ak{color:var(--accent2)}.status-checking.svelte-nfi4ak{color:var(--text-muted)}.status-missing-wrapper.svelte-nfi4ak{justify-content:space-between;align-items:center;width:100%;display:flex}.status-missing.svelte-nfi4ak{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-download.svelte-nfi4ak{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}.btn-download.svelte-nfi4ak:hover{background-color:var(--accent2)}.field-input-error.svelte-nfi4ak{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.field-input-error.svelte-nfi4ak:focus{border-color:var(--color-red-500,oklch(63.7% .237 25.331));--tw-shadow:0 0 0 2px var(--tw-shadow-color,#ef444426), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field-error-msg.svelte-nfi4ak{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5);color:var(--color-red-400,oklch(70.4% .191 22.216))}.test-row.svelte-nfi4ak{margin-top:calc(var(--spacing,.25rem) * 4);align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-wrap:wrap;display:flex}.btn-test.svelte-nfi4ak{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding-inline:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}@media (hover:hover){.btn-test.svelte-nfi4ak:hover{background-color:var(--accent2)}}.btn-test.svelte-nfi4ak:disabled{cursor:not-allowed;opacity:.5}.status-pill.svelte-nfi4ak{border-radius:var(--radius);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500)}.status-pill.success.svelte-nfi4ak{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-nfi4ak{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 30%,transparent)}}.status-pill.success.svelte-nfi4ak{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-nfi4ak{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.status-pill.success.svelte-nfi4ak{color:var(--color-emerald-300,oklch(84.5% .143 164.978))}.status-pill.error.svelte-nfi4ak{border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-nfi4ak{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 30%,transparent)}}.status-pill.error.svelte-nfi4ak{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-nfi4ak{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 15%,transparent)}}.status-pill.error.svelte-nfi4ak{color:var(--color-red-300,oklch(80.8% .114 19.571))}.discovered-models.svelte-nfi4ak{margin-bottom:calc(var(--spacing,.25rem) * 3);align-items:center;gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}.model-tags.svelte-nfi4ak{align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);flex-wrap:wrap;display:flex}.tag-btn.svelte-nfi4ak{cursor:pointer;border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));border-radius:.25rem}@media (hover:hover){.tag-btn.svelte-nfi4ak:hover{background-color:var(--border);color:var(--color-white,#fff)}}.tag-btn.active.svelte-nfi4ak{border-color:var(--accent);background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.tag-btn.active.svelte-nfi4ak{background-color:color-mix(in oklab,var(--accent) 10%,transparent)}}.tag-btn.active.svelte-nfi4ak{color:var(--accent)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-tracking:initial;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}.val.svelte-1msnq7i{text-align:right;min-width:36px;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.vu-meter-container.svelte-1msnq7i{margin-block:calc(var(--spacing,.25rem) * 1);margin-bottom:calc(var(--spacing,.25rem) * 3);gap:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 1);flex-direction:column;display:flex}.vu-meter-info.svelte-1msnq7i{align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em);text-transform:uppercase;font-size:10px;display:flex}.vu-label.svelte-1msnq7i{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text-muted)}.vu-status-dot.svelte-1msnq7i{height:calc(var(--spacing,.25rem) * 1.5);width:calc(var(--spacing,.25rem) * 1.5);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));background-color:#444}.vu-status-dot.active.svelte-1msnq7i{--tw-shadow:0 0 8px var(--tw-shadow-color,#39ff14);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#39ff14}.vu-status-text.svelte-1msnq7i{color:var(--text);opacity:.7;margin-left:auto}.vu-meter-bar-wrapper.svelte-1msnq7i{box-sizing:border-box;height:calc(var(--spacing,.25rem) * 3.5);background-color:#0006;width:100%;position:relative}@supports (color:color-mix(in lab,red,red)){.vu-meter-bar-wrapper.svelte-1msnq7i{background-color:color-mix(in oklab,var(--color-black,#000) 40%,transparent)}}.vu-meter-bar-wrapper.svelte-1msnq7i{padding:3px}.vu-meter-bar.svelte-1msnq7i{gap:2px;width:100%;height:100%;display:flex;position:relative}.vu-segment.svelte-1msnq7i{background-color:#ffffff0d;flex:1;height:100%}@supports (color:color-mix(in lab,red,red)){.vu-segment.svelte-1msnq7i{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.vu-segment.svelte-1msnq7i{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:50ms;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:50ms;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.vu-segment.active.svelte-1msnq7i{--tw-shadow:0 0 4px var(--tw-shadow-color,#39ff144d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#39ff14}.vu-segment.active.orange.svelte-1msnq7i{--tw-shadow:0 0 4px var(--tw-shadow-color,#ff6d0080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#ff6d00}.vu-peak-marker.svelte-1msnq7i{pointer-events:none;top:calc(var(--spacing,.25rem) * -.5);bottom:calc(var(--spacing,.25rem) * -.5);--tw-shadow:0 0 6px var(--tw-shadow-color,#ffab00);width:2px;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:left;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:50ms;--tw-ease:linear;background-color:#ffab00;transition-duration:50ms;transition-timing-function:linear;position:absolute}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-leading:initial;--tw-tracking:initial}}}.modal-backdrop.svelte-oc07pw{inset:calc(var(--spacing,.25rem) * 0);z-index:1000;background-color:#0009;justify-content:center;align-items:center;display:flex;position:fixed}@supports (color:color-mix(in lab,red,red)){.modal-backdrop.svelte-oc07pw{background-color:color-mix(in oklab,var(--color-black,#000) 60%,transparent)}}.modal-backdrop.svelte-oc07pw{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.target-modal-backdrop.svelte-oc07pw{z-index:1100!important}.modal.svelte-oc07pw{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);width:90%;max-width:500px;max-height:85vh;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex}.modal-header.svelte-oc07pw{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);justify-content:space-between;align-items:center;display:flex}.modal-header.svelte-oc07pw h3:where(.svelte-oc07pw){margin:calc(var(--spacing,.25rem) * 0);--tw-font-weight:var(--font-weight-bold,700);font-size:15px;font-weight:var(--font-weight-bold,700)}.close-btn.svelte-oc07pw{cursor:pointer;--tw-border-style:none;font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));color:var(--text-muted);background-color:#0000;border-style:none}.close-btn.svelte-oc07pw:hover{color:var(--text)}.modal-body.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 3.5);padding:calc(var(--spacing,.25rem) * 5);flex-direction:column;display:flex;overflow-y:auto}.modal-footer.svelte-oc07pw{justify-content:flex-end;gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);display:flex}.morph-section.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 2.5);border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:1px;border-color:var(--border);background-color:#ffffff05;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.morph-section.svelte-oc07pw{background-color:color-mix(in oklab,var(--color-white,#fff) 2%,transparent)}}.morph-section.svelte-oc07pw{padding:calc(var(--spacing,.25rem) * 3)}.morph-section.svelte-oc07pw h5:where(.svelte-oc07pw),.processing-toggles.svelte-oc07pw h5:where(.svelte-oc07pw){margin:calc(var(--spacing,.25rem) * 0);margin-bottom:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);text-transform:uppercase}.processing-toggles.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding-top:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}.checkbox-field.svelte-oc07pw{cursor:pointer;align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted);display:flex}.checkbox-field.svelte-oc07pw input[type=checkbox]:where(.svelte-oc07pw){cursor:pointer}.checkbox-field.svelte-oc07pw:hover{color:var(--text)}.btn-action.svelte-oc07pw{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-oc07pw:hover{border-color:var(--text-muted);background-color:var(--border)}.btn-action.small.svelte-oc07pw{padding:calc(var(--spacing,.25rem) * 1);padding-inline:calc(var(--spacing,.25rem) * 2);font-size:10px}.btn-action.svelte-oc07pw:disabled{cursor:not-allowed;opacity:.5}.chat-actions.svelte-oc07pw{align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.chat-status.svelte-oc07pw{margin-top:calc(var(--spacing,.25rem) * 1.5);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);display:block}.chat-status.ok.svelte-oc07pw{color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.chat-status.bad.svelte-oc07pw{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.primary.svelte-oc07pw{--tw-border-style:none;background-color:var(--accent);color:var(--color-white,#fff);border-style:none}.btn-action.primary.svelte-oc07pw:hover{opacity:.9}.full-width-input.svelte-oc07pw{width:100%!important}textarea.svelte-oc07pw{resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--text);--tw-shadow:inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}textarea.svelte-oc07pw:hover{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){textarea.svelte-oc07pw:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 15%,transparent)}}textarea.svelte-oc07pw:hover{background-color:var(--color-obsidian-900)}textarea.svelte-oc07pw:focus{border-color:var(--accent2);background-color:var(--color-obsidian-950);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field.col.svelte-oc07pw{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;width:100%}.mcp-container.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 1.5);flex-direction:column;display:flex}.field-label-row.svelte-oc07pw{margin-bottom:calc(var(--spacing,.25rem) * .5);justify-content:space-between;align-items:center;width:100%;display:flex}.field-title.svelte-oc07pw{--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text)}.field-tag.svelte-oc07pw{border-style:var(--tw-border-style);border-width:1px;border-color:var(--accent2);border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-oc07pw{border-color:color-mix(in oklab,var(--accent2) 25%,transparent)}}.field-tag.svelte-oc07pw{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-oc07pw{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.field-tag.svelte-oc07pw{padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-leading:1;--tw-font-weight:var(--font-weight-bold,700);font-size:9px;line-height:1;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em);color:var(--accent2);text-transform:uppercase}p.hint.svelte-oc07pw{margin:calc(var(--spacing,.25rem) * 0);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}p.hint.svelte-oc07pw code:where(.svelte-oc07pw){border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);border-radius:.25rem;font-size:10px}.validation-error-msg.svelte-oc07pw{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-red-400,oklch(70.4% .191 22.216));display:block}.longer-display-label.svelte-oc07pw{min-width:255px!important}.animate-fade-in.svelte-oc07pw{animation:.2s cubic-bezier(.16,1,.3,1) fade-in}@keyframes svelte-oc07pw-fade-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-duration:initial;--tw-leading:initial;--tw-font-weight:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-tracking:initial}}}.backend-banner.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 1);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.backend-banner.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.backend-banner.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;transition-duration:.15s}.backend-banner.private.svelte-w4d8v7{border-color:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.backend-banner.private.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 25%,transparent)}}.backend-banner.private.svelte-w4d8v7{background-color:#00bb7f0f}@supports (color:color-mix(in lab,red,red)){.backend-banner.private.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 6%,transparent)}}.backend-banner.warn.svelte-w4d8v7{border-color:#f99c0040}@supports (color:color-mix(in lab,red,red)){.backend-banner.warn.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.backend-banner.warn.svelte-w4d8v7{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.backend-banner.warn.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.backend-banner.broken.svelte-w4d8v7{border-color:#fb2c3640}@supports (color:color-mix(in lab,red,red)){.backend-banner.broken.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 25%,transparent)}}.backend-banner.broken.svelte-w4d8v7{background-color:#fb2c360f}@supports (color:color-mix(in lab,red,red)){.backend-banner.broken.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 6%,transparent)}}.manual-enable-banner.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 1);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0040;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.manual-enable-banner.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.manual-enable-banner.svelte-w4d8v7{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.manual-enable-banner.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.manual-enable-banner.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;transition-duration:.15s}.banner-toggle.svelte-w4d8v7{cursor:pointer;align-items:center;gap:calc(var(--spacing,.25rem) * 2.5);--tw-border-style:none;width:100%;padding:calc(var(--spacing,.25rem) * 0);text-align:left;color:var(--text);-webkit-user-select:none;user-select:none;background-color:#0000;border-style:none;display:flex}.banner-title.svelte-w4d8v7{--tw-leading:var(--leading-normal,1.5);font-size:12.5px;line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);flex:1}.banner-chevron.svelte-w4d8v7{height:calc(var(--spacing,.25rem) * 4);width:calc(var(--spacing,.25rem) * 4);color:var(--text-muted);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));flex-shrink:0}.banner-chevron.expanded.svelte-w4d8v7{color:var(--text);rotate:180deg}.banner-content.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 2);width:100%;min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);border-top-style:var(--tw-border-style);border-color:#ffffff0d;border-top-width:1px;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.banner-content.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.banner-content.svelte-w4d8v7{padding-top:calc(var(--spacing,.25rem) * 2);padding-left:calc(var(--spacing,.25rem) * 6.5);font-size:12.5px}.backend-icon.svelte-w4d8v7{font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));--tw-leading:1;flex-shrink:0;line-height:1}.backend-detail.svelte-w4d8v7{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.backend-detail.error.svelte-w4d8v7{color:var(--color-red-400,oklch(70.4% .191 22.216))}.manual-enable-actions.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1)}.keys-rejected.svelte-w4d8v7{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3640;display:flex}@supports (color:color-mix(in lab,red,red)){.keys-rejected.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 25%,transparent)}}.keys-rejected.svelte-w4d8v7{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.keys-rejected.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.keys-rejected.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:var(--color-red-300,oklch(80.8% .114 19.571))}.keys-fragile.svelte-w4d8v7{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0040;display:flex}@supports (color:color-mix(in lab,red,red)){.keys-fragile.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.keys-fragile.svelte-w4d8v7{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.keys-fragile.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.keys-fragile.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:var(--color-amber-200,oklch(92.4% .12 95.746))}.keys-accepted.svelte-w4d8v7{color:#5ee9b5e6;font-size:11.5px}@supports (color:color-mix(in lab,red,red)){.keys-accepted.svelte-w4d8v7{color:color-mix(in oklab,var(--color-emerald-300,oklch(84.5% .143 164.978)) 90%,transparent)}}.keys-accepted.svelte-w4d8v7 code:where(.svelte-w4d8v7){background-color:#ffffff0d;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.keys-accepted.svelte-w4d8v7 code:where(.svelte-w4d8v7){background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.keys-accepted.svelte-w4d8v7 code:where(.svelte-w4d8v7){padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace)}.hotkeys-section.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 5);padding-bottom:calc(var(--spacing,.25rem) * 10);flex-direction:column;display:flex}.section-header.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 2);justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 5);display:flex}.description.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.bindings-list.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.binding-item.svelte-w4d8v7{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));background-color:#1a1f2e66;display:flex}.binding-item.svelte-w4d8v7:hover{border-color:var(--accent2);--tw-shadow:0 4px 20px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.binding-item.disabled.svelte-w4d8v7{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.binding-item.disabled.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.binding-item.disabled.svelte-w4d8v7{opacity:.55;background-image:repeating-linear-gradient(-45deg,#0000,#0000 10px,#00000040 10px 20px)}.binding-content.svelte-w4d8v7{min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex}.binding-header-row.svelte-w4d8v7{justify-content:space-between;align-items:center;width:100%;display:flex}.binding-title.svelte-w4d8v7{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.binding-row2.svelte-w4d8v7{justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.binding-targets.svelte-w4d8v7{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.binding-actions.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);justify-content:flex-end;align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);border-top-style:var(--tw-border-style);border-color:#ffffff0d;border-top-width:1px;display:flex}@supports (color:color-mix(in lab,red,red)){.binding-actions.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.binding-actions.svelte-w4d8v7{padding-top:calc(var(--spacing,.25rem) * 2)}.confirm-label.svelte-w4d8v7{color:var(--text-muted);font-size:11px}kbd.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);--tw-shadow:0 1px 0 var(--tw-shadow-color,#0006);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:.25rem}.empty-state.svelte-w4d8v7{border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:2px;border-color:var(--border);background-color:#00000026;flex-direction:column;grid-column:1/-1;justify-content:center;align-items:center;display:flex}@supports (color:color-mix(in lab,red,red)){.empty-state.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-black,#000) 15%,transparent)}}.empty-state.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 10);text-align:center}.empty-icon.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 2);font-size:32px}.empty-state.svelte-w4d8v7 p:where(.svelte-w4d8v7){margin:calc(var(--spacing,.25rem) * 0);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.btn-action.svelte-w4d8v7{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-w4d8v7:hover{border-color:var(--text-muted);background-color:var(--border)}.btn-action.primary.svelte-w4d8v7{--tw-border-style:none;background-color:var(--accent);color:var(--color-white,#fff);border-style:none}.btn-action.primary.svelte-w4d8v7:hover{opacity:.9}.btn-action.small.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 1);padding-inline:calc(var(--spacing,.25rem) * 2);font-size:11px}.btn-action.danger.svelte-w4d8v7{border-color:#ff656833}@supports (color:color-mix(in lab,red,red)){.btn-action.danger.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 20%,transparent)}}.btn-action.danger.svelte-w4d8v7{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.danger.svelte-w4d8v7:hover{border-color:var(--color-red-400,oklch(70.4% .191 22.216));background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.btn-action.danger.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 10%,transparent)}}.btn-add-wide.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 4);cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent2);width:100%;padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-style:none;display:flex}.btn-add-wide.svelte-w4d8v7:hover{--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-add-wide.svelte-w4d8v7:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.badge.svelte-w4d8v7{border-radius:var(--radius-xl,.75rem);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-semibold,600);font-size:10px;font-weight:var(--font-weight-semibold,600);text-transform:uppercase}.warn-note.svelte-w4d8v7{color:var(--accent-amber,#f0b429);font-size:11px;line-height:1.45}.badge.gesture.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.badge.gesture.svelte-w4d8v7{border-color:color-mix(in oklab,var(--accent2) 30%,transparent)}}.badge.gesture.svelte-w4d8v7{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.badge.gesture.svelte-w4d8v7{background-color:color-mix(in oklab,var(--accent2) 15%,transparent)}}.badge.gesture.svelte-w4d8v7{color:var(--accent2)}.badge.openai.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.badge.openai.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 30%,transparent)}}.badge.openai.svelte-w4d8v7{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.badge.openai.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.badge.openai.svelte-w4d8v7{color:var(--color-emerald-200,oklch(90.5% .093 164.15))}.badge.s1-mini.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.badge.s1-mini.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 30%,transparent)}}.badge.s1-mini.svelte-w4d8v7{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.badge.s1-mini.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.badge.s1-mini.svelte-w4d8v7{color:var(--color-cyan-200,oklch(91.7% .08 205.041))}.modal-backdrop.svelte-w4d8v7{inset:calc(var(--spacing,.25rem) * 0);z-index:1000;background-color:#0009;justify-content:center;align-items:center;display:flex;position:fixed}@supports (color:color-mix(in lab,red,red)){.modal-backdrop.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-black,#000) 60%,transparent)}}.modal-backdrop.svelte-w4d8v7{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.modal.svelte-w4d8v7{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);width:90%;max-width:500px;max-height:85vh;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex}.modal-header.svelte-w4d8v7{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);justify-content:space-between;align-items:center;display:flex}.modal-header.svelte-w4d8v7 h3:where(.svelte-w4d8v7){margin:calc(var(--spacing,.25rem) * 0);--tw-font-weight:var(--font-weight-bold,700);font-size:15px;font-weight:var(--font-weight-bold,700)}.close-btn.svelte-w4d8v7{cursor:pointer;--tw-border-style:none;font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));color:var(--text-muted);background-color:#0000;border-style:none}.close-btn.svelte-w4d8v7:hover{color:var(--text)}.modal-body.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 3.5);padding:calc(var(--spacing,.25rem) * 5);flex-direction:column;display:flex;overflow-y:auto}.modal-footer.svelte-w4d8v7{justify-content:flex-end;gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);display:flex}.morph-section.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 2.5);border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:1px;border-color:var(--border);background-color:#ffffff05;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.morph-section.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-white,#fff) 2%,transparent)}}.morph-section.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 3)}.processing-toggles.svelte-w4d8v7 h5:where(.svelte-w4d8v7){margin:calc(var(--spacing,.25rem) * 0);margin-bottom:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);text-transform:uppercase}.processing-toggles.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding-top:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}.checkbox-field.svelte-w4d8v7{cursor:pointer;align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted);display:flex}.checkbox-field.svelte-w4d8v7 input[type=checkbox]:where(.svelte-w4d8v7){cursor:pointer}.checkbox-field.svelte-w4d8v7:hover{color:var(--text)}.btn-add-inline.svelte-w4d8v7{cursor:pointer;--tw-border-style:none;padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));background-color:#0000;border-style:none;border-radius:.25rem}.btn-add-inline.svelte-w4d8v7:hover{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.btn-add-inline.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.btn-add-inline.svelte-w4d8v7:hover{color:var(--color-white,#fff)}.target-selects-list.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;width:100%;display:flex}.target-select-row.svelte-w4d8v7{align-items:center;gap:calc(var(--spacing,.25rem) * 2);width:100%;display:flex}.btn-remove-inline.svelte-w4d8v7{box-sizing:border-box;cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3633;justify-content:center;align-items:center;height:34px;display:flex}@supports (color:color-mix(in lab,red,red)){.btn-remove-inline.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.btn-remove-inline.svelte-w4d8v7{background-color:#fb2c3614}@supports (color:color-mix(in lab,red,red)){.btn-remove-inline.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 8%,transparent)}}.btn-remove-inline.svelte-w4d8v7{padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-red-400,oklch(70.4% .191 22.216));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-remove-inline.svelte-w4d8v7:hover{border-color:var(--color-red-500,oklch(63.7% .237 25.331));background-color:var(--color-red-500,oklch(63.7% .237 25.331));color:var(--color-white,#fff);--tw-shadow:0 2px 8px var(--tw-shadow-color,#ef444440);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.longer-display-label.svelte-w4d8v7{min-width:255px!important}.openai-target-settings.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 2.5);margin-bottom:calc(var(--spacing,.25rem) * 3.5);margin-left:calc(var(--spacing,.25rem) * 2.5);gap:calc(var(--spacing,.25rem) * 2);border-left-style:var(--tw-border-style);border-left-width:2px;border-color:var(--accent);padding-left:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}textarea.svelte-w4d8v7{resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--text);--tw-shadow:inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}textarea.svelte-w4d8v7:hover{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){textarea.svelte-w4d8v7:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 15%,transparent)}}textarea.svelte-w4d8v7:hover{background-color:var(--color-obsidian-900)}textarea.svelte-w4d8v7:focus{border-color:var(--accent2);background-color:var(--color-obsidian-950);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field.col.svelte-w4d8v7{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;width:100%}.field-label-row.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * .5);justify-content:space-between;align-items:center;width:100%;display:flex}.field-title.svelte-w4d8v7{--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text)}.field-tag.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:var(--accent2);border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-w4d8v7{border-color:color-mix(in oklab,var(--accent2) 25%,transparent)}}.field-tag.svelte-w4d8v7{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-w4d8v7{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.field-tag.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-leading:1;--tw-font-weight:var(--font-weight-bold,700);font-size:9px;line-height:1;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em);color:var(--accent2);text-transform:uppercase}p.hint.svelte-w4d8v7{margin:calc(var(--spacing,.25rem) * 0);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}p.hint.svelte-w4d8v7 code:where(.svelte-w4d8v7){border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);border-radius:.25rem;font-size:10px}.validation-error-msg.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-red-400,oklch(70.4% .191 22.216));display:block}.binding-item.has-conflict.svelte-w4d8v7{border-color:#f99c0073!important}@supports (color:color-mix(in lab,red,red)){.binding-item.has-conflict.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 45%,transparent)!important}}.binding-item.active-conflict.svelte-w4d8v7{background-color:#f99c000f;position:relative}@supports (color:color-mix(in lab,red,red)){.binding-item.active-conflict.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.binding-item.active-conflict.svelte-w4d8v7:hover{border-color:#f99c00b3!important}@supports (color:color-mix(in lab,red,red)){.binding-item.active-conflict.svelte-w4d8v7:hover{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 70%,transparent)!important}}.binding-item.active-conflict.svelte-w4d8v7:hover{--tw-shadow:0 4px 20px var(--tw-shadow-color,#fbbf2426);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.binding-title.has-conflict.svelte-w4d8v7{padding-right:75px}.conflict-marker.svelte-w4d8v7{top:calc(var(--spacing,.25rem) * 2.5);right:calc(var(--spacing,.25rem) * 3.5);background-color:var(--color-amber-400,oklch(82.8% .189 84.429));padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-extrabold,800);font-size:9px;font-weight:var(--font-weight-extrabold,800);color:var(--color-neutral-900,oklch(20.5% 0 0));--tw-shadow:0 2px 6px var(--tw-shadow-color,#fbbf2440);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:.25rem;position:absolute}.conflict-alert-banner.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 3);align-items:center;gap:calc(var(--spacing,.25rem) * 2.5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0040;display:flex}@supports (color:color-mix(in lab,red,red)){.conflict-alert-banner.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.conflict-alert-banner.svelte-w4d8v7{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.conflict-alert-banner.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.conflict-alert-banner.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);color:var(--color-amber-400,oklch(82.8% .189 84.429))}.warning-icon.svelte-w4d8v7{font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));flex-shrink:0}.animate-fade-in.svelte-w4d8v7{animation:.2s cubic-bezier(.16,1,.3,1) fade-in}@keyframes svelte-w4d8v7-fade-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}.custom-select-wrapper.svelte-w4d8v7{flex:1;min-width:190px;position:relative}.custom-select-trigger.svelte-w4d8v7{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-right:calc(var(--spacing,.25rem) * 9);text-align:left;--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text);--tw-shadow:0 4px 12px var(--tw-shadow-color,#00000026);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));-webkit-user-select:none;user-select:none;background:var(--surface2) url("data:image/svg+xml;utf8,") no-repeat right 12px center;background-size:10px}.custom-select-trigger.svelte-w4d8v7:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.custom-select-trigger.svelte-w4d8v7:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 12%,transparent)}}.custom-select-trigger.svelte-w4d8v7:hover{background-color:var(--color-obsidian-700)}.custom-select-trigger.svelte-w4d8v7:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-select-backdrop.svelte-w4d8v7{inset:calc(var(--spacing,.25rem) * 0);z-index:199;position:fixed}.custom-dropdown-menu.svelte-w4d8v7{right:calc(var(--spacing,.25rem) * 0);left:calc(var(--spacing,.25rem) * 0);z-index:200;margin-top:calc(var(--spacing,.25rem) * 1);max-height:calc(var(--spacing,.25rem) * 60);gap:calc(var(--spacing,.25rem) * .5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 1);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex;position:absolute;overflow-y:auto}.custom-dropdown-item.svelte-w4d8v7{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);text-align:left;color:var(--text);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;background-color:#0000;border-style:none;font-size:13px;transition-duration:.15s}.custom-dropdown-item.svelte-w4d8v7:hover{background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 4%,transparent)}}.custom-dropdown-item.svelte-w4d8v7:disabled{cursor:not-allowed;opacity:.4}.custom-dropdown-item.svelte-w4d8v7:disabled:hover{background-color:#0000}.custom-dropdown-item.create-new.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f40;margin-top:calc(var(--spacing,.25rem) * 1)!important}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.create-new.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 25%,transparent)}}.custom-dropdown-item.create-new.svelte-w4d8v7{background-color:#002c22cc}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.create-new.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-emerald-950,oklch(26.2% .051 172.552)) 80%,transparent)}}.custom-dropdown-item.create-new.svelte-w4d8v7{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.custom-dropdown-item.create-new.svelte-w4d8v7:hover{background-color:#004e3be6!important}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.create-new.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--color-emerald-900,oklch(37.8% .077 168.94)) 90%,transparent)!important}}.custom-dropdown-item.create-new.svelte-w4d8v7 .plus-icon:where(.svelte-w4d8v7){margin-right:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800);color:var(--color-emerald-300,oklch(84.5% .143 164.978))}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.targets-section.svelte-134kctg{gap:calc(var(--spacing,.25rem) * 5);padding-bottom:calc(var(--spacing,.25rem) * 10);flex-direction:column;display:flex}.section-header.svelte-134kctg{margin-bottom:calc(var(--spacing,.25rem) * 2);justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 5);display:flex}.description.svelte-134kctg{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.usage-note.svelte-134kctg{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.usage-note.svelte-134kctg{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.usage-note.svelte-134kctg{padding:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.usage-note.svelte-134kctg strong:where(.svelte-134kctg){--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.usage-note.svelte-134kctg em:where(.svelte-134kctg){font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);font-style:normal}.bindings-list.svelte-134kctg{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.binding-item.svelte-134kctg{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));background-color:#1a1f2e66;display:flex}.binding-item.svelte-134kctg:hover{border-color:var(--accent2);--tw-shadow:0 4px 20px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.binding-content.svelte-134kctg{min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex}.binding-row2.svelte-134kctg{justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.binding-title.svelte-134kctg{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.badge.svelte-134kctg{border-radius:var(--radius-xl,.75rem);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-semibold,600);font-size:10px;font-weight:var(--font-weight-semibold,600);text-transform:uppercase}.badge.delivery.svelte-134kctg{border-style:var(--tw-border-style);border-width:1px;border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.badge.delivery.svelte-134kctg{border-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 30%,transparent)}}.badge.delivery.svelte-134kctg{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.badge.delivery.svelte-134kctg{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.badge.delivery.svelte-134kctg{color:var(--color-cyan-300,oklch(86.5% .127 207.078))}.binding-targets.svelte-134kctg{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.binding-actions.svelte-134kctg{margin-top:calc(var(--spacing,.25rem) * 1);justify-content:flex-end;align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);border-top-style:var(--tw-border-style);border-color:#ffffff0d;border-top-width:1px;display:flex}@supports (color:color-mix(in lab,red,red)){.binding-actions.svelte-134kctg{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.binding-actions.svelte-134kctg{padding-top:calc(var(--spacing,.25rem) * 2)}.confirm-label.svelte-134kctg{color:var(--text-muted);font-size:11px}.btn-action.svelte-134kctg{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-134kctg:hover{border-color:var(--text-muted);background-color:var(--border)}.btn-action.small.svelte-134kctg{padding:calc(var(--spacing,.25rem) * 1);padding-inline:calc(var(--spacing,.25rem) * 2);font-size:11px}.btn-action.danger.svelte-134kctg{border-color:#ff656833}@supports (color:color-mix(in lab,red,red)){.btn-action.danger.svelte-134kctg{border-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 20%,transparent)}}.btn-action.danger.svelte-134kctg{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.danger.svelte-134kctg:hover{border-color:var(--color-red-400,oklch(70.4% .191 22.216));background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.btn-action.danger.svelte-134kctg:hover{background-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 10%,transparent)}}.btn-add-wide.svelte-134kctg{margin-bottom:calc(var(--spacing,.25rem) * 4);cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent2);width:100%;padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-style:none;display:flex}.btn-add-wide.svelte-134kctg:hover{--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-add-wide.svelte-134kctg:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.empty-state.svelte-134kctg{border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:2px;border-color:var(--border);background-color:#00000026;flex-direction:column;grid-column:1/-1;justify-content:center;align-items:center;display:flex}@supports (color:color-mix(in lab,red,red)){.empty-state.svelte-134kctg{background-color:color-mix(in oklab,var(--color-black,#000) 15%,transparent)}}.empty-state.svelte-134kctg{padding:calc(var(--spacing,.25rem) * 10);text-align:center}.empty-icon.svelte-134kctg{margin-bottom:calc(var(--spacing,.25rem) * 2);font-size:32px}.empty-state.svelte-134kctg p:where(.svelte-134kctg){margin:calc(var(--spacing,.25rem) * 0);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-leading:initial}}}.row.svelte-1q9seip{margin-top:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 2);display:flex}.btn-preview.svelte-1q9seip{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-preview.svelte-1q9seip:hover:not(:disabled){background-color:var(--border);color:var(--accent)}.btn-preview.svelte-1q9seip:disabled{cursor:not-allowed;opacity:.4}.idle-minutes-input.svelte-1q9seip{width:calc(var(--spacing,.25rem) * 20);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 2.5);text-align:right;color:var(--text);font-size:13px}.voice-status-container.svelte-1q9seip{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);min-height:42px;padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);align-items:center;font-size:13px;display:flex}.status-downloaded.svelte-1q9seip{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-downloading.svelte-1q9seip{color:var(--accent2)}.status-checking.svelte-1q9seip{color:var(--text-muted)}.status-missing-wrapper.svelte-1q9seip{justify-content:space-between;align-items:center;width:100%;display:flex}.status-missing.svelte-1q9seip{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-download.svelte-1q9seip{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}.btn-download.svelte-1q9seip:hover:not(:disabled){background-color:var(--accent2)}.btn-download.svelte-1q9seip:disabled{cursor:not-allowed;border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);color:var(--text-muted);opacity:.5}.field-input-error.svelte-1q9seip{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.field-input-error.svelte-1q9seip:focus{border-color:var(--color-red-500,oklch(63.7% .237 25.331));--tw-shadow:0 0 0 2px var(--tw-shadow-color,#ef444426), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field-error-msg.svelte-1q9seip{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5);color:var(--color-red-400,oklch(70.4% .191 22.216))}.range-input.svelte-1q9seip{width:100%;accent-color:var(--accent)}.number-input.svelte-1q9seip{width:calc(var(--spacing,.25rem) * 20)}.tts-test-row.svelte-1q9seip{justify-content:space-between;align-items:center;width:100%;display:flex}.tts-error-msg.svelte-1q9seip{overflow-wrap:break-word;width:100%}.run-speed-container.svelte-1q9seip{border:1px solid var(--border);border-radius:var(--radius);background:#ffffff05;align-items:center;gap:8px;padding:6px 12px;font-size:12px;font-weight:500;display:flex}.run-speed-label.svelte-1q9seip{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;font-size:10px}.run-speed-value.svelte-1q9seip{color:var(--accent);font-family:JetBrains Mono,monospace;font-weight:600}.run-speed-value.counting.svelte-1q9seip{color:var(--accent2);text-shadow:0 0 8px #38bdf84d}.non-commercial-warning.svelte-1q9seip{margin-bottom:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 1.5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0066;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.non-commercial-warning.svelte-1q9seip{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 40%,transparent)}}.non-commercial-warning.svelte-1q9seip{background-color:#4619014d}@supports (color:color-mix(in lab,red,red)){.non-commercial-warning.svelte-1q9seip{background-color:color-mix(in oklab,var(--color-amber-950,oklch(27.9% .077 45.635)) 30%,transparent)}}.non-commercial-warning.svelte-1q9seip{padding:calc(var(--spacing,.25rem) * 3)}.warning-header.svelte-1q9seip{align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-amber-400,oklch(82.8% .189 84.429));display:flex}.warning-icon.svelte-1q9seip{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)))}.warning-text.svelte-1q9seip{margin:calc(var(--spacing,.25rem) * 0);--tw-leading:var(--leading-relaxed,1.625);max-width:none;font-size:12px;line-height:var(--leading-relaxed,1.625);color:#fee685cc}@supports (color:color-mix(in lab,red,red)){.warning-text.svelte-1q9seip{color:color-mix(in oklab,var(--color-amber-200,oklch(92.4% .12 95.746)) 80%,transparent)}}.field-input-textarea.svelte-1q9seip{margin-top:calc(var(--spacing,.25rem) * 1);box-sizing:border-box;resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}.field-input-textarea.svelte-1q9seip:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#4fc3f733);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.engine-radio-group.svelte-1q9seip{margin-top:calc(var(--spacing,.25rem) * 1.5);gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;width:100%;display:flex}.engine-radio-option.svelte-1q9seip{cursor:pointer;gap:calc(var(--spacing,.25rem) * 1);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);padding:calc(var(--spacing,.25rem) * 3);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));flex-direction:column;display:flex}.engine-radio-option.svelte-1q9seip:hover{border-color:var(--accent2);background-color:var(--surface2)}.engine-radio-option.selected.svelte-1q9seip{border-color:var(--accent);background-color:var(--surface2)}.engine-radio-header.svelte-1q9seip{align-items:center;gap:calc(var(--spacing,.25rem) * 2.5);display:flex}.engine-radio-name.svelte-1q9seip{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--text)}.engine-radio-desc.svelte-1q9seip{margin-left:calc(var(--spacing,.25rem) * 6);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);color:var(--text-muted)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.hint.svelte-1bvctpo{margin-bottom:calc(var(--spacing,.25rem) * 4);max-width:520px;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-300)}.field.col.svelte-1bvctpo{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1.5);flex-direction:column}textarea.svelte-1bvctpo{resize:vertical;border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;padding:calc(var(--spacing,.25rem) * 2);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--text);border-radius:.25rem;font-size:13px}textarea.invalid.svelte-1bvctpo{border-color:var(--color-red-500,oklch(63.7% .237 25.331));--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){textarea.invalid.svelte-1bvctpo{--tw-ring-color:color-mix(in oklab, var(--color-red-500,oklch(63.7% .237 25.331)) 20%, transparent)}}textarea.locked.svelte-1bvctpo{cursor:not-allowed;background-color:#0003}@supports (color:color-mix(in lab,red,red)){textarea.locked.svelte-1bvctpo{background-color:color-mix(in oklab,var(--color-black,#000) 20%,transparent)}}textarea.locked.svelte-1bvctpo{opacity:.6}.validation-error.svelte-1bvctpo{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-red-400,oklch(70.4% .191 22.216))}.field-hint.svelte-1bvctpo{color:var(--color-obsidian-300);font-size:11px}code.svelte-1bvctpo{background-color:#ffffff0d;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){code.svelte-1bvctpo{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}code.svelte-1bvctpo{padding-inline:calc(var(--spacing,.25rem) * 1);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue)}.action-row.svelte-1bvctpo{margin-top:calc(var(--spacing,.25rem) * 3.5);align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding-top:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}.btn-test.svelte-1bvctpo{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);width:100%;padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-style:none}.btn-test.svelte-1bvctpo:hover:not(:disabled){--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-test.svelte-1bvctpo:active:not(:disabled){--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.btn-test.svelte-1bvctpo:disabled{cursor:not-allowed;opacity:.6}.status-msg.svelte-1bvctpo{text-align:center;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600)}.status-msg.success.svelte-1bvctpo{color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-msg.error.svelte-1bvctpo{color:var(--color-red-400,oklch(70.4% .191 22.216))}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-leading:initial}}}.custom-vocab-input.svelte-1s1a8xn{margin-top:calc(var(--spacing,.25rem) * 2);box-sizing:border-box;resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;min-height:80px;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}.custom-vocab-input.svelte-1s1a8xn:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#4fc3f733);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-vocab-input.svelte-1s1a8xn::placeholder{color:var(--text-muted);opacity:.5}.model-status-container.svelte-1s1a8xn{margin-bottom:calc(var(--spacing,.25rem) * 3);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);min-height:42px;padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);align-items:center;font-size:13px;display:flex}.status-downloaded.svelte-1s1a8xn{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-downloading.svelte-1s1a8xn{color:var(--accent2)}.status-checking.svelte-1s1a8xn{color:var(--text-muted)}.status-missing-wrapper.svelte-1s1a8xn{justify-content:space-between;align-items:center;width:100%;display:flex}.status-missing.svelte-1s1a8xn{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-download.svelte-1s1a8xn{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}.btn-download.svelte-1s1a8xn:hover{background-color:var(--accent2)}.status-pill.svelte-1s1a8xn{border-radius:var(--radius);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500)}.status-pill.success.svelte-1s1a8xn{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-1s1a8xn{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 30%,transparent)}}.status-pill.success.svelte-1s1a8xn{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-1s1a8xn{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.status-pill.success.svelte-1s1a8xn{color:var(--color-emerald-300,oklch(84.5% .143 164.978))}.status-pill.error.svelte-1s1a8xn{border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-1s1a8xn{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 30%,transparent)}}.status-pill.error.svelte-1s1a8xn{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-1s1a8xn{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 15%,transparent)}}.status-pill.error.svelte-1s1a8xn{color:var(--color-red-300,oklch(80.8% .114 19.571))}.status-pill.downloading.svelte-1s1a8xn{border-style:var(--tw-border-style);border-width:1px;border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.status-pill.downloading.svelte-1s1a8xn{border-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 30%,transparent)}}.status-pill.downloading.svelte-1s1a8xn{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.status-pill.downloading.svelte-1s1a8xn{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.status-pill.downloading.svelte-1s1a8xn{color:var(--color-cyan-300,oklch(86.5% .127 207.078))}.field-title-col.svelte-1s1a8xn{margin-right:calc(var(--spacing,.25rem) * 4);flex-direction:column;flex:1;display:flex}.field-title-col.svelte-1s1a8xn span:where(.svelte-1s1a8xn){--tw-font-weight:var(--font-weight-medium,500);font-size:13px;font-weight:var(--font-weight-medium,500);color:var(--color-obsidian-100)}.field-title-col.svelte-1s1a8xn .hint:where(.svelte-1s1a8xn){margin-top:calc(var(--spacing,.25rem) * .5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.s1-mini-note.svelte-1s1a8xn{margin-top:calc(var(--spacing,.25rem) * -1);--tw-font-weight:var(--font-weight-medium,500);font-size:11.5px;font-weight:var(--font-weight-medium,500);color:var(--color-accent-blue);opacity:.9}.disabled-section.svelte-1s1a8xn{pointer-events:none;opacity:.5}.disabled-note.svelte-1s1a8xn{color:var(--color-accent-blue);opacity:.9}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.lede.svelte-7vrdzs{--tw-leading:var(--leading-relaxed,1.625);font-size:13px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.disclosure.svelte-7vrdzs{border-color:#38bdf840}@supports (color:color-mix(in lab,red,red)){.disclosure.svelte-7vrdzs{border-color:color-mix(in oklab,var(--color-accent-blue) 25%,transparent)}}.disclosure.svelte-7vrdzs{background-color:#38bdf80a}.ledger.svelte-7vrdzs{gap:calc(var(--spacing,.25rem) * 4);grid-template-columns:repeat(auto-fit,minmax(240px,1fr));display:grid}.ledger-col.svelte-7vrdzs ul:where(.svelte-7vrdzs){margin-top:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 1.5);--tw-leading:var(--leading-relaxed,1.625);font-size:11.5px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted);flex-direction:column;display:flex}.ledger-col.svelte-7vrdzs li:where(.svelte-7vrdzs){border-left-style:var(--tw-border-style);padding-left:calc(var(--spacing,.25rem) * 3);border-left-width:1px}.ledger-head.svelte-7vrdzs{--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em);text-transform:uppercase}.included.svelte-7vrdzs .ledger-head:where(.svelte-7vrdzs){color:var(--color-accent-green)}.included.svelte-7vrdzs li:where(.svelte-7vrdzs){border-color:#10b9814d}.excluded.svelte-7vrdzs .ledger-head:where(.svelte-7vrdzs){color:#f87171}.excluded.svelte-7vrdzs li:where(.svelte-7vrdzs){border-color:#f871714d}.ledger-col.svelte-7vrdzs strong{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.field-caption.svelte-7vrdzs{--tw-font-weight:var(--font-weight-medium,500);font-size:13px;font-weight:var(--font-weight-medium,500);color:var(--text)}.two-up.svelte-7vrdzs{gap:calc(var(--spacing,.25rem) * 4);grid-template-columns:repeat(auto-fit,minmax(200px,1fr));display:grid}.text-input.svelte-7vrdzs{box-sizing:border-box;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}.text-input.svelte-7vrdzs:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#4fc3f733);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.description.svelte-7vrdzs{resize:vertical;--tw-leading:var(--leading-relaxed,1.625);min-height:150px;line-height:var(--leading-relaxed,1.625)}.counter.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--text-muted);font-size:11px}.counter.short.svelte-7vrdzs{color:#f59e0b}.preview.svelte-7vrdzs{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);width:100%;max-height:340px;padding:calc(var(--spacing,.25rem) * 3);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word;white-space:pre-wrap;color:var(--text-muted);overflow:auto}.actions.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}.btn-primary.svelte-7vrdzs{border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 10px var(--tw-shadow-color,#38bdf840);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-primary.svelte-7vrdzs:hover:not(:disabled){--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 14px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-primary.svelte-7vrdzs:disabled{cursor:not-allowed;opacity:.4;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.btn-secondary.svelte-7vrdzs{border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;flex-shrink:0}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-7vrdzs{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.btn-secondary.svelte-7vrdzs{padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-secondary.svelte-7vrdzs:hover{border-color:#38bdf866}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-7vrdzs:hover{border-color:color-mix(in oklab,var(--color-accent-blue) 40%,transparent)}}.btn-secondary.svelte-7vrdzs:hover{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-7vrdzs:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 8%,transparent)}}.link-button.svelte-7vrdzs{margin-left:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);text-decoration-line:underline}.alert-body.svelte-7vrdzs{gap:calc(var(--spacing,.25rem) * 1.5);flex-direction:column;width:100%;display:flex}.alert-msg.svelte-7vrdzs{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625)}.alert-actions.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-wrap:wrap;display:flex}.ok-alert.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:#10b981;border-radius:var(--radius);background-color:#10b9811a;border:1px solid #10b98140;padding:10px 14px;display:flex}code.svelte-7vrdzs{background-color:var(--color-obsidian-950);color:var(--color-accent-blue);border:1px solid var(--border);border-radius:4px;padding:2px 6px;font-family:monospace;font-size:10px}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-font-weight:initial;--tw-leading:initial;--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial}}}.about-card.svelte-4mufsx{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 5);flex-direction:row!important}.logo.svelte-4mufsx{height:calc(var(--spacing,.25rem) * 16);width:calc(var(--spacing,.25rem) * 16);border-radius:var(--radius-xl,.75rem);object-fit:contain;--tw-drop-shadow-size:drop-shadow(0 4px 24px var(--tw-drop-shadow-color,#38bdf859));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.app-name.svelte-4mufsx{margin-bottom:calc(var(--spacing,.25rem) * 1);font-size:var(--text-2xl,1.5rem);line-height:var(--tw-leading,var(--text-2xl--line-height,calc(2 / 1.5)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700)}.app-version.svelte-4mufsx{margin-bottom:calc(var(--spacing,.25rem) * 2.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}p.svelte-4mufsx{--tw-leading:var(--leading-relaxed,1.625);max-width:400px;font-size:13px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}a.svelte-4mufsx{color:var(--accent2);font-size:13px;text-decoration-line:none}a.svelte-4mufsx:hover{text-decoration-line:underline}.kv.svelte-4mufsx{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding-block:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));justify-content:space-between;display:flex}.kv.svelte-4mufsx span:where(.svelte-4mufsx):first-child{color:var(--text-muted)}.credits-hint.svelte-4mufsx{margin-bottom:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.credits-list.svelte-4mufsx{margin-top:calc(var(--spacing,.25rem) * 1);gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.credit-item.svelte-4mufsx{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding-block:calc(var(--spacing,.25rem) * 1.5);justify-content:space-between;align-items:center;display:flex}.credit-item.svelte-4mufsx:last-child{--tw-border-style:none;border-style:none}.credit-name-link.svelte-4mufsx{--tw-font-weight:var(--font-weight-normal,400);font-size:13px;font-weight:var(--font-weight-normal,400);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));text-decoration-line:none}.credit-name-link.svelte-4mufsx:hover{color:var(--color-accent-blue);text-decoration-line:underline}.credit-license.svelte-4mufsx{border-style:var(--tw-border-style);border-width:1px;border-color:#38bdf826;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.credit-license.svelte-4mufsx{border-color:color-mix(in oklab,var(--color-accent-blue) 15%,transparent)}}.credit-license.svelte-4mufsx{background-color:#38bdf814}@supports (color:color-mix(in lab,red,red)){.credit-license.svelte-4mufsx{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.credit-license.svelte-4mufsx{padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-normal,400);font-size:10px;font-weight:var(--font-weight-normal,400);color:var(--color-accent-blue)}.credit-license.non-commercial.svelte-4mufsx{border-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.credit-license.non-commercial.svelte-4mufsx{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 30%,transparent)}}.credit-license.non-commercial.svelte-4mufsx{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.credit-license.non-commercial.svelte-4mufsx{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.credit-license.non-commercial.svelte-4mufsx{color:var(--color-amber-400,oklch(82.8% .189 84.429))}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}.settings-root.svelte-myrvk6{background-color:var(--bg);width:100vw;height:100vh;color:var(--text);display:flex;overflow:hidden}.sidebar.svelte-myrvk6{z-index:10;border-right-style:var(--tw-border-style);border-right-width:1px;border-color:var(--border);background-color:var(--color-obsidian-900);width:fit-content;min-width:135px;padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * 5);--tw-shadow:4px 0 24px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);flex-direction:column;flex-shrink:0;display:flex}.brand.svelte-myrvk6{margin-bottom:calc(var(--spacing,.25rem) * 4);align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-bottom-style:var(--tw-border-style);border-color:#ffffff08;border-bottom-width:1px;display:flex}@supports (color:color-mix(in lab,red,red)){.brand.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.brand.svelte-myrvk6{padding-inline:calc(var(--spacing,.25rem) * 1);padding-block:calc(var(--spacing,.25rem) * 1.5);padding-bottom:calc(var(--spacing,.25rem) * 4);white-space:nowrap}.brand-logo.svelte-myrvk6{height:calc(var(--spacing,.25rem) * 5);width:calc(var(--spacing,.25rem) * 5);object-fit:contain;--tw-drop-shadow-size:drop-shadow(0 2px 8px var(--tw-drop-shadow-color,#38bdf84d));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);flex-shrink:0;animation:4s ease-in-out infinite floating}@keyframes svelte-myrvk6-floating{0%,to{transform:translateY(0)rotate(0)}50%{transform:translateY(-3px)rotate(3deg)}}.brand-text.svelte-myrvk6{white-space:nowrap;flex-direction:column;display:flex;overflow:hidden}.brand-name.svelte-myrvk6{--tw-leading:1.1;--tw-font-weight:850;--tw-tracking:-.5px;letter-spacing:-.5px;white-space:nowrap;color:var(--color-white,#fff);font-size:15px;font-weight:850;line-height:1.1}.brand-tag.svelte-myrvk6{margin-top:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-bold,700);font-size:7px;font-weight:var(--font-weight-bold,700);--tw-tracking:.12em;letter-spacing:.12em;white-space:nowrap;color:var(--color-accent-blue)}.sidebar-nav.svelte-myrvk6{gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex;overflow-y:auto}.nav-btn.svelte-myrvk6{align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 2);text-align:left;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);white-space:nowrap;color:var(--color-obsidian-300);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));display:flex;position:relative}.nav-btn.svelte-myrvk6:hover{--tw-translate-x:2px;translate:var(--tw-translate-x) var(--tw-translate-y);background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.nav-btn.svelte-myrvk6:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.nav-btn.svelte-myrvk6:hover{color:var(--color-white,#fff)}.nav-btn.active.svelte-myrvk6{--tw-translate-x:2px;translate:var(--tw-translate-x) var(--tw-translate-y);background-color:#38bdf814;scale:1.01}@supports (color:color-mix(in lab,red,red)){.nav-btn.active.svelte-myrvk6{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.nav-btn.active.svelte-myrvk6{color:var(--color-accent-blue)}.nav-btn.svelte-myrvk6:active{--tw-translate-x:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y);scale:.97}.nav-icon.svelte-myrvk6{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.nav-btn.svelte-myrvk6:hover .nav-icon:where(.svelte-myrvk6){rotate:5deg;scale:1.18}.nav-active-pill.svelte-myrvk6{top:15%;right:calc(var(--spacing,.25rem) * 0);background-color:var(--color-accent-blue);--tw-shadow:-2px 0 8px var(--tw-shadow-color,var(--color-accent-blue));width:3px;height:70%;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:99px 0 0 99px;position:absolute}.sidebar-footer.svelte-myrvk6{border-top-style:var(--tw-border-style);border-color:#ffffff08;border-top-width:1px}@supports (color:color-mix(in lab,red,red)){.sidebar-footer.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.sidebar-footer.svelte-myrvk6{padding-top:calc(var(--spacing,.25rem) * 4)}.status-panel.svelte-myrvk6{gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-shadow:inset 0 2px 6px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.25s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.25s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));flex-direction:column;display:flex}.status-panel.recording.svelte-myrvk6{border-color:#38bdf840}@supports (color:color-mix(in lab,red,red)){.status-panel.recording.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-accent-blue) 25%,transparent)}}.status-panel.recording.svelte-myrvk6{--tw-shadow:0 4px 20px var(--tw-shadow-color,#38bdf81a), inset 0 2px 6px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.status-header.svelte-myrvk6{align-items:flex-start;gap:calc(var(--spacing,.25rem) * .5);white-space:nowrap;flex-direction:column;display:flex}.status-indicator.svelte-myrvk6{align-items:center;gap:calc(var(--spacing,.25rem) * 1);white-space:nowrap;display:flex}.status-dot.svelte-myrvk6{background-color:var(--color-obsidian-300);width:5px;height:5px;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-radius:3.40282e38px}.status-panel.recording.svelte-myrvk6 .status-dot:where(.svelte-myrvk6){background-color:var(--color-accent-blue);--tw-shadow:0 0 8px var(--tw-shadow-color,var(--color-accent-blue));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);animation:1.2s infinite heartBeat}.status-panel.speaking.svelte-myrvk6 .status-dot:where(.svelte-myrvk6){background-color:var(--color-accent-green);--tw-shadow:0 0 8px var(--tw-shadow-color,var(--color-accent-green));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@keyframes svelte-myrvk6-heartBeat{0%,to{transform:scale(1)}50%{transform:scale(1.4)}}.status-label.svelte-myrvk6{--tw-font-weight:var(--font-weight-bold,700);font-size:10px;font-weight:var(--font-weight-bold,700);white-space:nowrap;color:var(--color-obsidian-300)}.status-panel.recording.svelte-myrvk6 .status-label:where(.svelte-myrvk6){color:var(--color-accent-blue)}.word-count.svelte-myrvk6{--tw-font-weight:var(--font-weight-semibold,600);font-size:9px;font-weight:var(--font-weight-semibold,600);white-space:nowrap;color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.word-count.svelte-myrvk6{color:color-mix(in oklab,var(--color-white,#fff) 30%,transparent)}}.btn-record.svelte-myrvk6{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#38bdf833;width:100%;position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.btn-record.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-accent-blue) 20%,transparent)}}.btn-record.svelte-myrvk6{background-color:#38bdf814}@supports (color:color-mix(in lab,red,red)){.btn-record.svelte-myrvk6{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.btn-record.svelte-myrvk6{padding-inline:calc(var(--spacing,.25rem) * 1);padding-block:calc(var(--spacing,.25rem) * 1.5);text-align:center;--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);white-space:nowrap;color:var(--color-accent-blue);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf80d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-record.svelte-myrvk6:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);border-color:var(--color-accent-blue);background-color:var(--color-accent-blue);color:var(--color-white,#fff);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf840);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.btn-record.svelte-myrvk6:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y);scale:.97}.btn-record.active.svelte-myrvk6{border-color:var(--color-accent-blue);background-color:var(--color-accent-blue);color:var(--color-white,#fff);--tw-shadow:0 4px 16px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pulse-ring.svelte-myrvk6{pointer-events:none;top:calc(var(--spacing,.25rem) * 0);left:calc(var(--spacing,.25rem) * 0);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-accent-blue);opacity:0;width:100%;height:100%;animation:1.6s ease-out infinite ripple;position:absolute}@keyframes svelte-myrvk6-ripple{0%{opacity:.5;transform:scale(1)}to{opacity:0;transform:scale(1.15,1.3)}}.btn-text.svelte-myrvk6{z-index:2;position:relative}.content-container.svelte-myrvk6{z-index:1;background-color:var(--bg);flex-direction:column;flex:1;display:flex;position:relative;overflow:hidden}.content-container.svelte-myrvk6:has(.modal-backdrop){z-index:100}.tab-content.svelte-myrvk6{z-index:1;flex:1;padding:30px;overflow-y:auto}.floating-save-container.svelte-myrvk6{right:calc(var(--spacing,.25rem) * 6);bottom:calc(var(--spacing,.25rem) * 6);z-index:100;align-items:center;gap:calc(var(--spacing,.25rem) * 3.5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-accent-blue);background-color:var(--color-obsidian-900);padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 4);--tw-shadow:0 10px 30px var(--tw-shadow-color,#0006), 0 0 12px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);animation:.3s cubic-bezier(.175,.885,.32,1.275) forwards popUp;display:flex;position:absolute}@keyframes svelte-myrvk6-popUp{0%{opacity:0;transform:translateY(20px)scale(.9)}to{opacity:1;transform:translateY(0)scale(1)}}.save-hint.svelte-myrvk6{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-300)}.btn-save.svelte-myrvk6{border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 10px var(--tw-shadow-color,#38bdf840);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-save.svelte-myrvk6:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 14px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);scale:1.02}.btn-save.svelte-myrvk6:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y);scale:.97}.card-scene.svelte-1pt4ba2{perspective:900px;pointer-events:none;-webkit-user-select:none;user-select:none}.card.svelte-1pt4ba2{position:relative;width:340px;height:152px;border-radius:16px;overflow:hidden;background:linear-gradient(135deg,#181b24,#0b0d12 55%,#141925);border:1px solid rgba(255,255,255,.12);box-shadow:0 18px 44px #0009;font-family:Outfit,Inter,sans-serif;transform:rotateY(88deg);opacity:0;transition:transform .38s cubic-bezier(.175,.885,.32,1.2),opacity .3s ease,border-color .3s ease}.on.svelte-1pt4ba2 .card:where(.svelte-1pt4ba2){transform:rotateY(0);opacity:1}.card.processing.svelte-1pt4ba2{border-color:#38bdf866}.sheen.svelte-1pt4ba2{position:absolute;top:-20px;bottom:-20px;width:64px;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.06) 50%,transparent 100%);animation:svelte-1pt4ba2-sheen-drift 6.5s linear infinite}@keyframes svelte-1pt4ba2-sheen-drift{0%{left:-70px}to{left:410px}}.chip.svelte-1pt4ba2{position:absolute;left:20px;top:18px;width:38px;height:28px;border-radius:6px;background:linear-gradient(160deg,#f6d27a,#d9a946 55%,#b9842b)}.chip-line.svelte-1pt4ba2{position:absolute;background:#462d0073}.chip-line.h1.svelte-1pt4ba2{left:0;right:0;top:9px;height:1.5px}.chip-line.h2.svelte-1pt4ba2{left:0;right:0;top:18px;height:1.5px}.chip-line.v.svelte-1pt4ba2{top:0;bottom:0;left:18px;width:1.5px}.brand.svelte-1pt4ba2{position:absolute;left:68px;top:16px;color:#f3f4f6;font-size:14px;font-weight:850;letter-spacing:.08em}.brand-sub.svelte-1pt4ba2{position:absolute;left:68px;top:34px;color:#ffffff61;font-size:7.5px;font-weight:800;letter-spacing:.4em}.stamp.svelte-1pt4ba2{position:absolute;right:20px;top:18px;display:inline-flex;align-items:center;gap:5px;height:20px;padding:0 9px;border-radius:5px;border:1px solid rgba(244,63,94,.5);background:#f43f5e14;color:#f43f5e;font-size:8.5px;font-weight:850;letter-spacing:.18em}.initializing.svelte-1pt4ba2 .stamp:where(.svelte-1pt4ba2){border-color:#f59e0b80;background:#f59e0b14;color:#f59e0b}.processing.svelte-1pt4ba2 .stamp:where(.svelte-1pt4ba2){border-color:#38bdf880;background:#38bdf814;color:#38bdf8}.stamp-dot.svelte-1pt4ba2{width:6px;height:6px;border-radius:50%;background:currentColor;animation:svelte-1pt4ba2-stamp-blink 1.15s ease-in-out infinite}@keyframes svelte-1pt4ba2-stamp-blink{0%,to{opacity:.35}50%{opacity:1}}.matrix.svelte-1pt4ba2{position:absolute;left:22px;top:56px;width:296px;height:51px;display:flex;gap:4px}.col.svelte-1pt4ba2{display:flex;flex-direction:column;gap:3px}.dot.svelte-1pt4ba2{width:11px;height:6px;border-radius:2px;opacity:.1;transition:opacity .05s linear}.dot.lit.svelte-1pt4ba2{opacity:.95}.dot.red.svelte-1pt4ba2{background:#f43f5e}.dot.amber.svelte-1pt4ba2{background:#fbbf24}.dot.green.svelte-1pt4ba2{background:#34d399}.processing.svelte-1pt4ba2 .dot:where(.svelte-1pt4ba2){background:#22d3ee}.field-label.svelte-1pt4ba2{position:absolute;left:22px;top:118px;color:#ffffff4d;font-size:7px;font-weight:800;letter-spacing:.36em}.field-value.svelte-1pt4ba2{position:absolute;left:22px;top:128px;max-width:200px;color:#e5e7eb;font-size:11.5px;font-weight:750;letter-spacing:.04em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.card-number.svelte-1pt4ba2{position:absolute;right:22px;top:128px;color:#ffffff38;font-size:11px;font-weight:700;letter-spacing:.18em}.scope.svelte-xjziu1{width:540px;height:124px;background:linear-gradient(180deg,#07140c,#030a07);border:1px solid rgba(74,222,128,.25);border-radius:10px;box-shadow:0 10px 36px #0009,0 0 18px #22c55e24;overflow:hidden;pointer-events:none;-webkit-user-select:none;user-select:none;transform:scaleY(.04);opacity:0;transition:transform .32s cubic-bezier(.175,.885,.32,1.2),opacity .28s ease}.scope.on.svelte-xjziu1{transform:scaleY(1);opacity:1}.scope-inner.svelte-xjziu1{width:100%;height:100%;padding:10px 20px 12px;display:flex;flex-direction:column;gap:8px}.header.svelte-xjziu1{display:flex;align-items:center;gap:8px;height:18px;font-family:Outfit,Inter,sans-serif}.led.svelte-xjziu1{width:7px;height:7px;border-radius:50%;background:#4ade80;box-shadow:0 0 7px #4ade80;animation:svelte-xjziu1-led-blink 1.1s ease-in-out infinite;flex-shrink:0}.initializing.svelte-xjziu1 .led:where(.svelte-xjziu1){background:#f59e0b;box-shadow:0 0 7px #f59e0b}.processing.svelte-xjziu1 .led:where(.svelte-xjziu1){background:#38bdf8;box-shadow:0 0 7px #38bdf8}@keyframes svelte-xjziu1-led-blink{0%,to{opacity:.4}50%{opacity:1}}.title.svelte-xjziu1{color:#bbf7d0;font-size:10px;font-weight:800;letter-spacing:.12em}.subtitle.svelte-xjziu1{color:#bbf7d059;font-size:9px;font-weight:500;letter-spacing:.1em}.spacer.svelte-xjziu1{flex:1}.target-chip.svelte-xjziu1{display:inline-flex;align-items:center;gap:5px;background:#4ade800f;border:1px solid rgba(74,222,128,.3);border-radius:4px;padding:2px 8px}.tgt.svelte-xjziu1{color:#4ade80;font-size:8.5px;font-weight:800;letter-spacing:.1em}.tgt-label.svelte-xjziu1{color:#d1fae5;font-size:8.5px;font-weight:700;letter-spacing:.06em;max-width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stage.svelte-xjziu1{position:relative;flex:1}.grid-h.svelte-xjziu1{position:absolute;left:0;right:0;height:1px;background:#4ade8012}.g1.svelte-xjziu1{top:25%}.g2.svelte-xjziu1{top:50%;background:#4ade8024}.g3.svelte-xjziu1{top:75%}.grid-v.svelte-xjziu1{position:absolute;top:0;bottom:0;width:1px;background:#4ade800d}svg.svelte-xjziu1{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.trace.svelte-xjziu1{fill:none;stroke:#a7f3d0;stroke-width:1.8;vector-effect:non-scaling-stroke}.glow.svelte-xjziu1{fill:none;stroke:#4ade80;stroke-width:6;opacity:.16;vector-effect:non-scaling-stroke}.initializing.svelte-xjziu1 .trace:where(.svelte-xjziu1){stroke:#fcd34d}.initializing.svelte-xjziu1 .glow:where(.svelte-xjziu1){stroke:#f59e0b}.processing.svelte-xjziu1 .trace:where(.svelte-xjziu1){stroke:#7dd3fc}.processing.svelte-xjziu1 .glow:where(.svelte-xjziu1){stroke:#38bdf8}.radar.svelte-13tl5wx{--tone: #ff6b35;--tone-soft: rgba(255, 107, 53, .4);display:flex;align-items:center;gap:24px;pointer-events:none;-webkit-user-select:none;user-select:none}.radar.initializing.svelte-13tl5wx{--tone: #f59e0b;--tone-soft: rgba(245, 158, 11, .4)}.radar.processing.svelte-13tl5wx{--tone: #38bdf8;--tone-soft: rgba(56, 189, 248, .4)}.dial.svelte-13tl5wx{position:relative;width:124px;height:124px;border-radius:50%;background:radial-gradient(circle,#10181c,#06090b 85%,#04070a);border:1.2px solid var(--tone-soft);box-shadow:0 12px 34px #0000008c,0 0 22px color-mix(in srgb,var(--tone) 20%,transparent);overflow:hidden;transform:translateY(30px) scale(.85);opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.25),opacity .28s ease}.on.svelte-13tl5wx .dial:where(.svelte-13tl5wx){transform:translateY(0) scale(1);opacity:1}.range-ring.svelte-13tl5wx{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);border-radius:50%;border:1px solid rgba(255,255,255,.1)}.r1.svelte-13tl5wx{width:92px;height:92px}.r2.svelte-13tl5wx{width:56px;height:56px;border-color:#ffffff24}.axis.svelte-13tl5wx{position:absolute;background:#ffffff12}.axis.h.svelte-13tl5wx{left:0;right:0;top:50%;height:1px}.axis.v.svelte-13tl5wx{top:0;bottom:0;left:50%;width:1px}.sweep.svelte-13tl5wx{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;background:conic-gradient(from 0deg,transparent 0deg,transparent 300deg,color-mix(in srgb,var(--tone) 35%,transparent) 350deg,var(--tone) 360deg);animation:svelte-13tl5wx-sweep-rotate 1.5s linear infinite;opacity:.7}@keyframes svelte-13tl5wx-sweep-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.pulse-ring.svelte-13tl5wx{position:absolute;top:50%;left:50%;width:118px;height:118px;margin:-59px 0 0 -59px;border-radius:50%;border:1.5px solid var(--tone);opacity:0;animation:svelte-13tl5wx-ring-expand 1.4s cubic-bezier(.1,.7,.3,1) infinite}.p2.svelte-13tl5wx{animation-delay:.7s}@keyframes svelte-13tl5wx-ring-expand{0%{transform:scale(.18);opacity:calc(.25 + var(--lvl) * .65)}to{transform:scale(1);opacity:0}}.blip.svelte-13tl5wx{position:absolute;border-radius:50%;background:color-mix(in srgb,var(--tone) 60%,#ffffff);animation:svelte-13tl5wx-blip-flash 1.5s linear infinite}.b1.svelte-13tl5wx{left:88px;top:42px;width:5px;height:5px}.b2.svelte-13tl5wx{left:36px;top:86px;width:4px;height:4px;animation-delay:.55s}@keyframes svelte-13tl5wx-blip-flash{0%{opacity:1}55%{opacity:.05}to{opacity:.05}}.core.svelte-13tl5wx{position:absolute;top:50%;left:50%;width:12px;height:12px;margin:-6px 0 0 -6px;border-radius:50%;background:var(--tone);box-shadow:0 0 14px var(--tone);transform:scale(calc(1 + var(--lvl) * 1.6));transition:transform .05s linear}.plate.svelte-13tl5wx{display:flex;align-items:center;gap:10px;width:200px;height:52px;padding:0 12px;background:#0a0c10f0;border:1px solid rgba(255,255,255,.08);border-radius:10px;position:relative;transform:translate(-22px);opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.25) .06s,opacity .28s ease .06s}.on.svelte-13tl5wx .plate:where(.svelte-13tl5wx){transform:translate(0);opacity:1}.plate.svelte-13tl5wx:after{content:"";position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;border-radius:10px;border:1px solid var(--tone);animation:svelte-13tl5wx-lock-pulse 1.15s ease-in-out infinite;pointer-events:none}@keyframes svelte-13tl5wx-lock-pulse{0%,to{opacity:.25}50%{opacity:.85}}.reticle.svelte-13tl5wx{color:var(--tone);font-size:22px;line-height:1;animation:svelte-13tl5wx-lock-pulse 1.15s ease-in-out infinite}.plate-text.svelte-13tl5wx{display:flex;flex-direction:column;gap:2px;min-width:0;font-family:Outfit,Inter,sans-serif}.caption.svelte-13tl5wx{color:#ffffff59;font-size:7.5px;font-weight:800;letter-spacing:.18em}.label.svelte-13tl5wx{color:#e5e7eb;font-size:12px;font-weight:750;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ocean.svelte-1orgnnz{position:relative;width:380px;height:128px;border-radius:24px;overflow:hidden;background:linear-gradient(180deg,#081220f5,#030912f7);border:1.2px solid rgba(34,211,238,.25);box-shadow:0 14px 40px #0009,0 0 24px #0891b238;pointer-events:none;-webkit-user-select:none;user-select:none;font-family:Outfit,Inter,sans-serif;opacity:0;transform:translateY(16px);transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .3s ease}.ocean.on.svelte-1orgnnz{opacity:1;transform:translateY(0)}.ocean.processing.svelte-1orgnnz{border-color:#38bdf859}.moon.svelte-1orgnnz{position:absolute;top:10px;right:62px;width:22px;height:22px;border-radius:50%;background:#e0f2fed9;box-shadow:0 0 16px #bae6fd99;animation:svelte-1orgnnz-moon-glow 2.4s ease-in-out infinite}@keyframes svelte-1orgnnz-moon-glow{0%,to{opacity:.55}50%{opacity:.8}}.title.svelte-1orgnnz{position:absolute;left:18px;top:12px;color:#bae6fd8c;font-size:9.5px;font-weight:800;letter-spacing:.22em}.subtitle.svelte-1orgnnz{position:absolute;left:18px;top:25px;color:#7dd3fc59;font-size:8px;font-weight:500;letter-spacing:.08em}.water.svelte-1orgnnz{position:absolute;left:0;right:0;top:38px;height:90px;transform:translateY(92px);transition:transform .45s cubic-bezier(.22,1,.36,1)}.on.svelte-1orgnnz .water:where(.svelte-1orgnnz){transform:translateY(0)}svg.svelte-1orgnnz{display:block;width:100%;height:100%}.w1.svelte-1orgnnz{fill:#0284c759;stroke:#0284c733;stroke-width:1}.w2.svelte-1orgnnz{fill:#06b6d473;stroke:#06b6d440;stroke-width:1}.w3.svelte-1orgnnz{fill:#22d3ee99;stroke:#a5f3fc8c;stroke-width:1.5}.processing.svelte-1orgnnz .w1:where(.svelte-1orgnnz){fill:#1e40af66}.processing.svelte-1orgnnz .w2:where(.svelte-1orgnnz){fill:#3b82f673}.processing.svelte-1orgnnz .w3:where(.svelte-1orgnnz){fill:#60a5fa8c;stroke:#93c5fd99}.bubble.svelte-1orgnnz{position:absolute;bottom:-8px;width:5px;height:5px;border-radius:50%;border:1px solid rgba(165,243,252,.7);background:#a5f3fc1f;animation:svelte-1orgnnz-bubble-rise 4.2s linear infinite;opacity:0}@keyframes svelte-1orgnnz-bubble-rise{0%{transform:translateY(0);opacity:0}12%{opacity:.55}85%{opacity:.25}to{transform:translateY(-78px);opacity:0}}.buoy.svelte-1orgnnz{position:absolute;left:50%;transform:translate(-50%);display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 12px 0 10px;border-radius:12px;background:#082f49eb;border:1px solid rgba(125,211,252,.5);opacity:0;transition:opacity .3s ease .2s}.on.svelte-1orgnnz .buoy:where(.svelte-1orgnnz){opacity:1}.buoy-dot.svelte-1orgnnz{width:7px;height:7px;border-radius:50%;background:#22d3ee;animation:svelte-1orgnnz-moon-glow 1.15s ease-in-out infinite;flex-shrink:0}.processing.svelte-1orgnnz .buoy-dot:where(.svelte-1orgnnz){background:#60a5fa}.buoy-label.svelte-1orgnnz{color:#e0f2fe;font-size:10px;font-weight:700;max-width:130px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mono.svelte-12wa5lj{width:190px;height:112px;background:#000;border:1px solid rgba(255,255,255,.16);border-radius:6px;position:relative;font-family:Outfit,Inter,sans-serif;pointer-events:none;-webkit-user-select:none;user-select:none;opacity:0;transition:opacity .28s ease}.mono.on.svelte-12wa5lj{opacity:1}.status.svelte-12wa5lj{position:absolute;left:18px;top:14px;display:flex;align-items:center;gap:6px}.dot.svelte-12wa5lj{width:6px;height:6px;border-radius:3px;border:1px solid rgba(245,245,245,.7);background:transparent}.dot.lit.svelte-12wa5lj{background:#f5f5f5;animation:svelte-12wa5lj-mono-blink 1.2s ease-in-out infinite}.dot.processing.svelte-12wa5lj{animation:svelte-12wa5lj-mono-blink-dim 1.2s ease-in-out infinite}.dot.standby.svelte-12wa5lj{opacity:.35}@keyframes svelte-12wa5lj-mono-blink{0%,to{opacity:.5}50%{opacity:1}}@keyframes svelte-12wa5lj-mono-blink-dim{0%,to{opacity:.3}50%{opacity:1}}.status-text.svelte-12wa5lj{color:#ffffff8c;font-size:8px;font-weight:700;letter-spacing:.25em}.bars.svelte-12wa5lj{position:absolute;left:18px;bottom:28px;width:154px;height:52px;display:flex;align-items:flex-end;justify-content:center;gap:14px}.bar.svelte-12wa5lj{width:12px;background:#f5f5f5;border-radius:6px;opacity:1;transition:height .05s linear,opacity .2s ease}.bar.dim.svelte-12wa5lj{opacity:.3}.bar.processing.svelte-12wa5lj{opacity:.55}.baseline.svelte-12wa5lj{position:absolute;left:18px;bottom:28px;width:154px;height:1px;background:#ffffff1f}.target.svelte-12wa5lj{position:absolute;left:18px;bottom:6px;width:154px;text-align:center;color:#fff6;font-size:8.5px;font-weight:600;letter-spacing:.03em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.spectrum.svelte-194vixl{width:440px;height:132px;background:linear-gradient(160deg,#1b0c2e,#0a0614);border:1px solid rgba(232,121,249,.25);border-radius:16px;box-shadow:0 0 26px #c084fc38;position:relative;overflow:hidden;pointer-events:none;-webkit-user-select:none;user-select:none;transform:scaleY(.04);transform-origin:bottom center;opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .16s ease}.spectrum.on.svelte-194vixl{transform:scaleY(1);opacity:1}.header.svelte-194vixl{position:absolute;left:20px;top:12px;right:20px;height:16px;display:flex;align-items:center;gap:8px;font-family:Outfit,Inter,sans-serif}.led.svelte-194vixl{width:7px;height:7px;border-radius:50%;background:#e879f9;box-shadow:0 0 6px #e879f9;animation:svelte-194vixl-spectrum-blink 1.2s ease-in-out infinite;flex-shrink:0}.led.standby.svelte-194vixl{background:#f59e0b;box-shadow:0 0 6px #f59e0b}.led.processing.svelte-194vixl{background:#38bdf8;box-shadow:0 0 6px #38bdf8}@keyframes svelte-194vixl-spectrum-blink{0%,to{opacity:.4}50%{opacity:1}}.title.svelte-194vixl{color:#f5d0fe;font-size:10px;font-weight:800;letter-spacing:.15em}.subtitle.svelte-194vixl{color:#f5d0fe59;font-size:9px;font-weight:500;letter-spacing:.1em}.spacer.svelte-194vixl{flex:1}.chip.svelte-194vixl{display:inline-flex;align-items:center;gap:5px;background:#e879f914;border:1px solid rgba(232,121,249,.3);border-radius:4px;padding:2px 8px}.tgt.svelte-194vixl{color:#e879f9;font-size:8.5px;font-weight:800;letter-spacing:.1em}.tgt-label.svelte-194vixl{color:#fae8ff;font-size:8.5px;font-weight:700;letter-spacing:.06em;max-width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bars.svelte-194vixl{position:absolute;left:20px;right:20px;bottom:16px;display:flex;gap:6.5px;align-items:flex-end;height:96px}.bar.svelte-194vixl{width:19px;border-radius:3px;background:linear-gradient(180deg,#f0abfc,#c084fc 45%,#38bdf8);transition:height .05s linear}.floor.svelte-194vixl{position:absolute;left:20px;right:20px;bottom:16px;height:1px;background:#e879f926}.terminal.svelte-pvtvge{width:380px;height:130px;background:#0d1b4c;border:1.5px solid rgba(125,211,252,.35);border-radius:8px;box-shadow:0 0 20px #080f3099;overflow:hidden;pointer-events:none;-webkit-user-select:none;user-select:none;transform:scaleY(.04);transform-origin:top center;opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .16s ease}.terminal.on.svelte-pvtvge{transform:scaleY(1);opacity:1}.titlebar.svelte-pvtvge{height:24px;background:#ffffff0f;display:flex;align-items:center;gap:6px;padding:0 12px;font-family:Outfit,Inter,sans-serif}.dot.svelte-pvtvge{width:8px;height:8px;border-radius:50%;background:#ffffff38}.titletext.svelte-pvtvge{color:#e0f2fe8c;font-size:9px;font-weight:700;letter-spacing:.1em}.body.svelte-pvtvge{padding:12px 16px;display:flex;flex-direction:column;gap:8px}.line1.svelte-pvtvge{color:#bae6fdb3;font-size:10px;font-weight:600;font-family:SF Mono,Menlo,Consolas,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.line2.svelte-pvtvge{color:#fff;font-size:11px;font-weight:700;letter-spacing:.05em;font-family:SF Mono,Menlo,Consolas,monospace}.line2.standby.svelte-pvtvge{color:#fcd34d}.line2.processing.svelte-pvtvge{color:#7dd3fc}.line3.svelte-pvtvge{color:#bae6fd73;font-size:9.5px;font-weight:500;font-family:SF Mono,Menlo,Consolas,monospace}.vinyl.svelte-kq5b5i{width:320px;height:132px;background:linear-gradient(180deg,#f7ecd9,#e7d6b8);border:1.5px solid rgba(120,89,53,.35);border-radius:14px;box-shadow:0 0 22px #00000059;position:relative;pointer-events:none;-webkit-user-select:none;user-select:none;transform:translateY(16px);opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .28s ease}.vinyl.on.svelte-kq5b5i{transform:translateY(0);opacity:1}.header.svelte-kq5b5i{position:absolute;left:16px;top:12px;right:16px;height:14px;display:flex;align-items:center;gap:8px;font-family:Outfit,Inter,sans-serif}.vu-label.svelte-kq5b5i{color:#5b4530;font-size:12px;font-weight:900;letter-spacing:.17em}.subtitle.svelte-kq5b5i{color:#5b45308c;font-size:8px;font-weight:700;letter-spacing:.19em}.spacer.svelte-kq5b5i{flex:1}.led.svelte-kq5b5i{width:8px;height:8px;border-radius:50%;background:#dc2626;box-shadow:0 0 6px #dc2626;animation:svelte-kq5b5i-vinyl-blink 1.2s ease-in-out infinite;flex-shrink:0}.led.standby.svelte-kq5b5i{background:#f59e0b;box-shadow:0 0 6px #f59e0b}.led.processing.svelte-kq5b5i{background:#38bdf8;box-shadow:0 0 6px #38bdf8}@keyframes svelte-kq5b5i-vinyl-blink{0%,to{opacity:.4}50%{opacity:1}}.face.svelte-kq5b5i{position:absolute;left:16px;top:30px;width:288px;height:72px;background:#fffcf48c;border:1px solid rgba(120,89,53,.25);border-radius:8px}.tick.svelte-kq5b5i{position:absolute;top:14px;width:1.5px;height:22px;background:#5b453066}.tick.red.svelte-kq5b5i{background:#dc2626;height:30px}.scale-label.svelte-kq5b5i{position:absolute;color:#5b453080;font-size:7px;font-family:Outfit,Inter,sans-serif}.scale-label.red.svelte-kq5b5i{color:#dc2626;font-weight:800}.needle-svg.svelte-kq5b5i{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.needle.svelte-kq5b5i{fill:none;stroke:#292524;stroke-width:2px;vector-effect:non-scaling-stroke}.pivot.svelte-kq5b5i{position:absolute;left:138px;top:64px;width:12px;height:12px;border-radius:50%;background:#292524}.target.svelte-kq5b5i{position:absolute;left:16px;bottom:12px;width:288px;color:#5b4530a6;font-size:9.5px;font-weight:700;font-family:Outfit,Inter,sans-serif;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}html,body,#app{background:transparent!important;background-color:transparent!important;box-shadow:none!important;border:none!important;outline:none!important;overflow:hidden!important;will-change:transform,opacity;backface-visibility:hidden}*:focus{outline:none!important;box-shadow:none!important}.overlay-root.svelte-rmqsd6{width:100%;height:100%;background:transparent!important;display:flex;align-items:center;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;overflow:hidden!important}.overlay-stack.svelte-rmqsd6{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;max-width:100%;max-height:100%;pointer-events:none}.visualizer-container.svelte-rmqsd6{display:flex;align-items:center;justify-content:center;pointer-events:none;min-height:0;flex-shrink:1;overflow:hidden}.system-response-box.svelte-rmqsd6{position:relative;z-index:10;display:flex;align-items:center;gap:10px;height:46px;padding:0 20px;border-radius:23px;font-family:Outfit,Inter,system-ui,sans-serif;opacity:0;transform:translateY(10px);transition:transform .34s cubic-bezier(.175,.885,.32,1.25),opacity .28s ease;pointer-events:none;flex-shrink:0}.system-response-box.on.svelte-rmqsd6{opacity:1;transform:translateY(0)}.system-response-box.speaking.svelte-rmqsd6{background:#042f24f0;border:1.2px solid rgba(16,185,129,.55);box-shadow:0 10px 28px #00000080,0 0 18px #10b98140;color:#a7f3d0}.system-response-box.command.svelte-rmqsd6{background:#1e103cf0;border:1.2px solid rgba(168,85,247,.65);box-shadow:0 10px 28px #00000080,0 0 18px #a855f74d;color:#e9d5ff}.system-response-box.mcp.svelte-rmqsd6{background:#4c0519f0;border:1.2px solid rgba(244,63,94,.55);box-shadow:0 10px 28px #00000080,0 0 18px #f43f5e40;color:#fecdd3}.cmd-icon.svelte-rmqsd6{font-size:16px;line-height:1;color:#c084fc;animation:svelte-rmqsd6-flash 1.5s infinite ease-in-out}.mini-eq.svelte-rmqsd6{display:flex;align-items:center;gap:2.5px;height:22px}.eq-bar.svelte-rmqsd6{width:3px;height:8px;border-radius:1.5px;background:#34d399;animation:svelte-rmqsd6-eq-bounce .8s ease-in-out infinite alternate}@keyframes svelte-rmqsd6-eq-bounce{0%{height:7px}to{height:21px}}.pill-text.svelte-rmqsd6{display:flex;flex-direction:column;gap:1px;min-width:0}.pill-title.svelte-rmqsd6{font-size:10px;font-weight:850;letter-spacing:.15em}.pill-target.svelte-rmqsd6{font-size:8.5px;font-weight:600;opacity:.55;max-width:180px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pulse-dot.svelte-rmqsd6{width:10px;height:10px;background-color:#f43f5e;border-radius:50%;animation:svelte-rmqsd6-flash 1.2s infinite ease-in-out}@keyframes svelte-rmqsd6-flash{0%,to{opacity:.3;transform:scale(.9)}50%{opacity:1;transform:scale(1.15)}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.diagnostic-window.svelte-45v8pc{background-color:var(--color-obsidian-950);width:100vw;height:100vh;padding:calc(var(--spacing,.25rem) * 5);color:var(--text);justify-content:center;align-items:flex-start;display:flex;overflow-y:auto}.modal-card.svelte-45v8pc{width:100%;max-width:520px;animation:.3s cubic-bezier(.175,.885,.32,1.2) forwards scaleUp}.head.svelte-45v8pc{margin-bottom:calc(var(--spacing,.25rem) * 5);align-items:flex-start;gap:calc(var(--spacing,.25rem) * 3);display:flex}.head-icon.svelte-45v8pc{--tw-leading:1;flex-shrink:0;font-size:32px;line-height:1}.title.svelte-45v8pc{font-size:var(--text-xl,1.25rem);line-height:var(--tw-leading,var(--text-xl--line-height,calc(1.75 / 1.25)));--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800);--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em);color:var(--color-white,#fff)}.subtitle.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--color-obsidian-400);font-size:12.5px}.steps.svelte-45v8pc{margin:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 2.5);padding:calc(var(--spacing,.25rem) * 0);flex-direction:column;list-style-type:none;display:flex}.step.svelte-45v8pc{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 3);border-radius:var(--radius-lg,.5rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;display:flex}@supports (color:color-mix(in lab,red,red)){.step.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.step.svelte-45v8pc{padding:calc(var(--spacing,.25rem) * 3)}.step.done.svelte-45v8pc{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.step.done.svelte-45v8pc{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.step.done.svelte-45v8pc{background-color:#0000}.step-icon.svelte-45v8pc{--tw-leading:calc(var(--spacing,.25rem) * 6);font-size:16px;line-height:calc(var(--spacing,.25rem) * 6);flex-shrink:0}.step-body.svelte-45v8pc{min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex}.step-title.svelte-45v8pc{--tw-font-weight:var(--font-weight-bold,700);font-size:13.5px;font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff)}.step-detail.svelte-45v8pc{--tw-leading:var(--leading-relaxed,1.625);font-size:12.5px;line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-300)}.step-detail.svelte-45v8pc code:where(.svelte-45v8pc){background-color:#ffffff0d;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.step-detail.svelte-45v8pc code:where(.svelte-45v8pc){background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.step-detail.svelte-45v8pc code:where(.svelte-45v8pc){padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue)}.warn-note.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.warn-note.svelte-45v8pc{color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.privacy-note.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:#5ee9b5e6}@supports (color:color-mix(in lab,red,red)){.privacy-note.svelte-45v8pc{color:color-mix(in oklab,var(--color-emerald-300,oklch(84.5% .143 164.978)) 90%,transparent)}}.muted.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--color-obsidian-400);font-size:11px}.shortcut-list.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 1.5);padding:calc(var(--spacing,.25rem) * 0);flex-wrap:wrap;list-style-type:none;display:flex}.shortcut-keys.svelte-45v8pc{background-color:#ffffff0d;border-radius:.25rem;display:inline-block}@supports (color:color-mix(in lab,red,red)){.shortcut-keys.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.shortcut-keys.svelte-45v8pc{padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);font-size:11px}.shortcut-list.svelte-45v8pc li.unbound:where(.svelte-45v8pc) .shortcut-keys:where(.svelte-45v8pc){color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.shortcut-list.svelte-45v8pc li.unbound:where(.svelte-45v8pc) .shortcut-keys:where(.svelte-45v8pc){color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.step-actions.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 2);align-items:center;gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}.manual.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#0006}@supports (color:color-mix(in lab,red,red)){.manual.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-black,#000) 40%,transparent)}}.manual.svelte-45v8pc{padding:calc(var(--spacing,.25rem) * 2.5)}.manual.svelte-45v8pc pre:where(.svelte-45v8pc){margin:calc(var(--spacing,.25rem) * 0);max-height:180px;font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);word-break:break-all;white-space:pre-wrap;color:var(--color-obsidian-200);overflow-y:auto}.error-container.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 4);align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3633;border-radius:.25rem;width:100%;display:flex}@supports (color:color-mix(in lab,red,red)){.error-container.svelte-45v8pc{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.error-container.svelte-45v8pc{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.error-container.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.error-container.svelte-45v8pc{padding:calc(var(--spacing,.25rem) * 3);text-align:left;color:var(--color-red-400,oklch(70.4% .191 22.216));font-size:12px}.error-icon.svelte-45v8pc{flex-shrink:0}.error-msg.svelte-45v8pc{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word}.modal-actions.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 5);justify-content:flex-end;display:flex}.btn-primary.svelte-45v8pc{cursor:pointer;border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-bold,700);font-size:12.5px;font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 14px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-primary.svelte-45v8pc:hover:not(:disabled){--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 18px var(--tw-shadow-color,#38bdf873);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-primary.svelte-45v8pc:disabled{cursor:default;opacity:.6;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.btn-secondary.svelte-45v8pc{cursor:pointer;border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-800);padding-inline:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-semibold,600);font-size:12.5px;font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-300);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-secondary.svelte-45v8pc:hover{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-45v8pc:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 10%,transparent)}}.btn-secondary.svelte-45v8pc:hover{background-color:var(--color-obsidian-700);color:var(--color-white,#fff)}.btn-link.svelte-45v8pc{cursor:pointer;border-style:var(--tw-border-style);padding:calc(var(--spacing,.25rem) * 0);--tw-font-weight:var(--font-weight-semibold,600);font-size:12px;font-weight:var(--font-weight-semibold,600);color:var(--color-accent-blue);text-underline-offset:2px;background-color:#0000;border-width:0;text-decoration-line:underline}.loading-container.svelte-45v8pc{justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-direction:column;width:100%;height:100%;display:flex}.loading-label.svelte-45v8pc{text-align:center;--tw-font-weight:var(--font-weight-semibold,600);font-size:13.5px;font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-200)}.hint.svelte-45v8pc{text-align:center;max-width:280px;color:var(--color-obsidian-400);font-size:11.5px}.spinner.svelte-45v8pc{height:calc(var(--spacing,.25rem) * 7);width:calc(var(--spacing,.25rem) * 7);animation:var(--animate-spin,spin 1s linear infinite);border-style:var(--tw-border-style);border-width:2.5px;border-color:#ffffff0d;border-radius:3.40282e38px}@supports (color:color-mix(in lab,red,red)){.spinner.svelte-45v8pc{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.spinner.svelte-45v8pc{border-top-color:var(--color-accent-blue)}@keyframes svelte-45v8pc-scaleUp{0%{opacity:0;transform:scale(.98)}to{opacity:1;transform:none}}.vx-wizard{--vx-bg-0: #0e1116;--vx-bg-1: #14181f;--vx-bg-2: #1a1f28;--vx-bg-3: #232a35;--vx-bg-4: #2d3540;--vx-line: #2a313c;--vx-line-2: #3a4350;--vx-txt-0: #e8edf3;--vx-txt-1: #b6bfcb;--vx-txt-2: #7e8896;--vx-txt-3: #555f6c;--vx-cyan-0: #22d4ef;--vx-cyan-1: #7ae8f8;--vx-cyan-2: #5cc4d8;--vx-cyan-d: #0d8ea3;--vx-cyan-b: rgba(34, 212, 239, .45);--vx-gold-0: #e8a019;--vx-gold-1: #f5c842;--vx-gold-glow: rgba(232, 160, 25, .3);--vx-good: #6ad48a;--vx-warn: #ffb454;--vx-bad: #f4636e;--vx-mono: ui-monospace, "JetBrains Mono", SFMono-Regular, Consolas, monospace;--vx-ease: cubic-bezier(.21, .6, .35, 1);--vx-sel-bg: linear-gradient(180deg, rgba(34, 212, 239, .07), rgba(34, 212, 239, .01)), var(--vx-bg-1);--vx-sel-shadow: 0 18px 40px -20px rgba(34, 212, 239, .35), 0 0 0 1px rgba(34, 212, 239, .15);--vx-panel-shadow: 0 12px 36px rgba(0, 0, 0, .5), 0 0 0 1px var(--vx-line);--vx-btn-shadow: 0 6px 24px rgba(34, 212, 239, .25), 0 0 0 1px rgba(34, 212, 239, .4) inset;color:var(--vx-txt-0);background:var(--vx-bg-0)}.vx-wizard .vx-eyebrow{font-family:var(--vx-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--vx-cyan-2)}.vx-wizard .vx-label{font-family:var(--vx-mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--vx-txt-3)}.vx-wizard h2.vx-title{margin:8px 0 6px;font-size:30px;letter-spacing:-.03em;line-height:1.05;font-weight:600}.vx-wizard p.vx-lede{margin:0;font-size:14px;line-height:1.5;color:var(--vx-txt-1)}.vx-wizard p.vx-lede b{color:var(--vx-txt-0);font-weight:600}.vx-wizard .vx-card{border:1px solid var(--vx-line);border-radius:14px;background:var(--vx-bg-1);cursor:pointer;text-align:left;color:inherit;font:inherit;transition:border-color .28s var(--vx-ease),background .28s var(--vx-ease),box-shadow .28s var(--vx-ease)}.vx-wizard .vx-card:hover:not(.vx-on){border-color:var(--vx-line-2)}.vx-wizard .vx-card.vx-on{border-color:var(--vx-cyan-b);background:var(--vx-sel-bg);box-shadow:var(--vx-sel-shadow)}.vx-wizard .vx-check{width:24px;height:24px;flex:none;border-radius:50%;border:1px solid var(--vx-line-2);background:transparent;display:grid;place-items:center;font-family:var(--vx-mono);font-size:12px;color:#00222a;transition:all .25s}.vx-wizard .vx-card.vx-on .vx-check{border-color:var(--vx-cyan-0);background:var(--vx-cyan-0)}.vx-wizard .vx-check>span{opacity:0;transition:opacity .2s}.vx-wizard .vx-card.vx-on .vx-check>span{opacity:1}.vx-wizard .vx-btn{height:44px;padding:0 18px;border-radius:10px;border:1px solid var(--vx-line);background:#ffffff08;color:var(--vx-txt-0);font:inherit;font-size:13.5px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:8px;transition:all .2s}.vx-wizard .vx-btn:hover:not(:disabled){border-color:var(--vx-line-2);background:#ffffff0f}.vx-wizard .vx-btn.vx-primary{border-color:#fff3;background:linear-gradient(180deg,var(--vx-cyan-0),var(--vx-cyan-d));color:#00222a;box-shadow:var(--vx-btn-shadow)}.vx-wizard .vx-btn.vx-primary:hover:not(:disabled){background:linear-gradient(180deg,var(--vx-cyan-1),var(--vx-cyan-0))}.vx-wizard .vx-btn.vx-ghost{border-color:transparent;background:transparent;color:var(--vx-txt-1)}.vx-wizard .vx-btn.vx-ghost:hover:not(:disabled){background:#ffffff0a;color:var(--vx-txt-0)}.vx-wizard .vx-btn:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}.vx-wizard .vx-meter{height:8px;border-radius:999px;background:var(--vx-bg-4);overflow:hidden}.vx-wizard .vx-meter>div{height:100%;border-radius:999px;transition:width .6s var(--vx-ease),background .4s}.vx-wizard .vx-keycap{min-width:56px;height:56px;padding:0 16px;border-radius:12px;display:grid;place-items:center;font-family:var(--vx-mono);font-size:16px;font-weight:500;background:linear-gradient(180deg,var(--vx-bg-3),var(--vx-bg-2));color:var(--vx-txt-0);border:1px solid var(--vx-line-2);box-shadow:0 4px 0 var(--vx-bg-0),inset 0 1px #ffffff14;transition:all .25s}.vx-wizard .vx-keycap.vx-hot{background:linear-gradient(180deg,#22d4ef40,#22d4ef14);color:var(--vx-cyan-1);border-color:var(--vx-cyan-b);box-shadow:0 4px #0d8ea399,inset 0 1px #ffffff14}.vx-wizard .vx-plus{font-family:var(--vx-mono);color:var(--vx-txt-3);font-size:18px}.vx-wizard .vx-pill{display:inline-flex;align-items:center;gap:8px;padding:7px 13px;border-radius:999px;border:1px solid var(--vx-line);background:#ffffff05;font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-txt-2)}.vx-wizard .vx-pill.vx-ok{border-color:#6ad48a66;color:var(--vx-good)}.vx-wizard .vx-pill.vx-busy{border-color:var(--vx-cyan-b);color:var(--vx-cyan-1)}.vx-wizard .vx-pill.vx-err{border-color:#f4636e73;color:var(--vx-bad)}@keyframes vxPulse{0%,to{opacity:1}50%{opacity:.35}}@keyframes vxPop{0%{opacity:0;transform:translateY(6px) scale(.98)}to{opacity:1;transform:none}}@keyframes vxRing{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:none}}@keyframes vxScan{0%{transform:translate(-100%)}to{transform:translate(100%)}}@keyframes vxBar{0%,to{transform:scaleY(.35)}50%{transform:scaleY(1)}}@keyframes vxSpin{to{transform:rotate(360deg)}}.vx-wizard .vx-spinner{width:13px;height:13px;border-radius:50%;border:2px solid rgba(34,212,239,.25);border-top-color:var(--vx-cyan-0);animation:vxSpin .7s linear infinite;flex:none}.welcome.svelte-1gicu21{flex:1;min-height:0;display:grid;grid-template-columns:1.1fr 1fr;gap:48px;align-items:center}.halo.svelte-1gicu21{position:relative;width:96px;height:96px;display:grid;place-items:center;margin-bottom:22px}.ring.svelte-1gicu21{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;border:1px solid rgba(34,212,239,.25);animation:vxPulse 2.4s infinite}.ring.inner.svelte-1gicu21{top:12px;right:12px;bottom:12px;left:12px;border-color:#22d4ef26;animation-delay:.6s}.halo.svelte-1gicu21 img:where(.svelte-1gicu21){width:52px;height:52px;border-radius:12px;box-shadow:0 0 16px #22d4ef66}h1.svelte-1gicu21{margin:12px 0 14px;font-size:clamp(30px,4vw,50px);line-height:1.02;letter-spacing:-.035em;font-weight:600}h1.svelte-1gicu21 span:where(.svelte-1gicu21){color:var(--vx-gold-1)}.intro.svelte-1gicu21 p:where(.svelte-1gicu21){margin:0;max-width:560px;font-size:15px;line-height:1.55;color:var(--vx-txt-1)}.reassure.svelte-1gicu21{margin-top:22px;display:inline-flex;align-items:center;gap:10px;padding:9px 14px;border:1px solid rgba(34,212,239,.25);border-radius:999px;background:#22d4ef0a;font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-cyan-2)}.reassure.svelte-1gicu21 span:where(.svelte-1gicu21){color:var(--vx-gold-1)}.cards.svelte-1gicu21{display:grid;grid-template-columns:1fr 1fr;gap:12px}.step-card.svelte-1gicu21{padding:16px 18px;background:linear-gradient(180deg,#ffffff05,#fff0);cursor:default}.head.svelte-1gicu21{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.glyph.svelte-1gicu21{font-family:var(--vx-mono);font-size:20px;color:var(--vx-cyan-1)}.num.svelte-1gicu21{font-family:var(--vx-mono);font-size:11px;color:var(--vx-txt-3)}.title.svelte-1gicu21{font-weight:600;font-size:14.5px;margin-bottom:4px}.desc.svelte-1gicu21{font-size:12.5px;line-height:1.45;color:var(--vx-txt-2)}@media (max-width: 1000px){.welcome.svelte-1gicu21{grid-template-columns:1fr;gap:24px;align-content:start}}.modal-backdrop.svelte-1c9i6zy{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b8;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);display:flex;align-items:center;justify-content:center;z-index:1200;padding:20px;animation:svelte-1c9i6zy-fadeIn .2s ease-out}@keyframes svelte-1c9i6zy-fadeIn{0%{opacity:0}to{opacity:1}}.modal-card.svelte-1c9i6zy{width:100%;max-width:580px;max-height:90vh;background:var(--vx-bg-1);border:1px solid var(--vx-line-2);border-radius:18px;box-shadow:0 24px 60px #000000b3,0 0 0 1px #22d4ef33;display:flex;flex-direction:column;overflow:hidden;color:var(--vx-txt-0)}.modal-header.svelte-1c9i6zy{display:flex;align-items:center;justify-content:space-between;padding:16px 22px;border-bottom:1px solid var(--vx-line);background:var(--vx-bg-2)}.modal-title-row.svelte-1c9i6zy{display:flex;align-items:center;gap:10px}.modal-glyph.svelte-1c9i6zy{font-size:20px}.modal-header.svelte-1c9i6zy h3:where(.svelte-1c9i6zy){margin:0;font-size:16px;font-weight:600;letter-spacing:-.01em;color:var(--vx-txt-0)}.close-btn.svelte-1c9i6zy{background:transparent;border:none;color:var(--vx-txt-2);font-size:16px;cursor:pointer;padding:6px;border-radius:8px;transition:all .2s;line-height:1}.close-btn.svelte-1c9i6zy:hover{color:var(--vx-txt-0);background:#ffffff14}.modal-body.svelte-1c9i6zy{padding:20px 22px;overflow-y:auto;display:flex;flex-direction:column;gap:16px}.modal-hint.svelte-1c9i6zy{margin:0;font-size:12.5px;line-height:1.5;color:var(--vx-txt-2)}.modal-hint.svelte-1c9i6zy code:where(.svelte-1c9i6zy),.field-hint.svelte-1c9i6zy code:where(.svelte-1c9i6zy){background:var(--vx-bg-4);color:var(--vx-cyan-1);padding:2px 5px;border-radius:4px;font-family:var(--vx-mono);font-size:11px;border:1px solid var(--vx-line)}.field-group.svelte-1c9i6zy{display:flex;flex-direction:column;gap:12px;background:#ffffff05;border:1px solid var(--vx-line);border-radius:14px;padding:16px 18px}.field.svelte-1c9i6zy{display:flex;flex-direction:column;gap:6px}.field-title.svelte-1c9i6zy{font-size:12.5px;font-weight:500;color:var(--vx-txt-1)}.vx-input.svelte-1c9i6zy{width:100%;height:38px;padding:0 12px;background:var(--vx-bg-0);border:1px solid var(--vx-line-2);border-radius:8px;color:var(--vx-txt-0);font-family:inherit;font-size:13px;outline:none;transition:border-color .2s,box-shadow .2s;box-sizing:border-box}.vx-input.svelte-1c9i6zy:focus{border-color:var(--vx-cyan-0);box-shadow:0 0 0 2px var(--vx-cyan-b)}.vx-input.svelte-1c9i6zy::placeholder{color:var(--vx-txt-3)}.field-hint.svelte-1c9i6zy{margin:-4px 0 4px;font-size:11px;line-height:1.45;color:var(--vx-txt-3)}.discovered-models.svelte-1c9i6zy{display:flex;flex-direction:column;gap:6px;margin-top:-4px}.model-tags.svelte-1c9i6zy{display:flex;flex-wrap:wrap;gap:6px}.tag-btn.svelte-1c9i6zy{font-size:11.5px;padding:3px 9px;border-radius:6px;background:var(--vx-bg-3);border:1px solid var(--vx-line-2);color:var(--vx-txt-2);cursor:pointer;transition:all .2s}.tag-btn.svelte-1c9i6zy:hover{color:var(--vx-txt-0);border-color:var(--vx-cyan-0)}.tag-btn.active.svelte-1c9i6zy{background:#22d4ef26;border-color:var(--vx-cyan-0);color:var(--vx-cyan-1);font-weight:600}.test-row.svelte-1c9i6zy{display:flex;align-items:center;gap:12px;margin-top:8px;flex-wrap:wrap}.btn-test.svelte-1c9i6zy{height:36px;padding:0 16px;border-radius:8px;background:var(--vx-bg-4);border:1px solid var(--vx-line-2);color:var(--vx-txt-0);font-size:12.5px;font-weight:600;cursor:pointer;transition:all .2s;display:inline-flex;align-items:center;gap:6px}.btn-test.svelte-1c9i6zy:hover:not(:disabled){background:var(--vx-line-2);border-color:var(--vx-cyan-0)}.btn-test.svelte-1c9i6zy:disabled{opacity:.5;cursor:not-allowed}.status-pill.svelte-1c9i6zy{padding:6px 12px;border-radius:8px;font-size:11.5px;font-weight:500;line-height:1.35;word-break:break-word;max-width:100%}.status-pill.success.svelte-1c9i6zy{background:#6ad48a26;color:var(--vx-good);border:1px solid rgba(106,212,138,.3)}.status-pill.error.svelte-1c9i6zy{background:#f4636e26;color:var(--vx-bad);border:1px solid rgba(244,99,110,.3)}.modal-footer.svelte-1c9i6zy{padding:14px 22px;border-top:1px solid var(--vx-line);background:var(--vx-bg-2);display:flex;align-items:center;justify-content:space-between;gap:12px}.footer-status.svelte-1c9i6zy{font-size:12px}.status-msg.ok.svelte-1c9i6zy{color:var(--vx-good);font-weight:500}.status-msg.warn.svelte-1c9i6zy{color:var(--vx-warn)}.footer-actions.svelte-1c9i6zy{display:flex;gap:10px}.engine-step.svelte-xv54mf{flex:1;min-height:0;display:flex;flex-direction:column;gap:10px}.head.svelte-xv54mf{display:flex;gap:20px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-xv54mf{max-width:760px;min-width:0}.copy.svelte-xv54mf .vx-title:where(.svelte-xv54mf){margin:4px 0 3px;font-size:26px}.copy.svelte-xv54mf .vx-lede:where(.svelte-xv54mf){margin:2px 0 0;font-size:13px;line-height:1.4}.gpu-toggle.svelte-xv54mf{flex:none;width:380px;display:flex;align-items:center;gap:12px;padding:8px 14px}.gpu-toggle.svelte-xv54mf:disabled{opacity:.55;cursor:default}.switch.svelte-xv54mf{width:44px;height:26px;border-radius:999px;position:relative;flex:none;background:var(--vx-bg-4);border:1px solid var(--vx-line-2);transition:background .3s}.switch.on.svelte-xv54mf{background:var(--vx-cyan-0)}.knob.svelte-xv54mf{position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 2px 6px #0006;transition:left .28s var(--vx-ease)}.switch.on.svelte-xv54mf .knob:where(.svelte-xv54mf){left:20px}.gpu-copy.svelte-xv54mf{display:block}.gpu-title.svelte-xv54mf{display:flex;align-items:center;gap:6px;font-weight:600;font-size:13px}.gpu-title.svelte-xv54mf .glyph:where(.svelte-xv54mf){font-family:var(--vx-mono);color:var(--vx-cyan-1)}.state.svelte-xv54mf{font-family:var(--vx-mono);font-size:10px;letter-spacing:.1em;color:var(--vx-txt-3);transition:color .3s}.state.on.svelte-xv54mf{color:var(--vx-cyan-1)}.gpu-desc.svelte-xv54mf{display:block;font-size:11px;color:var(--vx-txt-2);margin-top:2px;line-height:1.35}.engines.svelte-xv54mf{flex:1;min-height:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.engine-card.svelte-xv54mf{position:relative;padding:14px 18px;border-radius:14px;display:grid;grid-template-columns:1fr 144px;gap:10px 14px;align-content:start}.left-col.svelte-xv54mf{min-width:0}.corner.svelte-xv54mf{position:absolute;top:12px;right:12px;width:22px;height:22px}.engine-head.svelte-xv54mf{grid-column:1 / -1}.name-row.svelte-xv54mf{display:flex;align-items:center;gap:8px;margin-bottom:2px}.engine-glyph.svelte-xv54mf{font-family:var(--vx-mono);font-size:20px;color:var(--vx-cyan-1);line-height:1}.engine-name.svelte-xv54mf{font-size:17px;font-weight:600;letter-spacing:-.02em;line-height:1.1}.tagline.svelte-xv54mf{font-size:12px;color:var(--vx-txt-2);line-height:1.35;max-width:92%}.warn.svelte-xv54mf{margin-top:6px;padding:6px 9px;border-radius:8px;border:1px solid rgba(255,180,84,.3);background:#ffb4540f;color:var(--vx-warn);font-size:11px;line-height:1.35}.sizes.svelte-xv54mf{display:flex;gap:4px;margin-top:5px;flex-wrap:wrap;min-width:0}.size.svelte-xv54mf{height:40px;flex:1 1 0;max-width:96px;min-width:0;padding:0 4px;border-radius:8px;border:1px solid var(--vx-line);background:#ffffff05;color:var(--vx-txt-1);font-family:var(--vx-mono);cursor:pointer;transition:all .22s;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:2px;white-space:nowrap}.size.svelte-xv54mf:hover{border-color:var(--vx-line-2)}.size.on.svelte-xv54mf{border-color:var(--vx-cyan-b);background:#22d4ef1f;color:var(--vx-cyan-1)}.size-id.svelte-xv54mf{font-size:11.5px;font-weight:600;line-height:1.1;white-space:nowrap}.size-mb.svelte-xv54mf{font-size:9.5px;line-height:1.1;opacity:.75;white-space:nowrap}.remote-summary-box.svelte-xv54mf{margin-top:5px;padding:7px 10px;background:#00000040;border:1px solid var(--vx-line);border-radius:8px;display:flex;flex-direction:column;gap:4px}.remote-row.svelte-xv54mf{display:flex;justify-content:space-between;align-items:center;gap:8px;font-family:var(--vx-mono);font-size:10.5px}.remote-k.svelte-xv54mf{color:var(--vx-txt-2);flex:none}.remote-v.svelte-xv54mf{color:var(--vx-txt-0);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:240px;text-align:right}.remote-v-ok.svelte-xv54mf{color:var(--vx-good);font-weight:600}.remote-v-warn.svelte-xv54mf{color:var(--vx-warn);font-weight:600}.remote-btn-row.svelte-xv54mf{margin-top:6px}.remote-cfg-btn.svelte-xv54mf{width:100%;height:32px;font-size:11.5px}.metrics.svelte-xv54mf{margin-top:14px;display:flex;flex-direction:column;gap:7px}.metric.svelte-xv54mf{display:flex;flex-direction:column;transition:opacity .3s}.metric.dim.svelte-xv54mf{opacity:.45}.metric-head.svelte-xv54mf{display:flex;justify-content:space-between;font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-2);margin-bottom:3px;line-height:1.2}.metric-head.svelte-xv54mf span:where(.svelte-xv54mf):last-child{color:var(--vx-txt-1)}.right-col.svelte-xv54mf{width:144px;display:flex;flex-direction:column;gap:8px}.spark.svelte-xv54mf{width:144px;height:80px;box-sizing:border-box;padding:7px 9px;border-radius:10px;border:1px solid var(--vx-line);background:#00000040;display:flex;flex-direction:column}.spark-head.svelte-xv54mf{display:flex;justify-content:space-between;font-family:var(--vx-mono);font-size:10px;color:var(--vx-txt-2);margin-bottom:5px;flex:none;line-height:1.2}.spark-head.svelte-xv54mf span:where(.svelte-xv54mf):last-child{color:var(--vx-txt-0)}.spark-bars.svelte-xv54mf{display:flex;align-items:flex-end;gap:3px;flex:1;min-height:0}.spark-bars.svelte-xv54mf>div:where(.svelte-xv54mf){flex:1;border-radius:2px;background:var(--vx-cyan-0);transition:height .6s var(--vx-ease),opacity .4s}.status-row.svelte-xv54mf{flex:none;display:flex;justify-content:flex-end}@media (max-width: 1100px){.head.svelte-xv54mf{flex-direction:column;align-items:stretch;gap:10px}.gpu-toggle.svelte-xv54mf{width:100%}.engines.svelte-xv54mf{grid-template-columns:1fr}}.hotkey-step.svelte-1fbfhk3{flex:1;min-height:0;display:flex;flex-direction:column;gap:14px}.copy.svelte-1fbfhk3{max-width:820px;min-width:0}.body.svelte-1fbfhk3{flex:1;min-height:0;display:grid;grid-template-columns:minmax(300px,1fr) 1.6fr;gap:14px}.gestures.svelte-1fbfhk3{display:grid;grid-auto-rows:min-content;gap:10px;align-content:start}.gesture.svelte-1fbfhk3{padding:12px 16px;display:grid;grid-template-columns:1fr 130px;gap:14px;align-items:center}.g-name.svelte-1fbfhk3{font-weight:600;font-size:14.5px;margin-bottom:3px}.g-desc.svelte-1fbfhk3{font-size:12px;color:var(--vx-txt-2);line-height:1.4}.tracks.svelte-1fbfhk3{display:grid;gap:5px}.track-row.svelte-1fbfhk3{display:grid;grid-template-columns:24px 1fr;gap:6px;align-items:center}.track-label.svelte-1fbfhk3{font-family:var(--vx-mono);font-size:9.5px;color:var(--vx-txt-3);letter-spacing:.1em}.track.svelte-1fbfhk3{display:flex;gap:2px;height:9px}.track.svelte-1fbfhk3>div:where(.svelte-1fbfhk3){border-radius:2px;background:var(--vx-bg-3);transition:background .3s}.track.svelte-1fbfhk3>div.lit:where(.svelte-1fbfhk3){background:var(--vx-txt-2)}.track.svelte-1fbfhk3>div.on:where(.svelte-1fbfhk3){background:var(--vx-cyan-0)}.hidden-note.svelte-1fbfhk3{padding:10px 12px;border-radius:10px;border:1px dashed var(--vx-line-2);font-size:12px;line-height:1.45;color:var(--vx-txt-2)}.right.svelte-1fbfhk3{display:flex;flex-direction:column;gap:12px;min-height:0}.recorder.svelte-1fbfhk3{position:relative;overflow:hidden;flex:1;min-height:220px;border-radius:18px;border:1px dashed var(--vx-line-2);background:#ffffff04;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;cursor:pointer;font:inherit;color:inherit;transition:all .3s var(--vx-ease)}.recorder.rec.svelte-1fbfhk3{border-color:var(--vx-cyan-b);background:#22d4ef0d;box-shadow:0 0 0 1px #22d4ef26,0 0 40px #22d4ef1f}.recorder.done.svelte-1fbfhk3{border-color:var(--vx-cyan-b);background:var(--vx-bg-1);box-shadow:0 0 0 1px #22d4ef1a}.scan.svelte-1fbfhk3{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,transparent,rgba(34,212,239,.08),transparent);animation:vxScan 1.6s linear infinite;pointer-events:none}.rec-label.svelte-1fbfhk3{font-family:var(--vx-mono);font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--vx-txt-2);display:flex;align-items:center;gap:8px;transition:color .3s}.recorder.rec.svelte-1fbfhk3 .rec-label:where(.svelte-1fbfhk3){color:var(--vx-cyan-1)}.recorder.done.svelte-1fbfhk3 .rec-label:where(.svelte-1fbfhk3){color:var(--vx-good)}.dot.svelte-1fbfhk3{width:8px;height:8px;border-radius:50%;background:currentColor;box-shadow:0 0 10px currentColor;animation:vxPulse 1.4s infinite}.keycaps.svelte-1fbfhk3{display:flex;gap:10px;align-items:center;min-height:64px}.rec-hint.svelte-1fbfhk3{font-size:13px;color:var(--vx-txt-2);text-align:center;max-width:520px;line-height:1.5;padding:0 20px}.rec-hint.bad.svelte-1fbfhk3{color:var(--vx-warn)}.sys.svelte-1fbfhk3{flex:none;padding:14px 18px;border-radius:14px;border:1px solid var(--vx-line);background:var(--vx-bg-1);display:flex;gap:16px;align-items:center;animation:vxPop .3s var(--vx-ease)}.sys.ok.svelte-1fbfhk3{border-color:#6ad48a66}.sys-glyph.svelte-1fbfhk3{font-family:var(--vx-mono);font-size:26px;color:var(--vx-gold-1)}.sys.ok.svelte-1fbfhk3 .sys-glyph:where(.svelte-1fbfhk3){color:var(--vx-good)}.sys-copy.svelte-1fbfhk3{flex:1;min-width:0}.sys-title.svelte-1fbfhk3{font-weight:600;font-size:14px}.sys-desc.svelte-1fbfhk3{font-size:12.5px;color:var(--vx-txt-2);line-height:1.45;margin-top:2px}.sys-err.svelte-1fbfhk3{margin-top:6px;font-size:12px;color:var(--vx-bad);line-height:1.4}.sys-actions.svelte-1fbfhk3{display:flex;gap:8px;flex:none}@media (max-width: 1100px){.body.svelte-1fbfhk3{grid-template-columns:1fr}}.preview.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;color:var(--vx-cyan-0);background:radial-gradient(120% 120% at 50% 120%,rgba(34,212,239,.1),transparent 70%)}.preview.mono.svelte-y6l73v{color:#dfe6ee;background:none}.still.svelte-y6l73v,.clip.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover;display:block;pointer-events:none}.clip.svelte-y6l73v{opacity:0;transition:opacity .35s ease}.clip.ready.svelte-y6l73v{opacity:1}.bars.svelte-y6l73v{display:flex;align-items:flex-end;justify-content:center;gap:3px;width:64%;height:56%}.bars.svelte-y6l73v>div:where(.svelte-y6l73v){flex:1;min-height:10%;border-radius:2px;background:currentColor;transform-origin:bottom;animation-name:vxBar;animation-iteration-count:infinite;animation-timing-function:ease-in-out;opacity:.9}.wave.svelte-y6l73v{width:76%;height:46%;color:inherit;animation:svelte-y6l73v-waveShift 2.6s linear infinite}@keyframes svelte-y6l73v-waveShift{0%{transform:translate(0)}to{transform:translate(-16%)}}.ring-wrap.svelte-y6l73v{position:relative;width:46%;aspect-ratio:1;display:grid;place-items:center}.ring.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;border:1.5px solid currentColor;opacity:.4;animation:vxPulse 1.8s ease-in-out infinite}.ring.r2.svelte-y6l73v{top:22%;right:22%;bottom:22%;left:22%;animation-delay:.5s}.ring-core.svelte-y6l73v{width:26%;aspect-ratio:1;border-radius:50%;background:currentColor;animation:vxPulse 1.8s ease-in-out infinite;animation-delay:.25s}.dial.svelte-y6l73v{position:relative;width:62%;aspect-ratio:2 / 1;display:grid;place-items:end center}.dial-arc.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:999px 999px 0 0;border:1.5px solid currentColor;border-bottom:0;opacity:.35}.needle.svelte-y6l73v{position:absolute;bottom:0;left:50%;width:2px;height:82%;background:var(--vx-gold-1);transform-origin:bottom center;animation:svelte-y6l73v-needleSwing 2.2s ease-in-out infinite}@keyframes svelte-y6l73v-needleSwing{0%,to{transform:rotate(-38deg)}50%{transform:rotate(34deg)}}.terminal.svelte-y6l73v{width:76%;font-family:var(--vx-mono);font-size:9px;color:#7ab8ff;display:grid;gap:5px}.blocks.svelte-y6l73v{display:flex;gap:2px;height:10px}.blocks.svelte-y6l73v>div:where(.svelte-y6l73v){flex:1;background:#7ab8ff;transform-origin:bottom;animation:vxBar 1.1s ease-in-out infinite}.overlay-step.svelte-ek86vh{flex:1;min-height:0;display:flex;flex-direction:column;gap:14px}.head.svelte-ek86vh{display:flex;gap:24px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-ek86vh{max-width:720px;min-width:0}.choice.svelte-ek86vh{display:grid;grid-template-columns:1fr 1fr;gap:10px;flex:none;width:520px}.mode.svelte-ek86vh{height:66px;padding:0 16px;display:flex;align-items:center;gap:12px}.mode.off-on.svelte-ek86vh{border-color:var(--vx-line-2);background:var(--vx-bg-3);box-shadow:0 0 0 1px var(--vx-line-2)}.mode-glyph.svelte-ek86vh{font-family:var(--vx-mono);font-size:22px;color:var(--vx-txt-2)}.mode-glyph.on.svelte-ek86vh{color:var(--vx-cyan-1)}.mode-title.svelte-ek86vh{display:block;font-weight:600;font-size:14px}.mode-desc.svelte-ek86vh{display:block;font-size:12px;color:var(--vx-txt-2)}.body.svelte-ek86vh{flex:1;min-height:0;display:grid;grid-template-columns:1.7fr 1fr;gap:16px;transition:opacity .4s,filter .4s}.body.muted.svelte-ek86vh{opacity:.18;filter:grayscale(1) blur(1px);pointer-events:none}.styles.svelte-ek86vh,.position.svelte-ek86vh{display:flex;flex-direction:column;min-height:0}.style-grid.svelte-ek86vh{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:8px}.style-card.svelte-ek86vh{overflow:hidden;padding:0;display:flex;flex-direction:column;min-height:0}.thumb.svelte-ek86vh{position:relative;aspect-ratio:16 / 9;background:#05070a;overflow:hidden}.style-meta.svelte-ek86vh{flex:none;display:flex;align-items:center;justify-content:space-between;padding:8px 12px}.style-name.svelte-ek86vh{font-weight:600;font-size:13px}.style-sub.svelte-ek86vh{font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-2)}.style-glyph.svelte-ek86vh{font-family:var(--vx-mono);font-size:14px;color:var(--vx-txt-3);transition:color .3s}.style-glyph.on.svelte-ek86vh{color:var(--vx-cyan-1)}.screen.svelte-ek86vh{position:relative;aspect-ratio:16 / 10;border-radius:12px;border:1px solid var(--vx-line-2);background:linear-gradient(180deg,var(--vx-bg-2),var(--vx-bg-0));overflow:hidden;box-shadow:var(--vx-panel-shadow);margin-top:8px}.grid-lines.svelte-ek86vh{position:absolute;top:0;right:0;bottom:0;left:0;background-image:linear-gradient(to right,rgba(255,255,255,.03) 1px,transparent 1px),linear-gradient(to bottom,rgba(255,255,255,.03) 1px,transparent 1px);background-size:28px 28px}.taskbar.svelte-ek86vh{position:absolute;left:0;right:0;bottom:0;height:7%;background:#00000080;border-top:1px solid var(--vx-line)}.floating.svelte-ek86vh{position:absolute;left:50%;transform:translate(-50%,-50%);width:44%;aspect-ratio:16 / 9;border-radius:8px;overflow:hidden;border:1px solid rgba(34,212,239,.4);box-shadow:0 0 24px #22d4ef40;background:#05070a;transition:top .5s var(--vx-ease)}.pos-buttons.svelte-ek86vh{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:10px}.pos.svelte-ek86vh{height:46px;border-radius:10px;border:1px solid var(--vx-line);background:#ffffff05;color:var(--vx-txt-1);font:inherit;font-size:13px;font-weight:600;cursor:pointer;transition:all .25s;display:flex;align-items:center;justify-content:center;gap:8px}.pos.svelte-ek86vh:hover{border-color:var(--vx-line-2)}.pos.on.svelte-ek86vh{border-color:var(--vx-cyan-b);background:#22d4ef1f;color:var(--vx-cyan-1)}.pos-glyph.svelte-ek86vh{font-family:var(--vx-mono)}@media (max-width: 1100px){.head.svelte-ek86vh{flex-direction:column;align-items:stretch}.choice.svelte-ek86vh{width:100%}.body.svelte-ek86vh{grid-template-columns:1fr}.style-grid.svelte-ek86vh{grid-template-columns:repeat(2,1fr)}}.test-step.svelte-oqvphh{flex:1;min-height:0;display:flex;flex-direction:column;gap:14px}.head.svelte-oqvphh{display:flex;gap:24px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-oqvphh{max-width:640px;min-width:0}.combo.svelte-oqvphh{display:flex;gap:10px;align-items:center;flex:none}.gesture-pill.svelte-oqvphh{margin-left:10px;font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-txt-2);padding:6px 12px;border:1px solid var(--vx-line);border-radius:999px}.box.svelte-oqvphh{position:relative;flex:1;min-height:0;border-radius:18px;border:1px solid var(--vx-line);background:var(--vx-bg-1);transition:all .4s var(--vx-ease);overflow:hidden;display:flex;flex-direction:column}.box.live.svelte-oqvphh{border-color:var(--vx-cyan-b);box-shadow:0 0 40px #22d4ef26}.box.won.svelte-oqvphh{border-color:#6ad48a80;box-shadow:0 0 40px #6ad48a26}.box-head.svelte-oqvphh{flex:none;display:flex;align-items:center;justify-content:space-between;padding:10px 18px;border-bottom:1px solid var(--vx-line)}.file.svelte-oqvphh{font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-txt-2)}.state.svelte-oqvphh{font-family:var(--vx-mono);font-size:11px;letter-spacing:.1em;display:flex;align-items:center;gap:8px;color:var(--vx-txt-3);transition:color .3s}.state.recording.svelte-oqvphh{color:var(--vx-cyan-0)}.state.transcribing.svelte-oqvphh{color:var(--vx-gold-1)}.state.success.svelte-oqvphh{color:var(--vx-good)}.dot.svelte-oqvphh{width:7px;height:7px;border-radius:50%;background:currentColor;box-shadow:0 0 8px currentColor;animation:vxPulse 1.4s infinite}textarea.svelte-oqvphh{display:block;flex:1;min-height:180px;width:100%;padding:22px;border:0;background:transparent;color:var(--vx-txt-0);font-family:inherit;font-size:19px;line-height:1.6;resize:none;caret-color:var(--vx-cyan-0);outline:none}.wave.svelte-oqvphh{position:absolute;left:0;right:0;bottom:0;height:64px;display:flex;align-items:center;justify-content:center;gap:4px;background:linear-gradient(180deg,transparent,rgba(34,212,239,.1));pointer-events:none}.wave.svelte-oqvphh>div:where(.svelte-oqvphh){width:4px;height:30px;border-radius:2px;background:var(--vx-cyan-0);transform-origin:center;animation-name:vxBar;animation-iteration-count:infinite;animation-timing-function:ease-in-out}.won-overlay.svelte-oqvphh{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;text-align:center;background:#0e1116db;animation:vxPop .35s var(--vx-ease)}.tick.svelte-oqvphh{width:84px;height:84px;margin:0 auto 16px;border-radius:50%;border:2px solid var(--vx-good);display:grid;place-items:center;color:var(--vx-good);font-family:var(--vx-mono);font-size:36px;box-shadow:0 0 30px #6ad48a59;animation:vxRing .5s var(--vx-ease)}.won-title.svelte-oqvphh{font-size:26px;font-weight:600;letter-spacing:-.02em}.won-sub.svelte-oqvphh{font-size:14px;color:var(--vx-txt-2);margin:6px 0 18px}.foot.svelte-oqvphh{flex:none;display:flex;justify-content:space-between;align-items:center;gap:20px;font-size:12.5px;color:var(--vx-txt-2)}.engine.svelte-oqvphh{font-family:var(--vx-mono);font-size:11px;white-space:nowrap}@media (max-width: 1000px){.head.svelte-oqvphh{flex-direction:column;align-items:stretch;gap:12px}}.voice-step.svelte-1yghr3b{flex:1;min-height:0;display:flex;flex-direction:column;gap:12px}.head.svelte-1yghr3b{display:flex;gap:20px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-1yghr3b{max-width:680px;min-width:0}.copy.svelte-1yghr3b .vx-lede:where(.svelte-1yghr3b){margin:4px 0 0;font-size:13px;line-height:1.45}.choice.svelte-1yghr3b{display:grid;grid-template-columns:1fr 1fr;gap:10px;flex:none;width:480px}.mode.svelte-1yghr3b{height:58px;padding:0 14px;display:flex;align-items:center;gap:10px}.mode.off-on.svelte-1yghr3b{border-color:var(--vx-line-2);background:var(--vx-bg-3);box-shadow:0 0 0 1px var(--vx-line-2)}.mode-glyph.svelte-1yghr3b{font-family:var(--vx-mono);font-size:20px;color:var(--vx-txt-2)}.mode-glyph.on.svelte-1yghr3b{color:var(--vx-cyan-1)}.mode-title.svelte-1yghr3b{display:block;font-weight:600;font-size:13.5px}.mode-desc.svelte-1yghr3b{display:block;font-size:11.5px;color:var(--vx-txt-2)}.toolbar.svelte-1yghr3b{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:8px 14px;border:1px solid var(--vx-line);border-radius:10px;background:#ffffff05;flex:none;transition:opacity .4s,filter .4s}.audition-panel.svelte-1yghr3b{display:flex;align-items:center;gap:14px;min-width:0}.audition-btn.svelte-1yghr3b{height:38px;padding:0 16px;display:inline-flex;align-items:center;gap:8px;font-size:13px;font-weight:600;border-radius:8px;background:#22d4ef17;border:1px solid var(--vx-cyan-0);color:var(--vx-cyan-0);cursor:pointer;transition:all .2s}.audition-btn.svelte-1yghr3b:hover:not(:disabled){background:#22d4ef2e;box-shadow:0 0 12px #22d4ef40}.audition-btn.svelte-1yghr3b:disabled{opacity:.4;cursor:not-allowed;border-color:var(--vx-line-2);color:var(--vx-txt-3);background:#ffffff08}.audition-btn.playing.svelte-1yghr3b{border-color:var(--vx-gold-1);color:var(--vx-gold-1);background:#eab3081f}.tri.svelte-1yghr3b{font-family:var(--vx-mono);font-size:14px;color:inherit}.stop-icon.svelte-1yghr3b{font-size:14px;color:inherit}.btn-text.svelte-1yghr3b{font-family:var(--vx-mono);font-size:12px;letter-spacing:.02em}.play-bars.svelte-1yghr3b{display:flex;align-items:center;gap:2.5px;height:18px;margin-left:4px}.play-bars.svelte-1yghr3b>div:where(.svelte-1yghr3b){width:3px;height:18px;border-radius:1.5px;background:currentColor;transform-origin:center;animation-name:vxBar;animation-iteration-count:infinite;animation-timing-function:ease-in-out}.audition-meta.svelte-1yghr3b{display:flex;flex-direction:column;gap:2px}.audition-label.svelte-1yghr3b{font-size:12px;color:var(--vx-cyan-0);font-weight:600}.audition-hint.svelte-1yghr3b{font-size:11px;font-family:var(--vx-mono)}.audition-hint.svelte-1yghr3b .ready:where(.svelte-1yghr3b){color:var(--vx-good)}.audition-hint.svelte-1yghr3b .good:where(.svelte-1yghr3b){color:var(--vx-cyan-0)}.audition-hint.svelte-1yghr3b .warn:where(.svelte-1yghr3b){color:var(--vx-gold-1)}.audition-hint.svelte-1yghr3b .bad:where(.svelte-1yghr3b){color:var(--vx-bad)}.audition-hint.svelte-1yghr3b .dim:where(.svelte-1yghr3b){color:var(--vx-txt-3)}.hf-bar.svelte-1yghr3b{display:flex;align-items:center;gap:12px;padding:4px 10px;border-radius:8px;border:1px solid transparent;background:#0003}.hf-bar.needed.svelte-1yghr3b{border-color:color-mix(in srgb,var(--vx-gold-1) 45%,transparent);background:color-mix(in srgb,var(--vx-gold-1) 6%,transparent)}.hf-header.svelte-1yghr3b{display:flex;flex-direction:column;gap:1px;text-align:right}.hf-title.svelte-1yghr3b{font-size:11.5px;font-weight:600}.hf-sub.svelte-1yghr3b{font-size:10px;color:var(--vx-txt-3)}.hf-control.svelte-1yghr3b{display:flex;flex-direction:column;gap:2px}.hf-input.svelte-1yghr3b{width:170px;padding:5px 8px;font-size:11.5px;font-family:inherit;color:inherit;background:#00000073;border:1px solid var(--vx-line);border-radius:6px;outline:none;transition:border-color .2s}.hf-input.svelte-1yghr3b:focus{border-color:var(--vx-cyan-0)}.hf-input[readonly].svelte-1yghr3b{color:var(--vx-txt-2);cursor:not-allowed}.hf-state.svelte-1yghr3b{font-size:9.5px;font-family:var(--vx-mono);color:var(--vx-txt-3);white-space:nowrap}.hf-state.ok.svelte-1yghr3b{color:var(--vx-good)}.hf-state.bad.svelte-1yghr3b{color:var(--vx-bad)}.non-commercial-notice.svelte-1yghr3b{flex:none;padding:8px 12px;border-radius:8px;border:1px solid color-mix(in srgb,var(--vx-gold-1) 45%,transparent);background:color-mix(in srgb,var(--vx-gold-1) 6%,transparent);font-size:12px;line-height:1.4}.gpu-toggle-row.svelte-1yghr3b{flex:none;display:flex;align-items:center;gap:8px;font-size:12.5px;padding:2px}.gpu-toggle-hint.svelte-1yghr3b{color:var(--vx-txt-3);font-size:11px}.grid.svelte-1yghr3b{flex:1;min-height:0;display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(2,minmax(0,1fr));gap:10px;transition:opacity .4s,filter .4s}.grid.muted.svelte-1yghr3b{opacity:.18;filter:grayscale(1) blur(1px);pointer-events:none}.card.svelte-1yghr3b{padding:12px 14px;display:flex;flex-direction:column;gap:8px;min-height:0;cursor:pointer;transition:all .2s}.card.locked.svelte-1yghr3b{opacity:.55}.card.locked.svelte-1yghr3b .name:where(.svelte-1yghr3b){color:var(--vx-txt-2)}.card-head.svelte-1yghr3b{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}.card-title-group.svelte-1yghr3b{display:flex;align-items:baseline;gap:8px;min-width:0}.name.svelte-1yghr3b{font-weight:600;font-size:14.5px;letter-spacing:-.01em;white-space:nowrap}.kind.svelte-1yghr3b{font-family:var(--vx-mono);font-size:10px;color:var(--vx-txt-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions.svelte-1yghr3b{display:grid}.dl.svelte-1yghr3b{height:30px;width:100%;font-size:11.5px;padding:0 10px}.bundled.svelte-1yghr3b{height:30px;display:flex;align-items:center;justify-content:center;border-radius:8px;border:1px dashed var(--vx-line);font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-3);text-align:center}.bundled.ok.svelte-1yghr3b{border-style:solid;border-color:#6ad48a59;color:var(--vx-good)}.metrics.svelte-1yghr3b{display:flex;flex-direction:column;gap:8px}.metric-head.svelte-1yghr3b{display:flex;justify-content:space-between;font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-2);margin-bottom:4px}.metric-head.svelte-1yghr3b span:where(.svelte-1yghr3b):last-child{color:var(--vx-txt-1)}.note.svelte-1yghr3b{font-size:11px;color:var(--vx-txt-2);line-height:1.35;margin-top:auto;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.bad.svelte-1yghr3b{color:var(--vx-bad);word-break:break-word}.note.svelte-1yghr3b .ok:where(.svelte-1yghr3b){color:var(--vx-good)}.play-error.svelte-1yghr3b{flex:none;font-size:12px;color:var(--vx-bad)}@media (max-width: 1100px){.grid.svelte-1yghr3b{grid-template-columns:repeat(2,1fr);grid-template-rows:repeat(3,minmax(0,1fr))}.head.svelte-1yghr3b{flex-direction:column;align-items:stretch}.choice.svelte-1yghr3b{width:100%}}@media (max-width: 800px){.toolbar.svelte-1yghr3b{flex-direction:column;align-items:stretch}.hf-header.svelte-1yghr3b{text-align:left}.hf-input.svelte-1yghr3b{width:100%}}.done-step.svelte-ujy0nl{flex:1;min-height:0;display:grid;grid-template-columns:.95fr 1fr 1fr;gap:18px;align-items:stretch}.hero.svelte-ujy0nl{display:flex;flex-direction:column;justify-content:center}.tick.svelte-ujy0nl{width:76px;height:76px;margin:0 0 20px;border-radius:50%;border:2px solid var(--vx-gold-0);display:grid;place-items:center;color:var(--vx-gold-1);font-family:var(--vx-mono);font-size:32px;box-shadow:0 0 30px var(--vx-gold-glow);animation:vxRing .6s var(--vx-ease)}.tick.warn.svelte-ujy0nl{border-color:var(--vx-bad);color:var(--vx-bad);box-shadow:0 0 30px #f4636e4d}h2.svelte-ujy0nl{margin:10px 0;font-size:clamp(28px,3.2vw,44px);letter-spacing:-.035em;line-height:1.02;font-weight:600}h2.svelte-ujy0nl span:where(.svelte-ujy0nl){color:var(--vx-gold-1)}h2.svelte-ujy0nl span.bad-word:where(.svelte-ujy0nl){color:var(--vx-bad)}.hero.svelte-ujy0nl p:where(.svelte-ujy0nl){margin:0 0 20px;font-size:14.5px;line-height:1.55;color:var(--vx-txt-1)}.summary.svelte-ujy0nl{display:grid;grid-template-columns:1fr 1fr;gap:10px 14px;padding:14px 16px;border-radius:14px;border:1px solid var(--vx-line);background:linear-gradient(180deg,rgba(34,212,239,.04),transparent)}.summary-value.svelte-ujy0nl{font-size:13px;font-weight:600;color:var(--vx-txt-0);margin-top:3px;word-break:break-word}.panel.svelte-ujy0nl{padding:20px;border-radius:18px;border:1px solid var(--vx-line);background:var(--vx-bg-1);display:flex;flex-direction:column;min-height:0}.panel.problems.svelte-ujy0nl{border-color:#f4636e66}.panel-head.svelte-ujy0nl{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.panel-title.svelte-ujy0nl{font-weight:600;font-size:16px;margin:6px 0 4px}.panel-desc.svelte-ujy0nl{font-size:13px;color:var(--vx-txt-2);line-height:1.5;margin-bottom:16px}.issue-list.svelte-ujy0nl{flex:1;min-height:0;overflow:auto;margin:10px 0 12px;display:grid;gap:10px;align-content:start}.issue.svelte-ujy0nl{border:1px solid var(--vx-line);border-radius:12px;background:#f4636e0a;padding:11px 12px}.issue-head.svelte-ujy0nl{display:flex;gap:9px;align-items:baseline}.issue-step.svelte-ujy0nl{flex:none;font-family:var(--vx-mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--vx-bad)}.issue-title.svelte-ujy0nl{font-size:13px;line-height:1.45;color:var(--vx-txt-0)}.issue-detail.svelte-ujy0nl{margin:8px 0 0;padding:8px 10px;border-radius:8px;background:#00000059;font-family:var(--vx-mono);font-size:11px;line-height:1.5;color:var(--vx-txt-2);white-space:pre-wrap;word-break:break-word;max-height:150px;overflow:auto}.problem-actions.svelte-ujy0nl{display:flex;gap:8px;margin-top:auto}.log-status.svelte-ujy0nl{margin-top:8px;font-size:12px;line-height:1.4;color:var(--vx-txt-2)}.mock-screen.svelte-ujy0nl{position:relative;flex:1;min-height:230px;border-radius:12px;border:1px solid var(--vx-line-2);background:linear-gradient(180deg,var(--vx-bg-2),var(--vx-bg-0));overflow:hidden}.mock-bar.svelte-ujy0nl{position:absolute;left:0;right:0;bottom:0;height:40px;background:#0000008c;border-top:1px solid var(--vx-line);display:flex;align-items:center;justify-content:flex-end;padding:0 14px;gap:12px}.mock-sys-icon.svelte-ujy0nl{font-size:11px;color:var(--vx-txt-3);opacity:.65;-webkit-user-select:none;user-select:none}.mock-sys-icon.chevron.svelte-ujy0nl{font-size:14px;margin-left:2px}.tray-btn-wrap.svelte-ujy0nl{position:relative;display:inline-flex;align-items:center;justify-content:center}.tray-btn.svelte-ujy0nl{width:32px;height:32px;border-radius:6px;border:1px solid transparent;background:transparent;cursor:pointer;display:grid;place-items:center;transition:all .2s}.tray-btn.svelte-ujy0nl:hover{background:#ffffff14}.tray-btn.on.svelte-ujy0nl{border-color:#ffffff40;background:#ffffff1f}.tray-btn.svelte-ujy0nl img:where(.svelte-ujy0nl){width:22px;height:22px;display:block;object-fit:contain}.tray-menu.svelte-ujy0nl{position:absolute;right:14px;bottom:48px;width:275px;padding:6px;border-radius:8px;border:1px solid rgba(255,255,255,.15);background:#1f232a;box-shadow:0 10px 30px #000000b3;animation:vxPop .18s var(--vx-ease);z-index:10}.tray-row.svelte-ujy0nl{width:100%;border:none;background:transparent;padding:6px 8px;border-radius:5px;display:flex;align-items:center;gap:8px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:13.5px;color:#e6edf3;text-align:left;cursor:pointer;transition:background .15s,color .15s}.tray-row.svelte-ujy0nl:hover{background:#ffffff14;color:#fff}.chk-gutter.svelte-ujy0nl{width:18px;height:18px;flex:none;display:flex;align-items:center;justify-content:center}.chk.svelte-ujy0nl{width:16px;height:16px;border-radius:4px;border:1px solid rgba(255,255,255,.3);background:#ffffff0f;display:flex;align-items:center;justify-content:center;transition:all .15s ease}.chk.on.svelte-ujy0nl{background:#1d8cf8;border-color:#38bdf8}.tray-icon.svelte-ujy0nl{width:20px;font-size:15px;display:flex;align-items:center;justify-content:center;flex:none}.tray-label.svelte-ujy0nl{flex:1;white-space:nowrap;letter-spacing:-.01em}.tray-label.no-icon.svelte-ujy0nl{padding-left:2px}.tray-sep.svelte-ujy0nl{height:1px;background:#ffffff1f;margin:5px 6px}.click-me.svelte-ujy0nl{position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;gap:2px;font-family:var(--vx-mono);font-size:11px;letter-spacing:.05em;color:var(--vx-cyan-1);white-space:nowrap;pointer-events:none;animation:svelte-ujy0nl-vxNudge 1.6s ease-in-out infinite}.arrow.svelte-ujy0nl{font-size:14px;font-weight:700;line-height:1}@keyframes svelte-ujy0nl-vxNudge{0%,to{transform:translate(-50%) translateY(0)}50%{transform:translate(-50%) translateY(4px)}}.where.svelte-ujy0nl{list-style:none;padding:0;margin:0 0 16px;display:grid;gap:2px}.where.svelte-ujy0nl li:where(.svelte-ujy0nl){display:flex;align-items:center;gap:9px;padding:7px 10px;font-size:12.5px;color:var(--vx-txt-1)}.where.svelte-ujy0nl .glyph:where(.svelte-ujy0nl){font-family:var(--vx-mono);color:var(--vx-cyan-2);width:16px}.where.svelte-ujy0nl .tag:where(.svelte-ujy0nl){margin-left:auto;font-family:var(--vx-mono);font-size:10px;color:var(--vx-txt-3)}.open-settings.svelte-ujy0nl{margin-top:auto;align-self:flex-start}.vx-btn.small.svelte-ujy0nl{height:34px;padding:0 12px;font-size:12px}@media (max-width: 1100px){.done-step.svelte-ujy0nl{grid-template-columns:1fr;align-content:start}}.vx-root.svelte-18pn5kx{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;overflow:hidden}.vx-titlebar.svelte-18pn5kx{height:46px;flex:none;display:flex;align-items:center;gap:9px;padding:0 18px;border-bottom:1px solid var(--vx-line);background:#0e1116b3;z-index:2}.vx-logo.svelte-18pn5kx{width:20px;height:20px;border-radius:5px}.vx-brand.svelte-18pn5kx{font-weight:600;font-size:14.5px;letter-spacing:-.01em}.vx-brand.svelte-18pn5kx span:where(.svelte-18pn5kx){color:var(--vx-cyan-0)}.vx-mono.svelte-18pn5kx{font-family:var(--vx-mono);font-size:11px;letter-spacing:.1em}.vx-dim.svelte-18pn5kx{color:var(--vx-txt-2)}.vx-faint.svelte-18pn5kx{color:var(--vx-txt-3)}.vx-spacer.svelte-18pn5kx{flex:1}.vx-screen.svelte-18pn5kx{flex:1;min-height:0;display:flex;flex-direction:column;padding:22px 32px 16px;overflow:auto;opacity:1;transform:none;transition:opacity .2s ease,transform .2s var(--vx-ease)}.vx-screen.vx-leaving.svelte-18pn5kx{opacity:0;transform:translateY(10px)}.vx-loading.svelte-18pn5kx{margin:auto;display:flex;align-items:center;gap:10px;color:var(--vx-txt-2);font-size:13.5px}.vx-footer.svelte-18pn5kx{flex:none;display:grid;grid-template-columns:170px 1fr auto;align-items:center;gap:28px;border-top:1px solid var(--vx-line);background:#0e1116cc;padding:10px 32px 12px;z-index:3}.vx-nav-left.svelte-18pn5kx,.vx-nav-right.svelte-18pn5kx{display:flex;align-items:center;gap:12px}.vx-nav-right.svelte-18pn5kx{justify-content:flex-end}.vx-skip.svelte-18pn5kx{font-weight:500;color:var(--vx-txt-3)}.vx-blocker.svelte-18pn5kx{max-width:340px;font-size:12px;line-height:1.35;color:var(--vx-txt-2);text-align:right}.vx-track.svelte-18pn5kx,.vx-track-cell.svelte-18pn5kx{display:flex;align-items:center;min-width:0}.vx-track-step.svelte-18pn5kx{display:flex;flex-direction:column;align-items:center;gap:6px;min-width:62px;padding:4px 6px;border:0;background:transparent;font:inherit;color:var(--vx-txt-3);cursor:pointer;transition:color .3s}.vx-track-step.svelte-18pn5kx:disabled{cursor:default}.vx-track-step.vx-done.svelte-18pn5kx{color:var(--vx-txt-1)}.vx-track-step.vx-cur.svelte-18pn5kx{color:var(--vx-txt-0)}.vx-ring.svelte-18pn5kx{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-family:var(--vx-mono);font-size:12px;border:1px solid var(--vx-line-2);background:transparent;color:var(--vx-txt-3);transition:all .35s var(--vx-ease)}.vx-track-step.vx-done.svelte-18pn5kx .vx-ring:where(.svelte-18pn5kx){border-color:#22d4ef66;background:#22d4ef1a;color:var(--vx-cyan-1)}.vx-track-step.vx-cur.svelte-18pn5kx .vx-ring:where(.svelte-18pn5kx){border-color:var(--vx-cyan-0);background:var(--vx-cyan-0);color:#00222a;box-shadow:0 0 16px #22d4ef73}.vx-track-label.svelte-18pn5kx{font-size:11px;font-weight:500;white-space:nowrap}.vx-track-step.vx-cur.svelte-18pn5kx .vx-track-label:where(.svelte-18pn5kx){font-weight:600}.vx-track-line.svelte-18pn5kx{flex:1;min-width:8px;height:2px;margin:0 2px 19px;border-radius:1px;background:var(--vx-bg-4);overflow:hidden}.vx-track-line.svelte-18pn5kx>div:where(.svelte-18pn5kx){height:100%;background:var(--vx-cyan-0);transition:width .5s var(--vx-ease)}.vx-toast.svelte-18pn5kx{position:fixed;left:50%;bottom:84px;transform:translate(-50%);display:flex;align-items:center;gap:14px;max-width:70vw;padding:11px 14px;border-radius:10px;border:1px solid rgba(244,99,110,.45);background:#2a1215;color:#ffb3b8;font-size:13px;box-shadow:var(--vx-panel-shadow);animation:vxPop .25s var(--vx-ease);z-index:20}.vx-toast.svelte-18pn5kx button:where(.svelte-18pn5kx){border:0;background:transparent;color:inherit;cursor:pointer;font-size:13px}@media (max-width: 1000px){.vx-footer.svelte-18pn5kx{grid-template-columns:110px 1fr auto;gap:16px;padding:10px 18px 12px}.vx-track-label.svelte-18pn5kx{display:none}.vx-track-line.svelte-18pn5kx{margin-bottom:0}.vx-screen.svelte-18pn5kx{padding:18px 20px 14px}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}main.svelte-15mrihi{background-color:var(--color-obsidian-950);width:100vw;height:100vh;padding:calc(var(--spacing,.25rem) * 5);color:var(--text);justify-content:center;align-items:flex-start;display:flex;overflow-y:auto}.card.svelte-15mrihi{gap:calc(var(--spacing,.25rem) * 4);flex-direction:column;width:100%;max-width:520px;display:flex}header.svelte-15mrihi{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 3);display:flex}.logo.svelte-15mrihi{height:calc(var(--spacing,.25rem) * 11);width:calc(var(--spacing,.25rem) * 11);border-radius:var(--radius-xl,.75rem);flex-shrink:0}h1.svelte-15mrihi{font-size:var(--text-lg,1.125rem);line-height:var(--tw-leading,var(--text-lg--line-height,calc(1.75 / 1.125)));--tw-leading:var(--leading-tight,1.25);line-height:var(--leading-tight,1.25);--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800);--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em);color:var(--color-white,#fff)}h2.svelte-15mrihi{margin-bottom:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em);color:var(--color-obsidian-400);text-transform:uppercase}.sub.svelte-15mrihi{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--color-obsidian-400);font-size:12.5px}.body.svelte-15mrihi{--tw-leading:var(--leading-relaxed,1.625);font-size:13px;line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-200)}.hint.svelte-15mrihi{--tw-leading:var(--leading-relaxed,1.625);font-size:11.5px;line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-400)}.notes-block.svelte-15mrihi{border-radius:var(--radius-lg,.5rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.notes-block.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.notes-block.svelte-15mrihi{padding:calc(var(--spacing,.25rem) * 3)}.notes.svelte-15mrihi{margin:calc(var(--spacing,.25rem) * 0);max-height:240px;font-family:var(--font-sans,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word;white-space:pre-wrap;color:var(--color-obsidian-200);overflow-y:auto}.warn.svelte-15mrihi{border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0033;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.warn.svelte-15mrihi{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 20%,transparent)}}.warn.svelte-15mrihi{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.warn.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.warn.svelte-15mrihi{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12.5px;line-height:var(--leading-relaxed,1.625);color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.warn.svelte-15mrihi{color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.error.svelte-15mrihi{border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3633;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.error.svelte-15mrihi{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.error.svelte-15mrihi{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.error.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.error.svelte-15mrihi{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12.5px;line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word;color:var(--color-red-400,oklch(70.4% .191 22.216))}.progress-block.svelte-15mrihi{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.bar.svelte-15mrihi{height:calc(var(--spacing,.25rem) * 2);background-color:#ffffff0d;border-radius:3.40282e38px;width:100%;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.bar.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.fill.svelte-15mrihi{background-color:var(--color-accent-blue);height:100%;transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-radius:3.40282e38px}.bar.indeterminate.svelte-15mrihi .fill:where(.svelte-15mrihi){width:33.3333%;animation:var(--animate-pulse,pulse 2s cubic-bezier(.4, 0, .6, 1) infinite)}footer.svelte-15mrihi{margin-top:calc(var(--spacing,.25rem) * 1);justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-wrap:wrap;display:flex}.left-actions.svelte-15mrihi{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;display:flex}.right-actions.svelte-15mrihi{align-items:center;gap:calc(var(--spacing,.25rem) * 2);margin-left:auto;display:flex}.btn-primary.svelte-15mrihi{cursor:pointer;border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-bold,700);font-size:12.5px;font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 14px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-primary.svelte-15mrihi:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 18px var(--tw-shadow-color,#38bdf873);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-secondary.svelte-15mrihi{cursor:pointer;border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-800);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-semibold,600);font-size:12.5px;font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-300);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-secondary.svelte-15mrihi:hover{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-15mrihi:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 10%,transparent)}}.btn-secondary.svelte-15mrihi:hover{background-color:var(--color-obsidian-700);color:var(--color-white,#fff)}.btn-secondary.svelte-15mrihi:disabled,.btn-primary.svelte-15mrihi:disabled{cursor:default;opacity:.6;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.link.svelte-15mrihi{cursor:pointer;border-style:var(--tw-border-style);padding:calc(var(--spacing,.25rem) * 0);text-align:left;--tw-font-weight:var(--font-weight-semibold,600);font-size:12px;font-weight:var(--font-weight-semibold,600);color:var(--color-accent-blue);text-underline-offset:2px;background-color:#0000;border-width:0;text-decoration-line:underline}.centered.svelte-15mrihi{justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 8);flex-direction:column;display:flex}.spinner.svelte-15mrihi{height:calc(var(--spacing,.25rem) * 7);width:calc(var(--spacing,.25rem) * 7);animation:var(--animate-spin,spin 1s linear infinite);border-style:var(--tw-border-style);border-width:2.5px;border-color:#ffffff0d;border-radius:3.40282e38px}@supports (color:color-mix(in lab,red,red)){.spinner.svelte-15mrihi{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.spinner.svelte-15mrihi{border-top-color:var(--color-accent-blue)}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--color-obsidian-950:#08090b;--color-obsidian-900:#0d0e12;--color-obsidian-800:#14171f;--color-obsidian-700:#1e222d;--color-obsidian-300:#9ca3af;--color-obsidian-100:#e5e7eb;--color-accent-tangerine:#ff6b35;--color-accent-blue:#38bdf8;--color-accent-green:#10b981;--radius-desktop:6px;--animate-border-pulse:border-pulse 1.5s infinite;--animate-flash:flash 1s infinite;--transition-snappy:all .25s cubic-bezier(.175, .885, .32, 1.2);--transition-snappy-fast:all .15s cubic-bezier(.175, .885, .32, 1.275)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,var(--font-sans,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"));font-feature-settings:var(--default-font-feature-settings,initial);font-variation-settings:var(--default-font-variation-settings,initial);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace));font-feature-settings:var(--default-mono-font-feature-settings,initial);font-variation-settings:var(--default-mono-font-variation-settings,initial);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing,.25rem) * 0)}.-top-0\.5{top:calc(var(--spacing,.25rem) * -.5)}.top-0{top:calc(var(--spacing,.25rem) * 0)}.top-2\.5{top:calc(var(--spacing,.25rem) * 2.5)}.top-\[15\%\]{top:15%}.right-0{right:calc(var(--spacing,.25rem) * 0)}.right-3\.5{right:calc(var(--spacing,.25rem) * 3.5)}.right-6{right:calc(var(--spacing,.25rem) * 6)}.-bottom-0\.5{bottom:calc(var(--spacing,.25rem) * -.5)}.bottom-6{bottom:calc(var(--spacing,.25rem) * 6)}.left-0{left:calc(var(--spacing,.25rem) * 0)}.isolate{isolation:isolate}.z-10{z-index:10}.z-\[100\]{z-index:100}.z-\[200\]{z-index:200}.z-\[2000\]{z-index:2000}.col-span-full{grid-column:1/-1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing,.25rem) * 0)}.my-1{margin-block:calc(var(--spacing,.25rem) * 1)}.mt-0\.5{margin-top:calc(var(--spacing,.25rem) * .5)}.mt-1{margin-top:calc(var(--spacing,.25rem) * 1)}.mt-1\.5{margin-top:calc(var(--spacing,.25rem) * 1.5)}.mt-2{margin-top:calc(var(--spacing,.25rem) * 2)}.mt-2\.5{margin-top:calc(var(--spacing,.25rem) * 2.5)}.mt-3\.5{margin-top:calc(var(--spacing,.25rem) * 3.5)}.mt-4{margin-top:calc(var(--spacing,.25rem) * 4)}.mt-6{margin-top:calc(var(--spacing,.25rem) * 6)}.mb-1{margin-bottom:calc(var(--spacing,.25rem) * 1)}.mb-2{margin-bottom:calc(var(--spacing,.25rem) * 2)}.mb-3{margin-bottom:calc(var(--spacing,.25rem) * 3)}.mb-3\.5{margin-bottom:calc(var(--spacing,.25rem) * 3.5)}.mb-4{margin-bottom:calc(var(--spacing,.25rem) * 4)}.mb-5{margin-bottom:calc(var(--spacing,.25rem) * 5)}.ml-2\.5{margin-left:calc(var(--spacing,.25rem) * 2.5)}.ml-4{margin-left:calc(var(--spacing,.25rem) * 4)}.ml-6{margin-left:calc(var(--spacing,.25rem) * 6)}.box-border{box-sizing:border-box}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\.5{height:calc(var(--spacing,.25rem) * 1.5)}.h-2{height:calc(var(--spacing,.25rem) * 2)}.h-3\.5{height:calc(var(--spacing,.25rem) * 3.5)}.h-4{height:calc(var(--spacing,.25rem) * 4)}.h-5{height:calc(var(--spacing,.25rem) * 5)}.h-7{height:calc(var(--spacing,.25rem) * 7)}.h-11{height:calc(var(--spacing,.25rem) * 11)}.h-16{height:calc(var(--spacing,.25rem) * 16)}.h-\[5px\]{height:5px}.h-\[70\%\]{height:70%}.h-full{height:100%}.h-screen{height:100vh}.max-h-60{max-height:calc(var(--spacing,.25rem) * 60)}.max-h-\[85vh\]{max-height:85vh}.max-h-\[180px\]{max-height:180px}.max-h-\[240px\]{max-height:240px}.max-h-\[340px\]{max-height:340px}.min-h-\[42px\]{min-height:42px}.min-h-\[70px\]{min-height:70px}.min-h-\[80px\]{min-height:80px}.min-h-\[150px\]{min-height:150px}.w-1\.5{width:calc(var(--spacing,.25rem) * 1.5)}.w-1\/3{width:33.3333%}.w-2{width:calc(var(--spacing,.25rem) * 2)}.w-4{width:calc(var(--spacing,.25rem) * 4)}.w-5{width:calc(var(--spacing,.25rem) * 5)}.w-7{width:calc(var(--spacing,.25rem) * 7)}.w-11{width:calc(var(--spacing,.25rem) * 11)}.w-16{width:calc(var(--spacing,.25rem) * 16)}.w-20{width:calc(var(--spacing,.25rem) * 20)}.w-\[2px\]{width:2px}.w-\[3px\]{width:3px}.w-\[5px\]{width:5px}.w-\[90\%\]{width:90%}.w-fit{width:fit-content}.w-full{width:100%}.w-screen{width:100vw}.max-w-\[280px\]{max-width:280px}.max-w-\[500px\]{max-width:500px}.max-w-\[520px\]{max-width:520px}.min-w-0{min-width:calc(var(--spacing,.25rem) * 0)}.min-w-\[36px\]{min-width:36px}.min-w-\[135px\]{min-width:135px}.min-w-\[190px\]{min-width:190px}.flex-1{flex:1}.flex-\[2\]{flex:2}.flex-shrink,.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-y-0\.5{--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-\[1px\]{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-\[0\.97\]{scale:.97}.scale-\[1\.01\]{scale:1.01}.scale-\[1\.02\]{scale:1.02}.scale-\[1\.18\]{scale:1.18}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.transform\!{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)!important}.animate-\[floating_4s_ease-in-out_infinite\]{animation:4s ease-in-out infinite floating}.animate-\[ripple_1\.6s_infinite_ease-out\]{animation:1.6s ease-out infinite ripple}.animate-border-pulse{animation:var(--animate-border-pulse)}.animate-flash{animation:var(--animate-flash)}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-y{resize:vertical}.list-none{list-style-type:none}.flex-col{flex-direction:column}.flex-row\!{flex-direction:row!important}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing,.25rem) * .5)}.gap-1{gap:calc(var(--spacing,.25rem) * 1)}.gap-1\.5{gap:calc(var(--spacing,.25rem) * 1.5)}.gap-2{gap:calc(var(--spacing,.25rem) * 2)}.gap-2\.5{gap:calc(var(--spacing,.25rem) * 2.5)}.gap-3{gap:calc(var(--spacing,.25rem) * 3)}.gap-3\.5{gap:calc(var(--spacing,.25rem) * 3.5)}.gap-4{gap:calc(var(--spacing,.25rem) * 4)}.gap-5{gap:calc(var(--spacing,.25rem) * 5)}.gap-\[2px\]{gap:2px}.gap-\[10px\]{gap:10px}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded\!{border-radius:.25rem!important}.rounded-\[99px_0_0_99px\]{border-radius:99px 0 0 99px}.rounded-\[var\(--radius\)\]{border-radius:var(--radius)}.rounded-desktop{border-radius:var(--radius-desktop)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg,.5rem)}.rounded-md{border-radius:var(--radius-md,.375rem)}.rounded-xl{border-radius:var(--radius-xl,.75rem)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[2\.5px\]{border-style:var(--tw-border-style);border-width:2.5px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-none\!{--tw-border-style:none!important;border-style:none!important}.border-solid{--tw-border-style:solid;border-style:solid}.border-\[\#f43f5e\]{border-color:#f43f5e}.border-\[\#fbbf24\]{border-color:#fbbf24}.border-\[var\(--accent\)\]{border-color:var(--accent)}.border-\[var\(--accent2\)\],.border-\[var\(--accent2\)\]\/25{border-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--accent2\)\]\/25{border-color:color-mix(in oklab,var(--accent2) 25%,transparent)}}.border-\[var\(--border\)\]{border-color:var(--border)}.border-\[var\(--color-accent-blue\)\]{border-color:var(--color-accent-blue)}.border-\[var\(--color-accent-blue\)\]\/15{border-color:#38bdf826}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-accent-blue\)\]\/15{border-color:color-mix(in oklab,var(--color-accent-blue) 15%,transparent)}}.border-\[var\(--color-accent-blue\)\]\/20{border-color:#38bdf833}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-accent-blue\)\]\/20{border-color:color-mix(in oklab,var(--color-accent-blue) 20%,transparent)}}.border-\[var\(--color-accent-blue\)\]\/25{border-color:#38bdf840}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-accent-blue\)\]\/25{border-color:color-mix(in oklab,var(--color-accent-blue) 25%,transparent)}}.border-amber-500\/20{border-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/20{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 20%,transparent)}}.border-amber-500\/25{border-color:#f99c0040}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/25{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.border-amber-500\/40{border-color:#f99c0066}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/40{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 40%,transparent)}}.border-amber-500\/70\!{border-color:#f99c00b3!important}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/70\!{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 70%,transparent)!important}}.border-emerald-500\/25{border-color:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/25{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 25%,transparent)}}.border-red-500{border-color:var(--color-red-500,oklch(63.7% .237 25.331))}.border-red-500\!{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.border-red-500\/20{border-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.border-red-500\/20{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.border-red-500\/25{border-color:#fb2c3640}@supports (color:color-mix(in lab,red,red)){.border-red-500\/25{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 25%,transparent)}}.border-slate-500\/30{border-color:#62748e4d}@supports (color:color-mix(in lab,red,red)){.border-slate-500\/30{border-color:color-mix(in oklab,var(--color-slate-500,oklch(55.4% .046 257.417)) 30%,transparent)}}.border-white\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.border-white\/5{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.border-white\/12{border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.border-white\/12{border-color:color-mix(in oklab,var(--color-white,#fff) 12%,transparent)}}.border-white\/15{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.border-white\/15{border-color:color-mix(in oklab,var(--color-white,#fff) 15%,transparent)}}.border-white\/\[0\.03\]{border-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.03\]{border-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.border-white\/\[0\.05\]{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.05\]{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.border-yellow-500\/30{border-color:#edb2004d}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/30{border-color:color-mix(in oklab,var(--color-yellow-500,oklch(79.5% .184 86.047)) 30%,transparent)}}.border-t-\[var\(--color-accent-blue\)\]{border-top-color:var(--color-accent-blue)}.bg-\[\#1e2436\]{background-color:#1e2436}.bg-\[\#39ff14\]{background-color:#39ff14}.bg-\[\#444\]{background-color:#444}.bg-\[\#ff6d00\]{background-color:#ff6d00}.bg-\[\#ffab00\]{background-color:#ffab00}.bg-\[rgba\(244\,63\,94\,0\.05\)\]{background-color:#f43f5e0d}.bg-\[rgba\(251\,191\,36\,0\.05\)\]{background-color:#fbbf240d}.bg-\[var\(--accent\)\]{background-color:var(--accent)}.bg-\[var\(--accent2\)\],.bg-\[var\(--accent2\)\]\/8{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--accent2\)\]\/8{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.bg-\[var\(--accent2\)\]\/10{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--accent2\)\]\/10{background-color:color-mix(in oklab,var(--accent2) 10%,transparent)}}.bg-\[var\(--accent2\)\]\/15{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--accent2\)\]\/15{background-color:color-mix(in oklab,var(--accent2) 15%,transparent)}}.bg-\[var\(--bg\)\]{background-color:var(--bg)}.bg-\[var\(--border\)\]{background-color:var(--border)}.bg-\[var\(--color-accent-blue\)\]{background-color:var(--color-accent-blue)}.bg-\[var\(--color-accent-blue\)\]\/8{background-color:#38bdf814}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--color-accent-blue\)\]\/8{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.bg-\[var\(--color-accent-green\)\]{background-color:var(--color-accent-green)}.bg-\[var\(--color-obsidian-300\)\]{background-color:var(--color-obsidian-300)}.bg-\[var\(--color-obsidian-700\)\]{background-color:var(--color-obsidian-700)}.bg-\[var\(--color-obsidian-800\)\]{background-color:var(--color-obsidian-800)}.bg-\[var\(--color-obsidian-900\)\]{background-color:var(--color-obsidian-900)}.bg-\[var\(--color-obsidian-950\)\]{background-color:var(--color-obsidian-950)}.bg-\[var\(--surface2\)\]{background-color:var(--surface2)}.bg-accent-blue{background-color:var(--color-accent-blue)}.bg-accent-blue\!{background-color:var(--color-accent-blue)!important}.bg-amber-400{background-color:var(--color-amber-400,oklch(82.8% .189 84.429))}.bg-amber-500\/6{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/6{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.bg-amber-950\/30{background-color:#4619014d}@supports (color:color-mix(in lab,red,red)){.bg-amber-950\/30{background-color:color-mix(in oklab,var(--color-amber-950,oklch(27.9% .077 45.635)) 30%,transparent)}}.bg-black\/25{background-color:#00000040}@supports (color:color-mix(in lab,red,red)){.bg-black\/25{background-color:color-mix(in oklab,var(--color-black,#000) 25%,transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black,#000) 40%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black,#000) 60%,transparent)}}.bg-cyan-500\/15{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.bg-cyan-500\/15{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.bg-emerald-500\/6{background-color:#00bb7f0f}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/6{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 6%,transparent)}}.bg-emerald-500\/15{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/15{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.bg-emerald-950\/80{background-color:#002c22cc}@supports (color:color-mix(in lab,red,red)){.bg-emerald-950\/80{background-color:color-mix(in oklab,var(--color-emerald-950,oklch(26.2% .051 172.552)) 80%,transparent)}}.bg-red-400\/10{background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.bg-red-400\/10{background-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 10%,transparent)}}.bg-red-500{background-color:var(--color-red-500,oklch(63.7% .237 25.331))}.bg-red-500\/6{background-color:#fb2c360f}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/6{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 6%,transparent)}}.bg-red-500\/8{background-color:#fb2c3614}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/8{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 8%,transparent)}}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.bg-red-500\/15{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/15{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 15%,transparent)}}.bg-slate-500\/10{background-color:#62748e1a}@supports (color:color-mix(in lab,red,red)){.bg-slate-500\/10{background-color:color-mix(in oklab,var(--color-slate-500,oklch(55.4% .046 257.417)) 10%,transparent)}}.bg-transparent{background-color:#0000}.bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/5{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.bg-white\/\[0\.02\]{background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.02\]{background-color:color-mix(in oklab,var(--color-white,#fff) 2%,transparent)}}.bg-white\/\[0\.03\]{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.03\]{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.bg-white\/\[0\.05\]{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.05\]{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.bg-white\/\[0\.08\]{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-white,#fff) 8%,transparent)}}.bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500,oklch(79.5% .184 86.047)) 10%,transparent)}}.object-contain{object-fit:contain}.p-0{padding:calc(var(--spacing,.25rem) * 0)}.p-0\.5{padding:calc(var(--spacing,.25rem) * .5)}.p-1{padding:calc(var(--spacing,.25rem) * 1)}.p-1\.5{padding:calc(var(--spacing,.25rem) * 1.5)}.p-2{padding:calc(var(--spacing,.25rem) * 2)}.p-2\.5{padding:calc(var(--spacing,.25rem) * 2.5)}.p-3{padding:calc(var(--spacing,.25rem) * 3)}.p-4{padding:calc(var(--spacing,.25rem) * 4)}.p-5{padding:calc(var(--spacing,.25rem) * 5)}.p-6{padding:calc(var(--spacing,.25rem) * 6)}.p-10{padding:calc(var(--spacing,.25rem) * 10)}.p-\[3px\]{padding:3px}.p-\[30px\]{padding:30px}.px-1{padding-inline:calc(var(--spacing,.25rem) * 1)}.px-1\.5{padding-inline:calc(var(--spacing,.25rem) * 1.5)}.px-1\.5\!{padding-inline:calc(var(--spacing,.25rem) * 1.5)!important}.px-2{padding-inline:calc(var(--spacing,.25rem) * 2)}.px-2\.5{padding-inline:calc(var(--spacing,.25rem) * 2.5)}.px-3{padding-inline:calc(var(--spacing,.25rem) * 3)}.px-3\.5{padding-inline:calc(var(--spacing,.25rem) * 3.5)}.px-4{padding-inline:calc(var(--spacing,.25rem) * 4)}.px-5{padding-inline:calc(var(--spacing,.25rem) * 5)}.py-0\.5{padding-block:calc(var(--spacing,.25rem) * .5)}.py-0\.5\!{padding-block:calc(var(--spacing,.25rem) * .5)!important}.py-1{padding-block:calc(var(--spacing,.25rem) * 1)}.py-1\.5{padding-block:calc(var(--spacing,.25rem) * 1.5)}.py-2{padding-block:calc(var(--spacing,.25rem) * 2)}.py-5{padding-block:calc(var(--spacing,.25rem) * 5)}.pt-2{padding-top:calc(var(--spacing,.25rem) * 2)}.pt-3\.5{padding-top:calc(var(--spacing,.25rem) * 3.5)}.pt-4{padding-top:calc(var(--spacing,.25rem) * 4)}.pt-\[14px\]{padding-top:14px}.pr-9{padding-right:calc(var(--spacing,.25rem) * 9)}.pb-4{padding-bottom:calc(var(--spacing,.25rem) * 4)}.pl-3{padding-left:calc(var(--spacing,.25rem) * 3)}.pl-3\.5{padding-left:calc(var(--spacing,.25rem) * 3.5)}.pl-4{padding-left:calc(var(--spacing,.25rem) * 4)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace)}.text-2xl{font-size:var(--text-2xl,1.5rem);line-height:var(--tw-leading,var(--text-2xl--line-height,calc(2 / 1.5)))}.text-base{font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ))}.text-lg{font-size:var(--text-lg,1.125rem);line-height:var(--tw-leading,var(--text-lg--line-height,calc(1.75 / 1.125)))}.text-sm{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)))}.text-xl{font-size:var(--text-xl,1.25rem);line-height:var(--tw-leading,var(--text-xl--line-height,calc(1.75 / 1.25)))}.text-xs{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)))}.text-\[7px\]{font-size:7px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11\.5px\]{font-size:11.5px}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-\[12px\]\!{font-size:12px!important}.text-\[13\.5px\]{font-size:13.5px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[32px\]{font-size:32px}.leading-5{--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5)}.leading-6{--tw-leading:calc(var(--spacing,.25rem) * 6);line-height:calc(var(--spacing,.25rem) * 6)}.leading-\[1\.1\]{--tw-leading:1.1;line-height:1.1}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625)}.font-\[850\]{--tw-font-weight:850;font-weight:850}.font-bold{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800)}.font-extrabold\!{--tw-font-weight:var(--font-weight-extrabold,800)!important;font-weight:var(--font-weight-extrabold,800)!important}.font-medium{--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500)}.font-normal{--tw-font-weight:var(--font-weight-normal,400);font-weight:var(--font-weight-normal,400)}.font-semibold{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600)}.tracking-\[-0\.5px\]{--tw-tracking:-.5px;letter-spacing:-.5px}.tracking-\[0\.06em\]{--tw-tracking:.06em;letter-spacing:.06em}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-tight{--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em)}.tracking-wide{--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em)}.tracking-wider{--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--accent\)\]{color:var(--accent)}.text-\[var\(--accent2\)\]{color:var(--accent2)}.text-\[var\(--color-accent-blue\)\]{color:var(--color-accent-blue)}.text-\[var\(--color-obsidian-200\)\]{color:var(--color-obsidian-200)}.text-\[var\(--color-obsidian-300\)\]{color:var(--color-obsidian-300)}.text-\[var\(--color-obsidian-400\)\]{color:var(--color-obsidian-400)}.text-\[var\(--text\)\]{color:var(--text)}.text-\[var\(--text-muted\)\]{color:var(--text-muted)}.text-accent-blue{color:var(--color-accent-blue)}.text-amber-200\/80{color:#fee685cc}@supports (color:color-mix(in lab,red,red)){.text-amber-200\/80{color:color-mix(in oklab,var(--color-amber-200,oklch(92.4% .12 95.746)) 80%,transparent)}}.text-amber-300\/90{color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.text-amber-300\/90{color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.text-amber-400{color:var(--color-amber-400,oklch(82.8% .189 84.429))}.text-black{color:var(--color-black,#000)}.text-black\!{color:var(--color-black,#000)!important}.text-cyan-200{color:var(--color-cyan-200,oklch(91.7% .08 205.041))}.text-cyan-300{color:var(--color-cyan-300,oklch(86.5% .127 207.078))}.text-emerald-200{color:var(--color-emerald-200,oklch(90.5% .093 164.15))}.text-emerald-300{color:var(--color-emerald-300,oklch(84.5% .143 164.978))}.text-emerald-300\/90{color:#5ee9b5e6}@supports (color:color-mix(in lab,red,red)){.text-emerald-300\/90{color:color-mix(in oklab,var(--color-emerald-300,oklch(84.5% .143 164.978)) 90%,transparent)}}.text-emerald-400{color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.text-neutral-900{color:var(--color-neutral-900,oklch(20.5% 0 0))}.text-obsidian-300{color:var(--color-obsidian-300)}.text-red-300{color:var(--color-red-300,oklch(80.8% .114 19.571))}.text-red-400{color:var(--color-red-400,oklch(70.4% .191 22.216))}.text-slate-100{color:var(--color-slate-100,oklch(96.8% .007 247.896))}.text-slate-200{color:var(--color-slate-200,oklch(92.9% .013 255.508))}.text-slate-300{color:var(--color-slate-300,oklch(86.9% .022 252.894))}.text-white{color:var(--color-white,#fff)}.text-white\/30{color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.text-white\/30{color:color-mix(in oklab,var(--color-white,#fff) 30%,transparent)}}.text-yellow-200{color:var(--color-yellow-200,oklch(94.5% .129 101.54))}.text-yellow-500{color:var(--color-yellow-500,oklch(79.5% .184 86.047))}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.not-italic{font-style:normal}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.no-underline{text-decoration-line:none}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-55{opacity:.55}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_6px_\#ffab00\]{--tw-shadow:0 0 6px var(--tw-shadow-color,#ffab00);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_8px_var\(--color-accent-blue\)\]{--tw-shadow:0 0 8px var(--tw-shadow-color,var(--color-accent-blue));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_2px_6px_rgba\(56\,189\,248\,0\.05\)\]{--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf80d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_4px_12px_rgba\(0\,0\,0\,0\.15\)\]{--tw-shadow:0 4px 12px var(--tw-shadow-color,#00000026);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_4px_14px_rgba\(56\,189\,248\,0\.3\)\]{--tw-shadow:0 4px 14px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_6px_14px_rgba\(56\,189\,248\,0\.35\)\]{--tw-shadow:0 6px 14px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_6px_18px_rgba\(56\,189\,248\,0\.45\)\]{--tw-shadow:0 6px 18px var(--tw-shadow-color,#38bdf873);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_10px_30px_rgba\(0\,0\,0\,0\.4\)\,_0_0_12px_rgba\(56\,189\,248\,0\.15\)\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#0006), 0 0 12px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_10px_30px_rgba\(0\,0\,0\,0\.5\)\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[inset_0_2px_4px_rgba\(0\,0\,0\,0\.2\)\]{--tw-shadow:inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2\!{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.ring-red-500\/20\!{--tw-ring-color:#fb2c3633!important}@supports (color:color-mix(in lab,red,red)){.ring-red-500\/20\!{--tw-ring-color:color-mix(in oklab, var(--color-red-500,oklch(63.7% .237 25.331)) 20%, transparent)!important}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.brightness-110{--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_0_6px_rgba\(234\,179\,8\,0\.3\)\]{--tw-drop-shadow-size:drop-shadow(0 0 6px var(--tw-drop-shadow-color,#eab3084d));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_0_10px_rgba\(56\,189\,248\,0\.6\)\]{--tw-drop-shadow-size:drop-shadow(0 0 10px var(--tw-drop-shadow-color,#38bdf899));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_2px_8px_rgba\(56\,189\,248\,0\.3\)\]{--tw-drop-shadow-size:drop-shadow(0 2px 8px var(--tw-drop-shadow-color,#38bdf84d));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_4px_24px_rgba\(56\,189\,248\,0\.35\)\]{--tw-drop-shadow-size:drop-shadow(0 4px 24px var(--tw-drop-shadow-color,#38bdf859));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter\!{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)!important}.backdrop-blur-\[4px\]{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-\[left\]{transition-property:left;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-250{--tw-duration:.25s;transition-duration:.25s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-\[50ms\]{--tw-duration:50ms;transition-duration:50ms}.ease-in-out{--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1))}.ease-out{--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.hover\:border-\[\#fbbf24\]\/80:hover{border-color:#fbbf24cc}.hover\:border-accent-blue:hover{border-color:var(--color-accent-blue)}.hover\:bg-\[var\(--accent2\)\]:hover{background-color:var(--accent2)}.hover\:bg-\[var\(--border\)\]:hover{background-color:var(--border)}.hover\:bg-black\/35:hover{background-color:#00000059}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/35:hover{background-color:color-mix(in oklab,var(--color-black,#000) 35%,transparent)}}.hover\:text-white:hover{color:var(--color-white,#fff)}}.focus\:border-accent-blue:focus{border-color:var(--color-accent-blue)}.focus\:border-red-500\!:focus{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.focus\:bg-black\/35:focus{background-color:#00000059}@supports (color:color-mix(in lab,red,red)){.focus\:bg-black\/35:focus{background-color:color-mix(in oklab,var(--color-black,#000) 35%,transparent)}}.focus\:ring-red-500\/20\!:focus{--tw-ring-color:#fb2c3633!important}@supports (color:color-mix(in lab,red,red)){.focus\:ring-red-500\/20\!:focus{--tw-ring-color:color-mix(in oklab, var(--color-red-500,oklch(63.7% .237 25.331)) 20%, transparent)!important}}.disabled\:opacity-50:disabled{opacity:.5}}section{flex-direction:column;gap:20px;max-width:650px;animation:.25s cubic-bezier(.175,.885,.32,1.15) forwards slideIn;display:flex}@keyframes slideIn{0%{opacity:0;transform:translateY(6px)scale(.995)}to{opacity:1;transform:none}}h2{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em);color:var(--color-obsidian-100);margin-bottom:2px;font-size:20px}h3{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em);text-transform:uppercase;color:var(--color-accent-blue);margin-bottom:8px;font-size:11px}.field-group{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;flex-direction:column;gap:16px;padding:18px 20px;transition:all .2s ease-out;display:flex}.field-group:hover{background-color:#ffffff0d;border-color:#ffffff1f}.field{cursor:pointer;justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 4);padding-top:4px;padding-bottom:4px;display:flex}.field.col{align-items:stretch;gap:calc(var(--spacing,.25rem) * 1.5);flex-direction:column;width:100%}.field span{color:var(--text);flex:1;font-size:13px;font-weight:500;transition:color .15s ease-out}.field:hover span{color:#fff}.field select{min-width:190px;padding:8px 36px 8px 12px;font-size:13px}.hint{color:var(--text-muted);margin-top:4px;font-size:11px;line-height:1.625}.hint code{background-color:var(--color-obsidian-950);color:var(--color-accent-blue);border:1px solid var(--border);border-radius:4px;padding:2px 6px;font-family:monospace;font-size:10px}.field-label-row{justify-content:space-between;align-items:center;width:100%;margin-bottom:2px;display:flex}.btn-add-inline{color:var(--accent2);cursor:pointer;border-radius:var(--radius);background:0 0;border:none;padding:4px 8px;font-size:11px;font-weight:700;transition:all .15s ease-out}.btn-add-inline:hover{color:#fff;background-color:#38bdf81a}.dynamic-list{flex-direction:column;gap:8px;width:100%;margin-top:4px;display:flex}.dynamic-list-row{align-items:center;gap:calc(var(--spacing,.25rem) * 2);width:100%;display:flex}.dynamic-list-row input,.dynamic-list-row select{min-width:calc(var(--spacing,.25rem) * 0)}.btn-remove-inline{box-sizing:border-box;color:#f87171;cursor:pointer;border-radius:var(--radius);background-color:#ef444414;border:1px solid #ef444433;justify-content:center;align-items:center;height:34px;padding:6px 12px;font-size:12px;font-weight:700;transition:all .15s ease-out;display:flex}.btn-remove-inline:hover{color:#fff;background-color:#ef4444;border-color:#ef4444;box-shadow:0 2px 8px #ef444440}.warning-alert{align-items:center;gap:calc(var(--spacing,.25rem) * 2);color:#f59e0b;border-radius:var(--radius);background-color:#f59e0b1a;border:1px solid #f59e0b40;margin-top:4px;padding:10px 14px;font-size:12px;font-weight:500;animation:.25s cubic-bezier(.175,.885,.32,1.15) forwards slideIn;display:flex}@keyframes border-pulse{0%,to{border-color:#f43f5e66}50%{border-color:#f43f5e}}@keyframes flash{0%,to{opacity:1}50%{opacity:.3}}:root{--bg:var(--color-obsidian-950);--surface:var(--color-obsidian-900);--surface2:var(--color-obsidian-800);--accent:var(--color-accent-blue);--accent2:var(--color-accent-blue);--text:var(--color-obsidian-100);--text-muted:var(--color-obsidian-300);--border:#ffffff0d;--radius:var(--radius-desktop);--recording-color:var(--color-accent-tangerine);--idle-color:var(--color-accent-blue);--speaking-color:var(--color-accent-green);--transition-spring:var(--transition-snappy);--transition-spring-fast:var(--transition-snappy-fast)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body,#app{width:100%;height:100%;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;font-family:Outfit,Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;overflow:hidden}html.overlay-window,body.overlay-window,body.overlay-window #app{box-shadow:none!important;background:0 0!important;border:none!important;outline:none!important;overflow:hidden!important}body.overlay-window *{box-shadow:none!important;outline:none!important}body.overlay-window ::-webkit-scrollbar{width:0!important;height:0!important;display:none!important}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#ffffff0f;border-radius:99px;transition:background .2s}::-webkit-scrollbar-thumb:hover{background:#ffffff26}.sr-only{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}button{cursor:pointer;font-family:inherit;font-size:inherit;background:0 0;border:none;outline:none}input,select,textarea{font-family:inherit;font-size:inherit;outline:none}select{-webkit-appearance:none;appearance:none;background:var(--surface2) url("data:image/svg+xml;utf8,") no-repeat right 12px center;color:var(--text);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;transition:var(--transition-snappy-fast);background-size:10px;padding:8px 36px 8px 12px;box-shadow:0 4px 12px #00000026}select:hover{background-color:var(--color-obsidian-700);border-color:#ffffff1f;transform:translateY(-1px)}select:focus{border-color:var(--accent2);box-shadow:0 0 0 2px #38bdf826}select option{background-color:var(--color-obsidian-900);color:var(--text);padding:10px 12px}select:-webkit-autofill{-webkit-text-fill-color:var(--text)!important;-webkit-box-shadow:0 0 0px 1000px var(--color-obsidian-900) inset!important}select:-webkit-autofill:hover{-webkit-text-fill-color:var(--text)!important;-webkit-box-shadow:0 0 0px 1000px var(--color-obsidian-900) inset!important}select:-webkit-autofill:focus{-webkit-text-fill-color:var(--text)!important;-webkit-box-shadow:0 0 0px 1000px var(--color-obsidian-900) inset!important}.interactive-spring{transition:var(--transition-snappy)}.interactive-spring:hover{transform:scale(1.02)translateY(-1px)}.interactive-spring:active{transform:scale(.97)translateY(0)}input[type=checkbox]{-webkit-appearance:none;appearance:none;background:var(--color-obsidian-700);cursor:pointer;width:36px;height:20px;transition:var(--transition-spring-fast);border:1px solid var(--border);border-radius:99px;outline:none;position:relative}input[type=checkbox]:before{content:"";background:var(--color-obsidian-300);width:14px;height:14px;transition:var(--transition-spring-fast);border-radius:50%;position:absolute;top:2px;left:2px}input[type=checkbox]:checked{background:var(--color-accent-blue);border-color:var(--color-accent-blue)}input[type=checkbox]:checked:before{background:#fff;left:18px;box-shadow:0 2px 4px #0003}input[type=checkbox]:hover{border-color:#ffffff26}input[type=number],input[type=text],input[type=password]{background:var(--color-obsidian-950);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);min-width:170px;transition:var(--transition-spring-fast);outline:none;padding:8px 12px;font-size:13px;box-shadow:inset 0 2px 4px #0003}input[type=number]:hover,input[type=text]:hover,input[type=password]:hover{background-color:var(--color-obsidian-900);border-color:#ffffff26}input[type=number]:focus,input[type=text]:focus,input[type=password]:focus{border-color:var(--accent2);background-color:var(--color-obsidian-950);box-shadow:0 0 0 2px #38bdf826,inset 0 2px 4px #0003}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false} diff --git a/dist/index.html b/dist/index.html index 8cde0d30..be3d9156 100644 --- a/dist/index.html +++ b/dist/index.html @@ -16,8 +16,8 @@ - - + +
        diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index 5c8a97f8..0170fc85 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -12,19 +12,8 @@ use crate::state::AppState; #[tauri::command] pub async fn get_status(state: State<'_, Arc>) -> Result { let active_target_id = state.active_target.lock().await.clone(); - let target_label = { - let targets_guard = state.targets.lock().await; - targets_guard.iter() - .find(|t| t.id == active_target_id) - .map(|t| t.label.clone()) - .unwrap_or_else(|| { - if active_target_id == "default" { - "Focused Window".to_string() - } else { - active_target_id.clone() - } - }) - }; + let target_label = + voxctrl_routing::targets_display_label(&active_target_id, &state.targets.lock().await); Ok(StatusPayload { recording: state.is_recording(), @@ -102,43 +91,14 @@ pub async fn save_config( state.set_noise_suppression(new_config.audio.noise_suppression); state.set_overlay_enabled(new_config.ui.show_overlay); - // Dynamic TTS engine lifecycle management + // Dynamic TTS engine lifecycle management: a running worker takes the new + // settings live; one is started only when TTS was off until now. { let mut handle = state.tts_handle.lock().await; - let mut need_restart = true; - if let Some(ref tts) = *handle { tts.update_config(new_config.tts.clone()); - need_restart = false; - } - - if need_restart { - if new_config.tts.enabled { - let app_handle = app.clone(); - let app_handle_end = app.clone(); - let app_handle_err = app.clone(); - let state_clone = state.inner().clone(); - let state_clone_end = state.inner().clone(); - let new_tts = voxctrl_tts::TtsEngineWorker::start( - new_config.tts.clone(), - new_config.features.custom_vocabulary.clone(), - Some(std::sync::Arc::new(move || { - state_clone.set_speaking(true); - let _ = app_handle.emit("tts-playback-start", ()); - })), - Some(std::sync::Arc::new(move || { - state_clone_end.set_speaking(false); - let _ = app_handle_end.emit("tts-playback-end", ()); - })), - Some(std::sync::Arc::new(move |msg: String| { - let _ = app_handle_err.emit("tts-error", msg); - })), - ); - *handle = Some(new_tts.clone()); - state.spawn_fifo_responders(new_tts).await; - } else { - *handle = None; - } + } else if new_config.tts.enabled { + *handle = Some(crate::services::start_tts_worker(&app, state.inner(), &new_config)); } } @@ -264,14 +224,8 @@ pub async fn save_targets( state.router.reload(targets).await; info!("Targets saved and router reloaded"); - // Dynamically spawn new FIFO response pipe listeners if TTS is active - let tts_handle_opt = { - let guard = state.tts_handle.lock().await; - guard.clone() - }; - if let Some(tts) = tts_handle_opt { - state.spawn_fifo_responders(tts).await; - } + // Start listeners for any response pipes the save added. + state.spawn_fifo_responders().await; Ok(()) } diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 43d11c86..c7cc2d50 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -345,19 +345,9 @@ pub fn run() { let hotkey_health = Arc::new(voxctrl_hotkeys::ListenerHealth::default()); - // TTS initial worker - let initial_tts_handle = if cfg_data.tts.enabled { - Some(voxctrl_tts::TtsEngineWorker::start( - cfg_data.tts.clone(), - cfg_data.features.custom_vocabulary.clone(), - None, - None, - None, - )) - } else { - None - }; - + // The TTS worker is started in Tauri's setup (`services::setup_tts_and_fifos`), + // once the app handle its playback callbacks need exists. Starting one here + // as well would load a model only to shut it down a moment later. let app_state = Arc::new(AppState { config: config.clone(), router: router.clone(), @@ -387,7 +377,7 @@ pub fn run() { audio_tx: audio_tx.clone(), audio_wake: audio_wake_tx, inference_config_tx: inference_cfg_tx, - tts_handle: Arc::new(Mutex::new(initial_tts_handle.clone())), + tts_handle: Arc::new(Mutex::new(None)), active_fifos: Arc::new(Mutex::new(std::collections::HashSet::new())), stop_key_held: Arc::new(AtomicBool::new(false)), speaking_tx: Arc::new(std::sync::OnceLock::new()), @@ -438,14 +428,6 @@ pub fn run() { inference_cfg_rx, ); - let state_for_tts = app_state.clone(); - let tts_handle_clone = initial_tts_handle.clone(); - tokio::spawn(async move { - if let Some(tts) = tts_handle_clone { - state_for_tts.spawn_fifo_responders(tts).await; - } - }); - // Setup desktop integration (launcher and icon) before initializing hotkey listeners, // so xdg-desktop-portal can resolve the `ai.voxctrl.app` AppID against an installed .desktop file. #[cfg(target_os = "linux")] @@ -536,7 +518,8 @@ pub fn run() { // Set window icon programmatically on Linux/Wayland #[cfg(target_os = "linux")] { - let _ = crate::installer::setup_desktop_integration(); + // Desktop integration already ran before the hotkey listeners + // started (it has to precede them); only the icon is left. let icon_bytes = include_bytes!("../icons/128x128.png"); if let Ok(icon) = tauri::image::Image::from_bytes(icon_bytes) { for window in app.webview_windows().values() { @@ -545,7 +528,7 @@ pub fn run() { } } - // Re-initialize TTS worker with event emitter callbacks + // Start the TTS worker and the response-pipe listeners services::setup_tts_and_fifos(&app.handle(), app_state.clone()); // Register Speak target callback diff --git a/src-tauri/src/pipeline.rs b/src-tauri/src/pipeline.rs index 4d77ad2a..da919aff 100644 --- a/src-tauri/src/pipeline.rs +++ b/src-tauri/src/pipeline.rs @@ -17,178 +17,62 @@ use crate::window::{setup_blocker, show_setup_window, SETUP_NOTICE_INTERVAL}; use crate::window::{BLIND_ALERT_INTERVAL, SETUP_POLL_INTERVAL}; use voxctrl_inference::InferenceOutput; +/// Finish a remote (streamed) transcription the way the local worker finishes +/// its own — same noise gate, post-processing and per-hotkey rewrite, from the +/// shared `voxctrl_inference::finalize` — and hand the result to delivery. async fn process_remote_transcription( res: anyhow::Result, audio: Vec, target_id: String, binding_id: String, state: Arc, - text_tx: crossbeam_channel::Sender, + text_tx: crossbeam_channel::Sender, ) { + use voxctrl_inference::finalize; + let result = match res { Ok(res) => res, Err(e) => { - let _ = text_tx.send(InferenceOutput { - text: String::new(), - target_id, - binding_id: Some(binding_id), - raw_text: String::new(), - inference_ms: 0, - language: String::new(), - error: Some(format!("{e:#}")), - is_interim: false, - session_id: 0, - }); + let _ = text_tx.send(InferenceOutput::failed(target_id, Some(binding_id), &e, false, 0)); return; } }; - // ── Noise Gate (VAD) ────────────────────────────────────────────────── - let sum_sq: f32 = audio.iter().map(|&s| s * s).sum(); - let rms = if audio.is_empty() { - 0.0 - } else { - (sum_sq / audio.len() as f32).sqrt() - }; - let vad_threshold = { - let guard = state.config.lock().await; - guard.data.audio.vad_threshold - }; - let rms_threshold = (1.0 - vad_threshold) * 0.006; + let app_cfg = state.config.lock().await.data.clone(); + // ── Noise Gate (VAD) ────────────────────────────────────────────────── + let rms = finalize::rms(&audio); + let rms_threshold = finalize::noise_gate_threshold(app_cfg.audio.vad_threshold); if rms < rms_threshold { tracing::info!( - "Remote audio skipped by noise gate: RMS is {:.5} (threshold is {:.5}, vad_threshold={:.2})", - rms, - rms_threshold, - vad_threshold + "Remote audio skipped by noise gate: RMS is {rms:.5} (threshold is {rms_threshold:.5}, vad_threshold={:.2})", + app_cfg.audio.vad_threshold ); let _ = text_tx.send(InferenceOutput { - text: String::new(), - target_id, - binding_id: Some(binding_id), - raw_text: String::new(), inference_ms: result.inference_ms, language: result.language, - error: None, - is_interim: false, - session_id: 0, + ..InferenceOutput::empty(target_id, Some(binding_id), false, 0) }); return; } - let dir = voxctrl_routing::config_dir(); - let targets = voxctrl_routing::load_targets(&dir).unwrap_or_default(); - let target_ids: Vec<&str> = target_id - .split(',') - .map(|s| s.trim()) - .filter(|s| !s.is_empty()) - .collect(); - let first_target_id = target_ids.first().copied().unwrap_or("default"); - let target = targets.iter().find(|t| t.id == first_target_id); - - let app_cfg = { - let guard = state.config.lock().await; - guard.data.clone() - }; - - let remove_fillers = target - .and_then(|t| t.processing.remove_fillers) - .unwrap_or(app_cfg.features.remove_fillers); - - let spoken_punctuation = target - .and_then(|t| t.processing.spoken_punctuation) - .unwrap_or(app_cfg.features.spoken_punctuation); - - let auto_format_lists = target - .and_then(|t| t.processing.auto_format_lists) - .unwrap_or(app_cfg.features.auto_format_lists); - - let code_mode = target - .and_then(|t| t.processing.code_mode) - .unwrap_or(false); - - let post_cfg = voxctrl_inference::postprocess::PostProcessConfig { - remove_fillers, - spoken_punctuation, - auto_format_lists, - apply_snippets: !app_cfg.features.snippets.is_empty(), - snippets: &app_cfg.features.snippets, - code_mode, - custom_vocabulary: &app_cfg.features.custom_vocabulary, - }; - - let mut processed = voxctrl_inference::postprocess::run_pipeline(&result.text, &post_cfg); - let raw_text = result.text.clone(); - - // ── Silence Hallucination Filter ────────────────────────────────────── - if !processed.is_empty() - && voxctrl_inference::postprocess::is_silence_hallucination(&processed) - && rms < 0.003 - { - tracing::info!( - "Discarded silence hallucination '{}' (audio RMS: {:.5})", - processed, - rms - ); - processed = String::new(); - } + let targets = state.targets.lock().await.clone(); + let mut processed = finalize::post_process(&result.text, rms, &target_id, &app_cfg, &targets); // ── Hotkey-Specific OpenAI Post-Processing ──────────────────────────── - let bindings = voxctrl_routing::load_bindings(&dir).unwrap_or_default(); - let binding = bindings.iter().find(|b| b.id == binding_id); - - let binding_wants_openai = binding - .and_then(|b| b.openai_enabled) - .unwrap_or(false); - - if binding_wants_openai && !processed.is_empty() { - let mut openai_cfg = voxctrl_config::Config::load().data.openai; - openai_cfg.enabled = true; - - if let Some(b) = binding { - if let Some(ref model) = b.openai_model { - if !model.is_empty() { - openai_cfg.model = model.clone(); - } - } - if let Some(ref mode_str) = b.openai_mode { - let mode = match mode_str.as_str() { - "clean" => voxctrl_config::OpenAiMode::Clean, - "formal" => voxctrl_config::OpenAiMode::Formal, - "casual" => voxctrl_config::OpenAiMode::Casual, - "bullet" => voxctrl_config::OpenAiMode::Bullet, - "concise" => voxctrl_config::OpenAiMode::Concise, - "custom" => voxctrl_config::OpenAiMode::Custom, - _ => voxctrl_config::OpenAiMode::Clean, - }; - if mode != voxctrl_config::OpenAiMode::Custom { - openai_cfg.mode = mode.clone(); - openai_cfg.system_prompt = - voxctrl_llm::preset_system_prompt(&mode).to_string(); - } - } - if let Some(ref system_prompt) = b.openai_system_prompt { - if !system_prompt.is_empty() { - openai_cfg.system_prompt = system_prompt.clone(); - } - } - if let Some(ref prompt) = b.openai_prompt { - if !prompt.is_empty() { - openai_cfg.user_prompt = prompt.clone(); - } - } + if !processed.is_empty() && !binding_id.is_empty() { + let bindings = voxctrl_routing::load_bindings(&voxctrl_routing::config_dir()).unwrap_or_default(); + let binding = bindings.iter().find(|b| b.id == binding_id); + if let Some(openai_cfg) = finalize::binding_openai_config(binding, &app_cfg.openai) { + processed = voxctrl_llm::OpenAiClient::new(openai_cfg).process(&processed).await; } - - let client = voxctrl_llm::OpenAiClient::new(openai_cfg); - processed = client.process(&processed).await; } let _ = text_tx.send(InferenceOutput { text: processed, target_id, binding_id: Some(binding_id), - raw_text, + raw_text: result.text, inference_ms: result.inference_ms, language: result.language, error: None, @@ -259,19 +143,9 @@ pub fn spawn_audio_coordinator( && has_command_targets; if cfg.engine.backend == voxctrl_config::BackendChoice::RemoteOpenAi { is_remote_backend = true; - let mut merged_prompt = String::from( - "VoxCtrl is a voice control assistant application. VoxCtrl commands start with Vox Control or Hey Vox. ", - ); - if !cfg.features.custom_vocabulary.is_empty() { - merged_prompt.push_str("Vocabulary: "); - merged_prompt.push_str(&cfg.features.custom_vocabulary.join(", ")); - merged_prompt.push_str(". "); - } - let prompt = { - let end = merged_prompt.trim_end().len(); - merged_prompt.truncate(end); - (!merged_prompt.is_empty()).then_some(merged_prompt) - }; + let prompt = Some(voxctrl_inference::finalize::initial_prompt( + &cfg.features.custom_vocabulary, + )); let session = voxctrl_inference::RemoteStreamingSession::start( cfg.engine.remote_openai.clone(), prompt, @@ -375,15 +249,12 @@ pub fn spawn_text_delivery_worker( // start loading the TTS model while the user is still talking. // This is only a head start — routing is decided solely by the // final transcript below, which must carry the trigger itself. - let dir = voxctrl_routing::config_dir(); - let targets = voxctrl_routing::load_targets(&dir).unwrap_or_default(); + let targets = state.targets.blocking_lock().clone(); if let Some(parsed) = voxctrl_routing::targets::parse_voice_command(&output.text, &targets) { let key = (output.session_id, parsed.matched_target_id); if announced.as_ref() != Some(&key) { let matched_target = targets.iter().find(|t| t.id == key.1); - let matched_label = matched_target - .map(|t| if t.label.is_empty() { t.id.clone() } else { t.label.clone() }) - .unwrap_or_else(|| key.1.clone()); + let matched_label = voxctrl_routing::targets_display_label(&key.1, &targets); tracing::info!("Early command detected during speech: '{matched_label}' (target: {})", key.1); voxctrl_routing::targets::notify_command_trigger(&matched_label, &parsed.payload); @@ -434,29 +305,36 @@ pub fn spawn_text_delivery_worker( // If dictation starts with the trigger word but does not match a command // (e.g. "VoxCtrl is a great app."), the full sentence including the // trigger word is retained as the result text and cleaned by S1-mini. - let (global_s1_mini_enabled, s1_mini_styling) = { + let (global_s1_mini_enabled, s1_mini_styling, show_notif) = { let cfg_lock = state.config.blocking_lock(); - (cfg_lock.data.engine.s1_mini.enabled, cfg_lock.data.engine.s1_mini.styling.clone()) + ( + cfg_lock.data.engine.s1_mini.enabled, + cfg_lock.data.engine.s1_mini.styling.clone(), + cfg_lock.data.ui.show_notification, + ) }; - let dir = voxctrl_routing::config_dir(); - let bindings = voxctrl_routing::load_bindings(&dir).unwrap_or_default(); - let binding = output.binding_id.as_ref().and_then(|bid| bindings.iter().find(|b| &b.id == bid)); - let s1_mini_enabled = binding + let s1_mini_enabled = output + .binding_id + .as_deref() + .filter(|bid| !bid.is_empty()) + .and_then(|bid| { + voxctrl_routing::load_bindings(&voxctrl_routing::config_dir()) + .unwrap_or_default() + .into_iter() + .find(|b| b.id == bid) + }) .and_then(|b| b.s1_mini_enabled) .unwrap_or(global_s1_mini_enabled); - let targets = voxctrl_routing::load_targets(&dir).unwrap_or_default(); + // The in-memory cache `save_targets` keeps current — the same set + // the router delivers to, so a matched target is always deliverable. + let targets = state.targets.blocking_lock().clone(); let (target_id, raw_text) = if let Some(parsed) = voxctrl_routing::targets::parse_voice_command(&output.text, &targets) { - let matched_id = parsed.matched_target_id.clone(); - let payload = parsed.payload; - let matched_label = targets - .iter() - .find(|t| t.id == matched_id) - .map(|t| if t.label.is_empty() { t.id.clone() } else { t.label.clone() }) - .unwrap_or_else(|| matched_id.clone()); - voxctrl_routing::targets::notify_command_trigger(&matched_label, &payload); - (matched_id, payload) + let matched_label = + voxctrl_routing::targets_display_label(&parsed.matched_target_id, &targets); + voxctrl_routing::targets::notify_command_trigger(&matched_label, &parsed.payload); + (parsed.matched_target_id, parsed.payload) } else { withdraw_early_command(); (output.target_id.clone(), output.text.clone()) @@ -514,10 +392,6 @@ pub fn spawn_text_delivery_worker( } }); - let show_notif = { - let cfg_lock = state.config.blocking_lock(); - cfg_lock.data.ui.show_notification - }; if show_notif { voxctrl_inject::show_notification("VoxCtrl", &text); } diff --git a/src-tauri/src/services.rs b/src-tauri/src/services.rs index 7eb51d61..32e74ea3 100644 --- a/src-tauri/src/services.rs +++ b/src-tauri/src/services.rs @@ -177,48 +177,61 @@ async fn apply_dbus_binding(state: &Arc, binding_id: &str) { *state.active_binding_label.lock().await = binding.label.clone(); } +/// Start a TTS worker wired to the app: its playback callbacks drive the +/// `speaking` flag (and with it the stop-key arbiter and the overlay) and the +/// frontend's playback events. +/// +/// Every place that starts a worker goes through here, so none can start one +/// that plays audio the rest of the app never hears about. +pub fn start_tts_worker( + app_handle: &tauri::AppHandle, + state: &Arc, + cfg: &voxctrl_config::AppConfig, +) -> voxctrl_tts::TtsEngineHandle { + let (app_start, app_end, app_err) = (app_handle.clone(), app_handle.clone(), app_handle.clone()); + let (state_start, state_end) = (state.clone(), state.clone()); + voxctrl_tts::TtsEngineWorker::start( + cfg.tts.clone(), + cfg.features.custom_vocabulary.clone(), + Some(Arc::new(move || { + state_start.set_speaking(true); + let _ = app_start.emit("tts-playback-start", ()); + })), + Some(Arc::new(move || { + state_end.set_speaking(false); + let _ = app_end.emit("tts-playback-end", ()); + })), + Some(Arc::new(move |msg: String| { + let _ = app_err.emit("tts-error", msg); + })), + ) +} + +/// Start the TTS worker (when enabled) and the response-pipe listeners. +/// +/// This is the only place a worker is started at launch: it needs the app +/// handle for its callbacks, which does not exist until Tauri's setup runs. pub fn setup_tts_and_fifos(app_handle: &tauri::AppHandle, state: Arc) { - let cfg_opt = if let Ok(config_guard) = state.config.try_lock() { - Some(config_guard.data.clone()) - } else { - None + let Some(cfg) = state.config.try_lock().ok().map(|g| g.data.clone()) else { + tracing::warn!("Config was locked during startup; TTS starts on the next settings save"); + return; }; - if let Some(cfg) = cfg_opt { - if cfg.tts.enabled { - if let Ok(mut handle) = state.tts_handle.try_lock() { - if let Some(ref tts) = *handle { - tts.shutdown(); + if cfg.tts.enabled { + match state.tts_handle.try_lock() { + Ok(mut handle) => { + if let Some(ref old) = *handle { + old.shutdown(); } - let app_handle_clone = app_handle.clone(); - let app_handle_clone_end = app_handle.clone(); - let app_handle_clone_err = app_handle.clone(); - let state_clone = state.clone(); - let state_clone_end = state.clone(); - let new_tts = voxctrl_tts::TtsEngineWorker::start( - cfg.tts.clone(), - cfg.features.custom_vocabulary.clone(), - Some(std::sync::Arc::new(move || { - state_clone.set_speaking(true); - let _ = app_handle_clone.emit("tts-playback-start", ()); - })), - Some(std::sync::Arc::new(move || { - state_clone_end.set_speaking(false); - let _ = app_handle_clone_end.emit("tts-playback-end", ()); - })), - Some(std::sync::Arc::new(move |msg: String| { - let _ = app_handle_clone_err.emit("tts-error", msg); - })), - ); - *handle = Some(new_tts.clone()); - let state_for_fifos = state.clone(); - let tts_for_fifos = new_tts.clone(); - tauri::async_runtime::spawn(async move { - state_for_fifos.spawn_fifo_responders(tts_for_fifos).await; - }); + *handle = Some(start_tts_worker(app_handle, &state, &cfg)); } + Err(_) => tracing::warn!("TTS handle was locked during startup; TTS not started"), } } + + tauri::async_runtime::spawn(async move { + state.spawn_fifo_responders().await; + }); } pub fn register_speak_target(app_handle: &tauri::AppHandle) { diff --git a/src-tauri/src/state.rs b/src-tauri/src/state.rs index 51c384bc..e1f28b30 100644 --- a/src-tauri/src/state.rs +++ b/src-tauri/src/state.rs @@ -336,19 +336,23 @@ impl AppState { } } - pub async fn spawn_fifo_responders(&self, tts: voxctrl_tts::TtsEngineHandle) { + /// Start a responder for every target response pipe not already watched. + /// + /// Responders look the TTS worker up per line (see + /// `voxctrl_tts::run_fifo_responder`), so one started while TTS is off + /// begins speaking as soon as it is turned on, and none needs restarting + /// when the worker is replaced. + pub async fn spawn_fifo_responders(&self) { let targets_guard = self.targets.lock().await; let mut active_fifos_guard = self.active_fifos.lock().await; for target in targets_guard.iter() { if let Some(ref pipe_path) = target.response_pipe { - if !pipe_path.trim().is_empty() && !active_fifos_guard.contains(pipe_path) { - active_fifos_guard.insert(pipe_path.clone()); - let tts_clone = tts.clone(); - let pipe_path_clone = pipe_path.clone(); - tokio::spawn(async move { - voxctrl_tts::run_fifo_responder(pipe_path_clone, tts_clone).await; - }); + if !pipe_path.trim().is_empty() && active_fifos_guard.insert(pipe_path.clone()) { + tokio::spawn(voxctrl_tts::run_fifo_responder( + pipe_path.clone(), + self.tts_handle.clone(), + )); } } } diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs index 42b892c1..d6478904 100644 --- a/src-tauri/src/tray.rs +++ b/src-tauri/src/tray.rs @@ -396,26 +396,10 @@ pub fn spawn_status_ticker( cached_label = if use_binding_label { binding_label } else { - let targets_guard = state_for_ticker.targets.lock().await; - active_target_id - .split(',') - .map(|s| s.trim()) - .filter(|s| !s.is_empty()) - .map(|id| { - targets_guard - .iter() - .find(|t| t.id == id) - .map(|t| t.label.clone()) - .unwrap_or_else(|| { - if id == "default" { - "Focused Window".to_string() - } else { - id.to_string() - } - }) - }) - .collect::>() - .join(" + ") + voxctrl_routing::targets_display_label( + &active_target_id, + &state_for_ticker.targets.lock().await, + ) }; } diff --git a/src/lib/Overlay/BlueWave.svelte b/src/lib/Overlay/BlueWave.svelte index e27ba00b..50cfd3d8 100644 --- a/src/lib/Overlay/BlueWave.svelte +++ b/src/lib/Overlay/BlueWave.svelte @@ -1,6 +1,6 @@ diff --git a/src/lib/Overlay/MonoBars.svelte b/src/lib/Overlay/MonoBars.svelte index c718016a..6c26ecf9 100644 --- a/src/lib/Overlay/MonoBars.svelte +++ b/src/lib/Overlay/MonoBars.svelte @@ -1,6 +1,6 @@ diff --git a/src/lib/Overlay/Pulse.svelte b/src/lib/Overlay/Pulse.svelte index 99615fad..b5ed2f11 100644 --- a/src/lib/Overlay/Pulse.svelte +++ b/src/lib/Overlay/Pulse.svelte @@ -1,39 +1,16 @@
        import { onMount } from "svelte"; - import { listen } from "@tauri-apps/api/event"; + import { onLevelFrame } from "./audio-level"; import { status } from "../../stores/status"; let { recording = false, active = true } = $props(); @@ -10,10 +10,6 @@ const SPECTRUM_MAX = 96; let barHeights = $state(Array(SPECTRUM_BARS).fill(SPECTRUM_MIN)); - let unlistenAudioLevel: (() => void) | null = null; - let animationFrameId: number; - let targetVolume = 0; - let currentVolume = 0; const isReady = $derived($status.audio_ready !== false); const targetLabel = $derived($status.active_target_label || "Focused Window"); @@ -48,18 +44,10 @@ } onMount(() => { - listen("audio-level", (event) => { - targetVolume = Math.min(1.0, event.payload * 100.0); - }).then((unlisten) => { - unlistenAudioLevel = unlisten; - }); - let phase = 0; - function update() { + return onLevelFrame((currentVolume) => { phase += 0.016; - currentVolume += (targetVolume - currentVolume) * 0.35; - targetVolume *= 0.86; const ready = $status.audio_ready !== false; const heights = new Array(SPECTRUM_BARS); @@ -67,15 +55,7 @@ heights[i] = spectrumBarHeight(i, SPECTRUM_BARS, currentVolume, phase, recording, $status.processing, ready, Math.random()); } barHeights = heights; - - animationFrameId = requestAnimationFrame(update); - } - animationFrameId = requestAnimationFrame(update); - - return () => { - if (unlistenAudioLevel) unlistenAudioLevel(); - cancelAnimationFrame(animationFrameId); - }; + }); }); diff --git a/src/lib/Overlay/Terminal.svelte b/src/lib/Overlay/Terminal.svelte index 88172203..f543cb8d 100644 --- a/src/lib/Overlay/Terminal.svelte +++ b/src/lib/Overlay/Terminal.svelte @@ -1,6 +1,6 @@ diff --git a/src/lib/Overlay/Vinyl.svelte b/src/lib/Overlay/Vinyl.svelte index 8fc16ea3..25d92263 100644 --- a/src/lib/Overlay/Vinyl.svelte +++ b/src/lib/Overlay/Vinyl.svelte @@ -1,6 +1,6 @@ diff --git a/src/lib/Overlay/VoiceCard.svelte b/src/lib/Overlay/VoiceCard.svelte index 0be29d42..c8b46e59 100644 --- a/src/lib/Overlay/VoiceCard.svelte +++ b/src/lib/Overlay/VoiceCard.svelte @@ -1,6 +1,6 @@ diff --git a/src/lib/Overlay/audio-level.ts b/src/lib/Overlay/audio-level.ts new file mode 100644 index 00000000..f5dc481d --- /dev/null +++ b/src/lib/Overlay/audio-level.ts @@ -0,0 +1,40 @@ +import { listen } from "@tauri-apps/api/event"; + +/** + * Drive an overlay animation from the microphone level. + * + * Listens for the backend's `audio-level` events and calls `frame` once per + * animation frame with a smoothed level in 0–1: a fast rise toward each new + * reading and a steady decay between them, so the visual never jumps or + * freezes between the (coalesced, ~60 Hz) level events. + * + * Returns the cleanup for `onMount`. The listener is released even when the + * component is torn down before `listen()` has resolved — otherwise that + * listener would be leaked for the life of the window. + */ +export function onLevelFrame(frame: (level: number) => void): () => void { + let target = 0; + let current = 0; + let disposed = false; + let unlisten: (() => void) | null = null; + + listen("audio-level", (event) => { + target = Math.min(1.0, event.payload * 100.0); + }).then((fn) => { + if (disposed) fn(); + else unlisten = fn; + }); + + let frameId = requestAnimationFrame(function tick() { + current += (target - current) * 0.35; + target *= 0.86; + frame(current); + frameId = requestAnimationFrame(tick); + }); + + return () => { + disposed = true; + unlisten?.(); + cancelAnimationFrame(frameId); + }; +} From 0eb4881b00299a1374d065d97418892b16766de4 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 25 Sep 2026 20:20:11 +0000 Subject: [PATCH 02/14] Open stereo-only microphones instead of forcing a mono stream negotiate_config requested one channel unconditionally. Devices that only capture in stereo (many USB mics; WASAPI's shared-mode mix format is often two channels) refuse that, so the microphone never opened. The stream now uses mono when the device offers it at its default rate, and the device's own channel count otherwise; CaptureProcessor averages interleaved frames to mono in a reused buffer before gain, pre-roll, denoise and resampling. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_015v84hAqhDBdwy7Q49gAWBR --- crates/voxctrl-audio/src/lib.rs | 102 ++++++++++++++++++++++++++++++-- 1 file changed, 97 insertions(+), 5 deletions(-) diff --git a/crates/voxctrl-audio/src/lib.rs b/crates/voxctrl-audio/src/lib.rs index 23d00f7d..cf18c412 100644 --- a/crates/voxctrl-audio/src/lib.rs +++ b/crates/voxctrl-audio/src/lib.rs @@ -10,7 +10,7 @@ use std::{ use anyhow::{Context, Result}; use cpal::{ traits::{DeviceTrait, HostTrait, StreamTrait}, - SampleRate, StreamConfig, + StreamConfig, }; use crossbeam_channel::{Receiver, Sender}; use tracing::{info, warn}; @@ -245,6 +245,12 @@ struct CaptureProcessor { monitoring: Arc, noise_suppression: Arc, hw_rate: u32, + /// Interleaved channels per frame the device delivers. Everything after + /// the downmix works on mono. + channels: usize, + /// Reused mono buffer for devices that only capture in stereo (or more), + /// so the downmix never allocates on the audio thread. + mono: Vec, needs_resample: bool, /// Built on the first buffer that actually needs it, so a stream that runs /// with noise suppression off never pays for the model, and a mid-session @@ -276,12 +282,14 @@ struct CaptureProcessor { } impl CaptureProcessor { + #[allow(clippy::too_many_arguments)] fn new( gain: Arc, recording: Arc, monitoring: Arc, noise_suppression: Arc, hw_rate: u32, + channels: u16, needs_resample: bool, audio_ready: Option>, ) -> Self { @@ -292,6 +300,8 @@ impl CaptureProcessor { monitoring, noise_suppression, hw_rate, + channels: channels.max(1) as usize, + mono: Vec::new(), needs_resample, denoiser: None, denoising: false, @@ -303,7 +313,21 @@ impl CaptureProcessor { } } + /// Process one buffer of interleaved device samples. fn feed(&mut self, data: &[f32]) -> Captured { + if self.channels == 1 { + return self.feed_mono(data); + } + // Taken out and put back so the mono view can be borrowed while the + // rest of the chain mutates `self`. + let mut mono = std::mem::take(&mut self.mono); + downmix_into(data, self.channels, &mut mono); + let out = self.feed_mono(&mono); + self.mono = mono; + out + } + + fn feed_mono(&mut self, data: &[f32]) -> Captured { // Relaxed is enough for every flag read here: each one is an // independent switch whose exact flip instant does not order any other // memory, and a buffer either side of the change is equally correct. @@ -407,6 +431,7 @@ fn make_input_callback( tx: Sender, noise_suppression: Arc, hw_rate: u32, + channels: u16, needs_resample: bool, audio_ready: Option>, ) -> impl FnMut(&[f32], &cpal::InputCallbackInfo) + Send + 'static { @@ -416,6 +441,7 @@ fn make_input_callback( monitoring, noise_suppression, hw_rate, + channels, needs_resample, audio_ready, ); @@ -464,6 +490,7 @@ fn open_stream( tx.clone(), noise_suppression.clone(), hw_rate, + hw_config.channels, needs_resample, audio_ready.clone(), ), @@ -511,7 +538,7 @@ fn capture_loop( let mut hw_config = negotiate_config(&device)?; let mut hw_rate = hw_config.sample_rate.0; - info!("Hardware sample rate: {hw_rate} Hz"); + info!("Hardware sample rate: {hw_rate} Hz, {} channel(s)", hw_config.channels); let mut needs_resample = hw_rate != TARGET_SAMPLE_RATE; @@ -671,15 +698,43 @@ fn capture_loop( } } +/// The stream format to open `device` with: its default sample rate, and mono +/// when the device offers mono at that rate — otherwise its own channel count, +/// downmixed in the capture callback. +/// +/// Mono used to be requested unconditionally. Plenty of devices only capture +/// in stereo — many USB microphones, and WASAPI's shared-mode mix format is +/// often two channels — and those refuse a mono stream outright, so the +/// microphone never opened. fn negotiate_config(device: &cpal::Device) -> Result { - let supported = device.default_input_config()?; + let default = device.default_input_config()?; + let rate = default.sample_rate(); + let mono_supported = device + .supported_input_configs() + .map(|mut configs| { + configs.any(|c| { + c.channels() == 1 && c.min_sample_rate() <= rate && rate <= c.max_sample_rate() + }) + }) + .unwrap_or(false); Ok(StreamConfig { - channels: 1, - sample_rate: SampleRate(supported.sample_rate().0), + channels: if mono_supported { 1 } else { default.channels() }, + sample_rate: rate, buffer_size: cpal::BufferSize::Default, }) } +/// Average interleaved `channels`-wide frames of `data` into mono, replacing +/// the contents of `out`. A trailing partial frame is dropped. +fn downmix_into(data: &[f32], channels: usize, out: &mut Vec) { + out.clear(); + let scale = 1.0 / channels as f32; + out.extend( + data.chunks_exact(channels) + .map(|frame| frame.iter().sum::() * scale), + ); +} + fn rms(samples: &[f32]) -> f32 { if samples.is_empty() { return 0.0; @@ -763,6 +818,7 @@ mod capture_tests { Arc::new(AtomicBool::new(false)), Arc::new(AtomicBool::new(false)), TARGET_SAMPLE_RATE, + 1, false, None, ) @@ -873,6 +929,7 @@ mod capture_tests { monitoring.clone(), Arc::new(AtomicBool::new(false)), TARGET_SAMPLE_RATE, + 1, false, None, ); @@ -915,6 +972,7 @@ mod capture_tests { Arc::new(AtomicBool::new(false)), Arc::new(AtomicBool::new(false)), TARGET_SAMPLE_RATE, + 1, false, Some(ready.clone()), ); @@ -931,4 +989,38 @@ mod capture_tests { "a later quiet buffer must not un-latch a confirmed stream" ); } + + #[test] + fn stereo_frames_are_averaged_to_mono() { + let mut out = vec![9.0; 4]; + downmix_into(&[1.0, 3.0, -1.0, 1.0, 0.5], 2, &mut out); + assert_eq!(out, vec![2.0, 0.0], "frames were not averaged, or the partial frame was kept"); + } + + /// A stereo-only microphone delivers interleaved frames; everything + /// downstream — pre-roll, gain, the level and the recording — must see + /// one sample per frame, not twice as many. + #[test] + fn a_stereo_stream_records_mono() { + let recording = Arc::new(AtomicBool::new(false)); + let mut p = CaptureProcessor::new( + Arc::new(AtomicU32::new(1.0f32.to_bits())), + recording.clone(), + Arc::new(AtomicBool::new(true)), + Arc::new(AtomicBool::new(false)), + TARGET_SAMPLE_RATE, + 2, + false, + None, + ); + + let idle = p.feed(&[0.2, 0.4, 0.2, 0.4]); + assert!((idle.level.unwrap() - 0.3).abs() < 1e-6, "level was not taken from the mono mix"); + assert_eq!(p.preroll.len(), 2, "pre-roll held interleaved samples"); + + recording.store(true, Ordering::SeqCst); + let chunk = p.feed(&[1.0, 0.0, 0.0, 1.0, 0.5, 0.5]).chunk.unwrap(); + assert_eq!(chunk.len(), 2 + 3); + assert!(chunk[2..].iter().all(|&s| (s - 0.5).abs() < 1e-6)); + } } From f048be22109314014dc3b9c06a63fd3794260cdb Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 25 Sep 2026 20:31:25 +0000 Subject: [PATCH 03/14] Refresh the tray's target label when targets are saved The tray/overlay target label is cached and was only rebuilt when the active target, the binding label or the label source changed, so renaming the active target in Settings did not show until the user switched targets. The targets cache now goes through AppState::set_targets, which bumps a targets_version counter; the tray includes that version in its cache key. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_015v84hAqhDBdwy7Q49gAWBR --- src-tauri/src/commands.rs | 2 +- src-tauri/src/lib.rs | 1 + src-tauri/src/state.rs | 19 ++++++++++++++++++- src-tauri/src/tests.rs | 21 +++++++++++++++++++++ src-tauri/src/tray.rs | 12 ++++++++---- 5 files changed, 49 insertions(+), 6 deletions(-) diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index 0170fc85..31139078 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -218,7 +218,7 @@ pub async fn save_targets( voxctrl_routing::save_targets(&targets, &dir).map_err(|e| e.to_string())?; // Update the in-memory targets cache - *state.targets.lock().await = targets.clone(); + state.set_targets(targets.clone()).await; // Hot-reload the router state.router.reload(targets).await; diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index c7cc2d50..b944e866 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -374,6 +374,7 @@ pub fn run() { active_binding_label: Arc::new(Mutex::new("Focused Window".to_string())), active_binding_id: Arc::new(Mutex::new(String::new())), targets: Arc::new(Mutex::new(targets.clone())), + targets_version: Arc::new(std::sync::atomic::AtomicU64::new(0)), audio_tx: audio_tx.clone(), audio_wake: audio_wake_tx, inference_config_tx: inference_cfg_tx, diff --git a/src-tauri/src/state.rs b/src-tauri/src/state.rs index e1f28b30..31148f78 100644 --- a/src-tauri/src/state.rs +++ b/src-tauri/src/state.rs @@ -66,9 +66,16 @@ pub struct AppState { /// Currently active hotkey binding ID pub active_binding_id: Arc>, - /// Currently configured target definitions (in-memory cache for fast lookups) + /// Currently configured target definitions (in-memory cache for fast lookups). + /// Replace it through [`AppState::set_targets`], which also bumps + /// `targets_version`. pub targets: Arc>>, + /// Incremented every time `targets` is replaced, so anything caching a + /// value derived from the targets (the tray's target label) can tell its + /// cache is stale without re-deriving it on every tick. + pub targets_version: Arc, + /// Channel sender to send empty audio chunks as sentinels to unblock the coordinator thread pub audio_tx: crossbeam_channel::Sender>, /// Nudges the audio capture supervisor when a flag it watches changes, so @@ -290,6 +297,16 @@ impl AppState { self.mcp_recording.store(v, Ordering::SeqCst); } + /// Replace the in-memory targets cache and mark it changed. + pub async fn set_targets(&self, targets: Vec) { + *self.targets.lock().await = targets; + self.targets_version.fetch_add(1, Ordering::SeqCst); + } + + pub fn targets_version(&self) -> u64 { + self.targets_version.load(Ordering::SeqCst) + } + pub fn increment_words(&self, n: u32) { self.word_count.fetch_add(n, Ordering::SeqCst); } diff --git a/src-tauri/src/tests.rs b/src-tauri/src/tests.rs index 340ad21c..4d2c9d91 100644 --- a/src-tauri/src/tests.rs +++ b/src-tauri/src/tests.rs @@ -85,6 +85,7 @@ fn make_test_state() -> AppState { active_binding_label: Arc::new(Mutex::new("Focused Window".to_string())), active_binding_id: Arc::new(Mutex::new(String::new())), targets: Arc::new(Mutex::new(Vec::new())), + targets_version: Arc::new(std::sync::atomic::AtomicU64::new(0)), audio_tx, audio_wake, inference_config_tx, @@ -847,3 +848,23 @@ fn test_setup_flag_is_not_matched_by_lookalike_arguments() { ); } } + +/// The tray caches the target label and re-derives it only when its inputs +/// change; a label renamed in Settings must count as a change. +#[tokio::test] +async fn replacing_targets_marks_them_changed() { + let state = make_test_state(); + let before = state.targets_version(); + let target: voxctrl_routing::OutputTarget = serde_json::from_value(serde_json::json!({ + "id": "notes", "label": "Renamed", "delivery": "inject", + })) + .unwrap(); + + state.set_targets(vec![target]).await; + + assert_ne!(state.targets_version(), before, "a targets save did not invalidate cached labels"); + assert_eq!( + voxctrl_routing::targets_display_label("notes", &state.targets.lock().await), + "Renamed" + ); +} diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs index d6478904..593df9f1 100644 --- a/src-tauri/src/tray.rs +++ b/src-tauri/src/tray.rs @@ -246,9 +246,10 @@ pub fn spawn_status_ticker( // encodes, a webview event and a message to the overlay process. let mut last_flags: Option<(bool, bool, bool, bool, bool, u32)> = None; let mut last_emit = tokio::time::Instant::now() - HEARTBEAT; - // The label is derived from three rarely-changing strings; caching it - // keeps the common tick from rebuilding and re-joining it. - let mut label_inputs: Option<(String, String, bool)> = None; + // The label is derived from three rarely-changing strings and the + // targets (tracked by their version, so a renamed label shows at once); + // caching it keeps the common tick from rebuilding and re-joining it. + let mut label_inputs: Option<(String, String, bool, u64)> = None; let mut cached_label = String::new(); loop { @@ -379,11 +380,13 @@ pub fn spawn_status_ticker( let active_target_id = state_for_ticker.active_target.lock().await.clone(); let binding_label = state_for_ticker.active_binding_label.lock().await.clone(); let use_binding_label = (is_recording || is_processing) && !binding_label.is_empty(); + let targets_version = state_for_ticker.targets_version(); let label_changed = match &label_inputs { - Some((target, binding, from_binding)) => { + Some((target, binding, from_binding, version)) => { target != &active_target_id || binding != &binding_label || *from_binding != use_binding_label + || *version != targets_version } None => true, }; @@ -392,6 +395,7 @@ pub fn spawn_status_ticker( active_target_id.clone(), binding_label.clone(), use_binding_label, + targets_version, )); cached_label = if use_binding_label { binding_label From 2b37708e1905b60514f8a9890db5506a8d254a5a Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 25 Sep 2026 20:34:27 +0000 Subject: [PATCH 04/14] Replace two inference tests that could never fail test_language_is_none_for_all_whisper_devices and test_process_uses_in_memory_config_not_disk only asserted on the config the engine was constructed with, so neither exercised process() or could catch the regressions they are named after. They are replaced by tests that drive InferenceEngine::process end to end through a recording fake backend: - whisper_gets_only_its_own_language_setting: the language hint comes only from whisper_cpp.language (never moonshine.language), for every device. - process_uses_the_engine_config_and_follows_updates: post-processing and the recognition prompt come from the in-memory config, and a config pushed through update_config applies to the next utterance. - silence_is_gated_before_the_backend_runs. Both replacements were checked to fail when the behaviour they guard is broken. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_015v84hAqhDBdwy7Q49gAWBR --- crates/voxctrl-inference/src/lib.rs | 130 +++++++++++++++++++++++----- 1 file changed, 109 insertions(+), 21 deletions(-) diff --git a/crates/voxctrl-inference/src/lib.rs b/crates/voxctrl-inference/src/lib.rs index 0325cc05..81768fcf 100644 --- a/crates/voxctrl-inference/src/lib.rs +++ b/crates/voxctrl-inference/src/lib.rs @@ -592,37 +592,125 @@ pub fn run_worker_with_config( mod tests { use super::*; + /// A backend that records every request it is given and answers with a + /// fixed transcript, so `process` can be driven end to end without a model. + struct RecordingBackend { + transcript: &'static str, + requests: Arc>>, + } + + impl TranscriptionBackend for RecordingBackend { + fn name(&self) -> &str { + "recording" + } + fn load(&mut self) -> Result<()> { + Ok(()) + } + fn transcribe(&self, req: &TranscribeRequest) -> Result { + self.requests.lock().unwrap().push(req.clone()); + Ok(backend::TranscriptionResult { + text: self.transcript.to_string(), + language: "en".into(), + language_probability: 1.0, + duration_ms: 0, + inference_ms: 1, + word_timestamps: None, + }) + } + fn unload(&mut self) {} + fn is_loaded(&self) -> bool { + true + } + } + + fn recording_engine( + cfg: AppConfig, + transcript: &'static str, + ) -> (InferenceEngine, Arc>>) { + let requests = Arc::new(std::sync::Mutex::new(Vec::new())); + let engine = InferenceEngine { + config: Arc::new(cfg), + backend: Box::new(RecordingBackend { transcript, requests: requests.clone() }), + }; + (engine, requests) + } + + /// Loud enough to pass the noise gate at any sensitivity. + fn speech() -> Vec { + vec![0.1; 1600] + } + + fn request(audio: Vec) -> InferenceRequest { + InferenceRequest { + audio, + // An id no saved target has, so no per-target override applies. + target_id: "__inference_test_target__".into(), + binding_id: None, + is_interim: false, + session_id: 7, + } + } + + /// Only whisper.cpp takes a language hint, and only from its own setting: + /// the Moonshine language (a regression once read it whenever the device + /// was not "auto") must never reach it, whatever the device. #[test] - fn test_language_is_none_for_all_whisper_devices() { - // Fix regression: previously read moonshine.language when device != "auto". - // Now language is always None (Whisper auto-detects), regardless of device. - for device in &["auto", "cpu", "cuda", "vulkan"] { + fn whisper_gets_only_its_own_language_setting() { + for device in ["auto", "cpu", "cuda", "vulkan"] { let mut cfg = AppConfig::default(); cfg.engine.whisper_cpp.device = device.to_string(); cfg.engine.moonshine.language = "fr".to_string(); - let engine = InferenceEngine::new(Arc::new(cfg)); - // process() is not called (no model), but we can verify the field read - // via the build_post_config path — just confirm engine creation is fine. - assert_eq!(engine.config.engine.whisper_cpp.device, *device); - // The language used internally is always None; moonshine.language must - // not bleed into whisper inference even when device != "auto". - let _ = engine; // ensure engine is not optimised out + + for (whisper_lang, expected) in [("auto", None), ("", None), (" de ", Some("de"))] { + cfg.engine.whisper_cpp.language = whisper_lang.to_string(); + let (engine, requests) = recording_engine(cfg.clone(), "hello"); + engine.process(request(speech())).unwrap(); + assert_eq!( + requests.lock().unwrap()[0].language.as_deref(), + expected, + "device {device}, whisper language {whisper_lang:?}" + ); + } } + + // Other backends read their language from their own config. + let mut cfg = AppConfig::default(); + cfg.engine.backend = BackendChoice::Moonshine; + cfg.engine.whisper_cpp.language = "de".to_string(); + let (engine, requests) = recording_engine(cfg, "hello"); + engine.process(request(speech())).unwrap(); + assert_eq!(requests.lock().unwrap()[0].language, None); } + /// `process` works from the engine's in-memory config — no config.json + /// read per utterance — and a config pushed through `update_config` (what + /// `save_config` does on every save) applies to the very next utterance. #[test] - fn test_process_uses_in_memory_config_not_disk() { - // Fix regression: process() must not re-read config.json from disk. - // Verify: modifying the config file on disk does NOT affect InferenceEngine - // behaviour (the engine uses the Arc given at construction). + fn process_uses_the_engine_config_and_follows_updates() { let mut cfg = AppConfig::default(); cfg.features.remove_fillers = true; - let engine = InferenceEngine::new(Arc::new(cfg.clone())); - // Engine should carry the config we gave it, not whatever is on disk. - assert!(engine.config.features.remove_fillers); - // If a fresh config with remove_fillers=false were on disk it should not - // override us (we simply verify the field is still true here). - assert!(engine.config.features.remove_fillers); + cfg.features.custom_vocabulary = vec!["Kubernetes".into()]; + let (mut engine, requests) = recording_engine(cfg.clone(), "um hello world"); + + let first = engine.process(request(speech())).unwrap(); + assert!(!first.text.to_lowercase().contains("um"), "fillers kept: {:?}", first.text); + assert_eq!(first.raw_text, "um hello world"); + assert_eq!(first.session_id, 7); + let prompt = requests.lock().unwrap()[0].initial_prompt.clone().unwrap(); + assert!(prompt.contains("Kubernetes"), "vocabulary missing from prompt: {prompt}"); + + cfg.features.remove_fillers = false; + assert!(!engine.update_config(Arc::new(cfg)), "a features change rebuilt the backend"); + let second = engine.process(request(speech())).unwrap(); + assert!(second.text.to_lowercase().contains("um"), "update ignored: {:?}", second.text); + } + + #[test] + fn silence_is_gated_before_the_backend_runs() { + let (engine, requests) = recording_engine(AppConfig::default(), "Thank you."); + let out = engine.process(request(vec![0.0; 1600])).unwrap(); + assert!(out.text.is_empty() && out.error.is_none()); + assert!(requests.lock().unwrap().is_empty(), "silent audio reached the backend"); } #[test] From d59ff6f62042968a7c9ab3f9bab136d7e5da83d0 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 25 Sep 2026 20:36:46 +0000 Subject: [PATCH 05/14] Silence svelte-check's Tailwind at-rule noise (453 warnings -> 0) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 452 of svelte-check's 453 warnings were "Unknown at rule @apply/@reference" from its plain-CSS validator reading Tailwind directives, which buried any real warning. The 15 components that use those directives now mark their style blocks lang="postcss" — Tailwind v4's documented setup for Svelte — which svelte-check does not run the plain-CSS validator on. The compiled CSS is byte-for-byte unchanged apart from the fix below. The one real warning left is fixed: VoiceStep's note clamps with -webkit-line-clamp only, so add the standard line-clamp alongside it. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_015v84hAqhDBdwy7Q49gAWBR --- dist/assets/{index-B0930YBK.js => index-DnkJtkQU.js} | 0 dist/assets/{index-Cu0DrSZY.css => index-bVHMrVES.css} | 2 +- dist/index.html | 4 ++-- src/lib/Diagnostics/UdevWarning.svelte | 2 +- src/lib/Settings/AboutTab.svelte | 2 +- src/lib/Settings/AudioTab.svelte | 2 +- src/lib/Settings/BugReportTab.svelte | 2 +- src/lib/Settings/CommandsTab.svelte | 2 +- src/lib/Settings/CustomSelect.svelte | 2 +- src/lib/Settings/EngineTab.svelte | 2 +- src/lib/Settings/FeaturesTab.svelte | 2 +- src/lib/Settings/GeneralTab.svelte | 2 +- src/lib/Settings/HotkeysTab.svelte | 2 +- src/lib/Settings/OpenAiTab.svelte | 2 +- src/lib/Settings/Settings.svelte | 2 +- src/lib/Settings/TargetEditorModal.svelte | 2 +- src/lib/Settings/TtsTab.svelte | 2 +- src/lib/Update/UpdateDialog.svelte | 2 +- src/lib/Wizard/steps/VoiceStep.svelte | 1 + 19 files changed, 19 insertions(+), 18 deletions(-) rename dist/assets/{index-B0930YBK.js => index-DnkJtkQU.js} (100%) rename dist/assets/{index-Cu0DrSZY.css => index-bVHMrVES.css} (73%) diff --git a/dist/assets/index-B0930YBK.js b/dist/assets/index-DnkJtkQU.js similarity index 100% rename from dist/assets/index-B0930YBK.js rename to dist/assets/index-DnkJtkQU.js diff --git a/dist/assets/index-Cu0DrSZY.css b/dist/assets/index-bVHMrVES.css similarity index 73% rename from dist/assets/index-Cu0DrSZY.css rename to dist/assets/index-bVHMrVES.css index 80b0849d..9f1148e7 100644 --- a/dist/assets/index-Cu0DrSZY.css +++ b/dist/assets/index-bVHMrVES.css @@ -1 +1 @@ -@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial}}}.btn-action.svelte-da8msw{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-da8msw:hover{border-color:var(--text-muted);background-color:var(--border)}.hint.error.svelte-da8msw{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.svelte-da8msw:disabled{cursor:default;opacity:.6}.link.svelte-da8msw{cursor:pointer;border-style:var(--tw-border-style);padding:calc(var(--spacing,.25rem) * 0);color:inherit;text-underline-offset:2px;background-color:#0000;border-width:0;text-decoration-line:underline}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}.custom-select-wrapper.svelte-1heock4{flex:2;width:100%;min-width:190px;position:relative}.custom-select-trigger.svelte-1heock4{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-right:calc(var(--spacing,.25rem) * 9);text-align:left;--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text);--tw-shadow:0 4px 12px var(--tw-shadow-color,#00000026);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));-webkit-user-select:none;user-select:none;background:var(--surface2) url("data:image/svg+xml;utf8,") no-repeat right 12px center;background-size:10px}.custom-select-trigger.svelte-1heock4:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.custom-select-trigger.svelte-1heock4:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 12%,transparent)}}.custom-select-trigger.svelte-1heock4:hover{background-color:var(--color-obsidian-700)}.custom-select-trigger.svelte-1heock4:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-select-trigger.svelte-1heock4:disabled{cursor:not-allowed;opacity:.5;--tw-translate-y:calc(var(--spacing,.25rem) * 0)!important;translate:var(--tw-translate-x) var(--tw-translate-y)!important}.custom-dropdown-menu.svelte-1heock4{z-index:2000;gap:calc(var(--spacing,.25rem) * .5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 1);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex;overflow-y:auto}.custom-dropdown-item.svelte-1heock4{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);text-align:left;color:var(--text);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;background-color:#0000;border-style:none;font-size:13px;transition-duration:.15s}.custom-dropdown-item.svelte-1heock4:hover{background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.svelte-1heock4:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 4%,transparent)}}.custom-dropdown-item.selected.svelte-1heock4{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.selected.svelte-1heock4{background-color:color-mix(in oklab,var(--accent2) 10%,transparent)}}.custom-dropdown-item.selected.svelte-1heock4{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--accent2)}.custom-dropdown-item.svelte-1heock4:disabled{cursor:not-allowed;opacity:.4}.custom-dropdown-item.svelte-1heock4:disabled:hover{background-color:#0000}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-duration:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-leading:initial}}}.model-status-container.svelte-nfi4ak{margin-bottom:calc(var(--spacing,.25rem) * 3);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);min-height:42px;padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);align-items:center;font-size:13px;display:flex}.status-downloaded.svelte-nfi4ak{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-downloading.svelte-nfi4ak{color:var(--accent2)}.status-checking.svelte-nfi4ak{color:var(--text-muted)}.status-missing-wrapper.svelte-nfi4ak{justify-content:space-between;align-items:center;width:100%;display:flex}.status-missing.svelte-nfi4ak{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-download.svelte-nfi4ak{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}.btn-download.svelte-nfi4ak:hover{background-color:var(--accent2)}.field-input-error.svelte-nfi4ak{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.field-input-error.svelte-nfi4ak:focus{border-color:var(--color-red-500,oklch(63.7% .237 25.331));--tw-shadow:0 0 0 2px var(--tw-shadow-color,#ef444426), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field-error-msg.svelte-nfi4ak{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5);color:var(--color-red-400,oklch(70.4% .191 22.216))}.test-row.svelte-nfi4ak{margin-top:calc(var(--spacing,.25rem) * 4);align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-wrap:wrap;display:flex}.btn-test.svelte-nfi4ak{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding-inline:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}@media (hover:hover){.btn-test.svelte-nfi4ak:hover{background-color:var(--accent2)}}.btn-test.svelte-nfi4ak:disabled{cursor:not-allowed;opacity:.5}.status-pill.svelte-nfi4ak{border-radius:var(--radius);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500)}.status-pill.success.svelte-nfi4ak{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-nfi4ak{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 30%,transparent)}}.status-pill.success.svelte-nfi4ak{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-nfi4ak{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.status-pill.success.svelte-nfi4ak{color:var(--color-emerald-300,oklch(84.5% .143 164.978))}.status-pill.error.svelte-nfi4ak{border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-nfi4ak{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 30%,transparent)}}.status-pill.error.svelte-nfi4ak{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-nfi4ak{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 15%,transparent)}}.status-pill.error.svelte-nfi4ak{color:var(--color-red-300,oklch(80.8% .114 19.571))}.discovered-models.svelte-nfi4ak{margin-bottom:calc(var(--spacing,.25rem) * 3);align-items:center;gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}.model-tags.svelte-nfi4ak{align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);flex-wrap:wrap;display:flex}.tag-btn.svelte-nfi4ak{cursor:pointer;border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));border-radius:.25rem}@media (hover:hover){.tag-btn.svelte-nfi4ak:hover{background-color:var(--border);color:var(--color-white,#fff)}}.tag-btn.active.svelte-nfi4ak{border-color:var(--accent);background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.tag-btn.active.svelte-nfi4ak{background-color:color-mix(in oklab,var(--accent) 10%,transparent)}}.tag-btn.active.svelte-nfi4ak{color:var(--accent)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-tracking:initial;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}.val.svelte-1msnq7i{text-align:right;min-width:36px;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.vu-meter-container.svelte-1msnq7i{margin-block:calc(var(--spacing,.25rem) * 1);margin-bottom:calc(var(--spacing,.25rem) * 3);gap:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 1);flex-direction:column;display:flex}.vu-meter-info.svelte-1msnq7i{align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em);text-transform:uppercase;font-size:10px;display:flex}.vu-label.svelte-1msnq7i{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text-muted)}.vu-status-dot.svelte-1msnq7i{height:calc(var(--spacing,.25rem) * 1.5);width:calc(var(--spacing,.25rem) * 1.5);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));background-color:#444}.vu-status-dot.active.svelte-1msnq7i{--tw-shadow:0 0 8px var(--tw-shadow-color,#39ff14);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#39ff14}.vu-status-text.svelte-1msnq7i{color:var(--text);opacity:.7;margin-left:auto}.vu-meter-bar-wrapper.svelte-1msnq7i{box-sizing:border-box;height:calc(var(--spacing,.25rem) * 3.5);background-color:#0006;width:100%;position:relative}@supports (color:color-mix(in lab,red,red)){.vu-meter-bar-wrapper.svelte-1msnq7i{background-color:color-mix(in oklab,var(--color-black,#000) 40%,transparent)}}.vu-meter-bar-wrapper.svelte-1msnq7i{padding:3px}.vu-meter-bar.svelte-1msnq7i{gap:2px;width:100%;height:100%;display:flex;position:relative}.vu-segment.svelte-1msnq7i{background-color:#ffffff0d;flex:1;height:100%}@supports (color:color-mix(in lab,red,red)){.vu-segment.svelte-1msnq7i{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.vu-segment.svelte-1msnq7i{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:50ms;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:50ms;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.vu-segment.active.svelte-1msnq7i{--tw-shadow:0 0 4px var(--tw-shadow-color,#39ff144d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#39ff14}.vu-segment.active.orange.svelte-1msnq7i{--tw-shadow:0 0 4px var(--tw-shadow-color,#ff6d0080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#ff6d00}.vu-peak-marker.svelte-1msnq7i{pointer-events:none;top:calc(var(--spacing,.25rem) * -.5);bottom:calc(var(--spacing,.25rem) * -.5);--tw-shadow:0 0 6px var(--tw-shadow-color,#ffab00);width:2px;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:left;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:50ms;--tw-ease:linear;background-color:#ffab00;transition-duration:50ms;transition-timing-function:linear;position:absolute}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-leading:initial;--tw-tracking:initial}}}.modal-backdrop.svelte-oc07pw{inset:calc(var(--spacing,.25rem) * 0);z-index:1000;background-color:#0009;justify-content:center;align-items:center;display:flex;position:fixed}@supports (color:color-mix(in lab,red,red)){.modal-backdrop.svelte-oc07pw{background-color:color-mix(in oklab,var(--color-black,#000) 60%,transparent)}}.modal-backdrop.svelte-oc07pw{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.target-modal-backdrop.svelte-oc07pw{z-index:1100!important}.modal.svelte-oc07pw{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);width:90%;max-width:500px;max-height:85vh;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex}.modal-header.svelte-oc07pw{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);justify-content:space-between;align-items:center;display:flex}.modal-header.svelte-oc07pw h3:where(.svelte-oc07pw){margin:calc(var(--spacing,.25rem) * 0);--tw-font-weight:var(--font-weight-bold,700);font-size:15px;font-weight:var(--font-weight-bold,700)}.close-btn.svelte-oc07pw{cursor:pointer;--tw-border-style:none;font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));color:var(--text-muted);background-color:#0000;border-style:none}.close-btn.svelte-oc07pw:hover{color:var(--text)}.modal-body.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 3.5);padding:calc(var(--spacing,.25rem) * 5);flex-direction:column;display:flex;overflow-y:auto}.modal-footer.svelte-oc07pw{justify-content:flex-end;gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);display:flex}.morph-section.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 2.5);border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:1px;border-color:var(--border);background-color:#ffffff05;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.morph-section.svelte-oc07pw{background-color:color-mix(in oklab,var(--color-white,#fff) 2%,transparent)}}.morph-section.svelte-oc07pw{padding:calc(var(--spacing,.25rem) * 3)}.morph-section.svelte-oc07pw h5:where(.svelte-oc07pw),.processing-toggles.svelte-oc07pw h5:where(.svelte-oc07pw){margin:calc(var(--spacing,.25rem) * 0);margin-bottom:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);text-transform:uppercase}.processing-toggles.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding-top:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}.checkbox-field.svelte-oc07pw{cursor:pointer;align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted);display:flex}.checkbox-field.svelte-oc07pw input[type=checkbox]:where(.svelte-oc07pw){cursor:pointer}.checkbox-field.svelte-oc07pw:hover{color:var(--text)}.btn-action.svelte-oc07pw{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-oc07pw:hover{border-color:var(--text-muted);background-color:var(--border)}.btn-action.small.svelte-oc07pw{padding:calc(var(--spacing,.25rem) * 1);padding-inline:calc(var(--spacing,.25rem) * 2);font-size:10px}.btn-action.svelte-oc07pw:disabled{cursor:not-allowed;opacity:.5}.chat-actions.svelte-oc07pw{align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.chat-status.svelte-oc07pw{margin-top:calc(var(--spacing,.25rem) * 1.5);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);display:block}.chat-status.ok.svelte-oc07pw{color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.chat-status.bad.svelte-oc07pw{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.primary.svelte-oc07pw{--tw-border-style:none;background-color:var(--accent);color:var(--color-white,#fff);border-style:none}.btn-action.primary.svelte-oc07pw:hover{opacity:.9}.full-width-input.svelte-oc07pw{width:100%!important}textarea.svelte-oc07pw{resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--text);--tw-shadow:inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}textarea.svelte-oc07pw:hover{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){textarea.svelte-oc07pw:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 15%,transparent)}}textarea.svelte-oc07pw:hover{background-color:var(--color-obsidian-900)}textarea.svelte-oc07pw:focus{border-color:var(--accent2);background-color:var(--color-obsidian-950);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field.col.svelte-oc07pw{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;width:100%}.mcp-container.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 1.5);flex-direction:column;display:flex}.field-label-row.svelte-oc07pw{margin-bottom:calc(var(--spacing,.25rem) * .5);justify-content:space-between;align-items:center;width:100%;display:flex}.field-title.svelte-oc07pw{--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text)}.field-tag.svelte-oc07pw{border-style:var(--tw-border-style);border-width:1px;border-color:var(--accent2);border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-oc07pw{border-color:color-mix(in oklab,var(--accent2) 25%,transparent)}}.field-tag.svelte-oc07pw{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-oc07pw{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.field-tag.svelte-oc07pw{padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-leading:1;--tw-font-weight:var(--font-weight-bold,700);font-size:9px;line-height:1;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em);color:var(--accent2);text-transform:uppercase}p.hint.svelte-oc07pw{margin:calc(var(--spacing,.25rem) * 0);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}p.hint.svelte-oc07pw code:where(.svelte-oc07pw){border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);border-radius:.25rem;font-size:10px}.validation-error-msg.svelte-oc07pw{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-red-400,oklch(70.4% .191 22.216));display:block}.longer-display-label.svelte-oc07pw{min-width:255px!important}.animate-fade-in.svelte-oc07pw{animation:.2s cubic-bezier(.16,1,.3,1) fade-in}@keyframes svelte-oc07pw-fade-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-duration:initial;--tw-leading:initial;--tw-font-weight:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-tracking:initial}}}.backend-banner.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 1);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.backend-banner.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.backend-banner.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;transition-duration:.15s}.backend-banner.private.svelte-w4d8v7{border-color:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.backend-banner.private.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 25%,transparent)}}.backend-banner.private.svelte-w4d8v7{background-color:#00bb7f0f}@supports (color:color-mix(in lab,red,red)){.backend-banner.private.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 6%,transparent)}}.backend-banner.warn.svelte-w4d8v7{border-color:#f99c0040}@supports (color:color-mix(in lab,red,red)){.backend-banner.warn.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.backend-banner.warn.svelte-w4d8v7{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.backend-banner.warn.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.backend-banner.broken.svelte-w4d8v7{border-color:#fb2c3640}@supports (color:color-mix(in lab,red,red)){.backend-banner.broken.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 25%,transparent)}}.backend-banner.broken.svelte-w4d8v7{background-color:#fb2c360f}@supports (color:color-mix(in lab,red,red)){.backend-banner.broken.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 6%,transparent)}}.manual-enable-banner.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 1);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0040;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.manual-enable-banner.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.manual-enable-banner.svelte-w4d8v7{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.manual-enable-banner.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.manual-enable-banner.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;transition-duration:.15s}.banner-toggle.svelte-w4d8v7{cursor:pointer;align-items:center;gap:calc(var(--spacing,.25rem) * 2.5);--tw-border-style:none;width:100%;padding:calc(var(--spacing,.25rem) * 0);text-align:left;color:var(--text);-webkit-user-select:none;user-select:none;background-color:#0000;border-style:none;display:flex}.banner-title.svelte-w4d8v7{--tw-leading:var(--leading-normal,1.5);font-size:12.5px;line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);flex:1}.banner-chevron.svelte-w4d8v7{height:calc(var(--spacing,.25rem) * 4);width:calc(var(--spacing,.25rem) * 4);color:var(--text-muted);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));flex-shrink:0}.banner-chevron.expanded.svelte-w4d8v7{color:var(--text);rotate:180deg}.banner-content.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 2);width:100%;min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);border-top-style:var(--tw-border-style);border-color:#ffffff0d;border-top-width:1px;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.banner-content.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.banner-content.svelte-w4d8v7{padding-top:calc(var(--spacing,.25rem) * 2);padding-left:calc(var(--spacing,.25rem) * 6.5);font-size:12.5px}.backend-icon.svelte-w4d8v7{font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));--tw-leading:1;flex-shrink:0;line-height:1}.backend-detail.svelte-w4d8v7{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.backend-detail.error.svelte-w4d8v7{color:var(--color-red-400,oklch(70.4% .191 22.216))}.manual-enable-actions.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1)}.keys-rejected.svelte-w4d8v7{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3640;display:flex}@supports (color:color-mix(in lab,red,red)){.keys-rejected.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 25%,transparent)}}.keys-rejected.svelte-w4d8v7{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.keys-rejected.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.keys-rejected.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:var(--color-red-300,oklch(80.8% .114 19.571))}.keys-fragile.svelte-w4d8v7{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0040;display:flex}@supports (color:color-mix(in lab,red,red)){.keys-fragile.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.keys-fragile.svelte-w4d8v7{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.keys-fragile.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.keys-fragile.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:var(--color-amber-200,oklch(92.4% .12 95.746))}.keys-accepted.svelte-w4d8v7{color:#5ee9b5e6;font-size:11.5px}@supports (color:color-mix(in lab,red,red)){.keys-accepted.svelte-w4d8v7{color:color-mix(in oklab,var(--color-emerald-300,oklch(84.5% .143 164.978)) 90%,transparent)}}.keys-accepted.svelte-w4d8v7 code:where(.svelte-w4d8v7){background-color:#ffffff0d;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.keys-accepted.svelte-w4d8v7 code:where(.svelte-w4d8v7){background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.keys-accepted.svelte-w4d8v7 code:where(.svelte-w4d8v7){padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace)}.hotkeys-section.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 5);padding-bottom:calc(var(--spacing,.25rem) * 10);flex-direction:column;display:flex}.section-header.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 2);justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 5);display:flex}.description.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.bindings-list.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.binding-item.svelte-w4d8v7{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));background-color:#1a1f2e66;display:flex}.binding-item.svelte-w4d8v7:hover{border-color:var(--accent2);--tw-shadow:0 4px 20px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.binding-item.disabled.svelte-w4d8v7{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.binding-item.disabled.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.binding-item.disabled.svelte-w4d8v7{opacity:.55;background-image:repeating-linear-gradient(-45deg,#0000,#0000 10px,#00000040 10px 20px)}.binding-content.svelte-w4d8v7{min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex}.binding-header-row.svelte-w4d8v7{justify-content:space-between;align-items:center;width:100%;display:flex}.binding-title.svelte-w4d8v7{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.binding-row2.svelte-w4d8v7{justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.binding-targets.svelte-w4d8v7{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.binding-actions.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);justify-content:flex-end;align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);border-top-style:var(--tw-border-style);border-color:#ffffff0d;border-top-width:1px;display:flex}@supports (color:color-mix(in lab,red,red)){.binding-actions.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.binding-actions.svelte-w4d8v7{padding-top:calc(var(--spacing,.25rem) * 2)}.confirm-label.svelte-w4d8v7{color:var(--text-muted);font-size:11px}kbd.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);--tw-shadow:0 1px 0 var(--tw-shadow-color,#0006);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:.25rem}.empty-state.svelte-w4d8v7{border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:2px;border-color:var(--border);background-color:#00000026;flex-direction:column;grid-column:1/-1;justify-content:center;align-items:center;display:flex}@supports (color:color-mix(in lab,red,red)){.empty-state.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-black,#000) 15%,transparent)}}.empty-state.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 10);text-align:center}.empty-icon.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 2);font-size:32px}.empty-state.svelte-w4d8v7 p:where(.svelte-w4d8v7){margin:calc(var(--spacing,.25rem) * 0);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.btn-action.svelte-w4d8v7{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-w4d8v7:hover{border-color:var(--text-muted);background-color:var(--border)}.btn-action.primary.svelte-w4d8v7{--tw-border-style:none;background-color:var(--accent);color:var(--color-white,#fff);border-style:none}.btn-action.primary.svelte-w4d8v7:hover{opacity:.9}.btn-action.small.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 1);padding-inline:calc(var(--spacing,.25rem) * 2);font-size:11px}.btn-action.danger.svelte-w4d8v7{border-color:#ff656833}@supports (color:color-mix(in lab,red,red)){.btn-action.danger.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 20%,transparent)}}.btn-action.danger.svelte-w4d8v7{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.danger.svelte-w4d8v7:hover{border-color:var(--color-red-400,oklch(70.4% .191 22.216));background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.btn-action.danger.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 10%,transparent)}}.btn-add-wide.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 4);cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent2);width:100%;padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-style:none;display:flex}.btn-add-wide.svelte-w4d8v7:hover{--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-add-wide.svelte-w4d8v7:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.badge.svelte-w4d8v7{border-radius:var(--radius-xl,.75rem);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-semibold,600);font-size:10px;font-weight:var(--font-weight-semibold,600);text-transform:uppercase}.warn-note.svelte-w4d8v7{color:var(--accent-amber,#f0b429);font-size:11px;line-height:1.45}.badge.gesture.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.badge.gesture.svelte-w4d8v7{border-color:color-mix(in oklab,var(--accent2) 30%,transparent)}}.badge.gesture.svelte-w4d8v7{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.badge.gesture.svelte-w4d8v7{background-color:color-mix(in oklab,var(--accent2) 15%,transparent)}}.badge.gesture.svelte-w4d8v7{color:var(--accent2)}.badge.openai.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.badge.openai.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 30%,transparent)}}.badge.openai.svelte-w4d8v7{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.badge.openai.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.badge.openai.svelte-w4d8v7{color:var(--color-emerald-200,oklch(90.5% .093 164.15))}.badge.s1-mini.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.badge.s1-mini.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 30%,transparent)}}.badge.s1-mini.svelte-w4d8v7{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.badge.s1-mini.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.badge.s1-mini.svelte-w4d8v7{color:var(--color-cyan-200,oklch(91.7% .08 205.041))}.modal-backdrop.svelte-w4d8v7{inset:calc(var(--spacing,.25rem) * 0);z-index:1000;background-color:#0009;justify-content:center;align-items:center;display:flex;position:fixed}@supports (color:color-mix(in lab,red,red)){.modal-backdrop.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-black,#000) 60%,transparent)}}.modal-backdrop.svelte-w4d8v7{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.modal.svelte-w4d8v7{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);width:90%;max-width:500px;max-height:85vh;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex}.modal-header.svelte-w4d8v7{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);justify-content:space-between;align-items:center;display:flex}.modal-header.svelte-w4d8v7 h3:where(.svelte-w4d8v7){margin:calc(var(--spacing,.25rem) * 0);--tw-font-weight:var(--font-weight-bold,700);font-size:15px;font-weight:var(--font-weight-bold,700)}.close-btn.svelte-w4d8v7{cursor:pointer;--tw-border-style:none;font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));color:var(--text-muted);background-color:#0000;border-style:none}.close-btn.svelte-w4d8v7:hover{color:var(--text)}.modal-body.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 3.5);padding:calc(var(--spacing,.25rem) * 5);flex-direction:column;display:flex;overflow-y:auto}.modal-footer.svelte-w4d8v7{justify-content:flex-end;gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);display:flex}.morph-section.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 2.5);border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:1px;border-color:var(--border);background-color:#ffffff05;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.morph-section.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-white,#fff) 2%,transparent)}}.morph-section.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 3)}.processing-toggles.svelte-w4d8v7 h5:where(.svelte-w4d8v7){margin:calc(var(--spacing,.25rem) * 0);margin-bottom:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);text-transform:uppercase}.processing-toggles.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding-top:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}.checkbox-field.svelte-w4d8v7{cursor:pointer;align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted);display:flex}.checkbox-field.svelte-w4d8v7 input[type=checkbox]:where(.svelte-w4d8v7){cursor:pointer}.checkbox-field.svelte-w4d8v7:hover{color:var(--text)}.btn-add-inline.svelte-w4d8v7{cursor:pointer;--tw-border-style:none;padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));background-color:#0000;border-style:none;border-radius:.25rem}.btn-add-inline.svelte-w4d8v7:hover{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.btn-add-inline.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.btn-add-inline.svelte-w4d8v7:hover{color:var(--color-white,#fff)}.target-selects-list.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;width:100%;display:flex}.target-select-row.svelte-w4d8v7{align-items:center;gap:calc(var(--spacing,.25rem) * 2);width:100%;display:flex}.btn-remove-inline.svelte-w4d8v7{box-sizing:border-box;cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3633;justify-content:center;align-items:center;height:34px;display:flex}@supports (color:color-mix(in lab,red,red)){.btn-remove-inline.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.btn-remove-inline.svelte-w4d8v7{background-color:#fb2c3614}@supports (color:color-mix(in lab,red,red)){.btn-remove-inline.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 8%,transparent)}}.btn-remove-inline.svelte-w4d8v7{padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-red-400,oklch(70.4% .191 22.216));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-remove-inline.svelte-w4d8v7:hover{border-color:var(--color-red-500,oklch(63.7% .237 25.331));background-color:var(--color-red-500,oklch(63.7% .237 25.331));color:var(--color-white,#fff);--tw-shadow:0 2px 8px var(--tw-shadow-color,#ef444440);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.longer-display-label.svelte-w4d8v7{min-width:255px!important}.openai-target-settings.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 2.5);margin-bottom:calc(var(--spacing,.25rem) * 3.5);margin-left:calc(var(--spacing,.25rem) * 2.5);gap:calc(var(--spacing,.25rem) * 2);border-left-style:var(--tw-border-style);border-left-width:2px;border-color:var(--accent);padding-left:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}textarea.svelte-w4d8v7{resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--text);--tw-shadow:inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}textarea.svelte-w4d8v7:hover{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){textarea.svelte-w4d8v7:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 15%,transparent)}}textarea.svelte-w4d8v7:hover{background-color:var(--color-obsidian-900)}textarea.svelte-w4d8v7:focus{border-color:var(--accent2);background-color:var(--color-obsidian-950);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field.col.svelte-w4d8v7{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;width:100%}.field-label-row.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * .5);justify-content:space-between;align-items:center;width:100%;display:flex}.field-title.svelte-w4d8v7{--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text)}.field-tag.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:var(--accent2);border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-w4d8v7{border-color:color-mix(in oklab,var(--accent2) 25%,transparent)}}.field-tag.svelte-w4d8v7{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-w4d8v7{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.field-tag.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-leading:1;--tw-font-weight:var(--font-weight-bold,700);font-size:9px;line-height:1;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em);color:var(--accent2);text-transform:uppercase}p.hint.svelte-w4d8v7{margin:calc(var(--spacing,.25rem) * 0);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}p.hint.svelte-w4d8v7 code:where(.svelte-w4d8v7){border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);border-radius:.25rem;font-size:10px}.validation-error-msg.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-red-400,oklch(70.4% .191 22.216));display:block}.binding-item.has-conflict.svelte-w4d8v7{border-color:#f99c0073!important}@supports (color:color-mix(in lab,red,red)){.binding-item.has-conflict.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 45%,transparent)!important}}.binding-item.active-conflict.svelte-w4d8v7{background-color:#f99c000f;position:relative}@supports (color:color-mix(in lab,red,red)){.binding-item.active-conflict.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.binding-item.active-conflict.svelte-w4d8v7:hover{border-color:#f99c00b3!important}@supports (color:color-mix(in lab,red,red)){.binding-item.active-conflict.svelte-w4d8v7:hover{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 70%,transparent)!important}}.binding-item.active-conflict.svelte-w4d8v7:hover{--tw-shadow:0 4px 20px var(--tw-shadow-color,#fbbf2426);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.binding-title.has-conflict.svelte-w4d8v7{padding-right:75px}.conflict-marker.svelte-w4d8v7{top:calc(var(--spacing,.25rem) * 2.5);right:calc(var(--spacing,.25rem) * 3.5);background-color:var(--color-amber-400,oklch(82.8% .189 84.429));padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-extrabold,800);font-size:9px;font-weight:var(--font-weight-extrabold,800);color:var(--color-neutral-900,oklch(20.5% 0 0));--tw-shadow:0 2px 6px var(--tw-shadow-color,#fbbf2440);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:.25rem;position:absolute}.conflict-alert-banner.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 3);align-items:center;gap:calc(var(--spacing,.25rem) * 2.5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0040;display:flex}@supports (color:color-mix(in lab,red,red)){.conflict-alert-banner.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.conflict-alert-banner.svelte-w4d8v7{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.conflict-alert-banner.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.conflict-alert-banner.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);color:var(--color-amber-400,oklch(82.8% .189 84.429))}.warning-icon.svelte-w4d8v7{font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));flex-shrink:0}.animate-fade-in.svelte-w4d8v7{animation:.2s cubic-bezier(.16,1,.3,1) fade-in}@keyframes svelte-w4d8v7-fade-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}.custom-select-wrapper.svelte-w4d8v7{flex:1;min-width:190px;position:relative}.custom-select-trigger.svelte-w4d8v7{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-right:calc(var(--spacing,.25rem) * 9);text-align:left;--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text);--tw-shadow:0 4px 12px var(--tw-shadow-color,#00000026);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));-webkit-user-select:none;user-select:none;background:var(--surface2) url("data:image/svg+xml;utf8,") no-repeat right 12px center;background-size:10px}.custom-select-trigger.svelte-w4d8v7:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.custom-select-trigger.svelte-w4d8v7:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 12%,transparent)}}.custom-select-trigger.svelte-w4d8v7:hover{background-color:var(--color-obsidian-700)}.custom-select-trigger.svelte-w4d8v7:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-select-backdrop.svelte-w4d8v7{inset:calc(var(--spacing,.25rem) * 0);z-index:199;position:fixed}.custom-dropdown-menu.svelte-w4d8v7{right:calc(var(--spacing,.25rem) * 0);left:calc(var(--spacing,.25rem) * 0);z-index:200;margin-top:calc(var(--spacing,.25rem) * 1);max-height:calc(var(--spacing,.25rem) * 60);gap:calc(var(--spacing,.25rem) * .5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 1);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex;position:absolute;overflow-y:auto}.custom-dropdown-item.svelte-w4d8v7{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);text-align:left;color:var(--text);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;background-color:#0000;border-style:none;font-size:13px;transition-duration:.15s}.custom-dropdown-item.svelte-w4d8v7:hover{background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 4%,transparent)}}.custom-dropdown-item.svelte-w4d8v7:disabled{cursor:not-allowed;opacity:.4}.custom-dropdown-item.svelte-w4d8v7:disabled:hover{background-color:#0000}.custom-dropdown-item.create-new.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f40;margin-top:calc(var(--spacing,.25rem) * 1)!important}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.create-new.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 25%,transparent)}}.custom-dropdown-item.create-new.svelte-w4d8v7{background-color:#002c22cc}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.create-new.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-emerald-950,oklch(26.2% .051 172.552)) 80%,transparent)}}.custom-dropdown-item.create-new.svelte-w4d8v7{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.custom-dropdown-item.create-new.svelte-w4d8v7:hover{background-color:#004e3be6!important}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.create-new.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--color-emerald-900,oklch(37.8% .077 168.94)) 90%,transparent)!important}}.custom-dropdown-item.create-new.svelte-w4d8v7 .plus-icon:where(.svelte-w4d8v7){margin-right:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800);color:var(--color-emerald-300,oklch(84.5% .143 164.978))}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.targets-section.svelte-134kctg{gap:calc(var(--spacing,.25rem) * 5);padding-bottom:calc(var(--spacing,.25rem) * 10);flex-direction:column;display:flex}.section-header.svelte-134kctg{margin-bottom:calc(var(--spacing,.25rem) * 2);justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 5);display:flex}.description.svelte-134kctg{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.usage-note.svelte-134kctg{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.usage-note.svelte-134kctg{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.usage-note.svelte-134kctg{padding:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.usage-note.svelte-134kctg strong:where(.svelte-134kctg){--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.usage-note.svelte-134kctg em:where(.svelte-134kctg){font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);font-style:normal}.bindings-list.svelte-134kctg{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.binding-item.svelte-134kctg{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));background-color:#1a1f2e66;display:flex}.binding-item.svelte-134kctg:hover{border-color:var(--accent2);--tw-shadow:0 4px 20px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.binding-content.svelte-134kctg{min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex}.binding-row2.svelte-134kctg{justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.binding-title.svelte-134kctg{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.badge.svelte-134kctg{border-radius:var(--radius-xl,.75rem);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-semibold,600);font-size:10px;font-weight:var(--font-weight-semibold,600);text-transform:uppercase}.badge.delivery.svelte-134kctg{border-style:var(--tw-border-style);border-width:1px;border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.badge.delivery.svelte-134kctg{border-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 30%,transparent)}}.badge.delivery.svelte-134kctg{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.badge.delivery.svelte-134kctg{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.badge.delivery.svelte-134kctg{color:var(--color-cyan-300,oklch(86.5% .127 207.078))}.binding-targets.svelte-134kctg{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.binding-actions.svelte-134kctg{margin-top:calc(var(--spacing,.25rem) * 1);justify-content:flex-end;align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);border-top-style:var(--tw-border-style);border-color:#ffffff0d;border-top-width:1px;display:flex}@supports (color:color-mix(in lab,red,red)){.binding-actions.svelte-134kctg{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.binding-actions.svelte-134kctg{padding-top:calc(var(--spacing,.25rem) * 2)}.confirm-label.svelte-134kctg{color:var(--text-muted);font-size:11px}.btn-action.svelte-134kctg{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-134kctg:hover{border-color:var(--text-muted);background-color:var(--border)}.btn-action.small.svelte-134kctg{padding:calc(var(--spacing,.25rem) * 1);padding-inline:calc(var(--spacing,.25rem) * 2);font-size:11px}.btn-action.danger.svelte-134kctg{border-color:#ff656833}@supports (color:color-mix(in lab,red,red)){.btn-action.danger.svelte-134kctg{border-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 20%,transparent)}}.btn-action.danger.svelte-134kctg{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.danger.svelte-134kctg:hover{border-color:var(--color-red-400,oklch(70.4% .191 22.216));background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.btn-action.danger.svelte-134kctg:hover{background-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 10%,transparent)}}.btn-add-wide.svelte-134kctg{margin-bottom:calc(var(--spacing,.25rem) * 4);cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent2);width:100%;padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-style:none;display:flex}.btn-add-wide.svelte-134kctg:hover{--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-add-wide.svelte-134kctg:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.empty-state.svelte-134kctg{border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:2px;border-color:var(--border);background-color:#00000026;flex-direction:column;grid-column:1/-1;justify-content:center;align-items:center;display:flex}@supports (color:color-mix(in lab,red,red)){.empty-state.svelte-134kctg{background-color:color-mix(in oklab,var(--color-black,#000) 15%,transparent)}}.empty-state.svelte-134kctg{padding:calc(var(--spacing,.25rem) * 10);text-align:center}.empty-icon.svelte-134kctg{margin-bottom:calc(var(--spacing,.25rem) * 2);font-size:32px}.empty-state.svelte-134kctg p:where(.svelte-134kctg){margin:calc(var(--spacing,.25rem) * 0);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-leading:initial}}}.row.svelte-1q9seip{margin-top:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 2);display:flex}.btn-preview.svelte-1q9seip{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-preview.svelte-1q9seip:hover:not(:disabled){background-color:var(--border);color:var(--accent)}.btn-preview.svelte-1q9seip:disabled{cursor:not-allowed;opacity:.4}.idle-minutes-input.svelte-1q9seip{width:calc(var(--spacing,.25rem) * 20);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 2.5);text-align:right;color:var(--text);font-size:13px}.voice-status-container.svelte-1q9seip{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);min-height:42px;padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);align-items:center;font-size:13px;display:flex}.status-downloaded.svelte-1q9seip{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-downloading.svelte-1q9seip{color:var(--accent2)}.status-checking.svelte-1q9seip{color:var(--text-muted)}.status-missing-wrapper.svelte-1q9seip{justify-content:space-between;align-items:center;width:100%;display:flex}.status-missing.svelte-1q9seip{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-download.svelte-1q9seip{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}.btn-download.svelte-1q9seip:hover:not(:disabled){background-color:var(--accent2)}.btn-download.svelte-1q9seip:disabled{cursor:not-allowed;border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);color:var(--text-muted);opacity:.5}.field-input-error.svelte-1q9seip{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.field-input-error.svelte-1q9seip:focus{border-color:var(--color-red-500,oklch(63.7% .237 25.331));--tw-shadow:0 0 0 2px var(--tw-shadow-color,#ef444426), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field-error-msg.svelte-1q9seip{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5);color:var(--color-red-400,oklch(70.4% .191 22.216))}.range-input.svelte-1q9seip{width:100%;accent-color:var(--accent)}.number-input.svelte-1q9seip{width:calc(var(--spacing,.25rem) * 20)}.tts-test-row.svelte-1q9seip{justify-content:space-between;align-items:center;width:100%;display:flex}.tts-error-msg.svelte-1q9seip{overflow-wrap:break-word;width:100%}.run-speed-container.svelte-1q9seip{border:1px solid var(--border);border-radius:var(--radius);background:#ffffff05;align-items:center;gap:8px;padding:6px 12px;font-size:12px;font-weight:500;display:flex}.run-speed-label.svelte-1q9seip{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;font-size:10px}.run-speed-value.svelte-1q9seip{color:var(--accent);font-family:JetBrains Mono,monospace;font-weight:600}.run-speed-value.counting.svelte-1q9seip{color:var(--accent2);text-shadow:0 0 8px #38bdf84d}.non-commercial-warning.svelte-1q9seip{margin-bottom:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 1.5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0066;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.non-commercial-warning.svelte-1q9seip{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 40%,transparent)}}.non-commercial-warning.svelte-1q9seip{background-color:#4619014d}@supports (color:color-mix(in lab,red,red)){.non-commercial-warning.svelte-1q9seip{background-color:color-mix(in oklab,var(--color-amber-950,oklch(27.9% .077 45.635)) 30%,transparent)}}.non-commercial-warning.svelte-1q9seip{padding:calc(var(--spacing,.25rem) * 3)}.warning-header.svelte-1q9seip{align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-amber-400,oklch(82.8% .189 84.429));display:flex}.warning-icon.svelte-1q9seip{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)))}.warning-text.svelte-1q9seip{margin:calc(var(--spacing,.25rem) * 0);--tw-leading:var(--leading-relaxed,1.625);max-width:none;font-size:12px;line-height:var(--leading-relaxed,1.625);color:#fee685cc}@supports (color:color-mix(in lab,red,red)){.warning-text.svelte-1q9seip{color:color-mix(in oklab,var(--color-amber-200,oklch(92.4% .12 95.746)) 80%,transparent)}}.field-input-textarea.svelte-1q9seip{margin-top:calc(var(--spacing,.25rem) * 1);box-sizing:border-box;resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}.field-input-textarea.svelte-1q9seip:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#4fc3f733);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.engine-radio-group.svelte-1q9seip{margin-top:calc(var(--spacing,.25rem) * 1.5);gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;width:100%;display:flex}.engine-radio-option.svelte-1q9seip{cursor:pointer;gap:calc(var(--spacing,.25rem) * 1);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);padding:calc(var(--spacing,.25rem) * 3);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));flex-direction:column;display:flex}.engine-radio-option.svelte-1q9seip:hover{border-color:var(--accent2);background-color:var(--surface2)}.engine-radio-option.selected.svelte-1q9seip{border-color:var(--accent);background-color:var(--surface2)}.engine-radio-header.svelte-1q9seip{align-items:center;gap:calc(var(--spacing,.25rem) * 2.5);display:flex}.engine-radio-name.svelte-1q9seip{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--text)}.engine-radio-desc.svelte-1q9seip{margin-left:calc(var(--spacing,.25rem) * 6);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);color:var(--text-muted)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.hint.svelte-1bvctpo{margin-bottom:calc(var(--spacing,.25rem) * 4);max-width:520px;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-300)}.field.col.svelte-1bvctpo{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1.5);flex-direction:column}textarea.svelte-1bvctpo{resize:vertical;border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;padding:calc(var(--spacing,.25rem) * 2);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--text);border-radius:.25rem;font-size:13px}textarea.invalid.svelte-1bvctpo{border-color:var(--color-red-500,oklch(63.7% .237 25.331));--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){textarea.invalid.svelte-1bvctpo{--tw-ring-color:color-mix(in oklab, var(--color-red-500,oklch(63.7% .237 25.331)) 20%, transparent)}}textarea.locked.svelte-1bvctpo{cursor:not-allowed;background-color:#0003}@supports (color:color-mix(in lab,red,red)){textarea.locked.svelte-1bvctpo{background-color:color-mix(in oklab,var(--color-black,#000) 20%,transparent)}}textarea.locked.svelte-1bvctpo{opacity:.6}.validation-error.svelte-1bvctpo{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-red-400,oklch(70.4% .191 22.216))}.field-hint.svelte-1bvctpo{color:var(--color-obsidian-300);font-size:11px}code.svelte-1bvctpo{background-color:#ffffff0d;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){code.svelte-1bvctpo{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}code.svelte-1bvctpo{padding-inline:calc(var(--spacing,.25rem) * 1);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue)}.action-row.svelte-1bvctpo{margin-top:calc(var(--spacing,.25rem) * 3.5);align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding-top:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}.btn-test.svelte-1bvctpo{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);width:100%;padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-style:none}.btn-test.svelte-1bvctpo:hover:not(:disabled){--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-test.svelte-1bvctpo:active:not(:disabled){--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.btn-test.svelte-1bvctpo:disabled{cursor:not-allowed;opacity:.6}.status-msg.svelte-1bvctpo{text-align:center;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600)}.status-msg.success.svelte-1bvctpo{color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-msg.error.svelte-1bvctpo{color:var(--color-red-400,oklch(70.4% .191 22.216))}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-leading:initial}}}.custom-vocab-input.svelte-1s1a8xn{margin-top:calc(var(--spacing,.25rem) * 2);box-sizing:border-box;resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;min-height:80px;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}.custom-vocab-input.svelte-1s1a8xn:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#4fc3f733);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-vocab-input.svelte-1s1a8xn::placeholder{color:var(--text-muted);opacity:.5}.model-status-container.svelte-1s1a8xn{margin-bottom:calc(var(--spacing,.25rem) * 3);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);min-height:42px;padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);align-items:center;font-size:13px;display:flex}.status-downloaded.svelte-1s1a8xn{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-downloading.svelte-1s1a8xn{color:var(--accent2)}.status-checking.svelte-1s1a8xn{color:var(--text-muted)}.status-missing-wrapper.svelte-1s1a8xn{justify-content:space-between;align-items:center;width:100%;display:flex}.status-missing.svelte-1s1a8xn{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-download.svelte-1s1a8xn{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}.btn-download.svelte-1s1a8xn:hover{background-color:var(--accent2)}.status-pill.svelte-1s1a8xn{border-radius:var(--radius);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500)}.status-pill.success.svelte-1s1a8xn{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-1s1a8xn{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 30%,transparent)}}.status-pill.success.svelte-1s1a8xn{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-1s1a8xn{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.status-pill.success.svelte-1s1a8xn{color:var(--color-emerald-300,oklch(84.5% .143 164.978))}.status-pill.error.svelte-1s1a8xn{border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-1s1a8xn{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 30%,transparent)}}.status-pill.error.svelte-1s1a8xn{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-1s1a8xn{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 15%,transparent)}}.status-pill.error.svelte-1s1a8xn{color:var(--color-red-300,oklch(80.8% .114 19.571))}.status-pill.downloading.svelte-1s1a8xn{border-style:var(--tw-border-style);border-width:1px;border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.status-pill.downloading.svelte-1s1a8xn{border-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 30%,transparent)}}.status-pill.downloading.svelte-1s1a8xn{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.status-pill.downloading.svelte-1s1a8xn{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.status-pill.downloading.svelte-1s1a8xn{color:var(--color-cyan-300,oklch(86.5% .127 207.078))}.field-title-col.svelte-1s1a8xn{margin-right:calc(var(--spacing,.25rem) * 4);flex-direction:column;flex:1;display:flex}.field-title-col.svelte-1s1a8xn span:where(.svelte-1s1a8xn){--tw-font-weight:var(--font-weight-medium,500);font-size:13px;font-weight:var(--font-weight-medium,500);color:var(--color-obsidian-100)}.field-title-col.svelte-1s1a8xn .hint:where(.svelte-1s1a8xn){margin-top:calc(var(--spacing,.25rem) * .5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.s1-mini-note.svelte-1s1a8xn{margin-top:calc(var(--spacing,.25rem) * -1);--tw-font-weight:var(--font-weight-medium,500);font-size:11.5px;font-weight:var(--font-weight-medium,500);color:var(--color-accent-blue);opacity:.9}.disabled-section.svelte-1s1a8xn{pointer-events:none;opacity:.5}.disabled-note.svelte-1s1a8xn{color:var(--color-accent-blue);opacity:.9}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.lede.svelte-7vrdzs{--tw-leading:var(--leading-relaxed,1.625);font-size:13px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.disclosure.svelte-7vrdzs{border-color:#38bdf840}@supports (color:color-mix(in lab,red,red)){.disclosure.svelte-7vrdzs{border-color:color-mix(in oklab,var(--color-accent-blue) 25%,transparent)}}.disclosure.svelte-7vrdzs{background-color:#38bdf80a}.ledger.svelte-7vrdzs{gap:calc(var(--spacing,.25rem) * 4);grid-template-columns:repeat(auto-fit,minmax(240px,1fr));display:grid}.ledger-col.svelte-7vrdzs ul:where(.svelte-7vrdzs){margin-top:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 1.5);--tw-leading:var(--leading-relaxed,1.625);font-size:11.5px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted);flex-direction:column;display:flex}.ledger-col.svelte-7vrdzs li:where(.svelte-7vrdzs){border-left-style:var(--tw-border-style);padding-left:calc(var(--spacing,.25rem) * 3);border-left-width:1px}.ledger-head.svelte-7vrdzs{--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em);text-transform:uppercase}.included.svelte-7vrdzs .ledger-head:where(.svelte-7vrdzs){color:var(--color-accent-green)}.included.svelte-7vrdzs li:where(.svelte-7vrdzs){border-color:#10b9814d}.excluded.svelte-7vrdzs .ledger-head:where(.svelte-7vrdzs){color:#f87171}.excluded.svelte-7vrdzs li:where(.svelte-7vrdzs){border-color:#f871714d}.ledger-col.svelte-7vrdzs strong{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.field-caption.svelte-7vrdzs{--tw-font-weight:var(--font-weight-medium,500);font-size:13px;font-weight:var(--font-weight-medium,500);color:var(--text)}.two-up.svelte-7vrdzs{gap:calc(var(--spacing,.25rem) * 4);grid-template-columns:repeat(auto-fit,minmax(200px,1fr));display:grid}.text-input.svelte-7vrdzs{box-sizing:border-box;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}.text-input.svelte-7vrdzs:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#4fc3f733);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.description.svelte-7vrdzs{resize:vertical;--tw-leading:var(--leading-relaxed,1.625);min-height:150px;line-height:var(--leading-relaxed,1.625)}.counter.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--text-muted);font-size:11px}.counter.short.svelte-7vrdzs{color:#f59e0b}.preview.svelte-7vrdzs{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);width:100%;max-height:340px;padding:calc(var(--spacing,.25rem) * 3);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word;white-space:pre-wrap;color:var(--text-muted);overflow:auto}.actions.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}.btn-primary.svelte-7vrdzs{border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 10px var(--tw-shadow-color,#38bdf840);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-primary.svelte-7vrdzs:hover:not(:disabled){--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 14px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-primary.svelte-7vrdzs:disabled{cursor:not-allowed;opacity:.4;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.btn-secondary.svelte-7vrdzs{border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;flex-shrink:0}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-7vrdzs{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.btn-secondary.svelte-7vrdzs{padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-secondary.svelte-7vrdzs:hover{border-color:#38bdf866}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-7vrdzs:hover{border-color:color-mix(in oklab,var(--color-accent-blue) 40%,transparent)}}.btn-secondary.svelte-7vrdzs:hover{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-7vrdzs:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 8%,transparent)}}.link-button.svelte-7vrdzs{margin-left:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);text-decoration-line:underline}.alert-body.svelte-7vrdzs{gap:calc(var(--spacing,.25rem) * 1.5);flex-direction:column;width:100%;display:flex}.alert-msg.svelte-7vrdzs{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625)}.alert-actions.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-wrap:wrap;display:flex}.ok-alert.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:#10b981;border-radius:var(--radius);background-color:#10b9811a;border:1px solid #10b98140;padding:10px 14px;display:flex}code.svelte-7vrdzs{background-color:var(--color-obsidian-950);color:var(--color-accent-blue);border:1px solid var(--border);border-radius:4px;padding:2px 6px;font-family:monospace;font-size:10px}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-font-weight:initial;--tw-leading:initial;--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial}}}.about-card.svelte-4mufsx{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 5);flex-direction:row!important}.logo.svelte-4mufsx{height:calc(var(--spacing,.25rem) * 16);width:calc(var(--spacing,.25rem) * 16);border-radius:var(--radius-xl,.75rem);object-fit:contain;--tw-drop-shadow-size:drop-shadow(0 4px 24px var(--tw-drop-shadow-color,#38bdf859));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.app-name.svelte-4mufsx{margin-bottom:calc(var(--spacing,.25rem) * 1);font-size:var(--text-2xl,1.5rem);line-height:var(--tw-leading,var(--text-2xl--line-height,calc(2 / 1.5)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700)}.app-version.svelte-4mufsx{margin-bottom:calc(var(--spacing,.25rem) * 2.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}p.svelte-4mufsx{--tw-leading:var(--leading-relaxed,1.625);max-width:400px;font-size:13px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}a.svelte-4mufsx{color:var(--accent2);font-size:13px;text-decoration-line:none}a.svelte-4mufsx:hover{text-decoration-line:underline}.kv.svelte-4mufsx{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding-block:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));justify-content:space-between;display:flex}.kv.svelte-4mufsx span:where(.svelte-4mufsx):first-child{color:var(--text-muted)}.credits-hint.svelte-4mufsx{margin-bottom:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.credits-list.svelte-4mufsx{margin-top:calc(var(--spacing,.25rem) * 1);gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.credit-item.svelte-4mufsx{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding-block:calc(var(--spacing,.25rem) * 1.5);justify-content:space-between;align-items:center;display:flex}.credit-item.svelte-4mufsx:last-child{--tw-border-style:none;border-style:none}.credit-name-link.svelte-4mufsx{--tw-font-weight:var(--font-weight-normal,400);font-size:13px;font-weight:var(--font-weight-normal,400);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));text-decoration-line:none}.credit-name-link.svelte-4mufsx:hover{color:var(--color-accent-blue);text-decoration-line:underline}.credit-license.svelte-4mufsx{border-style:var(--tw-border-style);border-width:1px;border-color:#38bdf826;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.credit-license.svelte-4mufsx{border-color:color-mix(in oklab,var(--color-accent-blue) 15%,transparent)}}.credit-license.svelte-4mufsx{background-color:#38bdf814}@supports (color:color-mix(in lab,red,red)){.credit-license.svelte-4mufsx{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.credit-license.svelte-4mufsx{padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-normal,400);font-size:10px;font-weight:var(--font-weight-normal,400);color:var(--color-accent-blue)}.credit-license.non-commercial.svelte-4mufsx{border-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.credit-license.non-commercial.svelte-4mufsx{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 30%,transparent)}}.credit-license.non-commercial.svelte-4mufsx{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.credit-license.non-commercial.svelte-4mufsx{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.credit-license.non-commercial.svelte-4mufsx{color:var(--color-amber-400,oklch(82.8% .189 84.429))}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}.settings-root.svelte-myrvk6{background-color:var(--bg);width:100vw;height:100vh;color:var(--text);display:flex;overflow:hidden}.sidebar.svelte-myrvk6{z-index:10;border-right-style:var(--tw-border-style);border-right-width:1px;border-color:var(--border);background-color:var(--color-obsidian-900);width:fit-content;min-width:135px;padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * 5);--tw-shadow:4px 0 24px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);flex-direction:column;flex-shrink:0;display:flex}.brand.svelte-myrvk6{margin-bottom:calc(var(--spacing,.25rem) * 4);align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-bottom-style:var(--tw-border-style);border-color:#ffffff08;border-bottom-width:1px;display:flex}@supports (color:color-mix(in lab,red,red)){.brand.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.brand.svelte-myrvk6{padding-inline:calc(var(--spacing,.25rem) * 1);padding-block:calc(var(--spacing,.25rem) * 1.5);padding-bottom:calc(var(--spacing,.25rem) * 4);white-space:nowrap}.brand-logo.svelte-myrvk6{height:calc(var(--spacing,.25rem) * 5);width:calc(var(--spacing,.25rem) * 5);object-fit:contain;--tw-drop-shadow-size:drop-shadow(0 2px 8px var(--tw-drop-shadow-color,#38bdf84d));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);flex-shrink:0;animation:4s ease-in-out infinite floating}@keyframes svelte-myrvk6-floating{0%,to{transform:translateY(0)rotate(0)}50%{transform:translateY(-3px)rotate(3deg)}}.brand-text.svelte-myrvk6{white-space:nowrap;flex-direction:column;display:flex;overflow:hidden}.brand-name.svelte-myrvk6{--tw-leading:1.1;--tw-font-weight:850;--tw-tracking:-.5px;letter-spacing:-.5px;white-space:nowrap;color:var(--color-white,#fff);font-size:15px;font-weight:850;line-height:1.1}.brand-tag.svelte-myrvk6{margin-top:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-bold,700);font-size:7px;font-weight:var(--font-weight-bold,700);--tw-tracking:.12em;letter-spacing:.12em;white-space:nowrap;color:var(--color-accent-blue)}.sidebar-nav.svelte-myrvk6{gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex;overflow-y:auto}.nav-btn.svelte-myrvk6{align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 2);text-align:left;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);white-space:nowrap;color:var(--color-obsidian-300);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));display:flex;position:relative}.nav-btn.svelte-myrvk6:hover{--tw-translate-x:2px;translate:var(--tw-translate-x) var(--tw-translate-y);background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.nav-btn.svelte-myrvk6:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.nav-btn.svelte-myrvk6:hover{color:var(--color-white,#fff)}.nav-btn.active.svelte-myrvk6{--tw-translate-x:2px;translate:var(--tw-translate-x) var(--tw-translate-y);background-color:#38bdf814;scale:1.01}@supports (color:color-mix(in lab,red,red)){.nav-btn.active.svelte-myrvk6{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.nav-btn.active.svelte-myrvk6{color:var(--color-accent-blue)}.nav-btn.svelte-myrvk6:active{--tw-translate-x:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y);scale:.97}.nav-icon.svelte-myrvk6{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.nav-btn.svelte-myrvk6:hover .nav-icon:where(.svelte-myrvk6){rotate:5deg;scale:1.18}.nav-active-pill.svelte-myrvk6{top:15%;right:calc(var(--spacing,.25rem) * 0);background-color:var(--color-accent-blue);--tw-shadow:-2px 0 8px var(--tw-shadow-color,var(--color-accent-blue));width:3px;height:70%;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:99px 0 0 99px;position:absolute}.sidebar-footer.svelte-myrvk6{border-top-style:var(--tw-border-style);border-color:#ffffff08;border-top-width:1px}@supports (color:color-mix(in lab,red,red)){.sidebar-footer.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.sidebar-footer.svelte-myrvk6{padding-top:calc(var(--spacing,.25rem) * 4)}.status-panel.svelte-myrvk6{gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-shadow:inset 0 2px 6px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.25s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.25s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));flex-direction:column;display:flex}.status-panel.recording.svelte-myrvk6{border-color:#38bdf840}@supports (color:color-mix(in lab,red,red)){.status-panel.recording.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-accent-blue) 25%,transparent)}}.status-panel.recording.svelte-myrvk6{--tw-shadow:0 4px 20px var(--tw-shadow-color,#38bdf81a), inset 0 2px 6px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.status-header.svelte-myrvk6{align-items:flex-start;gap:calc(var(--spacing,.25rem) * .5);white-space:nowrap;flex-direction:column;display:flex}.status-indicator.svelte-myrvk6{align-items:center;gap:calc(var(--spacing,.25rem) * 1);white-space:nowrap;display:flex}.status-dot.svelte-myrvk6{background-color:var(--color-obsidian-300);width:5px;height:5px;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-radius:3.40282e38px}.status-panel.recording.svelte-myrvk6 .status-dot:where(.svelte-myrvk6){background-color:var(--color-accent-blue);--tw-shadow:0 0 8px var(--tw-shadow-color,var(--color-accent-blue));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);animation:1.2s infinite heartBeat}.status-panel.speaking.svelte-myrvk6 .status-dot:where(.svelte-myrvk6){background-color:var(--color-accent-green);--tw-shadow:0 0 8px var(--tw-shadow-color,var(--color-accent-green));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@keyframes svelte-myrvk6-heartBeat{0%,to{transform:scale(1)}50%{transform:scale(1.4)}}.status-label.svelte-myrvk6{--tw-font-weight:var(--font-weight-bold,700);font-size:10px;font-weight:var(--font-weight-bold,700);white-space:nowrap;color:var(--color-obsidian-300)}.status-panel.recording.svelte-myrvk6 .status-label:where(.svelte-myrvk6){color:var(--color-accent-blue)}.word-count.svelte-myrvk6{--tw-font-weight:var(--font-weight-semibold,600);font-size:9px;font-weight:var(--font-weight-semibold,600);white-space:nowrap;color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.word-count.svelte-myrvk6{color:color-mix(in oklab,var(--color-white,#fff) 30%,transparent)}}.btn-record.svelte-myrvk6{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#38bdf833;width:100%;position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.btn-record.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-accent-blue) 20%,transparent)}}.btn-record.svelte-myrvk6{background-color:#38bdf814}@supports (color:color-mix(in lab,red,red)){.btn-record.svelte-myrvk6{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.btn-record.svelte-myrvk6{padding-inline:calc(var(--spacing,.25rem) * 1);padding-block:calc(var(--spacing,.25rem) * 1.5);text-align:center;--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);white-space:nowrap;color:var(--color-accent-blue);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf80d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-record.svelte-myrvk6:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);border-color:var(--color-accent-blue);background-color:var(--color-accent-blue);color:var(--color-white,#fff);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf840);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.btn-record.svelte-myrvk6:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y);scale:.97}.btn-record.active.svelte-myrvk6{border-color:var(--color-accent-blue);background-color:var(--color-accent-blue);color:var(--color-white,#fff);--tw-shadow:0 4px 16px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pulse-ring.svelte-myrvk6{pointer-events:none;top:calc(var(--spacing,.25rem) * 0);left:calc(var(--spacing,.25rem) * 0);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-accent-blue);opacity:0;width:100%;height:100%;animation:1.6s ease-out infinite ripple;position:absolute}@keyframes svelte-myrvk6-ripple{0%{opacity:.5;transform:scale(1)}to{opacity:0;transform:scale(1.15,1.3)}}.btn-text.svelte-myrvk6{z-index:2;position:relative}.content-container.svelte-myrvk6{z-index:1;background-color:var(--bg);flex-direction:column;flex:1;display:flex;position:relative;overflow:hidden}.content-container.svelte-myrvk6:has(.modal-backdrop){z-index:100}.tab-content.svelte-myrvk6{z-index:1;flex:1;padding:30px;overflow-y:auto}.floating-save-container.svelte-myrvk6{right:calc(var(--spacing,.25rem) * 6);bottom:calc(var(--spacing,.25rem) * 6);z-index:100;align-items:center;gap:calc(var(--spacing,.25rem) * 3.5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-accent-blue);background-color:var(--color-obsidian-900);padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 4);--tw-shadow:0 10px 30px var(--tw-shadow-color,#0006), 0 0 12px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);animation:.3s cubic-bezier(.175,.885,.32,1.275) forwards popUp;display:flex;position:absolute}@keyframes svelte-myrvk6-popUp{0%{opacity:0;transform:translateY(20px)scale(.9)}to{opacity:1;transform:translateY(0)scale(1)}}.save-hint.svelte-myrvk6{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-300)}.btn-save.svelte-myrvk6{border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 10px var(--tw-shadow-color,#38bdf840);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-save.svelte-myrvk6:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 14px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);scale:1.02}.btn-save.svelte-myrvk6:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y);scale:.97}.card-scene.svelte-1pt4ba2{perspective:900px;pointer-events:none;-webkit-user-select:none;user-select:none}.card.svelte-1pt4ba2{position:relative;width:340px;height:152px;border-radius:16px;overflow:hidden;background:linear-gradient(135deg,#181b24,#0b0d12 55%,#141925);border:1px solid rgba(255,255,255,.12);box-shadow:0 18px 44px #0009;font-family:Outfit,Inter,sans-serif;transform:rotateY(88deg);opacity:0;transition:transform .38s cubic-bezier(.175,.885,.32,1.2),opacity .3s ease,border-color .3s ease}.on.svelte-1pt4ba2 .card:where(.svelte-1pt4ba2){transform:rotateY(0);opacity:1}.card.processing.svelte-1pt4ba2{border-color:#38bdf866}.sheen.svelte-1pt4ba2{position:absolute;top:-20px;bottom:-20px;width:64px;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.06) 50%,transparent 100%);animation:svelte-1pt4ba2-sheen-drift 6.5s linear infinite}@keyframes svelte-1pt4ba2-sheen-drift{0%{left:-70px}to{left:410px}}.chip.svelte-1pt4ba2{position:absolute;left:20px;top:18px;width:38px;height:28px;border-radius:6px;background:linear-gradient(160deg,#f6d27a,#d9a946 55%,#b9842b)}.chip-line.svelte-1pt4ba2{position:absolute;background:#462d0073}.chip-line.h1.svelte-1pt4ba2{left:0;right:0;top:9px;height:1.5px}.chip-line.h2.svelte-1pt4ba2{left:0;right:0;top:18px;height:1.5px}.chip-line.v.svelte-1pt4ba2{top:0;bottom:0;left:18px;width:1.5px}.brand.svelte-1pt4ba2{position:absolute;left:68px;top:16px;color:#f3f4f6;font-size:14px;font-weight:850;letter-spacing:.08em}.brand-sub.svelte-1pt4ba2{position:absolute;left:68px;top:34px;color:#ffffff61;font-size:7.5px;font-weight:800;letter-spacing:.4em}.stamp.svelte-1pt4ba2{position:absolute;right:20px;top:18px;display:inline-flex;align-items:center;gap:5px;height:20px;padding:0 9px;border-radius:5px;border:1px solid rgba(244,63,94,.5);background:#f43f5e14;color:#f43f5e;font-size:8.5px;font-weight:850;letter-spacing:.18em}.initializing.svelte-1pt4ba2 .stamp:where(.svelte-1pt4ba2){border-color:#f59e0b80;background:#f59e0b14;color:#f59e0b}.processing.svelte-1pt4ba2 .stamp:where(.svelte-1pt4ba2){border-color:#38bdf880;background:#38bdf814;color:#38bdf8}.stamp-dot.svelte-1pt4ba2{width:6px;height:6px;border-radius:50%;background:currentColor;animation:svelte-1pt4ba2-stamp-blink 1.15s ease-in-out infinite}@keyframes svelte-1pt4ba2-stamp-blink{0%,to{opacity:.35}50%{opacity:1}}.matrix.svelte-1pt4ba2{position:absolute;left:22px;top:56px;width:296px;height:51px;display:flex;gap:4px}.col.svelte-1pt4ba2{display:flex;flex-direction:column;gap:3px}.dot.svelte-1pt4ba2{width:11px;height:6px;border-radius:2px;opacity:.1;transition:opacity .05s linear}.dot.lit.svelte-1pt4ba2{opacity:.95}.dot.red.svelte-1pt4ba2{background:#f43f5e}.dot.amber.svelte-1pt4ba2{background:#fbbf24}.dot.green.svelte-1pt4ba2{background:#34d399}.processing.svelte-1pt4ba2 .dot:where(.svelte-1pt4ba2){background:#22d3ee}.field-label.svelte-1pt4ba2{position:absolute;left:22px;top:118px;color:#ffffff4d;font-size:7px;font-weight:800;letter-spacing:.36em}.field-value.svelte-1pt4ba2{position:absolute;left:22px;top:128px;max-width:200px;color:#e5e7eb;font-size:11.5px;font-weight:750;letter-spacing:.04em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.card-number.svelte-1pt4ba2{position:absolute;right:22px;top:128px;color:#ffffff38;font-size:11px;font-weight:700;letter-spacing:.18em}.scope.svelte-xjziu1{width:540px;height:124px;background:linear-gradient(180deg,#07140c,#030a07);border:1px solid rgba(74,222,128,.25);border-radius:10px;box-shadow:0 10px 36px #0009,0 0 18px #22c55e24;overflow:hidden;pointer-events:none;-webkit-user-select:none;user-select:none;transform:scaleY(.04);opacity:0;transition:transform .32s cubic-bezier(.175,.885,.32,1.2),opacity .28s ease}.scope.on.svelte-xjziu1{transform:scaleY(1);opacity:1}.scope-inner.svelte-xjziu1{width:100%;height:100%;padding:10px 20px 12px;display:flex;flex-direction:column;gap:8px}.header.svelte-xjziu1{display:flex;align-items:center;gap:8px;height:18px;font-family:Outfit,Inter,sans-serif}.led.svelte-xjziu1{width:7px;height:7px;border-radius:50%;background:#4ade80;box-shadow:0 0 7px #4ade80;animation:svelte-xjziu1-led-blink 1.1s ease-in-out infinite;flex-shrink:0}.initializing.svelte-xjziu1 .led:where(.svelte-xjziu1){background:#f59e0b;box-shadow:0 0 7px #f59e0b}.processing.svelte-xjziu1 .led:where(.svelte-xjziu1){background:#38bdf8;box-shadow:0 0 7px #38bdf8}@keyframes svelte-xjziu1-led-blink{0%,to{opacity:.4}50%{opacity:1}}.title.svelte-xjziu1{color:#bbf7d0;font-size:10px;font-weight:800;letter-spacing:.12em}.subtitle.svelte-xjziu1{color:#bbf7d059;font-size:9px;font-weight:500;letter-spacing:.1em}.spacer.svelte-xjziu1{flex:1}.target-chip.svelte-xjziu1{display:inline-flex;align-items:center;gap:5px;background:#4ade800f;border:1px solid rgba(74,222,128,.3);border-radius:4px;padding:2px 8px}.tgt.svelte-xjziu1{color:#4ade80;font-size:8.5px;font-weight:800;letter-spacing:.1em}.tgt-label.svelte-xjziu1{color:#d1fae5;font-size:8.5px;font-weight:700;letter-spacing:.06em;max-width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stage.svelte-xjziu1{position:relative;flex:1}.grid-h.svelte-xjziu1{position:absolute;left:0;right:0;height:1px;background:#4ade8012}.g1.svelte-xjziu1{top:25%}.g2.svelte-xjziu1{top:50%;background:#4ade8024}.g3.svelte-xjziu1{top:75%}.grid-v.svelte-xjziu1{position:absolute;top:0;bottom:0;width:1px;background:#4ade800d}svg.svelte-xjziu1{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.trace.svelte-xjziu1{fill:none;stroke:#a7f3d0;stroke-width:1.8;vector-effect:non-scaling-stroke}.glow.svelte-xjziu1{fill:none;stroke:#4ade80;stroke-width:6;opacity:.16;vector-effect:non-scaling-stroke}.initializing.svelte-xjziu1 .trace:where(.svelte-xjziu1){stroke:#fcd34d}.initializing.svelte-xjziu1 .glow:where(.svelte-xjziu1){stroke:#f59e0b}.processing.svelte-xjziu1 .trace:where(.svelte-xjziu1){stroke:#7dd3fc}.processing.svelte-xjziu1 .glow:where(.svelte-xjziu1){stroke:#38bdf8}.radar.svelte-13tl5wx{--tone: #ff6b35;--tone-soft: rgba(255, 107, 53, .4);display:flex;align-items:center;gap:24px;pointer-events:none;-webkit-user-select:none;user-select:none}.radar.initializing.svelte-13tl5wx{--tone: #f59e0b;--tone-soft: rgba(245, 158, 11, .4)}.radar.processing.svelte-13tl5wx{--tone: #38bdf8;--tone-soft: rgba(56, 189, 248, .4)}.dial.svelte-13tl5wx{position:relative;width:124px;height:124px;border-radius:50%;background:radial-gradient(circle,#10181c,#06090b 85%,#04070a);border:1.2px solid var(--tone-soft);box-shadow:0 12px 34px #0000008c,0 0 22px color-mix(in srgb,var(--tone) 20%,transparent);overflow:hidden;transform:translateY(30px) scale(.85);opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.25),opacity .28s ease}.on.svelte-13tl5wx .dial:where(.svelte-13tl5wx){transform:translateY(0) scale(1);opacity:1}.range-ring.svelte-13tl5wx{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);border-radius:50%;border:1px solid rgba(255,255,255,.1)}.r1.svelte-13tl5wx{width:92px;height:92px}.r2.svelte-13tl5wx{width:56px;height:56px;border-color:#ffffff24}.axis.svelte-13tl5wx{position:absolute;background:#ffffff12}.axis.h.svelte-13tl5wx{left:0;right:0;top:50%;height:1px}.axis.v.svelte-13tl5wx{top:0;bottom:0;left:50%;width:1px}.sweep.svelte-13tl5wx{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;background:conic-gradient(from 0deg,transparent 0deg,transparent 300deg,color-mix(in srgb,var(--tone) 35%,transparent) 350deg,var(--tone) 360deg);animation:svelte-13tl5wx-sweep-rotate 1.5s linear infinite;opacity:.7}@keyframes svelte-13tl5wx-sweep-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.pulse-ring.svelte-13tl5wx{position:absolute;top:50%;left:50%;width:118px;height:118px;margin:-59px 0 0 -59px;border-radius:50%;border:1.5px solid var(--tone);opacity:0;animation:svelte-13tl5wx-ring-expand 1.4s cubic-bezier(.1,.7,.3,1) infinite}.p2.svelte-13tl5wx{animation-delay:.7s}@keyframes svelte-13tl5wx-ring-expand{0%{transform:scale(.18);opacity:calc(.25 + var(--lvl) * .65)}to{transform:scale(1);opacity:0}}.blip.svelte-13tl5wx{position:absolute;border-radius:50%;background:color-mix(in srgb,var(--tone) 60%,#ffffff);animation:svelte-13tl5wx-blip-flash 1.5s linear infinite}.b1.svelte-13tl5wx{left:88px;top:42px;width:5px;height:5px}.b2.svelte-13tl5wx{left:36px;top:86px;width:4px;height:4px;animation-delay:.55s}@keyframes svelte-13tl5wx-blip-flash{0%{opacity:1}55%{opacity:.05}to{opacity:.05}}.core.svelte-13tl5wx{position:absolute;top:50%;left:50%;width:12px;height:12px;margin:-6px 0 0 -6px;border-radius:50%;background:var(--tone);box-shadow:0 0 14px var(--tone);transform:scale(calc(1 + var(--lvl) * 1.6));transition:transform .05s linear}.plate.svelte-13tl5wx{display:flex;align-items:center;gap:10px;width:200px;height:52px;padding:0 12px;background:#0a0c10f0;border:1px solid rgba(255,255,255,.08);border-radius:10px;position:relative;transform:translate(-22px);opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.25) .06s,opacity .28s ease .06s}.on.svelte-13tl5wx .plate:where(.svelte-13tl5wx){transform:translate(0);opacity:1}.plate.svelte-13tl5wx:after{content:"";position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;border-radius:10px;border:1px solid var(--tone);animation:svelte-13tl5wx-lock-pulse 1.15s ease-in-out infinite;pointer-events:none}@keyframes svelte-13tl5wx-lock-pulse{0%,to{opacity:.25}50%{opacity:.85}}.reticle.svelte-13tl5wx{color:var(--tone);font-size:22px;line-height:1;animation:svelte-13tl5wx-lock-pulse 1.15s ease-in-out infinite}.plate-text.svelte-13tl5wx{display:flex;flex-direction:column;gap:2px;min-width:0;font-family:Outfit,Inter,sans-serif}.caption.svelte-13tl5wx{color:#ffffff59;font-size:7.5px;font-weight:800;letter-spacing:.18em}.label.svelte-13tl5wx{color:#e5e7eb;font-size:12px;font-weight:750;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ocean.svelte-1orgnnz{position:relative;width:380px;height:128px;border-radius:24px;overflow:hidden;background:linear-gradient(180deg,#081220f5,#030912f7);border:1.2px solid rgba(34,211,238,.25);box-shadow:0 14px 40px #0009,0 0 24px #0891b238;pointer-events:none;-webkit-user-select:none;user-select:none;font-family:Outfit,Inter,sans-serif;opacity:0;transform:translateY(16px);transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .3s ease}.ocean.on.svelte-1orgnnz{opacity:1;transform:translateY(0)}.ocean.processing.svelte-1orgnnz{border-color:#38bdf859}.moon.svelte-1orgnnz{position:absolute;top:10px;right:62px;width:22px;height:22px;border-radius:50%;background:#e0f2fed9;box-shadow:0 0 16px #bae6fd99;animation:svelte-1orgnnz-moon-glow 2.4s ease-in-out infinite}@keyframes svelte-1orgnnz-moon-glow{0%,to{opacity:.55}50%{opacity:.8}}.title.svelte-1orgnnz{position:absolute;left:18px;top:12px;color:#bae6fd8c;font-size:9.5px;font-weight:800;letter-spacing:.22em}.subtitle.svelte-1orgnnz{position:absolute;left:18px;top:25px;color:#7dd3fc59;font-size:8px;font-weight:500;letter-spacing:.08em}.water.svelte-1orgnnz{position:absolute;left:0;right:0;top:38px;height:90px;transform:translateY(92px);transition:transform .45s cubic-bezier(.22,1,.36,1)}.on.svelte-1orgnnz .water:where(.svelte-1orgnnz){transform:translateY(0)}svg.svelte-1orgnnz{display:block;width:100%;height:100%}.w1.svelte-1orgnnz{fill:#0284c759;stroke:#0284c733;stroke-width:1}.w2.svelte-1orgnnz{fill:#06b6d473;stroke:#06b6d440;stroke-width:1}.w3.svelte-1orgnnz{fill:#22d3ee99;stroke:#a5f3fc8c;stroke-width:1.5}.processing.svelte-1orgnnz .w1:where(.svelte-1orgnnz){fill:#1e40af66}.processing.svelte-1orgnnz .w2:where(.svelte-1orgnnz){fill:#3b82f673}.processing.svelte-1orgnnz .w3:where(.svelte-1orgnnz){fill:#60a5fa8c;stroke:#93c5fd99}.bubble.svelte-1orgnnz{position:absolute;bottom:-8px;width:5px;height:5px;border-radius:50%;border:1px solid rgba(165,243,252,.7);background:#a5f3fc1f;animation:svelte-1orgnnz-bubble-rise 4.2s linear infinite;opacity:0}@keyframes svelte-1orgnnz-bubble-rise{0%{transform:translateY(0);opacity:0}12%{opacity:.55}85%{opacity:.25}to{transform:translateY(-78px);opacity:0}}.buoy.svelte-1orgnnz{position:absolute;left:50%;transform:translate(-50%);display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 12px 0 10px;border-radius:12px;background:#082f49eb;border:1px solid rgba(125,211,252,.5);opacity:0;transition:opacity .3s ease .2s}.on.svelte-1orgnnz .buoy:where(.svelte-1orgnnz){opacity:1}.buoy-dot.svelte-1orgnnz{width:7px;height:7px;border-radius:50%;background:#22d3ee;animation:svelte-1orgnnz-moon-glow 1.15s ease-in-out infinite;flex-shrink:0}.processing.svelte-1orgnnz .buoy-dot:where(.svelte-1orgnnz){background:#60a5fa}.buoy-label.svelte-1orgnnz{color:#e0f2fe;font-size:10px;font-weight:700;max-width:130px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mono.svelte-12wa5lj{width:190px;height:112px;background:#000;border:1px solid rgba(255,255,255,.16);border-radius:6px;position:relative;font-family:Outfit,Inter,sans-serif;pointer-events:none;-webkit-user-select:none;user-select:none;opacity:0;transition:opacity .28s ease}.mono.on.svelte-12wa5lj{opacity:1}.status.svelte-12wa5lj{position:absolute;left:18px;top:14px;display:flex;align-items:center;gap:6px}.dot.svelte-12wa5lj{width:6px;height:6px;border-radius:3px;border:1px solid rgba(245,245,245,.7);background:transparent}.dot.lit.svelte-12wa5lj{background:#f5f5f5;animation:svelte-12wa5lj-mono-blink 1.2s ease-in-out infinite}.dot.processing.svelte-12wa5lj{animation:svelte-12wa5lj-mono-blink-dim 1.2s ease-in-out infinite}.dot.standby.svelte-12wa5lj{opacity:.35}@keyframes svelte-12wa5lj-mono-blink{0%,to{opacity:.5}50%{opacity:1}}@keyframes svelte-12wa5lj-mono-blink-dim{0%,to{opacity:.3}50%{opacity:1}}.status-text.svelte-12wa5lj{color:#ffffff8c;font-size:8px;font-weight:700;letter-spacing:.25em}.bars.svelte-12wa5lj{position:absolute;left:18px;bottom:28px;width:154px;height:52px;display:flex;align-items:flex-end;justify-content:center;gap:14px}.bar.svelte-12wa5lj{width:12px;background:#f5f5f5;border-radius:6px;opacity:1;transition:height .05s linear,opacity .2s ease}.bar.dim.svelte-12wa5lj{opacity:.3}.bar.processing.svelte-12wa5lj{opacity:.55}.baseline.svelte-12wa5lj{position:absolute;left:18px;bottom:28px;width:154px;height:1px;background:#ffffff1f}.target.svelte-12wa5lj{position:absolute;left:18px;bottom:6px;width:154px;text-align:center;color:#fff6;font-size:8.5px;font-weight:600;letter-spacing:.03em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.spectrum.svelte-194vixl{width:440px;height:132px;background:linear-gradient(160deg,#1b0c2e,#0a0614);border:1px solid rgba(232,121,249,.25);border-radius:16px;box-shadow:0 0 26px #c084fc38;position:relative;overflow:hidden;pointer-events:none;-webkit-user-select:none;user-select:none;transform:scaleY(.04);transform-origin:bottom center;opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .16s ease}.spectrum.on.svelte-194vixl{transform:scaleY(1);opacity:1}.header.svelte-194vixl{position:absolute;left:20px;top:12px;right:20px;height:16px;display:flex;align-items:center;gap:8px;font-family:Outfit,Inter,sans-serif}.led.svelte-194vixl{width:7px;height:7px;border-radius:50%;background:#e879f9;box-shadow:0 0 6px #e879f9;animation:svelte-194vixl-spectrum-blink 1.2s ease-in-out infinite;flex-shrink:0}.led.standby.svelte-194vixl{background:#f59e0b;box-shadow:0 0 6px #f59e0b}.led.processing.svelte-194vixl{background:#38bdf8;box-shadow:0 0 6px #38bdf8}@keyframes svelte-194vixl-spectrum-blink{0%,to{opacity:.4}50%{opacity:1}}.title.svelte-194vixl{color:#f5d0fe;font-size:10px;font-weight:800;letter-spacing:.15em}.subtitle.svelte-194vixl{color:#f5d0fe59;font-size:9px;font-weight:500;letter-spacing:.1em}.spacer.svelte-194vixl{flex:1}.chip.svelte-194vixl{display:inline-flex;align-items:center;gap:5px;background:#e879f914;border:1px solid rgba(232,121,249,.3);border-radius:4px;padding:2px 8px}.tgt.svelte-194vixl{color:#e879f9;font-size:8.5px;font-weight:800;letter-spacing:.1em}.tgt-label.svelte-194vixl{color:#fae8ff;font-size:8.5px;font-weight:700;letter-spacing:.06em;max-width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bars.svelte-194vixl{position:absolute;left:20px;right:20px;bottom:16px;display:flex;gap:6.5px;align-items:flex-end;height:96px}.bar.svelte-194vixl{width:19px;border-radius:3px;background:linear-gradient(180deg,#f0abfc,#c084fc 45%,#38bdf8);transition:height .05s linear}.floor.svelte-194vixl{position:absolute;left:20px;right:20px;bottom:16px;height:1px;background:#e879f926}.terminal.svelte-pvtvge{width:380px;height:130px;background:#0d1b4c;border:1.5px solid rgba(125,211,252,.35);border-radius:8px;box-shadow:0 0 20px #080f3099;overflow:hidden;pointer-events:none;-webkit-user-select:none;user-select:none;transform:scaleY(.04);transform-origin:top center;opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .16s ease}.terminal.on.svelte-pvtvge{transform:scaleY(1);opacity:1}.titlebar.svelte-pvtvge{height:24px;background:#ffffff0f;display:flex;align-items:center;gap:6px;padding:0 12px;font-family:Outfit,Inter,sans-serif}.dot.svelte-pvtvge{width:8px;height:8px;border-radius:50%;background:#ffffff38}.titletext.svelte-pvtvge{color:#e0f2fe8c;font-size:9px;font-weight:700;letter-spacing:.1em}.body.svelte-pvtvge{padding:12px 16px;display:flex;flex-direction:column;gap:8px}.line1.svelte-pvtvge{color:#bae6fdb3;font-size:10px;font-weight:600;font-family:SF Mono,Menlo,Consolas,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.line2.svelte-pvtvge{color:#fff;font-size:11px;font-weight:700;letter-spacing:.05em;font-family:SF Mono,Menlo,Consolas,monospace}.line2.standby.svelte-pvtvge{color:#fcd34d}.line2.processing.svelte-pvtvge{color:#7dd3fc}.line3.svelte-pvtvge{color:#bae6fd73;font-size:9.5px;font-weight:500;font-family:SF Mono,Menlo,Consolas,monospace}.vinyl.svelte-kq5b5i{width:320px;height:132px;background:linear-gradient(180deg,#f7ecd9,#e7d6b8);border:1.5px solid rgba(120,89,53,.35);border-radius:14px;box-shadow:0 0 22px #00000059;position:relative;pointer-events:none;-webkit-user-select:none;user-select:none;transform:translateY(16px);opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .28s ease}.vinyl.on.svelte-kq5b5i{transform:translateY(0);opacity:1}.header.svelte-kq5b5i{position:absolute;left:16px;top:12px;right:16px;height:14px;display:flex;align-items:center;gap:8px;font-family:Outfit,Inter,sans-serif}.vu-label.svelte-kq5b5i{color:#5b4530;font-size:12px;font-weight:900;letter-spacing:.17em}.subtitle.svelte-kq5b5i{color:#5b45308c;font-size:8px;font-weight:700;letter-spacing:.19em}.spacer.svelte-kq5b5i{flex:1}.led.svelte-kq5b5i{width:8px;height:8px;border-radius:50%;background:#dc2626;box-shadow:0 0 6px #dc2626;animation:svelte-kq5b5i-vinyl-blink 1.2s ease-in-out infinite;flex-shrink:0}.led.standby.svelte-kq5b5i{background:#f59e0b;box-shadow:0 0 6px #f59e0b}.led.processing.svelte-kq5b5i{background:#38bdf8;box-shadow:0 0 6px #38bdf8}@keyframes svelte-kq5b5i-vinyl-blink{0%,to{opacity:.4}50%{opacity:1}}.face.svelte-kq5b5i{position:absolute;left:16px;top:30px;width:288px;height:72px;background:#fffcf48c;border:1px solid rgba(120,89,53,.25);border-radius:8px}.tick.svelte-kq5b5i{position:absolute;top:14px;width:1.5px;height:22px;background:#5b453066}.tick.red.svelte-kq5b5i{background:#dc2626;height:30px}.scale-label.svelte-kq5b5i{position:absolute;color:#5b453080;font-size:7px;font-family:Outfit,Inter,sans-serif}.scale-label.red.svelte-kq5b5i{color:#dc2626;font-weight:800}.needle-svg.svelte-kq5b5i{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.needle.svelte-kq5b5i{fill:none;stroke:#292524;stroke-width:2px;vector-effect:non-scaling-stroke}.pivot.svelte-kq5b5i{position:absolute;left:138px;top:64px;width:12px;height:12px;border-radius:50%;background:#292524}.target.svelte-kq5b5i{position:absolute;left:16px;bottom:12px;width:288px;color:#5b4530a6;font-size:9.5px;font-weight:700;font-family:Outfit,Inter,sans-serif;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}html,body,#app{background:transparent!important;background-color:transparent!important;box-shadow:none!important;border:none!important;outline:none!important;overflow:hidden!important;will-change:transform,opacity;backface-visibility:hidden}*:focus{outline:none!important;box-shadow:none!important}.overlay-root.svelte-rmqsd6{width:100%;height:100%;background:transparent!important;display:flex;align-items:center;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;overflow:hidden!important}.overlay-stack.svelte-rmqsd6{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;max-width:100%;max-height:100%;pointer-events:none}.visualizer-container.svelte-rmqsd6{display:flex;align-items:center;justify-content:center;pointer-events:none;min-height:0;flex-shrink:1;overflow:hidden}.system-response-box.svelte-rmqsd6{position:relative;z-index:10;display:flex;align-items:center;gap:10px;height:46px;padding:0 20px;border-radius:23px;font-family:Outfit,Inter,system-ui,sans-serif;opacity:0;transform:translateY(10px);transition:transform .34s cubic-bezier(.175,.885,.32,1.25),opacity .28s ease;pointer-events:none;flex-shrink:0}.system-response-box.on.svelte-rmqsd6{opacity:1;transform:translateY(0)}.system-response-box.speaking.svelte-rmqsd6{background:#042f24f0;border:1.2px solid rgba(16,185,129,.55);box-shadow:0 10px 28px #00000080,0 0 18px #10b98140;color:#a7f3d0}.system-response-box.command.svelte-rmqsd6{background:#1e103cf0;border:1.2px solid rgba(168,85,247,.65);box-shadow:0 10px 28px #00000080,0 0 18px #a855f74d;color:#e9d5ff}.system-response-box.mcp.svelte-rmqsd6{background:#4c0519f0;border:1.2px solid rgba(244,63,94,.55);box-shadow:0 10px 28px #00000080,0 0 18px #f43f5e40;color:#fecdd3}.cmd-icon.svelte-rmqsd6{font-size:16px;line-height:1;color:#c084fc;animation:svelte-rmqsd6-flash 1.5s infinite ease-in-out}.mini-eq.svelte-rmqsd6{display:flex;align-items:center;gap:2.5px;height:22px}.eq-bar.svelte-rmqsd6{width:3px;height:8px;border-radius:1.5px;background:#34d399;animation:svelte-rmqsd6-eq-bounce .8s ease-in-out infinite alternate}@keyframes svelte-rmqsd6-eq-bounce{0%{height:7px}to{height:21px}}.pill-text.svelte-rmqsd6{display:flex;flex-direction:column;gap:1px;min-width:0}.pill-title.svelte-rmqsd6{font-size:10px;font-weight:850;letter-spacing:.15em}.pill-target.svelte-rmqsd6{font-size:8.5px;font-weight:600;opacity:.55;max-width:180px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pulse-dot.svelte-rmqsd6{width:10px;height:10px;background-color:#f43f5e;border-radius:50%;animation:svelte-rmqsd6-flash 1.2s infinite ease-in-out}@keyframes svelte-rmqsd6-flash{0%,to{opacity:.3;transform:scale(.9)}50%{opacity:1;transform:scale(1.15)}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.diagnostic-window.svelte-45v8pc{background-color:var(--color-obsidian-950);width:100vw;height:100vh;padding:calc(var(--spacing,.25rem) * 5);color:var(--text);justify-content:center;align-items:flex-start;display:flex;overflow-y:auto}.modal-card.svelte-45v8pc{width:100%;max-width:520px;animation:.3s cubic-bezier(.175,.885,.32,1.2) forwards scaleUp}.head.svelte-45v8pc{margin-bottom:calc(var(--spacing,.25rem) * 5);align-items:flex-start;gap:calc(var(--spacing,.25rem) * 3);display:flex}.head-icon.svelte-45v8pc{--tw-leading:1;flex-shrink:0;font-size:32px;line-height:1}.title.svelte-45v8pc{font-size:var(--text-xl,1.25rem);line-height:var(--tw-leading,var(--text-xl--line-height,calc(1.75 / 1.25)));--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800);--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em);color:var(--color-white,#fff)}.subtitle.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--color-obsidian-400);font-size:12.5px}.steps.svelte-45v8pc{margin:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 2.5);padding:calc(var(--spacing,.25rem) * 0);flex-direction:column;list-style-type:none;display:flex}.step.svelte-45v8pc{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 3);border-radius:var(--radius-lg,.5rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;display:flex}@supports (color:color-mix(in lab,red,red)){.step.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.step.svelte-45v8pc{padding:calc(var(--spacing,.25rem) * 3)}.step.done.svelte-45v8pc{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.step.done.svelte-45v8pc{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.step.done.svelte-45v8pc{background-color:#0000}.step-icon.svelte-45v8pc{--tw-leading:calc(var(--spacing,.25rem) * 6);font-size:16px;line-height:calc(var(--spacing,.25rem) * 6);flex-shrink:0}.step-body.svelte-45v8pc{min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex}.step-title.svelte-45v8pc{--tw-font-weight:var(--font-weight-bold,700);font-size:13.5px;font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff)}.step-detail.svelte-45v8pc{--tw-leading:var(--leading-relaxed,1.625);font-size:12.5px;line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-300)}.step-detail.svelte-45v8pc code:where(.svelte-45v8pc){background-color:#ffffff0d;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.step-detail.svelte-45v8pc code:where(.svelte-45v8pc){background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.step-detail.svelte-45v8pc code:where(.svelte-45v8pc){padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue)}.warn-note.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.warn-note.svelte-45v8pc{color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.privacy-note.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:#5ee9b5e6}@supports (color:color-mix(in lab,red,red)){.privacy-note.svelte-45v8pc{color:color-mix(in oklab,var(--color-emerald-300,oklch(84.5% .143 164.978)) 90%,transparent)}}.muted.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--color-obsidian-400);font-size:11px}.shortcut-list.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 1.5);padding:calc(var(--spacing,.25rem) * 0);flex-wrap:wrap;list-style-type:none;display:flex}.shortcut-keys.svelte-45v8pc{background-color:#ffffff0d;border-radius:.25rem;display:inline-block}@supports (color:color-mix(in lab,red,red)){.shortcut-keys.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.shortcut-keys.svelte-45v8pc{padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);font-size:11px}.shortcut-list.svelte-45v8pc li.unbound:where(.svelte-45v8pc) .shortcut-keys:where(.svelte-45v8pc){color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.shortcut-list.svelte-45v8pc li.unbound:where(.svelte-45v8pc) .shortcut-keys:where(.svelte-45v8pc){color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.step-actions.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 2);align-items:center;gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}.manual.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#0006}@supports (color:color-mix(in lab,red,red)){.manual.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-black,#000) 40%,transparent)}}.manual.svelte-45v8pc{padding:calc(var(--spacing,.25rem) * 2.5)}.manual.svelte-45v8pc pre:where(.svelte-45v8pc){margin:calc(var(--spacing,.25rem) * 0);max-height:180px;font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);word-break:break-all;white-space:pre-wrap;color:var(--color-obsidian-200);overflow-y:auto}.error-container.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 4);align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3633;border-radius:.25rem;width:100%;display:flex}@supports (color:color-mix(in lab,red,red)){.error-container.svelte-45v8pc{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.error-container.svelte-45v8pc{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.error-container.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.error-container.svelte-45v8pc{padding:calc(var(--spacing,.25rem) * 3);text-align:left;color:var(--color-red-400,oklch(70.4% .191 22.216));font-size:12px}.error-icon.svelte-45v8pc{flex-shrink:0}.error-msg.svelte-45v8pc{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word}.modal-actions.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 5);justify-content:flex-end;display:flex}.btn-primary.svelte-45v8pc{cursor:pointer;border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-bold,700);font-size:12.5px;font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 14px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-primary.svelte-45v8pc:hover:not(:disabled){--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 18px var(--tw-shadow-color,#38bdf873);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-primary.svelte-45v8pc:disabled{cursor:default;opacity:.6;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.btn-secondary.svelte-45v8pc{cursor:pointer;border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-800);padding-inline:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-semibold,600);font-size:12.5px;font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-300);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-secondary.svelte-45v8pc:hover{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-45v8pc:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 10%,transparent)}}.btn-secondary.svelte-45v8pc:hover{background-color:var(--color-obsidian-700);color:var(--color-white,#fff)}.btn-link.svelte-45v8pc{cursor:pointer;border-style:var(--tw-border-style);padding:calc(var(--spacing,.25rem) * 0);--tw-font-weight:var(--font-weight-semibold,600);font-size:12px;font-weight:var(--font-weight-semibold,600);color:var(--color-accent-blue);text-underline-offset:2px;background-color:#0000;border-width:0;text-decoration-line:underline}.loading-container.svelte-45v8pc{justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-direction:column;width:100%;height:100%;display:flex}.loading-label.svelte-45v8pc{text-align:center;--tw-font-weight:var(--font-weight-semibold,600);font-size:13.5px;font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-200)}.hint.svelte-45v8pc{text-align:center;max-width:280px;color:var(--color-obsidian-400);font-size:11.5px}.spinner.svelte-45v8pc{height:calc(var(--spacing,.25rem) * 7);width:calc(var(--spacing,.25rem) * 7);animation:var(--animate-spin,spin 1s linear infinite);border-style:var(--tw-border-style);border-width:2.5px;border-color:#ffffff0d;border-radius:3.40282e38px}@supports (color:color-mix(in lab,red,red)){.spinner.svelte-45v8pc{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.spinner.svelte-45v8pc{border-top-color:var(--color-accent-blue)}@keyframes svelte-45v8pc-scaleUp{0%{opacity:0;transform:scale(.98)}to{opacity:1;transform:none}}.vx-wizard{--vx-bg-0: #0e1116;--vx-bg-1: #14181f;--vx-bg-2: #1a1f28;--vx-bg-3: #232a35;--vx-bg-4: #2d3540;--vx-line: #2a313c;--vx-line-2: #3a4350;--vx-txt-0: #e8edf3;--vx-txt-1: #b6bfcb;--vx-txt-2: #7e8896;--vx-txt-3: #555f6c;--vx-cyan-0: #22d4ef;--vx-cyan-1: #7ae8f8;--vx-cyan-2: #5cc4d8;--vx-cyan-d: #0d8ea3;--vx-cyan-b: rgba(34, 212, 239, .45);--vx-gold-0: #e8a019;--vx-gold-1: #f5c842;--vx-gold-glow: rgba(232, 160, 25, .3);--vx-good: #6ad48a;--vx-warn: #ffb454;--vx-bad: #f4636e;--vx-mono: ui-monospace, "JetBrains Mono", SFMono-Regular, Consolas, monospace;--vx-ease: cubic-bezier(.21, .6, .35, 1);--vx-sel-bg: linear-gradient(180deg, rgba(34, 212, 239, .07), rgba(34, 212, 239, .01)), var(--vx-bg-1);--vx-sel-shadow: 0 18px 40px -20px rgba(34, 212, 239, .35), 0 0 0 1px rgba(34, 212, 239, .15);--vx-panel-shadow: 0 12px 36px rgba(0, 0, 0, .5), 0 0 0 1px var(--vx-line);--vx-btn-shadow: 0 6px 24px rgba(34, 212, 239, .25), 0 0 0 1px rgba(34, 212, 239, .4) inset;color:var(--vx-txt-0);background:var(--vx-bg-0)}.vx-wizard .vx-eyebrow{font-family:var(--vx-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--vx-cyan-2)}.vx-wizard .vx-label{font-family:var(--vx-mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--vx-txt-3)}.vx-wizard h2.vx-title{margin:8px 0 6px;font-size:30px;letter-spacing:-.03em;line-height:1.05;font-weight:600}.vx-wizard p.vx-lede{margin:0;font-size:14px;line-height:1.5;color:var(--vx-txt-1)}.vx-wizard p.vx-lede b{color:var(--vx-txt-0);font-weight:600}.vx-wizard .vx-card{border:1px solid var(--vx-line);border-radius:14px;background:var(--vx-bg-1);cursor:pointer;text-align:left;color:inherit;font:inherit;transition:border-color .28s var(--vx-ease),background .28s var(--vx-ease),box-shadow .28s var(--vx-ease)}.vx-wizard .vx-card:hover:not(.vx-on){border-color:var(--vx-line-2)}.vx-wizard .vx-card.vx-on{border-color:var(--vx-cyan-b);background:var(--vx-sel-bg);box-shadow:var(--vx-sel-shadow)}.vx-wizard .vx-check{width:24px;height:24px;flex:none;border-radius:50%;border:1px solid var(--vx-line-2);background:transparent;display:grid;place-items:center;font-family:var(--vx-mono);font-size:12px;color:#00222a;transition:all .25s}.vx-wizard .vx-card.vx-on .vx-check{border-color:var(--vx-cyan-0);background:var(--vx-cyan-0)}.vx-wizard .vx-check>span{opacity:0;transition:opacity .2s}.vx-wizard .vx-card.vx-on .vx-check>span{opacity:1}.vx-wizard .vx-btn{height:44px;padding:0 18px;border-radius:10px;border:1px solid var(--vx-line);background:#ffffff08;color:var(--vx-txt-0);font:inherit;font-size:13.5px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:8px;transition:all .2s}.vx-wizard .vx-btn:hover:not(:disabled){border-color:var(--vx-line-2);background:#ffffff0f}.vx-wizard .vx-btn.vx-primary{border-color:#fff3;background:linear-gradient(180deg,var(--vx-cyan-0),var(--vx-cyan-d));color:#00222a;box-shadow:var(--vx-btn-shadow)}.vx-wizard .vx-btn.vx-primary:hover:not(:disabled){background:linear-gradient(180deg,var(--vx-cyan-1),var(--vx-cyan-0))}.vx-wizard .vx-btn.vx-ghost{border-color:transparent;background:transparent;color:var(--vx-txt-1)}.vx-wizard .vx-btn.vx-ghost:hover:not(:disabled){background:#ffffff0a;color:var(--vx-txt-0)}.vx-wizard .vx-btn:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}.vx-wizard .vx-meter{height:8px;border-radius:999px;background:var(--vx-bg-4);overflow:hidden}.vx-wizard .vx-meter>div{height:100%;border-radius:999px;transition:width .6s var(--vx-ease),background .4s}.vx-wizard .vx-keycap{min-width:56px;height:56px;padding:0 16px;border-radius:12px;display:grid;place-items:center;font-family:var(--vx-mono);font-size:16px;font-weight:500;background:linear-gradient(180deg,var(--vx-bg-3),var(--vx-bg-2));color:var(--vx-txt-0);border:1px solid var(--vx-line-2);box-shadow:0 4px 0 var(--vx-bg-0),inset 0 1px #ffffff14;transition:all .25s}.vx-wizard .vx-keycap.vx-hot{background:linear-gradient(180deg,#22d4ef40,#22d4ef14);color:var(--vx-cyan-1);border-color:var(--vx-cyan-b);box-shadow:0 4px #0d8ea399,inset 0 1px #ffffff14}.vx-wizard .vx-plus{font-family:var(--vx-mono);color:var(--vx-txt-3);font-size:18px}.vx-wizard .vx-pill{display:inline-flex;align-items:center;gap:8px;padding:7px 13px;border-radius:999px;border:1px solid var(--vx-line);background:#ffffff05;font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-txt-2)}.vx-wizard .vx-pill.vx-ok{border-color:#6ad48a66;color:var(--vx-good)}.vx-wizard .vx-pill.vx-busy{border-color:var(--vx-cyan-b);color:var(--vx-cyan-1)}.vx-wizard .vx-pill.vx-err{border-color:#f4636e73;color:var(--vx-bad)}@keyframes vxPulse{0%,to{opacity:1}50%{opacity:.35}}@keyframes vxPop{0%{opacity:0;transform:translateY(6px) scale(.98)}to{opacity:1;transform:none}}@keyframes vxRing{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:none}}@keyframes vxScan{0%{transform:translate(-100%)}to{transform:translate(100%)}}@keyframes vxBar{0%,to{transform:scaleY(.35)}50%{transform:scaleY(1)}}@keyframes vxSpin{to{transform:rotate(360deg)}}.vx-wizard .vx-spinner{width:13px;height:13px;border-radius:50%;border:2px solid rgba(34,212,239,.25);border-top-color:var(--vx-cyan-0);animation:vxSpin .7s linear infinite;flex:none}.welcome.svelte-1gicu21{flex:1;min-height:0;display:grid;grid-template-columns:1.1fr 1fr;gap:48px;align-items:center}.halo.svelte-1gicu21{position:relative;width:96px;height:96px;display:grid;place-items:center;margin-bottom:22px}.ring.svelte-1gicu21{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;border:1px solid rgba(34,212,239,.25);animation:vxPulse 2.4s infinite}.ring.inner.svelte-1gicu21{top:12px;right:12px;bottom:12px;left:12px;border-color:#22d4ef26;animation-delay:.6s}.halo.svelte-1gicu21 img:where(.svelte-1gicu21){width:52px;height:52px;border-radius:12px;box-shadow:0 0 16px #22d4ef66}h1.svelte-1gicu21{margin:12px 0 14px;font-size:clamp(30px,4vw,50px);line-height:1.02;letter-spacing:-.035em;font-weight:600}h1.svelte-1gicu21 span:where(.svelte-1gicu21){color:var(--vx-gold-1)}.intro.svelte-1gicu21 p:where(.svelte-1gicu21){margin:0;max-width:560px;font-size:15px;line-height:1.55;color:var(--vx-txt-1)}.reassure.svelte-1gicu21{margin-top:22px;display:inline-flex;align-items:center;gap:10px;padding:9px 14px;border:1px solid rgba(34,212,239,.25);border-radius:999px;background:#22d4ef0a;font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-cyan-2)}.reassure.svelte-1gicu21 span:where(.svelte-1gicu21){color:var(--vx-gold-1)}.cards.svelte-1gicu21{display:grid;grid-template-columns:1fr 1fr;gap:12px}.step-card.svelte-1gicu21{padding:16px 18px;background:linear-gradient(180deg,#ffffff05,#fff0);cursor:default}.head.svelte-1gicu21{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.glyph.svelte-1gicu21{font-family:var(--vx-mono);font-size:20px;color:var(--vx-cyan-1)}.num.svelte-1gicu21{font-family:var(--vx-mono);font-size:11px;color:var(--vx-txt-3)}.title.svelte-1gicu21{font-weight:600;font-size:14.5px;margin-bottom:4px}.desc.svelte-1gicu21{font-size:12.5px;line-height:1.45;color:var(--vx-txt-2)}@media (max-width: 1000px){.welcome.svelte-1gicu21{grid-template-columns:1fr;gap:24px;align-content:start}}.modal-backdrop.svelte-1c9i6zy{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b8;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);display:flex;align-items:center;justify-content:center;z-index:1200;padding:20px;animation:svelte-1c9i6zy-fadeIn .2s ease-out}@keyframes svelte-1c9i6zy-fadeIn{0%{opacity:0}to{opacity:1}}.modal-card.svelte-1c9i6zy{width:100%;max-width:580px;max-height:90vh;background:var(--vx-bg-1);border:1px solid var(--vx-line-2);border-radius:18px;box-shadow:0 24px 60px #000000b3,0 0 0 1px #22d4ef33;display:flex;flex-direction:column;overflow:hidden;color:var(--vx-txt-0)}.modal-header.svelte-1c9i6zy{display:flex;align-items:center;justify-content:space-between;padding:16px 22px;border-bottom:1px solid var(--vx-line);background:var(--vx-bg-2)}.modal-title-row.svelte-1c9i6zy{display:flex;align-items:center;gap:10px}.modal-glyph.svelte-1c9i6zy{font-size:20px}.modal-header.svelte-1c9i6zy h3:where(.svelte-1c9i6zy){margin:0;font-size:16px;font-weight:600;letter-spacing:-.01em;color:var(--vx-txt-0)}.close-btn.svelte-1c9i6zy{background:transparent;border:none;color:var(--vx-txt-2);font-size:16px;cursor:pointer;padding:6px;border-radius:8px;transition:all .2s;line-height:1}.close-btn.svelte-1c9i6zy:hover{color:var(--vx-txt-0);background:#ffffff14}.modal-body.svelte-1c9i6zy{padding:20px 22px;overflow-y:auto;display:flex;flex-direction:column;gap:16px}.modal-hint.svelte-1c9i6zy{margin:0;font-size:12.5px;line-height:1.5;color:var(--vx-txt-2)}.modal-hint.svelte-1c9i6zy code:where(.svelte-1c9i6zy),.field-hint.svelte-1c9i6zy code:where(.svelte-1c9i6zy){background:var(--vx-bg-4);color:var(--vx-cyan-1);padding:2px 5px;border-radius:4px;font-family:var(--vx-mono);font-size:11px;border:1px solid var(--vx-line)}.field-group.svelte-1c9i6zy{display:flex;flex-direction:column;gap:12px;background:#ffffff05;border:1px solid var(--vx-line);border-radius:14px;padding:16px 18px}.field.svelte-1c9i6zy{display:flex;flex-direction:column;gap:6px}.field-title.svelte-1c9i6zy{font-size:12.5px;font-weight:500;color:var(--vx-txt-1)}.vx-input.svelte-1c9i6zy{width:100%;height:38px;padding:0 12px;background:var(--vx-bg-0);border:1px solid var(--vx-line-2);border-radius:8px;color:var(--vx-txt-0);font-family:inherit;font-size:13px;outline:none;transition:border-color .2s,box-shadow .2s;box-sizing:border-box}.vx-input.svelte-1c9i6zy:focus{border-color:var(--vx-cyan-0);box-shadow:0 0 0 2px var(--vx-cyan-b)}.vx-input.svelte-1c9i6zy::placeholder{color:var(--vx-txt-3)}.field-hint.svelte-1c9i6zy{margin:-4px 0 4px;font-size:11px;line-height:1.45;color:var(--vx-txt-3)}.discovered-models.svelte-1c9i6zy{display:flex;flex-direction:column;gap:6px;margin-top:-4px}.model-tags.svelte-1c9i6zy{display:flex;flex-wrap:wrap;gap:6px}.tag-btn.svelte-1c9i6zy{font-size:11.5px;padding:3px 9px;border-radius:6px;background:var(--vx-bg-3);border:1px solid var(--vx-line-2);color:var(--vx-txt-2);cursor:pointer;transition:all .2s}.tag-btn.svelte-1c9i6zy:hover{color:var(--vx-txt-0);border-color:var(--vx-cyan-0)}.tag-btn.active.svelte-1c9i6zy{background:#22d4ef26;border-color:var(--vx-cyan-0);color:var(--vx-cyan-1);font-weight:600}.test-row.svelte-1c9i6zy{display:flex;align-items:center;gap:12px;margin-top:8px;flex-wrap:wrap}.btn-test.svelte-1c9i6zy{height:36px;padding:0 16px;border-radius:8px;background:var(--vx-bg-4);border:1px solid var(--vx-line-2);color:var(--vx-txt-0);font-size:12.5px;font-weight:600;cursor:pointer;transition:all .2s;display:inline-flex;align-items:center;gap:6px}.btn-test.svelte-1c9i6zy:hover:not(:disabled){background:var(--vx-line-2);border-color:var(--vx-cyan-0)}.btn-test.svelte-1c9i6zy:disabled{opacity:.5;cursor:not-allowed}.status-pill.svelte-1c9i6zy{padding:6px 12px;border-radius:8px;font-size:11.5px;font-weight:500;line-height:1.35;word-break:break-word;max-width:100%}.status-pill.success.svelte-1c9i6zy{background:#6ad48a26;color:var(--vx-good);border:1px solid rgba(106,212,138,.3)}.status-pill.error.svelte-1c9i6zy{background:#f4636e26;color:var(--vx-bad);border:1px solid rgba(244,99,110,.3)}.modal-footer.svelte-1c9i6zy{padding:14px 22px;border-top:1px solid var(--vx-line);background:var(--vx-bg-2);display:flex;align-items:center;justify-content:space-between;gap:12px}.footer-status.svelte-1c9i6zy{font-size:12px}.status-msg.ok.svelte-1c9i6zy{color:var(--vx-good);font-weight:500}.status-msg.warn.svelte-1c9i6zy{color:var(--vx-warn)}.footer-actions.svelte-1c9i6zy{display:flex;gap:10px}.engine-step.svelte-xv54mf{flex:1;min-height:0;display:flex;flex-direction:column;gap:10px}.head.svelte-xv54mf{display:flex;gap:20px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-xv54mf{max-width:760px;min-width:0}.copy.svelte-xv54mf .vx-title:where(.svelte-xv54mf){margin:4px 0 3px;font-size:26px}.copy.svelte-xv54mf .vx-lede:where(.svelte-xv54mf){margin:2px 0 0;font-size:13px;line-height:1.4}.gpu-toggle.svelte-xv54mf{flex:none;width:380px;display:flex;align-items:center;gap:12px;padding:8px 14px}.gpu-toggle.svelte-xv54mf:disabled{opacity:.55;cursor:default}.switch.svelte-xv54mf{width:44px;height:26px;border-radius:999px;position:relative;flex:none;background:var(--vx-bg-4);border:1px solid var(--vx-line-2);transition:background .3s}.switch.on.svelte-xv54mf{background:var(--vx-cyan-0)}.knob.svelte-xv54mf{position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 2px 6px #0006;transition:left .28s var(--vx-ease)}.switch.on.svelte-xv54mf .knob:where(.svelte-xv54mf){left:20px}.gpu-copy.svelte-xv54mf{display:block}.gpu-title.svelte-xv54mf{display:flex;align-items:center;gap:6px;font-weight:600;font-size:13px}.gpu-title.svelte-xv54mf .glyph:where(.svelte-xv54mf){font-family:var(--vx-mono);color:var(--vx-cyan-1)}.state.svelte-xv54mf{font-family:var(--vx-mono);font-size:10px;letter-spacing:.1em;color:var(--vx-txt-3);transition:color .3s}.state.on.svelte-xv54mf{color:var(--vx-cyan-1)}.gpu-desc.svelte-xv54mf{display:block;font-size:11px;color:var(--vx-txt-2);margin-top:2px;line-height:1.35}.engines.svelte-xv54mf{flex:1;min-height:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.engine-card.svelte-xv54mf{position:relative;padding:14px 18px;border-radius:14px;display:grid;grid-template-columns:1fr 144px;gap:10px 14px;align-content:start}.left-col.svelte-xv54mf{min-width:0}.corner.svelte-xv54mf{position:absolute;top:12px;right:12px;width:22px;height:22px}.engine-head.svelte-xv54mf{grid-column:1 / -1}.name-row.svelte-xv54mf{display:flex;align-items:center;gap:8px;margin-bottom:2px}.engine-glyph.svelte-xv54mf{font-family:var(--vx-mono);font-size:20px;color:var(--vx-cyan-1);line-height:1}.engine-name.svelte-xv54mf{font-size:17px;font-weight:600;letter-spacing:-.02em;line-height:1.1}.tagline.svelte-xv54mf{font-size:12px;color:var(--vx-txt-2);line-height:1.35;max-width:92%}.warn.svelte-xv54mf{margin-top:6px;padding:6px 9px;border-radius:8px;border:1px solid rgba(255,180,84,.3);background:#ffb4540f;color:var(--vx-warn);font-size:11px;line-height:1.35}.sizes.svelte-xv54mf{display:flex;gap:4px;margin-top:5px;flex-wrap:wrap;min-width:0}.size.svelte-xv54mf{height:40px;flex:1 1 0;max-width:96px;min-width:0;padding:0 4px;border-radius:8px;border:1px solid var(--vx-line);background:#ffffff05;color:var(--vx-txt-1);font-family:var(--vx-mono);cursor:pointer;transition:all .22s;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:2px;white-space:nowrap}.size.svelte-xv54mf:hover{border-color:var(--vx-line-2)}.size.on.svelte-xv54mf{border-color:var(--vx-cyan-b);background:#22d4ef1f;color:var(--vx-cyan-1)}.size-id.svelte-xv54mf{font-size:11.5px;font-weight:600;line-height:1.1;white-space:nowrap}.size-mb.svelte-xv54mf{font-size:9.5px;line-height:1.1;opacity:.75;white-space:nowrap}.remote-summary-box.svelte-xv54mf{margin-top:5px;padding:7px 10px;background:#00000040;border:1px solid var(--vx-line);border-radius:8px;display:flex;flex-direction:column;gap:4px}.remote-row.svelte-xv54mf{display:flex;justify-content:space-between;align-items:center;gap:8px;font-family:var(--vx-mono);font-size:10.5px}.remote-k.svelte-xv54mf{color:var(--vx-txt-2);flex:none}.remote-v.svelte-xv54mf{color:var(--vx-txt-0);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:240px;text-align:right}.remote-v-ok.svelte-xv54mf{color:var(--vx-good);font-weight:600}.remote-v-warn.svelte-xv54mf{color:var(--vx-warn);font-weight:600}.remote-btn-row.svelte-xv54mf{margin-top:6px}.remote-cfg-btn.svelte-xv54mf{width:100%;height:32px;font-size:11.5px}.metrics.svelte-xv54mf{margin-top:14px;display:flex;flex-direction:column;gap:7px}.metric.svelte-xv54mf{display:flex;flex-direction:column;transition:opacity .3s}.metric.dim.svelte-xv54mf{opacity:.45}.metric-head.svelte-xv54mf{display:flex;justify-content:space-between;font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-2);margin-bottom:3px;line-height:1.2}.metric-head.svelte-xv54mf span:where(.svelte-xv54mf):last-child{color:var(--vx-txt-1)}.right-col.svelte-xv54mf{width:144px;display:flex;flex-direction:column;gap:8px}.spark.svelte-xv54mf{width:144px;height:80px;box-sizing:border-box;padding:7px 9px;border-radius:10px;border:1px solid var(--vx-line);background:#00000040;display:flex;flex-direction:column}.spark-head.svelte-xv54mf{display:flex;justify-content:space-between;font-family:var(--vx-mono);font-size:10px;color:var(--vx-txt-2);margin-bottom:5px;flex:none;line-height:1.2}.spark-head.svelte-xv54mf span:where(.svelte-xv54mf):last-child{color:var(--vx-txt-0)}.spark-bars.svelte-xv54mf{display:flex;align-items:flex-end;gap:3px;flex:1;min-height:0}.spark-bars.svelte-xv54mf>div:where(.svelte-xv54mf){flex:1;border-radius:2px;background:var(--vx-cyan-0);transition:height .6s var(--vx-ease),opacity .4s}.status-row.svelte-xv54mf{flex:none;display:flex;justify-content:flex-end}@media (max-width: 1100px){.head.svelte-xv54mf{flex-direction:column;align-items:stretch;gap:10px}.gpu-toggle.svelte-xv54mf{width:100%}.engines.svelte-xv54mf{grid-template-columns:1fr}}.hotkey-step.svelte-1fbfhk3{flex:1;min-height:0;display:flex;flex-direction:column;gap:14px}.copy.svelte-1fbfhk3{max-width:820px;min-width:0}.body.svelte-1fbfhk3{flex:1;min-height:0;display:grid;grid-template-columns:minmax(300px,1fr) 1.6fr;gap:14px}.gestures.svelte-1fbfhk3{display:grid;grid-auto-rows:min-content;gap:10px;align-content:start}.gesture.svelte-1fbfhk3{padding:12px 16px;display:grid;grid-template-columns:1fr 130px;gap:14px;align-items:center}.g-name.svelte-1fbfhk3{font-weight:600;font-size:14.5px;margin-bottom:3px}.g-desc.svelte-1fbfhk3{font-size:12px;color:var(--vx-txt-2);line-height:1.4}.tracks.svelte-1fbfhk3{display:grid;gap:5px}.track-row.svelte-1fbfhk3{display:grid;grid-template-columns:24px 1fr;gap:6px;align-items:center}.track-label.svelte-1fbfhk3{font-family:var(--vx-mono);font-size:9.5px;color:var(--vx-txt-3);letter-spacing:.1em}.track.svelte-1fbfhk3{display:flex;gap:2px;height:9px}.track.svelte-1fbfhk3>div:where(.svelte-1fbfhk3){border-radius:2px;background:var(--vx-bg-3);transition:background .3s}.track.svelte-1fbfhk3>div.lit:where(.svelte-1fbfhk3){background:var(--vx-txt-2)}.track.svelte-1fbfhk3>div.on:where(.svelte-1fbfhk3){background:var(--vx-cyan-0)}.hidden-note.svelte-1fbfhk3{padding:10px 12px;border-radius:10px;border:1px dashed var(--vx-line-2);font-size:12px;line-height:1.45;color:var(--vx-txt-2)}.right.svelte-1fbfhk3{display:flex;flex-direction:column;gap:12px;min-height:0}.recorder.svelte-1fbfhk3{position:relative;overflow:hidden;flex:1;min-height:220px;border-radius:18px;border:1px dashed var(--vx-line-2);background:#ffffff04;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;cursor:pointer;font:inherit;color:inherit;transition:all .3s var(--vx-ease)}.recorder.rec.svelte-1fbfhk3{border-color:var(--vx-cyan-b);background:#22d4ef0d;box-shadow:0 0 0 1px #22d4ef26,0 0 40px #22d4ef1f}.recorder.done.svelte-1fbfhk3{border-color:var(--vx-cyan-b);background:var(--vx-bg-1);box-shadow:0 0 0 1px #22d4ef1a}.scan.svelte-1fbfhk3{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,transparent,rgba(34,212,239,.08),transparent);animation:vxScan 1.6s linear infinite;pointer-events:none}.rec-label.svelte-1fbfhk3{font-family:var(--vx-mono);font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--vx-txt-2);display:flex;align-items:center;gap:8px;transition:color .3s}.recorder.rec.svelte-1fbfhk3 .rec-label:where(.svelte-1fbfhk3){color:var(--vx-cyan-1)}.recorder.done.svelte-1fbfhk3 .rec-label:where(.svelte-1fbfhk3){color:var(--vx-good)}.dot.svelte-1fbfhk3{width:8px;height:8px;border-radius:50%;background:currentColor;box-shadow:0 0 10px currentColor;animation:vxPulse 1.4s infinite}.keycaps.svelte-1fbfhk3{display:flex;gap:10px;align-items:center;min-height:64px}.rec-hint.svelte-1fbfhk3{font-size:13px;color:var(--vx-txt-2);text-align:center;max-width:520px;line-height:1.5;padding:0 20px}.rec-hint.bad.svelte-1fbfhk3{color:var(--vx-warn)}.sys.svelte-1fbfhk3{flex:none;padding:14px 18px;border-radius:14px;border:1px solid var(--vx-line);background:var(--vx-bg-1);display:flex;gap:16px;align-items:center;animation:vxPop .3s var(--vx-ease)}.sys.ok.svelte-1fbfhk3{border-color:#6ad48a66}.sys-glyph.svelte-1fbfhk3{font-family:var(--vx-mono);font-size:26px;color:var(--vx-gold-1)}.sys.ok.svelte-1fbfhk3 .sys-glyph:where(.svelte-1fbfhk3){color:var(--vx-good)}.sys-copy.svelte-1fbfhk3{flex:1;min-width:0}.sys-title.svelte-1fbfhk3{font-weight:600;font-size:14px}.sys-desc.svelte-1fbfhk3{font-size:12.5px;color:var(--vx-txt-2);line-height:1.45;margin-top:2px}.sys-err.svelte-1fbfhk3{margin-top:6px;font-size:12px;color:var(--vx-bad);line-height:1.4}.sys-actions.svelte-1fbfhk3{display:flex;gap:8px;flex:none}@media (max-width: 1100px){.body.svelte-1fbfhk3{grid-template-columns:1fr}}.preview.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;color:var(--vx-cyan-0);background:radial-gradient(120% 120% at 50% 120%,rgba(34,212,239,.1),transparent 70%)}.preview.mono.svelte-y6l73v{color:#dfe6ee;background:none}.still.svelte-y6l73v,.clip.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover;display:block;pointer-events:none}.clip.svelte-y6l73v{opacity:0;transition:opacity .35s ease}.clip.ready.svelte-y6l73v{opacity:1}.bars.svelte-y6l73v{display:flex;align-items:flex-end;justify-content:center;gap:3px;width:64%;height:56%}.bars.svelte-y6l73v>div:where(.svelte-y6l73v){flex:1;min-height:10%;border-radius:2px;background:currentColor;transform-origin:bottom;animation-name:vxBar;animation-iteration-count:infinite;animation-timing-function:ease-in-out;opacity:.9}.wave.svelte-y6l73v{width:76%;height:46%;color:inherit;animation:svelte-y6l73v-waveShift 2.6s linear infinite}@keyframes svelte-y6l73v-waveShift{0%{transform:translate(0)}to{transform:translate(-16%)}}.ring-wrap.svelte-y6l73v{position:relative;width:46%;aspect-ratio:1;display:grid;place-items:center}.ring.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;border:1.5px solid currentColor;opacity:.4;animation:vxPulse 1.8s ease-in-out infinite}.ring.r2.svelte-y6l73v{top:22%;right:22%;bottom:22%;left:22%;animation-delay:.5s}.ring-core.svelte-y6l73v{width:26%;aspect-ratio:1;border-radius:50%;background:currentColor;animation:vxPulse 1.8s ease-in-out infinite;animation-delay:.25s}.dial.svelte-y6l73v{position:relative;width:62%;aspect-ratio:2 / 1;display:grid;place-items:end center}.dial-arc.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:999px 999px 0 0;border:1.5px solid currentColor;border-bottom:0;opacity:.35}.needle.svelte-y6l73v{position:absolute;bottom:0;left:50%;width:2px;height:82%;background:var(--vx-gold-1);transform-origin:bottom center;animation:svelte-y6l73v-needleSwing 2.2s ease-in-out infinite}@keyframes svelte-y6l73v-needleSwing{0%,to{transform:rotate(-38deg)}50%{transform:rotate(34deg)}}.terminal.svelte-y6l73v{width:76%;font-family:var(--vx-mono);font-size:9px;color:#7ab8ff;display:grid;gap:5px}.blocks.svelte-y6l73v{display:flex;gap:2px;height:10px}.blocks.svelte-y6l73v>div:where(.svelte-y6l73v){flex:1;background:#7ab8ff;transform-origin:bottom;animation:vxBar 1.1s ease-in-out infinite}.overlay-step.svelte-ek86vh{flex:1;min-height:0;display:flex;flex-direction:column;gap:14px}.head.svelte-ek86vh{display:flex;gap:24px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-ek86vh{max-width:720px;min-width:0}.choice.svelte-ek86vh{display:grid;grid-template-columns:1fr 1fr;gap:10px;flex:none;width:520px}.mode.svelte-ek86vh{height:66px;padding:0 16px;display:flex;align-items:center;gap:12px}.mode.off-on.svelte-ek86vh{border-color:var(--vx-line-2);background:var(--vx-bg-3);box-shadow:0 0 0 1px var(--vx-line-2)}.mode-glyph.svelte-ek86vh{font-family:var(--vx-mono);font-size:22px;color:var(--vx-txt-2)}.mode-glyph.on.svelte-ek86vh{color:var(--vx-cyan-1)}.mode-title.svelte-ek86vh{display:block;font-weight:600;font-size:14px}.mode-desc.svelte-ek86vh{display:block;font-size:12px;color:var(--vx-txt-2)}.body.svelte-ek86vh{flex:1;min-height:0;display:grid;grid-template-columns:1.7fr 1fr;gap:16px;transition:opacity .4s,filter .4s}.body.muted.svelte-ek86vh{opacity:.18;filter:grayscale(1) blur(1px);pointer-events:none}.styles.svelte-ek86vh,.position.svelte-ek86vh{display:flex;flex-direction:column;min-height:0}.style-grid.svelte-ek86vh{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:8px}.style-card.svelte-ek86vh{overflow:hidden;padding:0;display:flex;flex-direction:column;min-height:0}.thumb.svelte-ek86vh{position:relative;aspect-ratio:16 / 9;background:#05070a;overflow:hidden}.style-meta.svelte-ek86vh{flex:none;display:flex;align-items:center;justify-content:space-between;padding:8px 12px}.style-name.svelte-ek86vh{font-weight:600;font-size:13px}.style-sub.svelte-ek86vh{font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-2)}.style-glyph.svelte-ek86vh{font-family:var(--vx-mono);font-size:14px;color:var(--vx-txt-3);transition:color .3s}.style-glyph.on.svelte-ek86vh{color:var(--vx-cyan-1)}.screen.svelte-ek86vh{position:relative;aspect-ratio:16 / 10;border-radius:12px;border:1px solid var(--vx-line-2);background:linear-gradient(180deg,var(--vx-bg-2),var(--vx-bg-0));overflow:hidden;box-shadow:var(--vx-panel-shadow);margin-top:8px}.grid-lines.svelte-ek86vh{position:absolute;top:0;right:0;bottom:0;left:0;background-image:linear-gradient(to right,rgba(255,255,255,.03) 1px,transparent 1px),linear-gradient(to bottom,rgba(255,255,255,.03) 1px,transparent 1px);background-size:28px 28px}.taskbar.svelte-ek86vh{position:absolute;left:0;right:0;bottom:0;height:7%;background:#00000080;border-top:1px solid var(--vx-line)}.floating.svelte-ek86vh{position:absolute;left:50%;transform:translate(-50%,-50%);width:44%;aspect-ratio:16 / 9;border-radius:8px;overflow:hidden;border:1px solid rgba(34,212,239,.4);box-shadow:0 0 24px #22d4ef40;background:#05070a;transition:top .5s var(--vx-ease)}.pos-buttons.svelte-ek86vh{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:10px}.pos.svelte-ek86vh{height:46px;border-radius:10px;border:1px solid var(--vx-line);background:#ffffff05;color:var(--vx-txt-1);font:inherit;font-size:13px;font-weight:600;cursor:pointer;transition:all .25s;display:flex;align-items:center;justify-content:center;gap:8px}.pos.svelte-ek86vh:hover{border-color:var(--vx-line-2)}.pos.on.svelte-ek86vh{border-color:var(--vx-cyan-b);background:#22d4ef1f;color:var(--vx-cyan-1)}.pos-glyph.svelte-ek86vh{font-family:var(--vx-mono)}@media (max-width: 1100px){.head.svelte-ek86vh{flex-direction:column;align-items:stretch}.choice.svelte-ek86vh{width:100%}.body.svelte-ek86vh{grid-template-columns:1fr}.style-grid.svelte-ek86vh{grid-template-columns:repeat(2,1fr)}}.test-step.svelte-oqvphh{flex:1;min-height:0;display:flex;flex-direction:column;gap:14px}.head.svelte-oqvphh{display:flex;gap:24px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-oqvphh{max-width:640px;min-width:0}.combo.svelte-oqvphh{display:flex;gap:10px;align-items:center;flex:none}.gesture-pill.svelte-oqvphh{margin-left:10px;font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-txt-2);padding:6px 12px;border:1px solid var(--vx-line);border-radius:999px}.box.svelte-oqvphh{position:relative;flex:1;min-height:0;border-radius:18px;border:1px solid var(--vx-line);background:var(--vx-bg-1);transition:all .4s var(--vx-ease);overflow:hidden;display:flex;flex-direction:column}.box.live.svelte-oqvphh{border-color:var(--vx-cyan-b);box-shadow:0 0 40px #22d4ef26}.box.won.svelte-oqvphh{border-color:#6ad48a80;box-shadow:0 0 40px #6ad48a26}.box-head.svelte-oqvphh{flex:none;display:flex;align-items:center;justify-content:space-between;padding:10px 18px;border-bottom:1px solid var(--vx-line)}.file.svelte-oqvphh{font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-txt-2)}.state.svelte-oqvphh{font-family:var(--vx-mono);font-size:11px;letter-spacing:.1em;display:flex;align-items:center;gap:8px;color:var(--vx-txt-3);transition:color .3s}.state.recording.svelte-oqvphh{color:var(--vx-cyan-0)}.state.transcribing.svelte-oqvphh{color:var(--vx-gold-1)}.state.success.svelte-oqvphh{color:var(--vx-good)}.dot.svelte-oqvphh{width:7px;height:7px;border-radius:50%;background:currentColor;box-shadow:0 0 8px currentColor;animation:vxPulse 1.4s infinite}textarea.svelte-oqvphh{display:block;flex:1;min-height:180px;width:100%;padding:22px;border:0;background:transparent;color:var(--vx-txt-0);font-family:inherit;font-size:19px;line-height:1.6;resize:none;caret-color:var(--vx-cyan-0);outline:none}.wave.svelte-oqvphh{position:absolute;left:0;right:0;bottom:0;height:64px;display:flex;align-items:center;justify-content:center;gap:4px;background:linear-gradient(180deg,transparent,rgba(34,212,239,.1));pointer-events:none}.wave.svelte-oqvphh>div:where(.svelte-oqvphh){width:4px;height:30px;border-radius:2px;background:var(--vx-cyan-0);transform-origin:center;animation-name:vxBar;animation-iteration-count:infinite;animation-timing-function:ease-in-out}.won-overlay.svelte-oqvphh{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;text-align:center;background:#0e1116db;animation:vxPop .35s var(--vx-ease)}.tick.svelte-oqvphh{width:84px;height:84px;margin:0 auto 16px;border-radius:50%;border:2px solid var(--vx-good);display:grid;place-items:center;color:var(--vx-good);font-family:var(--vx-mono);font-size:36px;box-shadow:0 0 30px #6ad48a59;animation:vxRing .5s var(--vx-ease)}.won-title.svelte-oqvphh{font-size:26px;font-weight:600;letter-spacing:-.02em}.won-sub.svelte-oqvphh{font-size:14px;color:var(--vx-txt-2);margin:6px 0 18px}.foot.svelte-oqvphh{flex:none;display:flex;justify-content:space-between;align-items:center;gap:20px;font-size:12.5px;color:var(--vx-txt-2)}.engine.svelte-oqvphh{font-family:var(--vx-mono);font-size:11px;white-space:nowrap}@media (max-width: 1000px){.head.svelte-oqvphh{flex-direction:column;align-items:stretch;gap:12px}}.voice-step.svelte-1yghr3b{flex:1;min-height:0;display:flex;flex-direction:column;gap:12px}.head.svelte-1yghr3b{display:flex;gap:20px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-1yghr3b{max-width:680px;min-width:0}.copy.svelte-1yghr3b .vx-lede:where(.svelte-1yghr3b){margin:4px 0 0;font-size:13px;line-height:1.45}.choice.svelte-1yghr3b{display:grid;grid-template-columns:1fr 1fr;gap:10px;flex:none;width:480px}.mode.svelte-1yghr3b{height:58px;padding:0 14px;display:flex;align-items:center;gap:10px}.mode.off-on.svelte-1yghr3b{border-color:var(--vx-line-2);background:var(--vx-bg-3);box-shadow:0 0 0 1px var(--vx-line-2)}.mode-glyph.svelte-1yghr3b{font-family:var(--vx-mono);font-size:20px;color:var(--vx-txt-2)}.mode-glyph.on.svelte-1yghr3b{color:var(--vx-cyan-1)}.mode-title.svelte-1yghr3b{display:block;font-weight:600;font-size:13.5px}.mode-desc.svelte-1yghr3b{display:block;font-size:11.5px;color:var(--vx-txt-2)}.toolbar.svelte-1yghr3b{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:8px 14px;border:1px solid var(--vx-line);border-radius:10px;background:#ffffff05;flex:none;transition:opacity .4s,filter .4s}.audition-panel.svelte-1yghr3b{display:flex;align-items:center;gap:14px;min-width:0}.audition-btn.svelte-1yghr3b{height:38px;padding:0 16px;display:inline-flex;align-items:center;gap:8px;font-size:13px;font-weight:600;border-radius:8px;background:#22d4ef17;border:1px solid var(--vx-cyan-0);color:var(--vx-cyan-0);cursor:pointer;transition:all .2s}.audition-btn.svelte-1yghr3b:hover:not(:disabled){background:#22d4ef2e;box-shadow:0 0 12px #22d4ef40}.audition-btn.svelte-1yghr3b:disabled{opacity:.4;cursor:not-allowed;border-color:var(--vx-line-2);color:var(--vx-txt-3);background:#ffffff08}.audition-btn.playing.svelte-1yghr3b{border-color:var(--vx-gold-1);color:var(--vx-gold-1);background:#eab3081f}.tri.svelte-1yghr3b{font-family:var(--vx-mono);font-size:14px;color:inherit}.stop-icon.svelte-1yghr3b{font-size:14px;color:inherit}.btn-text.svelte-1yghr3b{font-family:var(--vx-mono);font-size:12px;letter-spacing:.02em}.play-bars.svelte-1yghr3b{display:flex;align-items:center;gap:2.5px;height:18px;margin-left:4px}.play-bars.svelte-1yghr3b>div:where(.svelte-1yghr3b){width:3px;height:18px;border-radius:1.5px;background:currentColor;transform-origin:center;animation-name:vxBar;animation-iteration-count:infinite;animation-timing-function:ease-in-out}.audition-meta.svelte-1yghr3b{display:flex;flex-direction:column;gap:2px}.audition-label.svelte-1yghr3b{font-size:12px;color:var(--vx-cyan-0);font-weight:600}.audition-hint.svelte-1yghr3b{font-size:11px;font-family:var(--vx-mono)}.audition-hint.svelte-1yghr3b .ready:where(.svelte-1yghr3b){color:var(--vx-good)}.audition-hint.svelte-1yghr3b .good:where(.svelte-1yghr3b){color:var(--vx-cyan-0)}.audition-hint.svelte-1yghr3b .warn:where(.svelte-1yghr3b){color:var(--vx-gold-1)}.audition-hint.svelte-1yghr3b .bad:where(.svelte-1yghr3b){color:var(--vx-bad)}.audition-hint.svelte-1yghr3b .dim:where(.svelte-1yghr3b){color:var(--vx-txt-3)}.hf-bar.svelte-1yghr3b{display:flex;align-items:center;gap:12px;padding:4px 10px;border-radius:8px;border:1px solid transparent;background:#0003}.hf-bar.needed.svelte-1yghr3b{border-color:color-mix(in srgb,var(--vx-gold-1) 45%,transparent);background:color-mix(in srgb,var(--vx-gold-1) 6%,transparent)}.hf-header.svelte-1yghr3b{display:flex;flex-direction:column;gap:1px;text-align:right}.hf-title.svelte-1yghr3b{font-size:11.5px;font-weight:600}.hf-sub.svelte-1yghr3b{font-size:10px;color:var(--vx-txt-3)}.hf-control.svelte-1yghr3b{display:flex;flex-direction:column;gap:2px}.hf-input.svelte-1yghr3b{width:170px;padding:5px 8px;font-size:11.5px;font-family:inherit;color:inherit;background:#00000073;border:1px solid var(--vx-line);border-radius:6px;outline:none;transition:border-color .2s}.hf-input.svelte-1yghr3b:focus{border-color:var(--vx-cyan-0)}.hf-input[readonly].svelte-1yghr3b{color:var(--vx-txt-2);cursor:not-allowed}.hf-state.svelte-1yghr3b{font-size:9.5px;font-family:var(--vx-mono);color:var(--vx-txt-3);white-space:nowrap}.hf-state.ok.svelte-1yghr3b{color:var(--vx-good)}.hf-state.bad.svelte-1yghr3b{color:var(--vx-bad)}.non-commercial-notice.svelte-1yghr3b{flex:none;padding:8px 12px;border-radius:8px;border:1px solid color-mix(in srgb,var(--vx-gold-1) 45%,transparent);background:color-mix(in srgb,var(--vx-gold-1) 6%,transparent);font-size:12px;line-height:1.4}.gpu-toggle-row.svelte-1yghr3b{flex:none;display:flex;align-items:center;gap:8px;font-size:12.5px;padding:2px}.gpu-toggle-hint.svelte-1yghr3b{color:var(--vx-txt-3);font-size:11px}.grid.svelte-1yghr3b{flex:1;min-height:0;display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(2,minmax(0,1fr));gap:10px;transition:opacity .4s,filter .4s}.grid.muted.svelte-1yghr3b{opacity:.18;filter:grayscale(1) blur(1px);pointer-events:none}.card.svelte-1yghr3b{padding:12px 14px;display:flex;flex-direction:column;gap:8px;min-height:0;cursor:pointer;transition:all .2s}.card.locked.svelte-1yghr3b{opacity:.55}.card.locked.svelte-1yghr3b .name:where(.svelte-1yghr3b){color:var(--vx-txt-2)}.card-head.svelte-1yghr3b{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}.card-title-group.svelte-1yghr3b{display:flex;align-items:baseline;gap:8px;min-width:0}.name.svelte-1yghr3b{font-weight:600;font-size:14.5px;letter-spacing:-.01em;white-space:nowrap}.kind.svelte-1yghr3b{font-family:var(--vx-mono);font-size:10px;color:var(--vx-txt-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions.svelte-1yghr3b{display:grid}.dl.svelte-1yghr3b{height:30px;width:100%;font-size:11.5px;padding:0 10px}.bundled.svelte-1yghr3b{height:30px;display:flex;align-items:center;justify-content:center;border-radius:8px;border:1px dashed var(--vx-line);font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-3);text-align:center}.bundled.ok.svelte-1yghr3b{border-style:solid;border-color:#6ad48a59;color:var(--vx-good)}.metrics.svelte-1yghr3b{display:flex;flex-direction:column;gap:8px}.metric-head.svelte-1yghr3b{display:flex;justify-content:space-between;font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-2);margin-bottom:4px}.metric-head.svelte-1yghr3b span:where(.svelte-1yghr3b):last-child{color:var(--vx-txt-1)}.note.svelte-1yghr3b{font-size:11px;color:var(--vx-txt-2);line-height:1.35;margin-top:auto;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.bad.svelte-1yghr3b{color:var(--vx-bad);word-break:break-word}.note.svelte-1yghr3b .ok:where(.svelte-1yghr3b){color:var(--vx-good)}.play-error.svelte-1yghr3b{flex:none;font-size:12px;color:var(--vx-bad)}@media (max-width: 1100px){.grid.svelte-1yghr3b{grid-template-columns:repeat(2,1fr);grid-template-rows:repeat(3,minmax(0,1fr))}.head.svelte-1yghr3b{flex-direction:column;align-items:stretch}.choice.svelte-1yghr3b{width:100%}}@media (max-width: 800px){.toolbar.svelte-1yghr3b{flex-direction:column;align-items:stretch}.hf-header.svelte-1yghr3b{text-align:left}.hf-input.svelte-1yghr3b{width:100%}}.done-step.svelte-ujy0nl{flex:1;min-height:0;display:grid;grid-template-columns:.95fr 1fr 1fr;gap:18px;align-items:stretch}.hero.svelte-ujy0nl{display:flex;flex-direction:column;justify-content:center}.tick.svelte-ujy0nl{width:76px;height:76px;margin:0 0 20px;border-radius:50%;border:2px solid var(--vx-gold-0);display:grid;place-items:center;color:var(--vx-gold-1);font-family:var(--vx-mono);font-size:32px;box-shadow:0 0 30px var(--vx-gold-glow);animation:vxRing .6s var(--vx-ease)}.tick.warn.svelte-ujy0nl{border-color:var(--vx-bad);color:var(--vx-bad);box-shadow:0 0 30px #f4636e4d}h2.svelte-ujy0nl{margin:10px 0;font-size:clamp(28px,3.2vw,44px);letter-spacing:-.035em;line-height:1.02;font-weight:600}h2.svelte-ujy0nl span:where(.svelte-ujy0nl){color:var(--vx-gold-1)}h2.svelte-ujy0nl span.bad-word:where(.svelte-ujy0nl){color:var(--vx-bad)}.hero.svelte-ujy0nl p:where(.svelte-ujy0nl){margin:0 0 20px;font-size:14.5px;line-height:1.55;color:var(--vx-txt-1)}.summary.svelte-ujy0nl{display:grid;grid-template-columns:1fr 1fr;gap:10px 14px;padding:14px 16px;border-radius:14px;border:1px solid var(--vx-line);background:linear-gradient(180deg,rgba(34,212,239,.04),transparent)}.summary-value.svelte-ujy0nl{font-size:13px;font-weight:600;color:var(--vx-txt-0);margin-top:3px;word-break:break-word}.panel.svelte-ujy0nl{padding:20px;border-radius:18px;border:1px solid var(--vx-line);background:var(--vx-bg-1);display:flex;flex-direction:column;min-height:0}.panel.problems.svelte-ujy0nl{border-color:#f4636e66}.panel-head.svelte-ujy0nl{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.panel-title.svelte-ujy0nl{font-weight:600;font-size:16px;margin:6px 0 4px}.panel-desc.svelte-ujy0nl{font-size:13px;color:var(--vx-txt-2);line-height:1.5;margin-bottom:16px}.issue-list.svelte-ujy0nl{flex:1;min-height:0;overflow:auto;margin:10px 0 12px;display:grid;gap:10px;align-content:start}.issue.svelte-ujy0nl{border:1px solid var(--vx-line);border-radius:12px;background:#f4636e0a;padding:11px 12px}.issue-head.svelte-ujy0nl{display:flex;gap:9px;align-items:baseline}.issue-step.svelte-ujy0nl{flex:none;font-family:var(--vx-mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--vx-bad)}.issue-title.svelte-ujy0nl{font-size:13px;line-height:1.45;color:var(--vx-txt-0)}.issue-detail.svelte-ujy0nl{margin:8px 0 0;padding:8px 10px;border-radius:8px;background:#00000059;font-family:var(--vx-mono);font-size:11px;line-height:1.5;color:var(--vx-txt-2);white-space:pre-wrap;word-break:break-word;max-height:150px;overflow:auto}.problem-actions.svelte-ujy0nl{display:flex;gap:8px;margin-top:auto}.log-status.svelte-ujy0nl{margin-top:8px;font-size:12px;line-height:1.4;color:var(--vx-txt-2)}.mock-screen.svelte-ujy0nl{position:relative;flex:1;min-height:230px;border-radius:12px;border:1px solid var(--vx-line-2);background:linear-gradient(180deg,var(--vx-bg-2),var(--vx-bg-0));overflow:hidden}.mock-bar.svelte-ujy0nl{position:absolute;left:0;right:0;bottom:0;height:40px;background:#0000008c;border-top:1px solid var(--vx-line);display:flex;align-items:center;justify-content:flex-end;padding:0 14px;gap:12px}.mock-sys-icon.svelte-ujy0nl{font-size:11px;color:var(--vx-txt-3);opacity:.65;-webkit-user-select:none;user-select:none}.mock-sys-icon.chevron.svelte-ujy0nl{font-size:14px;margin-left:2px}.tray-btn-wrap.svelte-ujy0nl{position:relative;display:inline-flex;align-items:center;justify-content:center}.tray-btn.svelte-ujy0nl{width:32px;height:32px;border-radius:6px;border:1px solid transparent;background:transparent;cursor:pointer;display:grid;place-items:center;transition:all .2s}.tray-btn.svelte-ujy0nl:hover{background:#ffffff14}.tray-btn.on.svelte-ujy0nl{border-color:#ffffff40;background:#ffffff1f}.tray-btn.svelte-ujy0nl img:where(.svelte-ujy0nl){width:22px;height:22px;display:block;object-fit:contain}.tray-menu.svelte-ujy0nl{position:absolute;right:14px;bottom:48px;width:275px;padding:6px;border-radius:8px;border:1px solid rgba(255,255,255,.15);background:#1f232a;box-shadow:0 10px 30px #000000b3;animation:vxPop .18s var(--vx-ease);z-index:10}.tray-row.svelte-ujy0nl{width:100%;border:none;background:transparent;padding:6px 8px;border-radius:5px;display:flex;align-items:center;gap:8px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:13.5px;color:#e6edf3;text-align:left;cursor:pointer;transition:background .15s,color .15s}.tray-row.svelte-ujy0nl:hover{background:#ffffff14;color:#fff}.chk-gutter.svelte-ujy0nl{width:18px;height:18px;flex:none;display:flex;align-items:center;justify-content:center}.chk.svelte-ujy0nl{width:16px;height:16px;border-radius:4px;border:1px solid rgba(255,255,255,.3);background:#ffffff0f;display:flex;align-items:center;justify-content:center;transition:all .15s ease}.chk.on.svelte-ujy0nl{background:#1d8cf8;border-color:#38bdf8}.tray-icon.svelte-ujy0nl{width:20px;font-size:15px;display:flex;align-items:center;justify-content:center;flex:none}.tray-label.svelte-ujy0nl{flex:1;white-space:nowrap;letter-spacing:-.01em}.tray-label.no-icon.svelte-ujy0nl{padding-left:2px}.tray-sep.svelte-ujy0nl{height:1px;background:#ffffff1f;margin:5px 6px}.click-me.svelte-ujy0nl{position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;gap:2px;font-family:var(--vx-mono);font-size:11px;letter-spacing:.05em;color:var(--vx-cyan-1);white-space:nowrap;pointer-events:none;animation:svelte-ujy0nl-vxNudge 1.6s ease-in-out infinite}.arrow.svelte-ujy0nl{font-size:14px;font-weight:700;line-height:1}@keyframes svelte-ujy0nl-vxNudge{0%,to{transform:translate(-50%) translateY(0)}50%{transform:translate(-50%) translateY(4px)}}.where.svelte-ujy0nl{list-style:none;padding:0;margin:0 0 16px;display:grid;gap:2px}.where.svelte-ujy0nl li:where(.svelte-ujy0nl){display:flex;align-items:center;gap:9px;padding:7px 10px;font-size:12.5px;color:var(--vx-txt-1)}.where.svelte-ujy0nl .glyph:where(.svelte-ujy0nl){font-family:var(--vx-mono);color:var(--vx-cyan-2);width:16px}.where.svelte-ujy0nl .tag:where(.svelte-ujy0nl){margin-left:auto;font-family:var(--vx-mono);font-size:10px;color:var(--vx-txt-3)}.open-settings.svelte-ujy0nl{margin-top:auto;align-self:flex-start}.vx-btn.small.svelte-ujy0nl{height:34px;padding:0 12px;font-size:12px}@media (max-width: 1100px){.done-step.svelte-ujy0nl{grid-template-columns:1fr;align-content:start}}.vx-root.svelte-18pn5kx{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;overflow:hidden}.vx-titlebar.svelte-18pn5kx{height:46px;flex:none;display:flex;align-items:center;gap:9px;padding:0 18px;border-bottom:1px solid var(--vx-line);background:#0e1116b3;z-index:2}.vx-logo.svelte-18pn5kx{width:20px;height:20px;border-radius:5px}.vx-brand.svelte-18pn5kx{font-weight:600;font-size:14.5px;letter-spacing:-.01em}.vx-brand.svelte-18pn5kx span:where(.svelte-18pn5kx){color:var(--vx-cyan-0)}.vx-mono.svelte-18pn5kx{font-family:var(--vx-mono);font-size:11px;letter-spacing:.1em}.vx-dim.svelte-18pn5kx{color:var(--vx-txt-2)}.vx-faint.svelte-18pn5kx{color:var(--vx-txt-3)}.vx-spacer.svelte-18pn5kx{flex:1}.vx-screen.svelte-18pn5kx{flex:1;min-height:0;display:flex;flex-direction:column;padding:22px 32px 16px;overflow:auto;opacity:1;transform:none;transition:opacity .2s ease,transform .2s var(--vx-ease)}.vx-screen.vx-leaving.svelte-18pn5kx{opacity:0;transform:translateY(10px)}.vx-loading.svelte-18pn5kx{margin:auto;display:flex;align-items:center;gap:10px;color:var(--vx-txt-2);font-size:13.5px}.vx-footer.svelte-18pn5kx{flex:none;display:grid;grid-template-columns:170px 1fr auto;align-items:center;gap:28px;border-top:1px solid var(--vx-line);background:#0e1116cc;padding:10px 32px 12px;z-index:3}.vx-nav-left.svelte-18pn5kx,.vx-nav-right.svelte-18pn5kx{display:flex;align-items:center;gap:12px}.vx-nav-right.svelte-18pn5kx{justify-content:flex-end}.vx-skip.svelte-18pn5kx{font-weight:500;color:var(--vx-txt-3)}.vx-blocker.svelte-18pn5kx{max-width:340px;font-size:12px;line-height:1.35;color:var(--vx-txt-2);text-align:right}.vx-track.svelte-18pn5kx,.vx-track-cell.svelte-18pn5kx{display:flex;align-items:center;min-width:0}.vx-track-step.svelte-18pn5kx{display:flex;flex-direction:column;align-items:center;gap:6px;min-width:62px;padding:4px 6px;border:0;background:transparent;font:inherit;color:var(--vx-txt-3);cursor:pointer;transition:color .3s}.vx-track-step.svelte-18pn5kx:disabled{cursor:default}.vx-track-step.vx-done.svelte-18pn5kx{color:var(--vx-txt-1)}.vx-track-step.vx-cur.svelte-18pn5kx{color:var(--vx-txt-0)}.vx-ring.svelte-18pn5kx{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-family:var(--vx-mono);font-size:12px;border:1px solid var(--vx-line-2);background:transparent;color:var(--vx-txt-3);transition:all .35s var(--vx-ease)}.vx-track-step.vx-done.svelte-18pn5kx .vx-ring:where(.svelte-18pn5kx){border-color:#22d4ef66;background:#22d4ef1a;color:var(--vx-cyan-1)}.vx-track-step.vx-cur.svelte-18pn5kx .vx-ring:where(.svelte-18pn5kx){border-color:var(--vx-cyan-0);background:var(--vx-cyan-0);color:#00222a;box-shadow:0 0 16px #22d4ef73}.vx-track-label.svelte-18pn5kx{font-size:11px;font-weight:500;white-space:nowrap}.vx-track-step.vx-cur.svelte-18pn5kx .vx-track-label:where(.svelte-18pn5kx){font-weight:600}.vx-track-line.svelte-18pn5kx{flex:1;min-width:8px;height:2px;margin:0 2px 19px;border-radius:1px;background:var(--vx-bg-4);overflow:hidden}.vx-track-line.svelte-18pn5kx>div:where(.svelte-18pn5kx){height:100%;background:var(--vx-cyan-0);transition:width .5s var(--vx-ease)}.vx-toast.svelte-18pn5kx{position:fixed;left:50%;bottom:84px;transform:translate(-50%);display:flex;align-items:center;gap:14px;max-width:70vw;padding:11px 14px;border-radius:10px;border:1px solid rgba(244,99,110,.45);background:#2a1215;color:#ffb3b8;font-size:13px;box-shadow:var(--vx-panel-shadow);animation:vxPop .25s var(--vx-ease);z-index:20}.vx-toast.svelte-18pn5kx button:where(.svelte-18pn5kx){border:0;background:transparent;color:inherit;cursor:pointer;font-size:13px}@media (max-width: 1000px){.vx-footer.svelte-18pn5kx{grid-template-columns:110px 1fr auto;gap:16px;padding:10px 18px 12px}.vx-track-label.svelte-18pn5kx{display:none}.vx-track-line.svelte-18pn5kx{margin-bottom:0}.vx-screen.svelte-18pn5kx{padding:18px 20px 14px}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}main.svelte-15mrihi{background-color:var(--color-obsidian-950);width:100vw;height:100vh;padding:calc(var(--spacing,.25rem) * 5);color:var(--text);justify-content:center;align-items:flex-start;display:flex;overflow-y:auto}.card.svelte-15mrihi{gap:calc(var(--spacing,.25rem) * 4);flex-direction:column;width:100%;max-width:520px;display:flex}header.svelte-15mrihi{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 3);display:flex}.logo.svelte-15mrihi{height:calc(var(--spacing,.25rem) * 11);width:calc(var(--spacing,.25rem) * 11);border-radius:var(--radius-xl,.75rem);flex-shrink:0}h1.svelte-15mrihi{font-size:var(--text-lg,1.125rem);line-height:var(--tw-leading,var(--text-lg--line-height,calc(1.75 / 1.125)));--tw-leading:var(--leading-tight,1.25);line-height:var(--leading-tight,1.25);--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800);--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em);color:var(--color-white,#fff)}h2.svelte-15mrihi{margin-bottom:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em);color:var(--color-obsidian-400);text-transform:uppercase}.sub.svelte-15mrihi{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--color-obsidian-400);font-size:12.5px}.body.svelte-15mrihi{--tw-leading:var(--leading-relaxed,1.625);font-size:13px;line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-200)}.hint.svelte-15mrihi{--tw-leading:var(--leading-relaxed,1.625);font-size:11.5px;line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-400)}.notes-block.svelte-15mrihi{border-radius:var(--radius-lg,.5rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.notes-block.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.notes-block.svelte-15mrihi{padding:calc(var(--spacing,.25rem) * 3)}.notes.svelte-15mrihi{margin:calc(var(--spacing,.25rem) * 0);max-height:240px;font-family:var(--font-sans,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word;white-space:pre-wrap;color:var(--color-obsidian-200);overflow-y:auto}.warn.svelte-15mrihi{border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0033;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.warn.svelte-15mrihi{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 20%,transparent)}}.warn.svelte-15mrihi{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.warn.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.warn.svelte-15mrihi{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12.5px;line-height:var(--leading-relaxed,1.625);color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.warn.svelte-15mrihi{color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.error.svelte-15mrihi{border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3633;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.error.svelte-15mrihi{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.error.svelte-15mrihi{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.error.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.error.svelte-15mrihi{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12.5px;line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word;color:var(--color-red-400,oklch(70.4% .191 22.216))}.progress-block.svelte-15mrihi{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.bar.svelte-15mrihi{height:calc(var(--spacing,.25rem) * 2);background-color:#ffffff0d;border-radius:3.40282e38px;width:100%;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.bar.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.fill.svelte-15mrihi{background-color:var(--color-accent-blue);height:100%;transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-radius:3.40282e38px}.bar.indeterminate.svelte-15mrihi .fill:where(.svelte-15mrihi){width:33.3333%;animation:var(--animate-pulse,pulse 2s cubic-bezier(.4, 0, .6, 1) infinite)}footer.svelte-15mrihi{margin-top:calc(var(--spacing,.25rem) * 1);justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-wrap:wrap;display:flex}.left-actions.svelte-15mrihi{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;display:flex}.right-actions.svelte-15mrihi{align-items:center;gap:calc(var(--spacing,.25rem) * 2);margin-left:auto;display:flex}.btn-primary.svelte-15mrihi{cursor:pointer;border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-bold,700);font-size:12.5px;font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 14px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-primary.svelte-15mrihi:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 18px var(--tw-shadow-color,#38bdf873);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-secondary.svelte-15mrihi{cursor:pointer;border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-800);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-semibold,600);font-size:12.5px;font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-300);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-secondary.svelte-15mrihi:hover{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-15mrihi:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 10%,transparent)}}.btn-secondary.svelte-15mrihi:hover{background-color:var(--color-obsidian-700);color:var(--color-white,#fff)}.btn-secondary.svelte-15mrihi:disabled,.btn-primary.svelte-15mrihi:disabled{cursor:default;opacity:.6;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.link.svelte-15mrihi{cursor:pointer;border-style:var(--tw-border-style);padding:calc(var(--spacing,.25rem) * 0);text-align:left;--tw-font-weight:var(--font-weight-semibold,600);font-size:12px;font-weight:var(--font-weight-semibold,600);color:var(--color-accent-blue);text-underline-offset:2px;background-color:#0000;border-width:0;text-decoration-line:underline}.centered.svelte-15mrihi{justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 8);flex-direction:column;display:flex}.spinner.svelte-15mrihi{height:calc(var(--spacing,.25rem) * 7);width:calc(var(--spacing,.25rem) * 7);animation:var(--animate-spin,spin 1s linear infinite);border-style:var(--tw-border-style);border-width:2.5px;border-color:#ffffff0d;border-radius:3.40282e38px}@supports (color:color-mix(in lab,red,red)){.spinner.svelte-15mrihi{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.spinner.svelte-15mrihi{border-top-color:var(--color-accent-blue)}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--color-obsidian-950:#08090b;--color-obsidian-900:#0d0e12;--color-obsidian-800:#14171f;--color-obsidian-700:#1e222d;--color-obsidian-300:#9ca3af;--color-obsidian-100:#e5e7eb;--color-accent-tangerine:#ff6b35;--color-accent-blue:#38bdf8;--color-accent-green:#10b981;--radius-desktop:6px;--animate-border-pulse:border-pulse 1.5s infinite;--animate-flash:flash 1s infinite;--transition-snappy:all .25s cubic-bezier(.175, .885, .32, 1.2);--transition-snappy-fast:all .15s cubic-bezier(.175, .885, .32, 1.275)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,var(--font-sans,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"));font-feature-settings:var(--default-font-feature-settings,initial);font-variation-settings:var(--default-font-variation-settings,initial);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace));font-feature-settings:var(--default-mono-font-feature-settings,initial);font-variation-settings:var(--default-mono-font-variation-settings,initial);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing,.25rem) * 0)}.-top-0\.5{top:calc(var(--spacing,.25rem) * -.5)}.top-0{top:calc(var(--spacing,.25rem) * 0)}.top-2\.5{top:calc(var(--spacing,.25rem) * 2.5)}.top-\[15\%\]{top:15%}.right-0{right:calc(var(--spacing,.25rem) * 0)}.right-3\.5{right:calc(var(--spacing,.25rem) * 3.5)}.right-6{right:calc(var(--spacing,.25rem) * 6)}.-bottom-0\.5{bottom:calc(var(--spacing,.25rem) * -.5)}.bottom-6{bottom:calc(var(--spacing,.25rem) * 6)}.left-0{left:calc(var(--spacing,.25rem) * 0)}.isolate{isolation:isolate}.z-10{z-index:10}.z-\[100\]{z-index:100}.z-\[200\]{z-index:200}.z-\[2000\]{z-index:2000}.col-span-full{grid-column:1/-1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing,.25rem) * 0)}.my-1{margin-block:calc(var(--spacing,.25rem) * 1)}.mt-0\.5{margin-top:calc(var(--spacing,.25rem) * .5)}.mt-1{margin-top:calc(var(--spacing,.25rem) * 1)}.mt-1\.5{margin-top:calc(var(--spacing,.25rem) * 1.5)}.mt-2{margin-top:calc(var(--spacing,.25rem) * 2)}.mt-2\.5{margin-top:calc(var(--spacing,.25rem) * 2.5)}.mt-3\.5{margin-top:calc(var(--spacing,.25rem) * 3.5)}.mt-4{margin-top:calc(var(--spacing,.25rem) * 4)}.mt-6{margin-top:calc(var(--spacing,.25rem) * 6)}.mb-1{margin-bottom:calc(var(--spacing,.25rem) * 1)}.mb-2{margin-bottom:calc(var(--spacing,.25rem) * 2)}.mb-3{margin-bottom:calc(var(--spacing,.25rem) * 3)}.mb-3\.5{margin-bottom:calc(var(--spacing,.25rem) * 3.5)}.mb-4{margin-bottom:calc(var(--spacing,.25rem) * 4)}.mb-5{margin-bottom:calc(var(--spacing,.25rem) * 5)}.ml-2\.5{margin-left:calc(var(--spacing,.25rem) * 2.5)}.ml-4{margin-left:calc(var(--spacing,.25rem) * 4)}.ml-6{margin-left:calc(var(--spacing,.25rem) * 6)}.box-border{box-sizing:border-box}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\.5{height:calc(var(--spacing,.25rem) * 1.5)}.h-2{height:calc(var(--spacing,.25rem) * 2)}.h-3\.5{height:calc(var(--spacing,.25rem) * 3.5)}.h-4{height:calc(var(--spacing,.25rem) * 4)}.h-5{height:calc(var(--spacing,.25rem) * 5)}.h-7{height:calc(var(--spacing,.25rem) * 7)}.h-11{height:calc(var(--spacing,.25rem) * 11)}.h-16{height:calc(var(--spacing,.25rem) * 16)}.h-\[5px\]{height:5px}.h-\[70\%\]{height:70%}.h-full{height:100%}.h-screen{height:100vh}.max-h-60{max-height:calc(var(--spacing,.25rem) * 60)}.max-h-\[85vh\]{max-height:85vh}.max-h-\[180px\]{max-height:180px}.max-h-\[240px\]{max-height:240px}.max-h-\[340px\]{max-height:340px}.min-h-\[42px\]{min-height:42px}.min-h-\[70px\]{min-height:70px}.min-h-\[80px\]{min-height:80px}.min-h-\[150px\]{min-height:150px}.w-1\.5{width:calc(var(--spacing,.25rem) * 1.5)}.w-1\/3{width:33.3333%}.w-2{width:calc(var(--spacing,.25rem) * 2)}.w-4{width:calc(var(--spacing,.25rem) * 4)}.w-5{width:calc(var(--spacing,.25rem) * 5)}.w-7{width:calc(var(--spacing,.25rem) * 7)}.w-11{width:calc(var(--spacing,.25rem) * 11)}.w-16{width:calc(var(--spacing,.25rem) * 16)}.w-20{width:calc(var(--spacing,.25rem) * 20)}.w-\[2px\]{width:2px}.w-\[3px\]{width:3px}.w-\[5px\]{width:5px}.w-\[90\%\]{width:90%}.w-fit{width:fit-content}.w-full{width:100%}.w-screen{width:100vw}.max-w-\[280px\]{max-width:280px}.max-w-\[500px\]{max-width:500px}.max-w-\[520px\]{max-width:520px}.min-w-0{min-width:calc(var(--spacing,.25rem) * 0)}.min-w-\[36px\]{min-width:36px}.min-w-\[135px\]{min-width:135px}.min-w-\[190px\]{min-width:190px}.flex-1{flex:1}.flex-\[2\]{flex:2}.flex-shrink,.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-y-0\.5{--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-\[1px\]{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-\[0\.97\]{scale:.97}.scale-\[1\.01\]{scale:1.01}.scale-\[1\.02\]{scale:1.02}.scale-\[1\.18\]{scale:1.18}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.transform\!{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)!important}.animate-\[floating_4s_ease-in-out_infinite\]{animation:4s ease-in-out infinite floating}.animate-\[ripple_1\.6s_infinite_ease-out\]{animation:1.6s ease-out infinite ripple}.animate-border-pulse{animation:var(--animate-border-pulse)}.animate-flash{animation:var(--animate-flash)}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-y{resize:vertical}.list-none{list-style-type:none}.flex-col{flex-direction:column}.flex-row\!{flex-direction:row!important}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing,.25rem) * .5)}.gap-1{gap:calc(var(--spacing,.25rem) * 1)}.gap-1\.5{gap:calc(var(--spacing,.25rem) * 1.5)}.gap-2{gap:calc(var(--spacing,.25rem) * 2)}.gap-2\.5{gap:calc(var(--spacing,.25rem) * 2.5)}.gap-3{gap:calc(var(--spacing,.25rem) * 3)}.gap-3\.5{gap:calc(var(--spacing,.25rem) * 3.5)}.gap-4{gap:calc(var(--spacing,.25rem) * 4)}.gap-5{gap:calc(var(--spacing,.25rem) * 5)}.gap-\[2px\]{gap:2px}.gap-\[10px\]{gap:10px}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded\!{border-radius:.25rem!important}.rounded-\[99px_0_0_99px\]{border-radius:99px 0 0 99px}.rounded-\[var\(--radius\)\]{border-radius:var(--radius)}.rounded-desktop{border-radius:var(--radius-desktop)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg,.5rem)}.rounded-md{border-radius:var(--radius-md,.375rem)}.rounded-xl{border-radius:var(--radius-xl,.75rem)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[2\.5px\]{border-style:var(--tw-border-style);border-width:2.5px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-none\!{--tw-border-style:none!important;border-style:none!important}.border-solid{--tw-border-style:solid;border-style:solid}.border-\[\#f43f5e\]{border-color:#f43f5e}.border-\[\#fbbf24\]{border-color:#fbbf24}.border-\[var\(--accent\)\]{border-color:var(--accent)}.border-\[var\(--accent2\)\],.border-\[var\(--accent2\)\]\/25{border-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--accent2\)\]\/25{border-color:color-mix(in oklab,var(--accent2) 25%,transparent)}}.border-\[var\(--border\)\]{border-color:var(--border)}.border-\[var\(--color-accent-blue\)\]{border-color:var(--color-accent-blue)}.border-\[var\(--color-accent-blue\)\]\/15{border-color:#38bdf826}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-accent-blue\)\]\/15{border-color:color-mix(in oklab,var(--color-accent-blue) 15%,transparent)}}.border-\[var\(--color-accent-blue\)\]\/20{border-color:#38bdf833}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-accent-blue\)\]\/20{border-color:color-mix(in oklab,var(--color-accent-blue) 20%,transparent)}}.border-\[var\(--color-accent-blue\)\]\/25{border-color:#38bdf840}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-accent-blue\)\]\/25{border-color:color-mix(in oklab,var(--color-accent-blue) 25%,transparent)}}.border-amber-500\/20{border-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/20{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 20%,transparent)}}.border-amber-500\/25{border-color:#f99c0040}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/25{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.border-amber-500\/40{border-color:#f99c0066}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/40{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 40%,transparent)}}.border-amber-500\/70\!{border-color:#f99c00b3!important}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/70\!{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 70%,transparent)!important}}.border-emerald-500\/25{border-color:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/25{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 25%,transparent)}}.border-red-500{border-color:var(--color-red-500,oklch(63.7% .237 25.331))}.border-red-500\!{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.border-red-500\/20{border-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.border-red-500\/20{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.border-red-500\/25{border-color:#fb2c3640}@supports (color:color-mix(in lab,red,red)){.border-red-500\/25{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 25%,transparent)}}.border-slate-500\/30{border-color:#62748e4d}@supports (color:color-mix(in lab,red,red)){.border-slate-500\/30{border-color:color-mix(in oklab,var(--color-slate-500,oklch(55.4% .046 257.417)) 30%,transparent)}}.border-white\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.border-white\/5{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.border-white\/12{border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.border-white\/12{border-color:color-mix(in oklab,var(--color-white,#fff) 12%,transparent)}}.border-white\/15{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.border-white\/15{border-color:color-mix(in oklab,var(--color-white,#fff) 15%,transparent)}}.border-white\/\[0\.03\]{border-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.03\]{border-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.border-white\/\[0\.05\]{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.05\]{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.border-yellow-500\/30{border-color:#edb2004d}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/30{border-color:color-mix(in oklab,var(--color-yellow-500,oklch(79.5% .184 86.047)) 30%,transparent)}}.border-t-\[var\(--color-accent-blue\)\]{border-top-color:var(--color-accent-blue)}.bg-\[\#1e2436\]{background-color:#1e2436}.bg-\[\#39ff14\]{background-color:#39ff14}.bg-\[\#444\]{background-color:#444}.bg-\[\#ff6d00\]{background-color:#ff6d00}.bg-\[\#ffab00\]{background-color:#ffab00}.bg-\[rgba\(244\,63\,94\,0\.05\)\]{background-color:#f43f5e0d}.bg-\[rgba\(251\,191\,36\,0\.05\)\]{background-color:#fbbf240d}.bg-\[var\(--accent\)\]{background-color:var(--accent)}.bg-\[var\(--accent2\)\],.bg-\[var\(--accent2\)\]\/8{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--accent2\)\]\/8{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.bg-\[var\(--accent2\)\]\/10{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--accent2\)\]\/10{background-color:color-mix(in oklab,var(--accent2) 10%,transparent)}}.bg-\[var\(--accent2\)\]\/15{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--accent2\)\]\/15{background-color:color-mix(in oklab,var(--accent2) 15%,transparent)}}.bg-\[var\(--bg\)\]{background-color:var(--bg)}.bg-\[var\(--border\)\]{background-color:var(--border)}.bg-\[var\(--color-accent-blue\)\]{background-color:var(--color-accent-blue)}.bg-\[var\(--color-accent-blue\)\]\/8{background-color:#38bdf814}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--color-accent-blue\)\]\/8{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.bg-\[var\(--color-accent-green\)\]{background-color:var(--color-accent-green)}.bg-\[var\(--color-obsidian-300\)\]{background-color:var(--color-obsidian-300)}.bg-\[var\(--color-obsidian-700\)\]{background-color:var(--color-obsidian-700)}.bg-\[var\(--color-obsidian-800\)\]{background-color:var(--color-obsidian-800)}.bg-\[var\(--color-obsidian-900\)\]{background-color:var(--color-obsidian-900)}.bg-\[var\(--color-obsidian-950\)\]{background-color:var(--color-obsidian-950)}.bg-\[var\(--surface2\)\]{background-color:var(--surface2)}.bg-accent-blue{background-color:var(--color-accent-blue)}.bg-accent-blue\!{background-color:var(--color-accent-blue)!important}.bg-amber-400{background-color:var(--color-amber-400,oklch(82.8% .189 84.429))}.bg-amber-500\/6{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/6{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.bg-amber-950\/30{background-color:#4619014d}@supports (color:color-mix(in lab,red,red)){.bg-amber-950\/30{background-color:color-mix(in oklab,var(--color-amber-950,oklch(27.9% .077 45.635)) 30%,transparent)}}.bg-black\/25{background-color:#00000040}@supports (color:color-mix(in lab,red,red)){.bg-black\/25{background-color:color-mix(in oklab,var(--color-black,#000) 25%,transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black,#000) 40%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black,#000) 60%,transparent)}}.bg-cyan-500\/15{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.bg-cyan-500\/15{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.bg-emerald-500\/6{background-color:#00bb7f0f}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/6{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 6%,transparent)}}.bg-emerald-500\/15{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/15{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.bg-emerald-950\/80{background-color:#002c22cc}@supports (color:color-mix(in lab,red,red)){.bg-emerald-950\/80{background-color:color-mix(in oklab,var(--color-emerald-950,oklch(26.2% .051 172.552)) 80%,transparent)}}.bg-red-400\/10{background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.bg-red-400\/10{background-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 10%,transparent)}}.bg-red-500{background-color:var(--color-red-500,oklch(63.7% .237 25.331))}.bg-red-500\/6{background-color:#fb2c360f}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/6{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 6%,transparent)}}.bg-red-500\/8{background-color:#fb2c3614}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/8{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 8%,transparent)}}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.bg-red-500\/15{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/15{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 15%,transparent)}}.bg-slate-500\/10{background-color:#62748e1a}@supports (color:color-mix(in lab,red,red)){.bg-slate-500\/10{background-color:color-mix(in oklab,var(--color-slate-500,oklch(55.4% .046 257.417)) 10%,transparent)}}.bg-transparent{background-color:#0000}.bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/5{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.bg-white\/\[0\.02\]{background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.02\]{background-color:color-mix(in oklab,var(--color-white,#fff) 2%,transparent)}}.bg-white\/\[0\.03\]{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.03\]{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.bg-white\/\[0\.05\]{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.05\]{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.bg-white\/\[0\.08\]{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-white,#fff) 8%,transparent)}}.bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500,oklch(79.5% .184 86.047)) 10%,transparent)}}.object-contain{object-fit:contain}.p-0{padding:calc(var(--spacing,.25rem) * 0)}.p-0\.5{padding:calc(var(--spacing,.25rem) * .5)}.p-1{padding:calc(var(--spacing,.25rem) * 1)}.p-1\.5{padding:calc(var(--spacing,.25rem) * 1.5)}.p-2{padding:calc(var(--spacing,.25rem) * 2)}.p-2\.5{padding:calc(var(--spacing,.25rem) * 2.5)}.p-3{padding:calc(var(--spacing,.25rem) * 3)}.p-4{padding:calc(var(--spacing,.25rem) * 4)}.p-5{padding:calc(var(--spacing,.25rem) * 5)}.p-6{padding:calc(var(--spacing,.25rem) * 6)}.p-10{padding:calc(var(--spacing,.25rem) * 10)}.p-\[3px\]{padding:3px}.p-\[30px\]{padding:30px}.px-1{padding-inline:calc(var(--spacing,.25rem) * 1)}.px-1\.5{padding-inline:calc(var(--spacing,.25rem) * 1.5)}.px-1\.5\!{padding-inline:calc(var(--spacing,.25rem) * 1.5)!important}.px-2{padding-inline:calc(var(--spacing,.25rem) * 2)}.px-2\.5{padding-inline:calc(var(--spacing,.25rem) * 2.5)}.px-3{padding-inline:calc(var(--spacing,.25rem) * 3)}.px-3\.5{padding-inline:calc(var(--spacing,.25rem) * 3.5)}.px-4{padding-inline:calc(var(--spacing,.25rem) * 4)}.px-5{padding-inline:calc(var(--spacing,.25rem) * 5)}.py-0\.5{padding-block:calc(var(--spacing,.25rem) * .5)}.py-0\.5\!{padding-block:calc(var(--spacing,.25rem) * .5)!important}.py-1{padding-block:calc(var(--spacing,.25rem) * 1)}.py-1\.5{padding-block:calc(var(--spacing,.25rem) * 1.5)}.py-2{padding-block:calc(var(--spacing,.25rem) * 2)}.py-5{padding-block:calc(var(--spacing,.25rem) * 5)}.pt-2{padding-top:calc(var(--spacing,.25rem) * 2)}.pt-3\.5{padding-top:calc(var(--spacing,.25rem) * 3.5)}.pt-4{padding-top:calc(var(--spacing,.25rem) * 4)}.pt-\[14px\]{padding-top:14px}.pr-9{padding-right:calc(var(--spacing,.25rem) * 9)}.pb-4{padding-bottom:calc(var(--spacing,.25rem) * 4)}.pl-3{padding-left:calc(var(--spacing,.25rem) * 3)}.pl-3\.5{padding-left:calc(var(--spacing,.25rem) * 3.5)}.pl-4{padding-left:calc(var(--spacing,.25rem) * 4)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace)}.text-2xl{font-size:var(--text-2xl,1.5rem);line-height:var(--tw-leading,var(--text-2xl--line-height,calc(2 / 1.5)))}.text-base{font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ))}.text-lg{font-size:var(--text-lg,1.125rem);line-height:var(--tw-leading,var(--text-lg--line-height,calc(1.75 / 1.125)))}.text-sm{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)))}.text-xl{font-size:var(--text-xl,1.25rem);line-height:var(--tw-leading,var(--text-xl--line-height,calc(1.75 / 1.25)))}.text-xs{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)))}.text-\[7px\]{font-size:7px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11\.5px\]{font-size:11.5px}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-\[12px\]\!{font-size:12px!important}.text-\[13\.5px\]{font-size:13.5px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[32px\]{font-size:32px}.leading-5{--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5)}.leading-6{--tw-leading:calc(var(--spacing,.25rem) * 6);line-height:calc(var(--spacing,.25rem) * 6)}.leading-\[1\.1\]{--tw-leading:1.1;line-height:1.1}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625)}.font-\[850\]{--tw-font-weight:850;font-weight:850}.font-bold{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800)}.font-extrabold\!{--tw-font-weight:var(--font-weight-extrabold,800)!important;font-weight:var(--font-weight-extrabold,800)!important}.font-medium{--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500)}.font-normal{--tw-font-weight:var(--font-weight-normal,400);font-weight:var(--font-weight-normal,400)}.font-semibold{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600)}.tracking-\[-0\.5px\]{--tw-tracking:-.5px;letter-spacing:-.5px}.tracking-\[0\.06em\]{--tw-tracking:.06em;letter-spacing:.06em}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-tight{--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em)}.tracking-wide{--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em)}.tracking-wider{--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--accent\)\]{color:var(--accent)}.text-\[var\(--accent2\)\]{color:var(--accent2)}.text-\[var\(--color-accent-blue\)\]{color:var(--color-accent-blue)}.text-\[var\(--color-obsidian-200\)\]{color:var(--color-obsidian-200)}.text-\[var\(--color-obsidian-300\)\]{color:var(--color-obsidian-300)}.text-\[var\(--color-obsidian-400\)\]{color:var(--color-obsidian-400)}.text-\[var\(--text\)\]{color:var(--text)}.text-\[var\(--text-muted\)\]{color:var(--text-muted)}.text-accent-blue{color:var(--color-accent-blue)}.text-amber-200\/80{color:#fee685cc}@supports (color:color-mix(in lab,red,red)){.text-amber-200\/80{color:color-mix(in oklab,var(--color-amber-200,oklch(92.4% .12 95.746)) 80%,transparent)}}.text-amber-300\/90{color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.text-amber-300\/90{color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.text-amber-400{color:var(--color-amber-400,oklch(82.8% .189 84.429))}.text-black{color:var(--color-black,#000)}.text-black\!{color:var(--color-black,#000)!important}.text-cyan-200{color:var(--color-cyan-200,oklch(91.7% .08 205.041))}.text-cyan-300{color:var(--color-cyan-300,oklch(86.5% .127 207.078))}.text-emerald-200{color:var(--color-emerald-200,oklch(90.5% .093 164.15))}.text-emerald-300{color:var(--color-emerald-300,oklch(84.5% .143 164.978))}.text-emerald-300\/90{color:#5ee9b5e6}@supports (color:color-mix(in lab,red,red)){.text-emerald-300\/90{color:color-mix(in oklab,var(--color-emerald-300,oklch(84.5% .143 164.978)) 90%,transparent)}}.text-emerald-400{color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.text-neutral-900{color:var(--color-neutral-900,oklch(20.5% 0 0))}.text-obsidian-300{color:var(--color-obsidian-300)}.text-red-300{color:var(--color-red-300,oklch(80.8% .114 19.571))}.text-red-400{color:var(--color-red-400,oklch(70.4% .191 22.216))}.text-slate-100{color:var(--color-slate-100,oklch(96.8% .007 247.896))}.text-slate-200{color:var(--color-slate-200,oklch(92.9% .013 255.508))}.text-slate-300{color:var(--color-slate-300,oklch(86.9% .022 252.894))}.text-white{color:var(--color-white,#fff)}.text-white\/30{color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.text-white\/30{color:color-mix(in oklab,var(--color-white,#fff) 30%,transparent)}}.text-yellow-200{color:var(--color-yellow-200,oklch(94.5% .129 101.54))}.text-yellow-500{color:var(--color-yellow-500,oklch(79.5% .184 86.047))}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.not-italic{font-style:normal}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.no-underline{text-decoration-line:none}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-55{opacity:.55}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_6px_\#ffab00\]{--tw-shadow:0 0 6px var(--tw-shadow-color,#ffab00);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_8px_var\(--color-accent-blue\)\]{--tw-shadow:0 0 8px var(--tw-shadow-color,var(--color-accent-blue));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_2px_6px_rgba\(56\,189\,248\,0\.05\)\]{--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf80d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_4px_12px_rgba\(0\,0\,0\,0\.15\)\]{--tw-shadow:0 4px 12px var(--tw-shadow-color,#00000026);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_4px_14px_rgba\(56\,189\,248\,0\.3\)\]{--tw-shadow:0 4px 14px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_6px_14px_rgba\(56\,189\,248\,0\.35\)\]{--tw-shadow:0 6px 14px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_6px_18px_rgba\(56\,189\,248\,0\.45\)\]{--tw-shadow:0 6px 18px var(--tw-shadow-color,#38bdf873);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_10px_30px_rgba\(0\,0\,0\,0\.4\)\,_0_0_12px_rgba\(56\,189\,248\,0\.15\)\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#0006), 0 0 12px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_10px_30px_rgba\(0\,0\,0\,0\.5\)\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[inset_0_2px_4px_rgba\(0\,0\,0\,0\.2\)\]{--tw-shadow:inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2\!{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.ring-red-500\/20\!{--tw-ring-color:#fb2c3633!important}@supports (color:color-mix(in lab,red,red)){.ring-red-500\/20\!{--tw-ring-color:color-mix(in oklab, var(--color-red-500,oklch(63.7% .237 25.331)) 20%, transparent)!important}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.brightness-110{--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_0_6px_rgba\(234\,179\,8\,0\.3\)\]{--tw-drop-shadow-size:drop-shadow(0 0 6px var(--tw-drop-shadow-color,#eab3084d));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_0_10px_rgba\(56\,189\,248\,0\.6\)\]{--tw-drop-shadow-size:drop-shadow(0 0 10px var(--tw-drop-shadow-color,#38bdf899));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_2px_8px_rgba\(56\,189\,248\,0\.3\)\]{--tw-drop-shadow-size:drop-shadow(0 2px 8px var(--tw-drop-shadow-color,#38bdf84d));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_4px_24px_rgba\(56\,189\,248\,0\.35\)\]{--tw-drop-shadow-size:drop-shadow(0 4px 24px var(--tw-drop-shadow-color,#38bdf859));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter\!{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)!important}.backdrop-blur-\[4px\]{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-\[left\]{transition-property:left;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-250{--tw-duration:.25s;transition-duration:.25s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-\[50ms\]{--tw-duration:50ms;transition-duration:50ms}.ease-in-out{--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1))}.ease-out{--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.hover\:border-\[\#fbbf24\]\/80:hover{border-color:#fbbf24cc}.hover\:border-accent-blue:hover{border-color:var(--color-accent-blue)}.hover\:bg-\[var\(--accent2\)\]:hover{background-color:var(--accent2)}.hover\:bg-\[var\(--border\)\]:hover{background-color:var(--border)}.hover\:bg-black\/35:hover{background-color:#00000059}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/35:hover{background-color:color-mix(in oklab,var(--color-black,#000) 35%,transparent)}}.hover\:text-white:hover{color:var(--color-white,#fff)}}.focus\:border-accent-blue:focus{border-color:var(--color-accent-blue)}.focus\:border-red-500\!:focus{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.focus\:bg-black\/35:focus{background-color:#00000059}@supports (color:color-mix(in lab,red,red)){.focus\:bg-black\/35:focus{background-color:color-mix(in oklab,var(--color-black,#000) 35%,transparent)}}.focus\:ring-red-500\/20\!:focus{--tw-ring-color:#fb2c3633!important}@supports (color:color-mix(in lab,red,red)){.focus\:ring-red-500\/20\!:focus{--tw-ring-color:color-mix(in oklab, var(--color-red-500,oklch(63.7% .237 25.331)) 20%, transparent)!important}}.disabled\:opacity-50:disabled{opacity:.5}}section{flex-direction:column;gap:20px;max-width:650px;animation:.25s cubic-bezier(.175,.885,.32,1.15) forwards slideIn;display:flex}@keyframes slideIn{0%{opacity:0;transform:translateY(6px)scale(.995)}to{opacity:1;transform:none}}h2{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em);color:var(--color-obsidian-100);margin-bottom:2px;font-size:20px}h3{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em);text-transform:uppercase;color:var(--color-accent-blue);margin-bottom:8px;font-size:11px}.field-group{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;flex-direction:column;gap:16px;padding:18px 20px;transition:all .2s ease-out;display:flex}.field-group:hover{background-color:#ffffff0d;border-color:#ffffff1f}.field{cursor:pointer;justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 4);padding-top:4px;padding-bottom:4px;display:flex}.field.col{align-items:stretch;gap:calc(var(--spacing,.25rem) * 1.5);flex-direction:column;width:100%}.field span{color:var(--text);flex:1;font-size:13px;font-weight:500;transition:color .15s ease-out}.field:hover span{color:#fff}.field select{min-width:190px;padding:8px 36px 8px 12px;font-size:13px}.hint{color:var(--text-muted);margin-top:4px;font-size:11px;line-height:1.625}.hint code{background-color:var(--color-obsidian-950);color:var(--color-accent-blue);border:1px solid var(--border);border-radius:4px;padding:2px 6px;font-family:monospace;font-size:10px}.field-label-row{justify-content:space-between;align-items:center;width:100%;margin-bottom:2px;display:flex}.btn-add-inline{color:var(--accent2);cursor:pointer;border-radius:var(--radius);background:0 0;border:none;padding:4px 8px;font-size:11px;font-weight:700;transition:all .15s ease-out}.btn-add-inline:hover{color:#fff;background-color:#38bdf81a}.dynamic-list{flex-direction:column;gap:8px;width:100%;margin-top:4px;display:flex}.dynamic-list-row{align-items:center;gap:calc(var(--spacing,.25rem) * 2);width:100%;display:flex}.dynamic-list-row input,.dynamic-list-row select{min-width:calc(var(--spacing,.25rem) * 0)}.btn-remove-inline{box-sizing:border-box;color:#f87171;cursor:pointer;border-radius:var(--radius);background-color:#ef444414;border:1px solid #ef444433;justify-content:center;align-items:center;height:34px;padding:6px 12px;font-size:12px;font-weight:700;transition:all .15s ease-out;display:flex}.btn-remove-inline:hover{color:#fff;background-color:#ef4444;border-color:#ef4444;box-shadow:0 2px 8px #ef444440}.warning-alert{align-items:center;gap:calc(var(--spacing,.25rem) * 2);color:#f59e0b;border-radius:var(--radius);background-color:#f59e0b1a;border:1px solid #f59e0b40;margin-top:4px;padding:10px 14px;font-size:12px;font-weight:500;animation:.25s cubic-bezier(.175,.885,.32,1.15) forwards slideIn;display:flex}@keyframes border-pulse{0%,to{border-color:#f43f5e66}50%{border-color:#f43f5e}}@keyframes flash{0%,to{opacity:1}50%{opacity:.3}}:root{--bg:var(--color-obsidian-950);--surface:var(--color-obsidian-900);--surface2:var(--color-obsidian-800);--accent:var(--color-accent-blue);--accent2:var(--color-accent-blue);--text:var(--color-obsidian-100);--text-muted:var(--color-obsidian-300);--border:#ffffff0d;--radius:var(--radius-desktop);--recording-color:var(--color-accent-tangerine);--idle-color:var(--color-accent-blue);--speaking-color:var(--color-accent-green);--transition-spring:var(--transition-snappy);--transition-spring-fast:var(--transition-snappy-fast)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body,#app{width:100%;height:100%;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;font-family:Outfit,Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;overflow:hidden}html.overlay-window,body.overlay-window,body.overlay-window #app{box-shadow:none!important;background:0 0!important;border:none!important;outline:none!important;overflow:hidden!important}body.overlay-window *{box-shadow:none!important;outline:none!important}body.overlay-window ::-webkit-scrollbar{width:0!important;height:0!important;display:none!important}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#ffffff0f;border-radius:99px;transition:background .2s}::-webkit-scrollbar-thumb:hover{background:#ffffff26}.sr-only{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}button{cursor:pointer;font-family:inherit;font-size:inherit;background:0 0;border:none;outline:none}input,select,textarea{font-family:inherit;font-size:inherit;outline:none}select{-webkit-appearance:none;appearance:none;background:var(--surface2) url("data:image/svg+xml;utf8,") no-repeat right 12px center;color:var(--text);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;transition:var(--transition-snappy-fast);background-size:10px;padding:8px 36px 8px 12px;box-shadow:0 4px 12px #00000026}select:hover{background-color:var(--color-obsidian-700);border-color:#ffffff1f;transform:translateY(-1px)}select:focus{border-color:var(--accent2);box-shadow:0 0 0 2px #38bdf826}select option{background-color:var(--color-obsidian-900);color:var(--text);padding:10px 12px}select:-webkit-autofill{-webkit-text-fill-color:var(--text)!important;-webkit-box-shadow:0 0 0px 1000px var(--color-obsidian-900) inset!important}select:-webkit-autofill:hover{-webkit-text-fill-color:var(--text)!important;-webkit-box-shadow:0 0 0px 1000px var(--color-obsidian-900) inset!important}select:-webkit-autofill:focus{-webkit-text-fill-color:var(--text)!important;-webkit-box-shadow:0 0 0px 1000px var(--color-obsidian-900) inset!important}.interactive-spring{transition:var(--transition-snappy)}.interactive-spring:hover{transform:scale(1.02)translateY(-1px)}.interactive-spring:active{transform:scale(.97)translateY(0)}input[type=checkbox]{-webkit-appearance:none;appearance:none;background:var(--color-obsidian-700);cursor:pointer;width:36px;height:20px;transition:var(--transition-spring-fast);border:1px solid var(--border);border-radius:99px;outline:none;position:relative}input[type=checkbox]:before{content:"";background:var(--color-obsidian-300);width:14px;height:14px;transition:var(--transition-spring-fast);border-radius:50%;position:absolute;top:2px;left:2px}input[type=checkbox]:checked{background:var(--color-accent-blue);border-color:var(--color-accent-blue)}input[type=checkbox]:checked:before{background:#fff;left:18px;box-shadow:0 2px 4px #0003}input[type=checkbox]:hover{border-color:#ffffff26}input[type=number],input[type=text],input[type=password]{background:var(--color-obsidian-950);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);min-width:170px;transition:var(--transition-spring-fast);outline:none;padding:8px 12px;font-size:13px;box-shadow:inset 0 2px 4px #0003}input[type=number]:hover,input[type=text]:hover,input[type=password]:hover{background-color:var(--color-obsidian-900);border-color:#ffffff26}input[type=number]:focus,input[type=text]:focus,input[type=password]:focus{border-color:var(--accent2);background-color:var(--color-obsidian-950);box-shadow:0 0 0 2px #38bdf826,inset 0 2px 4px #0003}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false} +@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial}}}.btn-action.svelte-da8msw{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-da8msw:hover{border-color:var(--text-muted);background-color:var(--border)}.hint.error.svelte-da8msw{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.svelte-da8msw:disabled{cursor:default;opacity:.6}.link.svelte-da8msw{cursor:pointer;border-style:var(--tw-border-style);padding:calc(var(--spacing,.25rem) * 0);color:inherit;text-underline-offset:2px;background-color:#0000;border-width:0;text-decoration-line:underline}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}.custom-select-wrapper.svelte-1heock4{flex:2;width:100%;min-width:190px;position:relative}.custom-select-trigger.svelte-1heock4{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-right:calc(var(--spacing,.25rem) * 9);text-align:left;--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text);--tw-shadow:0 4px 12px var(--tw-shadow-color,#00000026);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));-webkit-user-select:none;user-select:none;background:var(--surface2) url("data:image/svg+xml;utf8,") no-repeat right 12px center;background-size:10px}.custom-select-trigger.svelte-1heock4:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.custom-select-trigger.svelte-1heock4:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 12%,transparent)}}.custom-select-trigger.svelte-1heock4:hover{background-color:var(--color-obsidian-700)}.custom-select-trigger.svelte-1heock4:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-select-trigger.svelte-1heock4:disabled{cursor:not-allowed;opacity:.5;--tw-translate-y:calc(var(--spacing,.25rem) * 0)!important;translate:var(--tw-translate-x) var(--tw-translate-y)!important}.custom-dropdown-menu.svelte-1heock4{z-index:2000;gap:calc(var(--spacing,.25rem) * .5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 1);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex;overflow-y:auto}.custom-dropdown-item.svelte-1heock4{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);text-align:left;color:var(--text);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;background-color:#0000;border-style:none;font-size:13px;transition-duration:.15s}.custom-dropdown-item.svelte-1heock4:hover{background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.svelte-1heock4:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 4%,transparent)}}.custom-dropdown-item.selected.svelte-1heock4{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.selected.svelte-1heock4{background-color:color-mix(in oklab,var(--accent2) 10%,transparent)}}.custom-dropdown-item.selected.svelte-1heock4{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--accent2)}.custom-dropdown-item.svelte-1heock4:disabled{cursor:not-allowed;opacity:.4}.custom-dropdown-item.svelte-1heock4:disabled:hover{background-color:#0000}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-duration:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-leading:initial}}}.model-status-container.svelte-nfi4ak{margin-bottom:calc(var(--spacing,.25rem) * 3);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);min-height:42px;padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);align-items:center;font-size:13px;display:flex}.status-downloaded.svelte-nfi4ak{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-downloading.svelte-nfi4ak{color:var(--accent2)}.status-checking.svelte-nfi4ak{color:var(--text-muted)}.status-missing-wrapper.svelte-nfi4ak{justify-content:space-between;align-items:center;width:100%;display:flex}.status-missing.svelte-nfi4ak{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-download.svelte-nfi4ak{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}.btn-download.svelte-nfi4ak:hover{background-color:var(--accent2)}.field-input-error.svelte-nfi4ak{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.field-input-error.svelte-nfi4ak:focus{border-color:var(--color-red-500,oklch(63.7% .237 25.331));--tw-shadow:0 0 0 2px var(--tw-shadow-color,#ef444426), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field-error-msg.svelte-nfi4ak{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5);color:var(--color-red-400,oklch(70.4% .191 22.216))}.test-row.svelte-nfi4ak{margin-top:calc(var(--spacing,.25rem) * 4);align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-wrap:wrap;display:flex}.btn-test.svelte-nfi4ak{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding-inline:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}@media (hover:hover){.btn-test.svelte-nfi4ak:hover{background-color:var(--accent2)}}.btn-test.svelte-nfi4ak:disabled{cursor:not-allowed;opacity:.5}.status-pill.svelte-nfi4ak{border-radius:var(--radius);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500)}.status-pill.success.svelte-nfi4ak{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-nfi4ak{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 30%,transparent)}}.status-pill.success.svelte-nfi4ak{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-nfi4ak{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.status-pill.success.svelte-nfi4ak{color:var(--color-emerald-300,oklch(84.5% .143 164.978))}.status-pill.error.svelte-nfi4ak{border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-nfi4ak{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 30%,transparent)}}.status-pill.error.svelte-nfi4ak{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-nfi4ak{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 15%,transparent)}}.status-pill.error.svelte-nfi4ak{color:var(--color-red-300,oklch(80.8% .114 19.571))}.discovered-models.svelte-nfi4ak{margin-bottom:calc(var(--spacing,.25rem) * 3);align-items:center;gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}.model-tags.svelte-nfi4ak{align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);flex-wrap:wrap;display:flex}.tag-btn.svelte-nfi4ak{cursor:pointer;border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));border-radius:.25rem}@media (hover:hover){.tag-btn.svelte-nfi4ak:hover{background-color:var(--border);color:var(--color-white,#fff)}}.tag-btn.active.svelte-nfi4ak{border-color:var(--accent);background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.tag-btn.active.svelte-nfi4ak{background-color:color-mix(in oklab,var(--accent) 10%,transparent)}}.tag-btn.active.svelte-nfi4ak{color:var(--accent)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-tracking:initial;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}.val.svelte-1msnq7i{text-align:right;min-width:36px;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.vu-meter-container.svelte-1msnq7i{margin-block:calc(var(--spacing,.25rem) * 1);margin-bottom:calc(var(--spacing,.25rem) * 3);gap:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 1);flex-direction:column;display:flex}.vu-meter-info.svelte-1msnq7i{align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em);text-transform:uppercase;font-size:10px;display:flex}.vu-label.svelte-1msnq7i{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text-muted)}.vu-status-dot.svelte-1msnq7i{height:calc(var(--spacing,.25rem) * 1.5);width:calc(var(--spacing,.25rem) * 1.5);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));background-color:#444}.vu-status-dot.active.svelte-1msnq7i{--tw-shadow:0 0 8px var(--tw-shadow-color,#39ff14);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#39ff14}.vu-status-text.svelte-1msnq7i{color:var(--text);opacity:.7;margin-left:auto}.vu-meter-bar-wrapper.svelte-1msnq7i{box-sizing:border-box;height:calc(var(--spacing,.25rem) * 3.5);background-color:#0006;width:100%;position:relative}@supports (color:color-mix(in lab,red,red)){.vu-meter-bar-wrapper.svelte-1msnq7i{background-color:color-mix(in oklab,var(--color-black,#000) 40%,transparent)}}.vu-meter-bar-wrapper.svelte-1msnq7i{padding:3px}.vu-meter-bar.svelte-1msnq7i{gap:2px;width:100%;height:100%;display:flex;position:relative}.vu-segment.svelte-1msnq7i{background-color:#ffffff0d;flex:1;height:100%}@supports (color:color-mix(in lab,red,red)){.vu-segment.svelte-1msnq7i{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.vu-segment.svelte-1msnq7i{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:50ms;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:50ms;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.vu-segment.active.svelte-1msnq7i{--tw-shadow:0 0 4px var(--tw-shadow-color,#39ff144d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#39ff14}.vu-segment.active.orange.svelte-1msnq7i{--tw-shadow:0 0 4px var(--tw-shadow-color,#ff6d0080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#ff6d00}.vu-peak-marker.svelte-1msnq7i{pointer-events:none;top:calc(var(--spacing,.25rem) * -.5);bottom:calc(var(--spacing,.25rem) * -.5);--tw-shadow:0 0 6px var(--tw-shadow-color,#ffab00);width:2px;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:left;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:50ms;--tw-ease:linear;background-color:#ffab00;transition-duration:50ms;transition-timing-function:linear;position:absolute}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-leading:initial;--tw-tracking:initial}}}.modal-backdrop.svelte-oc07pw{inset:calc(var(--spacing,.25rem) * 0);z-index:1000;background-color:#0009;justify-content:center;align-items:center;display:flex;position:fixed}@supports (color:color-mix(in lab,red,red)){.modal-backdrop.svelte-oc07pw{background-color:color-mix(in oklab,var(--color-black,#000) 60%,transparent)}}.modal-backdrop.svelte-oc07pw{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.target-modal-backdrop.svelte-oc07pw{z-index:1100!important}.modal.svelte-oc07pw{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);width:90%;max-width:500px;max-height:85vh;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex}.modal-header.svelte-oc07pw{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);justify-content:space-between;align-items:center;display:flex}.modal-header.svelte-oc07pw h3:where(.svelte-oc07pw){margin:calc(var(--spacing,.25rem) * 0);--tw-font-weight:var(--font-weight-bold,700);font-size:15px;font-weight:var(--font-weight-bold,700)}.close-btn.svelte-oc07pw{cursor:pointer;--tw-border-style:none;font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));color:var(--text-muted);background-color:#0000;border-style:none}.close-btn.svelte-oc07pw:hover{color:var(--text)}.modal-body.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 3.5);padding:calc(var(--spacing,.25rem) * 5);flex-direction:column;display:flex;overflow-y:auto}.modal-footer.svelte-oc07pw{justify-content:flex-end;gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);display:flex}.morph-section.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 2.5);border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:1px;border-color:var(--border);background-color:#ffffff05;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.morph-section.svelte-oc07pw{background-color:color-mix(in oklab,var(--color-white,#fff) 2%,transparent)}}.morph-section.svelte-oc07pw{padding:calc(var(--spacing,.25rem) * 3)}.morph-section.svelte-oc07pw h5:where(.svelte-oc07pw),.processing-toggles.svelte-oc07pw h5:where(.svelte-oc07pw){margin:calc(var(--spacing,.25rem) * 0);margin-bottom:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);text-transform:uppercase}.processing-toggles.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding-top:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}.checkbox-field.svelte-oc07pw{cursor:pointer;align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted);display:flex}.checkbox-field.svelte-oc07pw input[type=checkbox]:where(.svelte-oc07pw){cursor:pointer}.checkbox-field.svelte-oc07pw:hover{color:var(--text)}.btn-action.svelte-oc07pw{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-oc07pw:hover{border-color:var(--text-muted);background-color:var(--border)}.btn-action.small.svelte-oc07pw{padding:calc(var(--spacing,.25rem) * 1);padding-inline:calc(var(--spacing,.25rem) * 2);font-size:10px}.btn-action.svelte-oc07pw:disabled{cursor:not-allowed;opacity:.5}.chat-actions.svelte-oc07pw{align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.chat-status.svelte-oc07pw{margin-top:calc(var(--spacing,.25rem) * 1.5);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);display:block}.chat-status.ok.svelte-oc07pw{color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.chat-status.bad.svelte-oc07pw{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.primary.svelte-oc07pw{--tw-border-style:none;background-color:var(--accent);color:var(--color-white,#fff);border-style:none}.btn-action.primary.svelte-oc07pw:hover{opacity:.9}.full-width-input.svelte-oc07pw{width:100%!important}textarea.svelte-oc07pw{resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--text);--tw-shadow:inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}textarea.svelte-oc07pw:hover{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){textarea.svelte-oc07pw:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 15%,transparent)}}textarea.svelte-oc07pw:hover{background-color:var(--color-obsidian-900)}textarea.svelte-oc07pw:focus{border-color:var(--accent2);background-color:var(--color-obsidian-950);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field.col.svelte-oc07pw{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;width:100%}.mcp-container.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 1.5);flex-direction:column;display:flex}.field-label-row.svelte-oc07pw{margin-bottom:calc(var(--spacing,.25rem) * .5);justify-content:space-between;align-items:center;width:100%;display:flex}.field-title.svelte-oc07pw{--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text)}.field-tag.svelte-oc07pw{border-style:var(--tw-border-style);border-width:1px;border-color:var(--accent2);border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-oc07pw{border-color:color-mix(in oklab,var(--accent2) 25%,transparent)}}.field-tag.svelte-oc07pw{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-oc07pw{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.field-tag.svelte-oc07pw{padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-leading:1;--tw-font-weight:var(--font-weight-bold,700);font-size:9px;line-height:1;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em);color:var(--accent2);text-transform:uppercase}p.hint.svelte-oc07pw{margin:calc(var(--spacing,.25rem) * 0);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}p.hint.svelte-oc07pw code:where(.svelte-oc07pw){border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);border-radius:.25rem;font-size:10px}.validation-error-msg.svelte-oc07pw{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-red-400,oklch(70.4% .191 22.216));display:block}.longer-display-label.svelte-oc07pw{min-width:255px!important}.animate-fade-in.svelte-oc07pw{animation:.2s cubic-bezier(.16,1,.3,1) fade-in}@keyframes svelte-oc07pw-fade-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-duration:initial;--tw-leading:initial;--tw-font-weight:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-tracking:initial}}}.backend-banner.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 1);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.backend-banner.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.backend-banner.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;transition-duration:.15s}.backend-banner.private.svelte-w4d8v7{border-color:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.backend-banner.private.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 25%,transparent)}}.backend-banner.private.svelte-w4d8v7{background-color:#00bb7f0f}@supports (color:color-mix(in lab,red,red)){.backend-banner.private.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 6%,transparent)}}.backend-banner.warn.svelte-w4d8v7{border-color:#f99c0040}@supports (color:color-mix(in lab,red,red)){.backend-banner.warn.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.backend-banner.warn.svelte-w4d8v7{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.backend-banner.warn.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.backend-banner.broken.svelte-w4d8v7{border-color:#fb2c3640}@supports (color:color-mix(in lab,red,red)){.backend-banner.broken.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 25%,transparent)}}.backend-banner.broken.svelte-w4d8v7{background-color:#fb2c360f}@supports (color:color-mix(in lab,red,red)){.backend-banner.broken.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 6%,transparent)}}.manual-enable-banner.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 1);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0040;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.manual-enable-banner.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.manual-enable-banner.svelte-w4d8v7{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.manual-enable-banner.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.manual-enable-banner.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;transition-duration:.15s}.banner-toggle.svelte-w4d8v7{cursor:pointer;align-items:center;gap:calc(var(--spacing,.25rem) * 2.5);--tw-border-style:none;width:100%;padding:calc(var(--spacing,.25rem) * 0);text-align:left;color:var(--text);-webkit-user-select:none;user-select:none;background-color:#0000;border-style:none;display:flex}.banner-title.svelte-w4d8v7{--tw-leading:var(--leading-normal,1.5);font-size:12.5px;line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);flex:1}.banner-chevron.svelte-w4d8v7{height:calc(var(--spacing,.25rem) * 4);width:calc(var(--spacing,.25rem) * 4);color:var(--text-muted);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));flex-shrink:0}.banner-chevron.expanded.svelte-w4d8v7{color:var(--text);rotate:180deg}.banner-content.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 2);width:100%;min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);border-top-style:var(--tw-border-style);border-color:#ffffff0d;border-top-width:1px;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.banner-content.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.banner-content.svelte-w4d8v7{padding-top:calc(var(--spacing,.25rem) * 2);padding-left:calc(var(--spacing,.25rem) * 6.5);font-size:12.5px}.backend-icon.svelte-w4d8v7{font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));--tw-leading:1;flex-shrink:0;line-height:1}.backend-detail.svelte-w4d8v7{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.backend-detail.error.svelte-w4d8v7{color:var(--color-red-400,oklch(70.4% .191 22.216))}.manual-enable-actions.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1)}.keys-rejected.svelte-w4d8v7{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3640;display:flex}@supports (color:color-mix(in lab,red,red)){.keys-rejected.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 25%,transparent)}}.keys-rejected.svelte-w4d8v7{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.keys-rejected.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.keys-rejected.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:var(--color-red-300,oklch(80.8% .114 19.571))}.keys-fragile.svelte-w4d8v7{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0040;display:flex}@supports (color:color-mix(in lab,red,red)){.keys-fragile.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.keys-fragile.svelte-w4d8v7{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.keys-fragile.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.keys-fragile.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:var(--color-amber-200,oklch(92.4% .12 95.746))}.keys-accepted.svelte-w4d8v7{color:#5ee9b5e6;font-size:11.5px}@supports (color:color-mix(in lab,red,red)){.keys-accepted.svelte-w4d8v7{color:color-mix(in oklab,var(--color-emerald-300,oklch(84.5% .143 164.978)) 90%,transparent)}}.keys-accepted.svelte-w4d8v7 code:where(.svelte-w4d8v7){background-color:#ffffff0d;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.keys-accepted.svelte-w4d8v7 code:where(.svelte-w4d8v7){background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.keys-accepted.svelte-w4d8v7 code:where(.svelte-w4d8v7){padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace)}.hotkeys-section.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 5);padding-bottom:calc(var(--spacing,.25rem) * 10);flex-direction:column;display:flex}.section-header.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 2);justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 5);display:flex}.description.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.bindings-list.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.binding-item.svelte-w4d8v7{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));background-color:#1a1f2e66;display:flex}.binding-item.svelte-w4d8v7:hover{border-color:var(--accent2);--tw-shadow:0 4px 20px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.binding-item.disabled.svelte-w4d8v7{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.binding-item.disabled.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.binding-item.disabled.svelte-w4d8v7{opacity:.55;background-image:repeating-linear-gradient(-45deg,#0000,#0000 10px,#00000040 10px 20px)}.binding-content.svelte-w4d8v7{min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex}.binding-header-row.svelte-w4d8v7{justify-content:space-between;align-items:center;width:100%;display:flex}.binding-title.svelte-w4d8v7{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.binding-row2.svelte-w4d8v7{justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.binding-targets.svelte-w4d8v7{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.binding-actions.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);justify-content:flex-end;align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);border-top-style:var(--tw-border-style);border-color:#ffffff0d;border-top-width:1px;display:flex}@supports (color:color-mix(in lab,red,red)){.binding-actions.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.binding-actions.svelte-w4d8v7{padding-top:calc(var(--spacing,.25rem) * 2)}.confirm-label.svelte-w4d8v7{color:var(--text-muted);font-size:11px}kbd.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);--tw-shadow:0 1px 0 var(--tw-shadow-color,#0006);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:.25rem}.empty-state.svelte-w4d8v7{border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:2px;border-color:var(--border);background-color:#00000026;flex-direction:column;grid-column:1/-1;justify-content:center;align-items:center;display:flex}@supports (color:color-mix(in lab,red,red)){.empty-state.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-black,#000) 15%,transparent)}}.empty-state.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 10);text-align:center}.empty-icon.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 2);font-size:32px}.empty-state.svelte-w4d8v7 p:where(.svelte-w4d8v7){margin:calc(var(--spacing,.25rem) * 0);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.btn-action.svelte-w4d8v7{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-w4d8v7:hover{border-color:var(--text-muted);background-color:var(--border)}.btn-action.primary.svelte-w4d8v7{--tw-border-style:none;background-color:var(--accent);color:var(--color-white,#fff);border-style:none}.btn-action.primary.svelte-w4d8v7:hover{opacity:.9}.btn-action.small.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 1);padding-inline:calc(var(--spacing,.25rem) * 2);font-size:11px}.btn-action.danger.svelte-w4d8v7{border-color:#ff656833}@supports (color:color-mix(in lab,red,red)){.btn-action.danger.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 20%,transparent)}}.btn-action.danger.svelte-w4d8v7{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.danger.svelte-w4d8v7:hover{border-color:var(--color-red-400,oklch(70.4% .191 22.216));background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.btn-action.danger.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 10%,transparent)}}.btn-add-wide.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 4);cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent2);width:100%;padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-style:none;display:flex}.btn-add-wide.svelte-w4d8v7:hover{--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-add-wide.svelte-w4d8v7:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.badge.svelte-w4d8v7{border-radius:var(--radius-xl,.75rem);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-semibold,600);font-size:10px;font-weight:var(--font-weight-semibold,600);text-transform:uppercase}.warn-note.svelte-w4d8v7{color:var(--accent-amber,#f0b429);font-size:11px;line-height:1.45}.badge.gesture.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.badge.gesture.svelte-w4d8v7{border-color:color-mix(in oklab,var(--accent2) 30%,transparent)}}.badge.gesture.svelte-w4d8v7{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.badge.gesture.svelte-w4d8v7{background-color:color-mix(in oklab,var(--accent2) 15%,transparent)}}.badge.gesture.svelte-w4d8v7{color:var(--accent2)}.badge.openai.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.badge.openai.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 30%,transparent)}}.badge.openai.svelte-w4d8v7{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.badge.openai.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.badge.openai.svelte-w4d8v7{color:var(--color-emerald-200,oklch(90.5% .093 164.15))}.badge.s1-mini.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.badge.s1-mini.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 30%,transparent)}}.badge.s1-mini.svelte-w4d8v7{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.badge.s1-mini.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.badge.s1-mini.svelte-w4d8v7{color:var(--color-cyan-200,oklch(91.7% .08 205.041))}.modal-backdrop.svelte-w4d8v7{inset:calc(var(--spacing,.25rem) * 0);z-index:1000;background-color:#0009;justify-content:center;align-items:center;display:flex;position:fixed}@supports (color:color-mix(in lab,red,red)){.modal-backdrop.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-black,#000) 60%,transparent)}}.modal-backdrop.svelte-w4d8v7{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.modal.svelte-w4d8v7{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);width:90%;max-width:500px;max-height:85vh;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex}.modal-header.svelte-w4d8v7{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);justify-content:space-between;align-items:center;display:flex}.modal-header.svelte-w4d8v7 h3:where(.svelte-w4d8v7){margin:calc(var(--spacing,.25rem) * 0);--tw-font-weight:var(--font-weight-bold,700);font-size:15px;font-weight:var(--font-weight-bold,700)}.close-btn.svelte-w4d8v7{cursor:pointer;--tw-border-style:none;font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));color:var(--text-muted);background-color:#0000;border-style:none}.close-btn.svelte-w4d8v7:hover{color:var(--text)}.modal-body.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 3.5);padding:calc(var(--spacing,.25rem) * 5);flex-direction:column;display:flex;overflow-y:auto}.modal-footer.svelte-w4d8v7{justify-content:flex-end;gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);display:flex}.morph-section.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 2.5);border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:1px;border-color:var(--border);background-color:#ffffff05;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.morph-section.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-white,#fff) 2%,transparent)}}.morph-section.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 3)}.processing-toggles.svelte-w4d8v7 h5:where(.svelte-w4d8v7){margin:calc(var(--spacing,.25rem) * 0);margin-bottom:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);text-transform:uppercase}.processing-toggles.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding-top:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}.checkbox-field.svelte-w4d8v7{cursor:pointer;align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted);display:flex}.checkbox-field.svelte-w4d8v7 input[type=checkbox]:where(.svelte-w4d8v7){cursor:pointer}.checkbox-field.svelte-w4d8v7:hover{color:var(--text)}.btn-add-inline.svelte-w4d8v7{cursor:pointer;--tw-border-style:none;padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));background-color:#0000;border-style:none;border-radius:.25rem}.btn-add-inline.svelte-w4d8v7:hover{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.btn-add-inline.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.btn-add-inline.svelte-w4d8v7:hover{color:var(--color-white,#fff)}.target-selects-list.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;width:100%;display:flex}.target-select-row.svelte-w4d8v7{align-items:center;gap:calc(var(--spacing,.25rem) * 2);width:100%;display:flex}.btn-remove-inline.svelte-w4d8v7{box-sizing:border-box;cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3633;justify-content:center;align-items:center;height:34px;display:flex}@supports (color:color-mix(in lab,red,red)){.btn-remove-inline.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.btn-remove-inline.svelte-w4d8v7{background-color:#fb2c3614}@supports (color:color-mix(in lab,red,red)){.btn-remove-inline.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 8%,transparent)}}.btn-remove-inline.svelte-w4d8v7{padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-red-400,oklch(70.4% .191 22.216));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-remove-inline.svelte-w4d8v7:hover{border-color:var(--color-red-500,oklch(63.7% .237 25.331));background-color:var(--color-red-500,oklch(63.7% .237 25.331));color:var(--color-white,#fff);--tw-shadow:0 2px 8px var(--tw-shadow-color,#ef444440);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.longer-display-label.svelte-w4d8v7{min-width:255px!important}.openai-target-settings.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 2.5);margin-bottom:calc(var(--spacing,.25rem) * 3.5);margin-left:calc(var(--spacing,.25rem) * 2.5);gap:calc(var(--spacing,.25rem) * 2);border-left-style:var(--tw-border-style);border-left-width:2px;border-color:var(--accent);padding-left:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}textarea.svelte-w4d8v7{resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--text);--tw-shadow:inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}textarea.svelte-w4d8v7:hover{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){textarea.svelte-w4d8v7:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 15%,transparent)}}textarea.svelte-w4d8v7:hover{background-color:var(--color-obsidian-900)}textarea.svelte-w4d8v7:focus{border-color:var(--accent2);background-color:var(--color-obsidian-950);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field.col.svelte-w4d8v7{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;width:100%}.field-label-row.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * .5);justify-content:space-between;align-items:center;width:100%;display:flex}.field-title.svelte-w4d8v7{--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text)}.field-tag.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:var(--accent2);border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-w4d8v7{border-color:color-mix(in oklab,var(--accent2) 25%,transparent)}}.field-tag.svelte-w4d8v7{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-w4d8v7{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.field-tag.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-leading:1;--tw-font-weight:var(--font-weight-bold,700);font-size:9px;line-height:1;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em);color:var(--accent2);text-transform:uppercase}p.hint.svelte-w4d8v7{margin:calc(var(--spacing,.25rem) * 0);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}p.hint.svelte-w4d8v7 code:where(.svelte-w4d8v7){border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);border-radius:.25rem;font-size:10px}.validation-error-msg.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-red-400,oklch(70.4% .191 22.216));display:block}.binding-item.has-conflict.svelte-w4d8v7{border-color:#f99c0073!important}@supports (color:color-mix(in lab,red,red)){.binding-item.has-conflict.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 45%,transparent)!important}}.binding-item.active-conflict.svelte-w4d8v7{background-color:#f99c000f;position:relative}@supports (color:color-mix(in lab,red,red)){.binding-item.active-conflict.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.binding-item.active-conflict.svelte-w4d8v7:hover{border-color:#f99c00b3!important}@supports (color:color-mix(in lab,red,red)){.binding-item.active-conflict.svelte-w4d8v7:hover{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 70%,transparent)!important}}.binding-item.active-conflict.svelte-w4d8v7:hover{--tw-shadow:0 4px 20px var(--tw-shadow-color,#fbbf2426);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.binding-title.has-conflict.svelte-w4d8v7{padding-right:75px}.conflict-marker.svelte-w4d8v7{top:calc(var(--spacing,.25rem) * 2.5);right:calc(var(--spacing,.25rem) * 3.5);background-color:var(--color-amber-400,oklch(82.8% .189 84.429));padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-extrabold,800);font-size:9px;font-weight:var(--font-weight-extrabold,800);color:var(--color-neutral-900,oklch(20.5% 0 0));--tw-shadow:0 2px 6px var(--tw-shadow-color,#fbbf2440);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:.25rem;position:absolute}.conflict-alert-banner.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 3);align-items:center;gap:calc(var(--spacing,.25rem) * 2.5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0040;display:flex}@supports (color:color-mix(in lab,red,red)){.conflict-alert-banner.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.conflict-alert-banner.svelte-w4d8v7{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.conflict-alert-banner.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.conflict-alert-banner.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);color:var(--color-amber-400,oklch(82.8% .189 84.429))}.warning-icon.svelte-w4d8v7{font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));flex-shrink:0}.animate-fade-in.svelte-w4d8v7{animation:.2s cubic-bezier(.16,1,.3,1) fade-in}@keyframes svelte-w4d8v7-fade-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}.custom-select-wrapper.svelte-w4d8v7{flex:1;min-width:190px;position:relative}.custom-select-trigger.svelte-w4d8v7{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-right:calc(var(--spacing,.25rem) * 9);text-align:left;--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text);--tw-shadow:0 4px 12px var(--tw-shadow-color,#00000026);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));-webkit-user-select:none;user-select:none;background:var(--surface2) url("data:image/svg+xml;utf8,") no-repeat right 12px center;background-size:10px}.custom-select-trigger.svelte-w4d8v7:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.custom-select-trigger.svelte-w4d8v7:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 12%,transparent)}}.custom-select-trigger.svelte-w4d8v7:hover{background-color:var(--color-obsidian-700)}.custom-select-trigger.svelte-w4d8v7:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-select-backdrop.svelte-w4d8v7{inset:calc(var(--spacing,.25rem) * 0);z-index:199;position:fixed}.custom-dropdown-menu.svelte-w4d8v7{right:calc(var(--spacing,.25rem) * 0);left:calc(var(--spacing,.25rem) * 0);z-index:200;margin-top:calc(var(--spacing,.25rem) * 1);max-height:calc(var(--spacing,.25rem) * 60);gap:calc(var(--spacing,.25rem) * .5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 1);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex;position:absolute;overflow-y:auto}.custom-dropdown-item.svelte-w4d8v7{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);text-align:left;color:var(--text);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;background-color:#0000;border-style:none;font-size:13px;transition-duration:.15s}.custom-dropdown-item.svelte-w4d8v7:hover{background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 4%,transparent)}}.custom-dropdown-item.svelte-w4d8v7:disabled{cursor:not-allowed;opacity:.4}.custom-dropdown-item.svelte-w4d8v7:disabled:hover{background-color:#0000}.custom-dropdown-item.create-new.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f40;margin-top:calc(var(--spacing,.25rem) * 1)!important}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.create-new.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 25%,transparent)}}.custom-dropdown-item.create-new.svelte-w4d8v7{background-color:#002c22cc}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.create-new.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-emerald-950,oklch(26.2% .051 172.552)) 80%,transparent)}}.custom-dropdown-item.create-new.svelte-w4d8v7{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.custom-dropdown-item.create-new.svelte-w4d8v7:hover{background-color:#004e3be6!important}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.create-new.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--color-emerald-900,oklch(37.8% .077 168.94)) 90%,transparent)!important}}.custom-dropdown-item.create-new.svelte-w4d8v7 .plus-icon:where(.svelte-w4d8v7){margin-right:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800);color:var(--color-emerald-300,oklch(84.5% .143 164.978))}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.targets-section.svelte-134kctg{gap:calc(var(--spacing,.25rem) * 5);padding-bottom:calc(var(--spacing,.25rem) * 10);flex-direction:column;display:flex}.section-header.svelte-134kctg{margin-bottom:calc(var(--spacing,.25rem) * 2);justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 5);display:flex}.description.svelte-134kctg{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.usage-note.svelte-134kctg{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.usage-note.svelte-134kctg{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.usage-note.svelte-134kctg{padding:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.usage-note.svelte-134kctg strong:where(.svelte-134kctg){--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.usage-note.svelte-134kctg em:where(.svelte-134kctg){font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);font-style:normal}.bindings-list.svelte-134kctg{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.binding-item.svelte-134kctg{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));background-color:#1a1f2e66;display:flex}.binding-item.svelte-134kctg:hover{border-color:var(--accent2);--tw-shadow:0 4px 20px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.binding-content.svelte-134kctg{min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex}.binding-row2.svelte-134kctg{justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.binding-title.svelte-134kctg{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.badge.svelte-134kctg{border-radius:var(--radius-xl,.75rem);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-semibold,600);font-size:10px;font-weight:var(--font-weight-semibold,600);text-transform:uppercase}.badge.delivery.svelte-134kctg{border-style:var(--tw-border-style);border-width:1px;border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.badge.delivery.svelte-134kctg{border-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 30%,transparent)}}.badge.delivery.svelte-134kctg{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.badge.delivery.svelte-134kctg{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.badge.delivery.svelte-134kctg{color:var(--color-cyan-300,oklch(86.5% .127 207.078))}.binding-targets.svelte-134kctg{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.binding-actions.svelte-134kctg{margin-top:calc(var(--spacing,.25rem) * 1);justify-content:flex-end;align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);border-top-style:var(--tw-border-style);border-color:#ffffff0d;border-top-width:1px;display:flex}@supports (color:color-mix(in lab,red,red)){.binding-actions.svelte-134kctg{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.binding-actions.svelte-134kctg{padding-top:calc(var(--spacing,.25rem) * 2)}.confirm-label.svelte-134kctg{color:var(--text-muted);font-size:11px}.btn-action.svelte-134kctg{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-134kctg:hover{border-color:var(--text-muted);background-color:var(--border)}.btn-action.small.svelte-134kctg{padding:calc(var(--spacing,.25rem) * 1);padding-inline:calc(var(--spacing,.25rem) * 2);font-size:11px}.btn-action.danger.svelte-134kctg{border-color:#ff656833}@supports (color:color-mix(in lab,red,red)){.btn-action.danger.svelte-134kctg{border-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 20%,transparent)}}.btn-action.danger.svelte-134kctg{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.danger.svelte-134kctg:hover{border-color:var(--color-red-400,oklch(70.4% .191 22.216));background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.btn-action.danger.svelte-134kctg:hover{background-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 10%,transparent)}}.btn-add-wide.svelte-134kctg{margin-bottom:calc(var(--spacing,.25rem) * 4);cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent2);width:100%;padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-style:none;display:flex}.btn-add-wide.svelte-134kctg:hover{--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-add-wide.svelte-134kctg:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.empty-state.svelte-134kctg{border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:2px;border-color:var(--border);background-color:#00000026;flex-direction:column;grid-column:1/-1;justify-content:center;align-items:center;display:flex}@supports (color:color-mix(in lab,red,red)){.empty-state.svelte-134kctg{background-color:color-mix(in oklab,var(--color-black,#000) 15%,transparent)}}.empty-state.svelte-134kctg{padding:calc(var(--spacing,.25rem) * 10);text-align:center}.empty-icon.svelte-134kctg{margin-bottom:calc(var(--spacing,.25rem) * 2);font-size:32px}.empty-state.svelte-134kctg p:where(.svelte-134kctg){margin:calc(var(--spacing,.25rem) * 0);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-leading:initial}}}.row.svelte-1q9seip{margin-top:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 2);display:flex}.btn-preview.svelte-1q9seip{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-preview.svelte-1q9seip:hover:not(:disabled){background-color:var(--border);color:var(--accent)}.btn-preview.svelte-1q9seip:disabled{cursor:not-allowed;opacity:.4}.idle-minutes-input.svelte-1q9seip{width:calc(var(--spacing,.25rem) * 20);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 2.5);text-align:right;color:var(--text);font-size:13px}.voice-status-container.svelte-1q9seip{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);min-height:42px;padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);align-items:center;font-size:13px;display:flex}.status-downloaded.svelte-1q9seip{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-downloading.svelte-1q9seip{color:var(--accent2)}.status-checking.svelte-1q9seip{color:var(--text-muted)}.status-missing-wrapper.svelte-1q9seip{justify-content:space-between;align-items:center;width:100%;display:flex}.status-missing.svelte-1q9seip{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-download.svelte-1q9seip{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}.btn-download.svelte-1q9seip:hover:not(:disabled){background-color:var(--accent2)}.btn-download.svelte-1q9seip:disabled{cursor:not-allowed;border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);color:var(--text-muted);opacity:.5}.field-input-error.svelte-1q9seip{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.field-input-error.svelte-1q9seip:focus{border-color:var(--color-red-500,oklch(63.7% .237 25.331));--tw-shadow:0 0 0 2px var(--tw-shadow-color,#ef444426), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field-error-msg.svelte-1q9seip{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5);color:var(--color-red-400,oklch(70.4% .191 22.216))}.range-input.svelte-1q9seip{width:100%;accent-color:var(--accent)}.number-input.svelte-1q9seip{width:calc(var(--spacing,.25rem) * 20)}.tts-test-row.svelte-1q9seip{justify-content:space-between;align-items:center;width:100%;display:flex}.tts-error-msg.svelte-1q9seip{overflow-wrap:break-word;width:100%}.run-speed-container.svelte-1q9seip{border:1px solid var(--border);border-radius:var(--radius);background:#ffffff05;align-items:center;gap:8px;padding:6px 12px;font-size:12px;font-weight:500;display:flex}.run-speed-label.svelte-1q9seip{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;font-size:10px}.run-speed-value.svelte-1q9seip{color:var(--accent);font-family:JetBrains Mono,monospace;font-weight:600}.run-speed-value.counting.svelte-1q9seip{color:var(--accent2);text-shadow:0 0 8px #38bdf84d}.non-commercial-warning.svelte-1q9seip{margin-bottom:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 1.5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0066;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.non-commercial-warning.svelte-1q9seip{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 40%,transparent)}}.non-commercial-warning.svelte-1q9seip{background-color:#4619014d}@supports (color:color-mix(in lab,red,red)){.non-commercial-warning.svelte-1q9seip{background-color:color-mix(in oklab,var(--color-amber-950,oklch(27.9% .077 45.635)) 30%,transparent)}}.non-commercial-warning.svelte-1q9seip{padding:calc(var(--spacing,.25rem) * 3)}.warning-header.svelte-1q9seip{align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-amber-400,oklch(82.8% .189 84.429));display:flex}.warning-icon.svelte-1q9seip{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)))}.warning-text.svelte-1q9seip{margin:calc(var(--spacing,.25rem) * 0);--tw-leading:var(--leading-relaxed,1.625);max-width:none;font-size:12px;line-height:var(--leading-relaxed,1.625);color:#fee685cc}@supports (color:color-mix(in lab,red,red)){.warning-text.svelte-1q9seip{color:color-mix(in oklab,var(--color-amber-200,oklch(92.4% .12 95.746)) 80%,transparent)}}.field-input-textarea.svelte-1q9seip{margin-top:calc(var(--spacing,.25rem) * 1);box-sizing:border-box;resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}.field-input-textarea.svelte-1q9seip:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#4fc3f733);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.engine-radio-group.svelte-1q9seip{margin-top:calc(var(--spacing,.25rem) * 1.5);gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;width:100%;display:flex}.engine-radio-option.svelte-1q9seip{cursor:pointer;gap:calc(var(--spacing,.25rem) * 1);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);padding:calc(var(--spacing,.25rem) * 3);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));flex-direction:column;display:flex}.engine-radio-option.svelte-1q9seip:hover{border-color:var(--accent2);background-color:var(--surface2)}.engine-radio-option.selected.svelte-1q9seip{border-color:var(--accent);background-color:var(--surface2)}.engine-radio-header.svelte-1q9seip{align-items:center;gap:calc(var(--spacing,.25rem) * 2.5);display:flex}.engine-radio-name.svelte-1q9seip{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--text)}.engine-radio-desc.svelte-1q9seip{margin-left:calc(var(--spacing,.25rem) * 6);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);color:var(--text-muted)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.hint.svelte-1bvctpo{margin-bottom:calc(var(--spacing,.25rem) * 4);max-width:520px;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-300)}.field.col.svelte-1bvctpo{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1.5);flex-direction:column}textarea.svelte-1bvctpo{resize:vertical;border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;padding:calc(var(--spacing,.25rem) * 2);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--text);border-radius:.25rem;font-size:13px}textarea.invalid.svelte-1bvctpo{border-color:var(--color-red-500,oklch(63.7% .237 25.331));--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){textarea.invalid.svelte-1bvctpo{--tw-ring-color:color-mix(in oklab, var(--color-red-500,oklch(63.7% .237 25.331)) 20%, transparent)}}textarea.locked.svelte-1bvctpo{cursor:not-allowed;background-color:#0003}@supports (color:color-mix(in lab,red,red)){textarea.locked.svelte-1bvctpo{background-color:color-mix(in oklab,var(--color-black,#000) 20%,transparent)}}textarea.locked.svelte-1bvctpo{opacity:.6}.validation-error.svelte-1bvctpo{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-red-400,oklch(70.4% .191 22.216))}.field-hint.svelte-1bvctpo{color:var(--color-obsidian-300);font-size:11px}code.svelte-1bvctpo{background-color:#ffffff0d;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){code.svelte-1bvctpo{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}code.svelte-1bvctpo{padding-inline:calc(var(--spacing,.25rem) * 1);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue)}.action-row.svelte-1bvctpo{margin-top:calc(var(--spacing,.25rem) * 3.5);align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding-top:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}.btn-test.svelte-1bvctpo{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);width:100%;padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-style:none}.btn-test.svelte-1bvctpo:hover:not(:disabled){--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-test.svelte-1bvctpo:active:not(:disabled){--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.btn-test.svelte-1bvctpo:disabled{cursor:not-allowed;opacity:.6}.status-msg.svelte-1bvctpo{text-align:center;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600)}.status-msg.success.svelte-1bvctpo{color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-msg.error.svelte-1bvctpo{color:var(--color-red-400,oklch(70.4% .191 22.216))}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-leading:initial}}}.custom-vocab-input.svelte-1s1a8xn{margin-top:calc(var(--spacing,.25rem) * 2);box-sizing:border-box;resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;min-height:80px;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}.custom-vocab-input.svelte-1s1a8xn:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#4fc3f733);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-vocab-input.svelte-1s1a8xn::placeholder{color:var(--text-muted);opacity:.5}.model-status-container.svelte-1s1a8xn{margin-bottom:calc(var(--spacing,.25rem) * 3);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);min-height:42px;padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);align-items:center;font-size:13px;display:flex}.status-downloaded.svelte-1s1a8xn{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-downloading.svelte-1s1a8xn{color:var(--accent2)}.status-checking.svelte-1s1a8xn{color:var(--text-muted)}.status-missing-wrapper.svelte-1s1a8xn{justify-content:space-between;align-items:center;width:100%;display:flex}.status-missing.svelte-1s1a8xn{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-download.svelte-1s1a8xn{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}.btn-download.svelte-1s1a8xn:hover{background-color:var(--accent2)}.status-pill.svelte-1s1a8xn{border-radius:var(--radius);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500)}.status-pill.success.svelte-1s1a8xn{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-1s1a8xn{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 30%,transparent)}}.status-pill.success.svelte-1s1a8xn{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-1s1a8xn{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.status-pill.success.svelte-1s1a8xn{color:var(--color-emerald-300,oklch(84.5% .143 164.978))}.status-pill.error.svelte-1s1a8xn{border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-1s1a8xn{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 30%,transparent)}}.status-pill.error.svelte-1s1a8xn{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-1s1a8xn{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 15%,transparent)}}.status-pill.error.svelte-1s1a8xn{color:var(--color-red-300,oklch(80.8% .114 19.571))}.status-pill.downloading.svelte-1s1a8xn{border-style:var(--tw-border-style);border-width:1px;border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.status-pill.downloading.svelte-1s1a8xn{border-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 30%,transparent)}}.status-pill.downloading.svelte-1s1a8xn{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.status-pill.downloading.svelte-1s1a8xn{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.status-pill.downloading.svelte-1s1a8xn{color:var(--color-cyan-300,oklch(86.5% .127 207.078))}.field-title-col.svelte-1s1a8xn{margin-right:calc(var(--spacing,.25rem) * 4);flex-direction:column;flex:1;display:flex}.field-title-col.svelte-1s1a8xn span:where(.svelte-1s1a8xn){--tw-font-weight:var(--font-weight-medium,500);font-size:13px;font-weight:var(--font-weight-medium,500);color:var(--color-obsidian-100)}.field-title-col.svelte-1s1a8xn .hint:where(.svelte-1s1a8xn){margin-top:calc(var(--spacing,.25rem) * .5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.s1-mini-note.svelte-1s1a8xn{margin-top:calc(var(--spacing,.25rem) * -1);--tw-font-weight:var(--font-weight-medium,500);font-size:11.5px;font-weight:var(--font-weight-medium,500);color:var(--color-accent-blue);opacity:.9}.disabled-section.svelte-1s1a8xn{pointer-events:none;opacity:.5}.disabled-note.svelte-1s1a8xn{color:var(--color-accent-blue);opacity:.9}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.lede.svelte-7vrdzs{--tw-leading:var(--leading-relaxed,1.625);font-size:13px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.disclosure.svelte-7vrdzs{border-color:#38bdf840}@supports (color:color-mix(in lab,red,red)){.disclosure.svelte-7vrdzs{border-color:color-mix(in oklab,var(--color-accent-blue) 25%,transparent)}}.disclosure.svelte-7vrdzs{background-color:#38bdf80a}.ledger.svelte-7vrdzs{gap:calc(var(--spacing,.25rem) * 4);grid-template-columns:repeat(auto-fit,minmax(240px,1fr));display:grid}.ledger-col.svelte-7vrdzs ul:where(.svelte-7vrdzs){margin-top:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 1.5);--tw-leading:var(--leading-relaxed,1.625);font-size:11.5px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted);flex-direction:column;display:flex}.ledger-col.svelte-7vrdzs li:where(.svelte-7vrdzs){border-left-style:var(--tw-border-style);padding-left:calc(var(--spacing,.25rem) * 3);border-left-width:1px}.ledger-head.svelte-7vrdzs{--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em);text-transform:uppercase}.included.svelte-7vrdzs .ledger-head:where(.svelte-7vrdzs){color:var(--color-accent-green)}.included.svelte-7vrdzs li:where(.svelte-7vrdzs){border-color:#10b9814d}.excluded.svelte-7vrdzs .ledger-head:where(.svelte-7vrdzs){color:#f87171}.excluded.svelte-7vrdzs li:where(.svelte-7vrdzs){border-color:#f871714d}.ledger-col.svelte-7vrdzs strong{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.field-caption.svelte-7vrdzs{--tw-font-weight:var(--font-weight-medium,500);font-size:13px;font-weight:var(--font-weight-medium,500);color:var(--text)}.two-up.svelte-7vrdzs{gap:calc(var(--spacing,.25rem) * 4);grid-template-columns:repeat(auto-fit,minmax(200px,1fr));display:grid}.text-input.svelte-7vrdzs{box-sizing:border-box;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}.text-input.svelte-7vrdzs:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#4fc3f733);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.description.svelte-7vrdzs{resize:vertical;--tw-leading:var(--leading-relaxed,1.625);min-height:150px;line-height:var(--leading-relaxed,1.625)}.counter.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--text-muted);font-size:11px}.counter.short.svelte-7vrdzs{color:#f59e0b}.preview.svelte-7vrdzs{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);width:100%;max-height:340px;padding:calc(var(--spacing,.25rem) * 3);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word;white-space:pre-wrap;color:var(--text-muted);overflow:auto}.actions.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}.btn-primary.svelte-7vrdzs{border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 10px var(--tw-shadow-color,#38bdf840);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-primary.svelte-7vrdzs:hover:not(:disabled){--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 14px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-primary.svelte-7vrdzs:disabled{cursor:not-allowed;opacity:.4;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.btn-secondary.svelte-7vrdzs{border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;flex-shrink:0}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-7vrdzs{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.btn-secondary.svelte-7vrdzs{padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-secondary.svelte-7vrdzs:hover{border-color:#38bdf866}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-7vrdzs:hover{border-color:color-mix(in oklab,var(--color-accent-blue) 40%,transparent)}}.btn-secondary.svelte-7vrdzs:hover{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-7vrdzs:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 8%,transparent)}}.link-button.svelte-7vrdzs{margin-left:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);text-decoration-line:underline}.alert-body.svelte-7vrdzs{gap:calc(var(--spacing,.25rem) * 1.5);flex-direction:column;width:100%;display:flex}.alert-msg.svelte-7vrdzs{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625)}.alert-actions.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-wrap:wrap;display:flex}.ok-alert.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:#10b981;border-radius:var(--radius);background-color:#10b9811a;border:1px solid #10b98140;padding:10px 14px;display:flex}code.svelte-7vrdzs{background-color:var(--color-obsidian-950);color:var(--color-accent-blue);border:1px solid var(--border);border-radius:4px;padding:2px 6px;font-family:monospace;font-size:10px}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-font-weight:initial;--tw-leading:initial;--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial}}}.about-card.svelte-4mufsx{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 5);flex-direction:row!important}.logo.svelte-4mufsx{height:calc(var(--spacing,.25rem) * 16);width:calc(var(--spacing,.25rem) * 16);border-radius:var(--radius-xl,.75rem);object-fit:contain;--tw-drop-shadow-size:drop-shadow(0 4px 24px var(--tw-drop-shadow-color,#38bdf859));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.app-name.svelte-4mufsx{margin-bottom:calc(var(--spacing,.25rem) * 1);font-size:var(--text-2xl,1.5rem);line-height:var(--tw-leading,var(--text-2xl--line-height,calc(2 / 1.5)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700)}.app-version.svelte-4mufsx{margin-bottom:calc(var(--spacing,.25rem) * 2.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}p.svelte-4mufsx{--tw-leading:var(--leading-relaxed,1.625);max-width:400px;font-size:13px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}a.svelte-4mufsx{color:var(--accent2);font-size:13px;text-decoration-line:none}a.svelte-4mufsx:hover{text-decoration-line:underline}.kv.svelte-4mufsx{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding-block:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));justify-content:space-between;display:flex}.kv.svelte-4mufsx span:where(.svelte-4mufsx):first-child{color:var(--text-muted)}.credits-hint.svelte-4mufsx{margin-bottom:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.credits-list.svelte-4mufsx{margin-top:calc(var(--spacing,.25rem) * 1);gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.credit-item.svelte-4mufsx{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding-block:calc(var(--spacing,.25rem) * 1.5);justify-content:space-between;align-items:center;display:flex}.credit-item.svelte-4mufsx:last-child{--tw-border-style:none;border-style:none}.credit-name-link.svelte-4mufsx{--tw-font-weight:var(--font-weight-normal,400);font-size:13px;font-weight:var(--font-weight-normal,400);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));text-decoration-line:none}.credit-name-link.svelte-4mufsx:hover{color:var(--color-accent-blue);text-decoration-line:underline}.credit-license.svelte-4mufsx{border-style:var(--tw-border-style);border-width:1px;border-color:#38bdf826;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.credit-license.svelte-4mufsx{border-color:color-mix(in oklab,var(--color-accent-blue) 15%,transparent)}}.credit-license.svelte-4mufsx{background-color:#38bdf814}@supports (color:color-mix(in lab,red,red)){.credit-license.svelte-4mufsx{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.credit-license.svelte-4mufsx{padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-normal,400);font-size:10px;font-weight:var(--font-weight-normal,400);color:var(--color-accent-blue)}.credit-license.non-commercial.svelte-4mufsx{border-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.credit-license.non-commercial.svelte-4mufsx{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 30%,transparent)}}.credit-license.non-commercial.svelte-4mufsx{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.credit-license.non-commercial.svelte-4mufsx{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.credit-license.non-commercial.svelte-4mufsx{color:var(--color-amber-400,oklch(82.8% .189 84.429))}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}.settings-root.svelte-myrvk6{background-color:var(--bg);width:100vw;height:100vh;color:var(--text);display:flex;overflow:hidden}.sidebar.svelte-myrvk6{z-index:10;border-right-style:var(--tw-border-style);border-right-width:1px;border-color:var(--border);background-color:var(--color-obsidian-900);width:fit-content;min-width:135px;padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * 5);--tw-shadow:4px 0 24px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);flex-direction:column;flex-shrink:0;display:flex}.brand.svelte-myrvk6{margin-bottom:calc(var(--spacing,.25rem) * 4);align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-bottom-style:var(--tw-border-style);border-color:#ffffff08;border-bottom-width:1px;display:flex}@supports (color:color-mix(in lab,red,red)){.brand.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.brand.svelte-myrvk6{padding-inline:calc(var(--spacing,.25rem) * 1);padding-block:calc(var(--spacing,.25rem) * 1.5);padding-bottom:calc(var(--spacing,.25rem) * 4);white-space:nowrap}.brand-logo.svelte-myrvk6{height:calc(var(--spacing,.25rem) * 5);width:calc(var(--spacing,.25rem) * 5);object-fit:contain;--tw-drop-shadow-size:drop-shadow(0 2px 8px var(--tw-drop-shadow-color,#38bdf84d));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);flex-shrink:0;animation:4s ease-in-out infinite floating}@keyframes svelte-myrvk6-floating{0%,to{transform:translateY(0)rotate(0)}50%{transform:translateY(-3px)rotate(3deg)}}.brand-text.svelte-myrvk6{white-space:nowrap;flex-direction:column;display:flex;overflow:hidden}.brand-name.svelte-myrvk6{--tw-leading:1.1;--tw-font-weight:850;--tw-tracking:-.5px;letter-spacing:-.5px;white-space:nowrap;color:var(--color-white,#fff);font-size:15px;font-weight:850;line-height:1.1}.brand-tag.svelte-myrvk6{margin-top:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-bold,700);font-size:7px;font-weight:var(--font-weight-bold,700);--tw-tracking:.12em;letter-spacing:.12em;white-space:nowrap;color:var(--color-accent-blue)}.sidebar-nav.svelte-myrvk6{gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex;overflow-y:auto}.nav-btn.svelte-myrvk6{align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 2);text-align:left;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);white-space:nowrap;color:var(--color-obsidian-300);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));display:flex;position:relative}.nav-btn.svelte-myrvk6:hover{--tw-translate-x:2px;translate:var(--tw-translate-x) var(--tw-translate-y);background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.nav-btn.svelte-myrvk6:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.nav-btn.svelte-myrvk6:hover{color:var(--color-white,#fff)}.nav-btn.active.svelte-myrvk6{--tw-translate-x:2px;translate:var(--tw-translate-x) var(--tw-translate-y);background-color:#38bdf814;scale:1.01}@supports (color:color-mix(in lab,red,red)){.nav-btn.active.svelte-myrvk6{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.nav-btn.active.svelte-myrvk6{color:var(--color-accent-blue)}.nav-btn.svelte-myrvk6:active{--tw-translate-x:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y);scale:.97}.nav-icon.svelte-myrvk6{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.nav-btn.svelte-myrvk6:hover .nav-icon:where(.svelte-myrvk6){rotate:5deg;scale:1.18}.nav-active-pill.svelte-myrvk6{top:15%;right:calc(var(--spacing,.25rem) * 0);background-color:var(--color-accent-blue);--tw-shadow:-2px 0 8px var(--tw-shadow-color,var(--color-accent-blue));width:3px;height:70%;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:99px 0 0 99px;position:absolute}.sidebar-footer.svelte-myrvk6{border-top-style:var(--tw-border-style);border-color:#ffffff08;border-top-width:1px}@supports (color:color-mix(in lab,red,red)){.sidebar-footer.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.sidebar-footer.svelte-myrvk6{padding-top:calc(var(--spacing,.25rem) * 4)}.status-panel.svelte-myrvk6{gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-shadow:inset 0 2px 6px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.25s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.25s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));flex-direction:column;display:flex}.status-panel.recording.svelte-myrvk6{border-color:#38bdf840}@supports (color:color-mix(in lab,red,red)){.status-panel.recording.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-accent-blue) 25%,transparent)}}.status-panel.recording.svelte-myrvk6{--tw-shadow:0 4px 20px var(--tw-shadow-color,#38bdf81a), inset 0 2px 6px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.status-header.svelte-myrvk6{align-items:flex-start;gap:calc(var(--spacing,.25rem) * .5);white-space:nowrap;flex-direction:column;display:flex}.status-indicator.svelte-myrvk6{align-items:center;gap:calc(var(--spacing,.25rem) * 1);white-space:nowrap;display:flex}.status-dot.svelte-myrvk6{background-color:var(--color-obsidian-300);width:5px;height:5px;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-radius:3.40282e38px}.status-panel.recording.svelte-myrvk6 .status-dot:where(.svelte-myrvk6){background-color:var(--color-accent-blue);--tw-shadow:0 0 8px var(--tw-shadow-color,var(--color-accent-blue));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);animation:1.2s infinite heartBeat}.status-panel.speaking.svelte-myrvk6 .status-dot:where(.svelte-myrvk6){background-color:var(--color-accent-green);--tw-shadow:0 0 8px var(--tw-shadow-color,var(--color-accent-green));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@keyframes svelte-myrvk6-heartBeat{0%,to{transform:scale(1)}50%{transform:scale(1.4)}}.status-label.svelte-myrvk6{--tw-font-weight:var(--font-weight-bold,700);font-size:10px;font-weight:var(--font-weight-bold,700);white-space:nowrap;color:var(--color-obsidian-300)}.status-panel.recording.svelte-myrvk6 .status-label:where(.svelte-myrvk6){color:var(--color-accent-blue)}.word-count.svelte-myrvk6{--tw-font-weight:var(--font-weight-semibold,600);font-size:9px;font-weight:var(--font-weight-semibold,600);white-space:nowrap;color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.word-count.svelte-myrvk6{color:color-mix(in oklab,var(--color-white,#fff) 30%,transparent)}}.btn-record.svelte-myrvk6{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#38bdf833;width:100%;position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.btn-record.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-accent-blue) 20%,transparent)}}.btn-record.svelte-myrvk6{background-color:#38bdf814}@supports (color:color-mix(in lab,red,red)){.btn-record.svelte-myrvk6{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.btn-record.svelte-myrvk6{padding-inline:calc(var(--spacing,.25rem) * 1);padding-block:calc(var(--spacing,.25rem) * 1.5);text-align:center;--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);white-space:nowrap;color:var(--color-accent-blue);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf80d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-record.svelte-myrvk6:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);border-color:var(--color-accent-blue);background-color:var(--color-accent-blue);color:var(--color-white,#fff);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf840);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.btn-record.svelte-myrvk6:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y);scale:.97}.btn-record.active.svelte-myrvk6{border-color:var(--color-accent-blue);background-color:var(--color-accent-blue);color:var(--color-white,#fff);--tw-shadow:0 4px 16px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pulse-ring.svelte-myrvk6{pointer-events:none;top:calc(var(--spacing,.25rem) * 0);left:calc(var(--spacing,.25rem) * 0);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-accent-blue);opacity:0;width:100%;height:100%;animation:1.6s ease-out infinite ripple;position:absolute}@keyframes svelte-myrvk6-ripple{0%{opacity:.5;transform:scale(1)}to{opacity:0;transform:scale(1.15,1.3)}}.btn-text.svelte-myrvk6{z-index:2;position:relative}.content-container.svelte-myrvk6{z-index:1;background-color:var(--bg);flex-direction:column;flex:1;display:flex;position:relative;overflow:hidden}.content-container.svelte-myrvk6:has(.modal-backdrop){z-index:100}.tab-content.svelte-myrvk6{z-index:1;flex:1;padding:30px;overflow-y:auto}.floating-save-container.svelte-myrvk6{right:calc(var(--spacing,.25rem) * 6);bottom:calc(var(--spacing,.25rem) * 6);z-index:100;align-items:center;gap:calc(var(--spacing,.25rem) * 3.5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-accent-blue);background-color:var(--color-obsidian-900);padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 4);--tw-shadow:0 10px 30px var(--tw-shadow-color,#0006), 0 0 12px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);animation:.3s cubic-bezier(.175,.885,.32,1.275) forwards popUp;display:flex;position:absolute}@keyframes svelte-myrvk6-popUp{0%{opacity:0;transform:translateY(20px)scale(.9)}to{opacity:1;transform:translateY(0)scale(1)}}.save-hint.svelte-myrvk6{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-300)}.btn-save.svelte-myrvk6{border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 10px var(--tw-shadow-color,#38bdf840);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-save.svelte-myrvk6:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 14px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);scale:1.02}.btn-save.svelte-myrvk6:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y);scale:.97}.card-scene.svelte-1pt4ba2{perspective:900px;pointer-events:none;-webkit-user-select:none;user-select:none}.card.svelte-1pt4ba2{position:relative;width:340px;height:152px;border-radius:16px;overflow:hidden;background:linear-gradient(135deg,#181b24,#0b0d12 55%,#141925);border:1px solid rgba(255,255,255,.12);box-shadow:0 18px 44px #0009;font-family:Outfit,Inter,sans-serif;transform:rotateY(88deg);opacity:0;transition:transform .38s cubic-bezier(.175,.885,.32,1.2),opacity .3s ease,border-color .3s ease}.on.svelte-1pt4ba2 .card:where(.svelte-1pt4ba2){transform:rotateY(0);opacity:1}.card.processing.svelte-1pt4ba2{border-color:#38bdf866}.sheen.svelte-1pt4ba2{position:absolute;top:-20px;bottom:-20px;width:64px;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.06) 50%,transparent 100%);animation:svelte-1pt4ba2-sheen-drift 6.5s linear infinite}@keyframes svelte-1pt4ba2-sheen-drift{0%{left:-70px}to{left:410px}}.chip.svelte-1pt4ba2{position:absolute;left:20px;top:18px;width:38px;height:28px;border-radius:6px;background:linear-gradient(160deg,#f6d27a,#d9a946 55%,#b9842b)}.chip-line.svelte-1pt4ba2{position:absolute;background:#462d0073}.chip-line.h1.svelte-1pt4ba2{left:0;right:0;top:9px;height:1.5px}.chip-line.h2.svelte-1pt4ba2{left:0;right:0;top:18px;height:1.5px}.chip-line.v.svelte-1pt4ba2{top:0;bottom:0;left:18px;width:1.5px}.brand.svelte-1pt4ba2{position:absolute;left:68px;top:16px;color:#f3f4f6;font-size:14px;font-weight:850;letter-spacing:.08em}.brand-sub.svelte-1pt4ba2{position:absolute;left:68px;top:34px;color:#ffffff61;font-size:7.5px;font-weight:800;letter-spacing:.4em}.stamp.svelte-1pt4ba2{position:absolute;right:20px;top:18px;display:inline-flex;align-items:center;gap:5px;height:20px;padding:0 9px;border-radius:5px;border:1px solid rgba(244,63,94,.5);background:#f43f5e14;color:#f43f5e;font-size:8.5px;font-weight:850;letter-spacing:.18em}.initializing.svelte-1pt4ba2 .stamp:where(.svelte-1pt4ba2){border-color:#f59e0b80;background:#f59e0b14;color:#f59e0b}.processing.svelte-1pt4ba2 .stamp:where(.svelte-1pt4ba2){border-color:#38bdf880;background:#38bdf814;color:#38bdf8}.stamp-dot.svelte-1pt4ba2{width:6px;height:6px;border-radius:50%;background:currentColor;animation:svelte-1pt4ba2-stamp-blink 1.15s ease-in-out infinite}@keyframes svelte-1pt4ba2-stamp-blink{0%,to{opacity:.35}50%{opacity:1}}.matrix.svelte-1pt4ba2{position:absolute;left:22px;top:56px;width:296px;height:51px;display:flex;gap:4px}.col.svelte-1pt4ba2{display:flex;flex-direction:column;gap:3px}.dot.svelte-1pt4ba2{width:11px;height:6px;border-radius:2px;opacity:.1;transition:opacity .05s linear}.dot.lit.svelte-1pt4ba2{opacity:.95}.dot.red.svelte-1pt4ba2{background:#f43f5e}.dot.amber.svelte-1pt4ba2{background:#fbbf24}.dot.green.svelte-1pt4ba2{background:#34d399}.processing.svelte-1pt4ba2 .dot:where(.svelte-1pt4ba2){background:#22d3ee}.field-label.svelte-1pt4ba2{position:absolute;left:22px;top:118px;color:#ffffff4d;font-size:7px;font-weight:800;letter-spacing:.36em}.field-value.svelte-1pt4ba2{position:absolute;left:22px;top:128px;max-width:200px;color:#e5e7eb;font-size:11.5px;font-weight:750;letter-spacing:.04em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.card-number.svelte-1pt4ba2{position:absolute;right:22px;top:128px;color:#ffffff38;font-size:11px;font-weight:700;letter-spacing:.18em}.scope.svelte-xjziu1{width:540px;height:124px;background:linear-gradient(180deg,#07140c,#030a07);border:1px solid rgba(74,222,128,.25);border-radius:10px;box-shadow:0 10px 36px #0009,0 0 18px #22c55e24;overflow:hidden;pointer-events:none;-webkit-user-select:none;user-select:none;transform:scaleY(.04);opacity:0;transition:transform .32s cubic-bezier(.175,.885,.32,1.2),opacity .28s ease}.scope.on.svelte-xjziu1{transform:scaleY(1);opacity:1}.scope-inner.svelte-xjziu1{width:100%;height:100%;padding:10px 20px 12px;display:flex;flex-direction:column;gap:8px}.header.svelte-xjziu1{display:flex;align-items:center;gap:8px;height:18px;font-family:Outfit,Inter,sans-serif}.led.svelte-xjziu1{width:7px;height:7px;border-radius:50%;background:#4ade80;box-shadow:0 0 7px #4ade80;animation:svelte-xjziu1-led-blink 1.1s ease-in-out infinite;flex-shrink:0}.initializing.svelte-xjziu1 .led:where(.svelte-xjziu1){background:#f59e0b;box-shadow:0 0 7px #f59e0b}.processing.svelte-xjziu1 .led:where(.svelte-xjziu1){background:#38bdf8;box-shadow:0 0 7px #38bdf8}@keyframes svelte-xjziu1-led-blink{0%,to{opacity:.4}50%{opacity:1}}.title.svelte-xjziu1{color:#bbf7d0;font-size:10px;font-weight:800;letter-spacing:.12em}.subtitle.svelte-xjziu1{color:#bbf7d059;font-size:9px;font-weight:500;letter-spacing:.1em}.spacer.svelte-xjziu1{flex:1}.target-chip.svelte-xjziu1{display:inline-flex;align-items:center;gap:5px;background:#4ade800f;border:1px solid rgba(74,222,128,.3);border-radius:4px;padding:2px 8px}.tgt.svelte-xjziu1{color:#4ade80;font-size:8.5px;font-weight:800;letter-spacing:.1em}.tgt-label.svelte-xjziu1{color:#d1fae5;font-size:8.5px;font-weight:700;letter-spacing:.06em;max-width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stage.svelte-xjziu1{position:relative;flex:1}.grid-h.svelte-xjziu1{position:absolute;left:0;right:0;height:1px;background:#4ade8012}.g1.svelte-xjziu1{top:25%}.g2.svelte-xjziu1{top:50%;background:#4ade8024}.g3.svelte-xjziu1{top:75%}.grid-v.svelte-xjziu1{position:absolute;top:0;bottom:0;width:1px;background:#4ade800d}svg.svelte-xjziu1{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.trace.svelte-xjziu1{fill:none;stroke:#a7f3d0;stroke-width:1.8;vector-effect:non-scaling-stroke}.glow.svelte-xjziu1{fill:none;stroke:#4ade80;stroke-width:6;opacity:.16;vector-effect:non-scaling-stroke}.initializing.svelte-xjziu1 .trace:where(.svelte-xjziu1){stroke:#fcd34d}.initializing.svelte-xjziu1 .glow:where(.svelte-xjziu1){stroke:#f59e0b}.processing.svelte-xjziu1 .trace:where(.svelte-xjziu1){stroke:#7dd3fc}.processing.svelte-xjziu1 .glow:where(.svelte-xjziu1){stroke:#38bdf8}.radar.svelte-13tl5wx{--tone: #ff6b35;--tone-soft: rgba(255, 107, 53, .4);display:flex;align-items:center;gap:24px;pointer-events:none;-webkit-user-select:none;user-select:none}.radar.initializing.svelte-13tl5wx{--tone: #f59e0b;--tone-soft: rgba(245, 158, 11, .4)}.radar.processing.svelte-13tl5wx{--tone: #38bdf8;--tone-soft: rgba(56, 189, 248, .4)}.dial.svelte-13tl5wx{position:relative;width:124px;height:124px;border-radius:50%;background:radial-gradient(circle,#10181c,#06090b 85%,#04070a);border:1.2px solid var(--tone-soft);box-shadow:0 12px 34px #0000008c,0 0 22px color-mix(in srgb,var(--tone) 20%,transparent);overflow:hidden;transform:translateY(30px) scale(.85);opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.25),opacity .28s ease}.on.svelte-13tl5wx .dial:where(.svelte-13tl5wx){transform:translateY(0) scale(1);opacity:1}.range-ring.svelte-13tl5wx{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);border-radius:50%;border:1px solid rgba(255,255,255,.1)}.r1.svelte-13tl5wx{width:92px;height:92px}.r2.svelte-13tl5wx{width:56px;height:56px;border-color:#ffffff24}.axis.svelte-13tl5wx{position:absolute;background:#ffffff12}.axis.h.svelte-13tl5wx{left:0;right:0;top:50%;height:1px}.axis.v.svelte-13tl5wx{top:0;bottom:0;left:50%;width:1px}.sweep.svelte-13tl5wx{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;background:conic-gradient(from 0deg,transparent 0deg,transparent 300deg,color-mix(in srgb,var(--tone) 35%,transparent) 350deg,var(--tone) 360deg);animation:svelte-13tl5wx-sweep-rotate 1.5s linear infinite;opacity:.7}@keyframes svelte-13tl5wx-sweep-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.pulse-ring.svelte-13tl5wx{position:absolute;top:50%;left:50%;width:118px;height:118px;margin:-59px 0 0 -59px;border-radius:50%;border:1.5px solid var(--tone);opacity:0;animation:svelte-13tl5wx-ring-expand 1.4s cubic-bezier(.1,.7,.3,1) infinite}.p2.svelte-13tl5wx{animation-delay:.7s}@keyframes svelte-13tl5wx-ring-expand{0%{transform:scale(.18);opacity:calc(.25 + var(--lvl) * .65)}to{transform:scale(1);opacity:0}}.blip.svelte-13tl5wx{position:absolute;border-radius:50%;background:color-mix(in srgb,var(--tone) 60%,#ffffff);animation:svelte-13tl5wx-blip-flash 1.5s linear infinite}.b1.svelte-13tl5wx{left:88px;top:42px;width:5px;height:5px}.b2.svelte-13tl5wx{left:36px;top:86px;width:4px;height:4px;animation-delay:.55s}@keyframes svelte-13tl5wx-blip-flash{0%{opacity:1}55%{opacity:.05}to{opacity:.05}}.core.svelte-13tl5wx{position:absolute;top:50%;left:50%;width:12px;height:12px;margin:-6px 0 0 -6px;border-radius:50%;background:var(--tone);box-shadow:0 0 14px var(--tone);transform:scale(calc(1 + var(--lvl) * 1.6));transition:transform .05s linear}.plate.svelte-13tl5wx{display:flex;align-items:center;gap:10px;width:200px;height:52px;padding:0 12px;background:#0a0c10f0;border:1px solid rgba(255,255,255,.08);border-radius:10px;position:relative;transform:translate(-22px);opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.25) .06s,opacity .28s ease .06s}.on.svelte-13tl5wx .plate:where(.svelte-13tl5wx){transform:translate(0);opacity:1}.plate.svelte-13tl5wx:after{content:"";position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;border-radius:10px;border:1px solid var(--tone);animation:svelte-13tl5wx-lock-pulse 1.15s ease-in-out infinite;pointer-events:none}@keyframes svelte-13tl5wx-lock-pulse{0%,to{opacity:.25}50%{opacity:.85}}.reticle.svelte-13tl5wx{color:var(--tone);font-size:22px;line-height:1;animation:svelte-13tl5wx-lock-pulse 1.15s ease-in-out infinite}.plate-text.svelte-13tl5wx{display:flex;flex-direction:column;gap:2px;min-width:0;font-family:Outfit,Inter,sans-serif}.caption.svelte-13tl5wx{color:#ffffff59;font-size:7.5px;font-weight:800;letter-spacing:.18em}.label.svelte-13tl5wx{color:#e5e7eb;font-size:12px;font-weight:750;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ocean.svelte-1orgnnz{position:relative;width:380px;height:128px;border-radius:24px;overflow:hidden;background:linear-gradient(180deg,#081220f5,#030912f7);border:1.2px solid rgba(34,211,238,.25);box-shadow:0 14px 40px #0009,0 0 24px #0891b238;pointer-events:none;-webkit-user-select:none;user-select:none;font-family:Outfit,Inter,sans-serif;opacity:0;transform:translateY(16px);transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .3s ease}.ocean.on.svelte-1orgnnz{opacity:1;transform:translateY(0)}.ocean.processing.svelte-1orgnnz{border-color:#38bdf859}.moon.svelte-1orgnnz{position:absolute;top:10px;right:62px;width:22px;height:22px;border-radius:50%;background:#e0f2fed9;box-shadow:0 0 16px #bae6fd99;animation:svelte-1orgnnz-moon-glow 2.4s ease-in-out infinite}@keyframes svelte-1orgnnz-moon-glow{0%,to{opacity:.55}50%{opacity:.8}}.title.svelte-1orgnnz{position:absolute;left:18px;top:12px;color:#bae6fd8c;font-size:9.5px;font-weight:800;letter-spacing:.22em}.subtitle.svelte-1orgnnz{position:absolute;left:18px;top:25px;color:#7dd3fc59;font-size:8px;font-weight:500;letter-spacing:.08em}.water.svelte-1orgnnz{position:absolute;left:0;right:0;top:38px;height:90px;transform:translateY(92px);transition:transform .45s cubic-bezier(.22,1,.36,1)}.on.svelte-1orgnnz .water:where(.svelte-1orgnnz){transform:translateY(0)}svg.svelte-1orgnnz{display:block;width:100%;height:100%}.w1.svelte-1orgnnz{fill:#0284c759;stroke:#0284c733;stroke-width:1}.w2.svelte-1orgnnz{fill:#06b6d473;stroke:#06b6d440;stroke-width:1}.w3.svelte-1orgnnz{fill:#22d3ee99;stroke:#a5f3fc8c;stroke-width:1.5}.processing.svelte-1orgnnz .w1:where(.svelte-1orgnnz){fill:#1e40af66}.processing.svelte-1orgnnz .w2:where(.svelte-1orgnnz){fill:#3b82f673}.processing.svelte-1orgnnz .w3:where(.svelte-1orgnnz){fill:#60a5fa8c;stroke:#93c5fd99}.bubble.svelte-1orgnnz{position:absolute;bottom:-8px;width:5px;height:5px;border-radius:50%;border:1px solid rgba(165,243,252,.7);background:#a5f3fc1f;animation:svelte-1orgnnz-bubble-rise 4.2s linear infinite;opacity:0}@keyframes svelte-1orgnnz-bubble-rise{0%{transform:translateY(0);opacity:0}12%{opacity:.55}85%{opacity:.25}to{transform:translateY(-78px);opacity:0}}.buoy.svelte-1orgnnz{position:absolute;left:50%;transform:translate(-50%);display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 12px 0 10px;border-radius:12px;background:#082f49eb;border:1px solid rgba(125,211,252,.5);opacity:0;transition:opacity .3s ease .2s}.on.svelte-1orgnnz .buoy:where(.svelte-1orgnnz){opacity:1}.buoy-dot.svelte-1orgnnz{width:7px;height:7px;border-radius:50%;background:#22d3ee;animation:svelte-1orgnnz-moon-glow 1.15s ease-in-out infinite;flex-shrink:0}.processing.svelte-1orgnnz .buoy-dot:where(.svelte-1orgnnz){background:#60a5fa}.buoy-label.svelte-1orgnnz{color:#e0f2fe;font-size:10px;font-weight:700;max-width:130px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mono.svelte-12wa5lj{width:190px;height:112px;background:#000;border:1px solid rgba(255,255,255,.16);border-radius:6px;position:relative;font-family:Outfit,Inter,sans-serif;pointer-events:none;-webkit-user-select:none;user-select:none;opacity:0;transition:opacity .28s ease}.mono.on.svelte-12wa5lj{opacity:1}.status.svelte-12wa5lj{position:absolute;left:18px;top:14px;display:flex;align-items:center;gap:6px}.dot.svelte-12wa5lj{width:6px;height:6px;border-radius:3px;border:1px solid rgba(245,245,245,.7);background:transparent}.dot.lit.svelte-12wa5lj{background:#f5f5f5;animation:svelte-12wa5lj-mono-blink 1.2s ease-in-out infinite}.dot.processing.svelte-12wa5lj{animation:svelte-12wa5lj-mono-blink-dim 1.2s ease-in-out infinite}.dot.standby.svelte-12wa5lj{opacity:.35}@keyframes svelte-12wa5lj-mono-blink{0%,to{opacity:.5}50%{opacity:1}}@keyframes svelte-12wa5lj-mono-blink-dim{0%,to{opacity:.3}50%{opacity:1}}.status-text.svelte-12wa5lj{color:#ffffff8c;font-size:8px;font-weight:700;letter-spacing:.25em}.bars.svelte-12wa5lj{position:absolute;left:18px;bottom:28px;width:154px;height:52px;display:flex;align-items:flex-end;justify-content:center;gap:14px}.bar.svelte-12wa5lj{width:12px;background:#f5f5f5;border-radius:6px;opacity:1;transition:height .05s linear,opacity .2s ease}.bar.dim.svelte-12wa5lj{opacity:.3}.bar.processing.svelte-12wa5lj{opacity:.55}.baseline.svelte-12wa5lj{position:absolute;left:18px;bottom:28px;width:154px;height:1px;background:#ffffff1f}.target.svelte-12wa5lj{position:absolute;left:18px;bottom:6px;width:154px;text-align:center;color:#fff6;font-size:8.5px;font-weight:600;letter-spacing:.03em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.spectrum.svelte-194vixl{width:440px;height:132px;background:linear-gradient(160deg,#1b0c2e,#0a0614);border:1px solid rgba(232,121,249,.25);border-radius:16px;box-shadow:0 0 26px #c084fc38;position:relative;overflow:hidden;pointer-events:none;-webkit-user-select:none;user-select:none;transform:scaleY(.04);transform-origin:bottom center;opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .16s ease}.spectrum.on.svelte-194vixl{transform:scaleY(1);opacity:1}.header.svelte-194vixl{position:absolute;left:20px;top:12px;right:20px;height:16px;display:flex;align-items:center;gap:8px;font-family:Outfit,Inter,sans-serif}.led.svelte-194vixl{width:7px;height:7px;border-radius:50%;background:#e879f9;box-shadow:0 0 6px #e879f9;animation:svelte-194vixl-spectrum-blink 1.2s ease-in-out infinite;flex-shrink:0}.led.standby.svelte-194vixl{background:#f59e0b;box-shadow:0 0 6px #f59e0b}.led.processing.svelte-194vixl{background:#38bdf8;box-shadow:0 0 6px #38bdf8}@keyframes svelte-194vixl-spectrum-blink{0%,to{opacity:.4}50%{opacity:1}}.title.svelte-194vixl{color:#f5d0fe;font-size:10px;font-weight:800;letter-spacing:.15em}.subtitle.svelte-194vixl{color:#f5d0fe59;font-size:9px;font-weight:500;letter-spacing:.1em}.spacer.svelte-194vixl{flex:1}.chip.svelte-194vixl{display:inline-flex;align-items:center;gap:5px;background:#e879f914;border:1px solid rgba(232,121,249,.3);border-radius:4px;padding:2px 8px}.tgt.svelte-194vixl{color:#e879f9;font-size:8.5px;font-weight:800;letter-spacing:.1em}.tgt-label.svelte-194vixl{color:#fae8ff;font-size:8.5px;font-weight:700;letter-spacing:.06em;max-width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bars.svelte-194vixl{position:absolute;left:20px;right:20px;bottom:16px;display:flex;gap:6.5px;align-items:flex-end;height:96px}.bar.svelte-194vixl{width:19px;border-radius:3px;background:linear-gradient(180deg,#f0abfc,#c084fc 45%,#38bdf8);transition:height .05s linear}.floor.svelte-194vixl{position:absolute;left:20px;right:20px;bottom:16px;height:1px;background:#e879f926}.terminal.svelte-pvtvge{width:380px;height:130px;background:#0d1b4c;border:1.5px solid rgba(125,211,252,.35);border-radius:8px;box-shadow:0 0 20px #080f3099;overflow:hidden;pointer-events:none;-webkit-user-select:none;user-select:none;transform:scaleY(.04);transform-origin:top center;opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .16s ease}.terminal.on.svelte-pvtvge{transform:scaleY(1);opacity:1}.titlebar.svelte-pvtvge{height:24px;background:#ffffff0f;display:flex;align-items:center;gap:6px;padding:0 12px;font-family:Outfit,Inter,sans-serif}.dot.svelte-pvtvge{width:8px;height:8px;border-radius:50%;background:#ffffff38}.titletext.svelte-pvtvge{color:#e0f2fe8c;font-size:9px;font-weight:700;letter-spacing:.1em}.body.svelte-pvtvge{padding:12px 16px;display:flex;flex-direction:column;gap:8px}.line1.svelte-pvtvge{color:#bae6fdb3;font-size:10px;font-weight:600;font-family:SF Mono,Menlo,Consolas,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.line2.svelte-pvtvge{color:#fff;font-size:11px;font-weight:700;letter-spacing:.05em;font-family:SF Mono,Menlo,Consolas,monospace}.line2.standby.svelte-pvtvge{color:#fcd34d}.line2.processing.svelte-pvtvge{color:#7dd3fc}.line3.svelte-pvtvge{color:#bae6fd73;font-size:9.5px;font-weight:500;font-family:SF Mono,Menlo,Consolas,monospace}.vinyl.svelte-kq5b5i{width:320px;height:132px;background:linear-gradient(180deg,#f7ecd9,#e7d6b8);border:1.5px solid rgba(120,89,53,.35);border-radius:14px;box-shadow:0 0 22px #00000059;position:relative;pointer-events:none;-webkit-user-select:none;user-select:none;transform:translateY(16px);opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .28s ease}.vinyl.on.svelte-kq5b5i{transform:translateY(0);opacity:1}.header.svelte-kq5b5i{position:absolute;left:16px;top:12px;right:16px;height:14px;display:flex;align-items:center;gap:8px;font-family:Outfit,Inter,sans-serif}.vu-label.svelte-kq5b5i{color:#5b4530;font-size:12px;font-weight:900;letter-spacing:.17em}.subtitle.svelte-kq5b5i{color:#5b45308c;font-size:8px;font-weight:700;letter-spacing:.19em}.spacer.svelte-kq5b5i{flex:1}.led.svelte-kq5b5i{width:8px;height:8px;border-radius:50%;background:#dc2626;box-shadow:0 0 6px #dc2626;animation:svelte-kq5b5i-vinyl-blink 1.2s ease-in-out infinite;flex-shrink:0}.led.standby.svelte-kq5b5i{background:#f59e0b;box-shadow:0 0 6px #f59e0b}.led.processing.svelte-kq5b5i{background:#38bdf8;box-shadow:0 0 6px #38bdf8}@keyframes svelte-kq5b5i-vinyl-blink{0%,to{opacity:.4}50%{opacity:1}}.face.svelte-kq5b5i{position:absolute;left:16px;top:30px;width:288px;height:72px;background:#fffcf48c;border:1px solid rgba(120,89,53,.25);border-radius:8px}.tick.svelte-kq5b5i{position:absolute;top:14px;width:1.5px;height:22px;background:#5b453066}.tick.red.svelte-kq5b5i{background:#dc2626;height:30px}.scale-label.svelte-kq5b5i{position:absolute;color:#5b453080;font-size:7px;font-family:Outfit,Inter,sans-serif}.scale-label.red.svelte-kq5b5i{color:#dc2626;font-weight:800}.needle-svg.svelte-kq5b5i{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.needle.svelte-kq5b5i{fill:none;stroke:#292524;stroke-width:2px;vector-effect:non-scaling-stroke}.pivot.svelte-kq5b5i{position:absolute;left:138px;top:64px;width:12px;height:12px;border-radius:50%;background:#292524}.target.svelte-kq5b5i{position:absolute;left:16px;bottom:12px;width:288px;color:#5b4530a6;font-size:9.5px;font-weight:700;font-family:Outfit,Inter,sans-serif;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}html,body,#app{background:transparent!important;background-color:transparent!important;box-shadow:none!important;border:none!important;outline:none!important;overflow:hidden!important;will-change:transform,opacity;backface-visibility:hidden}*:focus{outline:none!important;box-shadow:none!important}.overlay-root.svelte-rmqsd6{width:100%;height:100%;background:transparent!important;display:flex;align-items:center;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;overflow:hidden!important}.overlay-stack.svelte-rmqsd6{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;max-width:100%;max-height:100%;pointer-events:none}.visualizer-container.svelte-rmqsd6{display:flex;align-items:center;justify-content:center;pointer-events:none;min-height:0;flex-shrink:1;overflow:hidden}.system-response-box.svelte-rmqsd6{position:relative;z-index:10;display:flex;align-items:center;gap:10px;height:46px;padding:0 20px;border-radius:23px;font-family:Outfit,Inter,system-ui,sans-serif;opacity:0;transform:translateY(10px);transition:transform .34s cubic-bezier(.175,.885,.32,1.25),opacity .28s ease;pointer-events:none;flex-shrink:0}.system-response-box.on.svelte-rmqsd6{opacity:1;transform:translateY(0)}.system-response-box.speaking.svelte-rmqsd6{background:#042f24f0;border:1.2px solid rgba(16,185,129,.55);box-shadow:0 10px 28px #00000080,0 0 18px #10b98140;color:#a7f3d0}.system-response-box.command.svelte-rmqsd6{background:#1e103cf0;border:1.2px solid rgba(168,85,247,.65);box-shadow:0 10px 28px #00000080,0 0 18px #a855f74d;color:#e9d5ff}.system-response-box.mcp.svelte-rmqsd6{background:#4c0519f0;border:1.2px solid rgba(244,63,94,.55);box-shadow:0 10px 28px #00000080,0 0 18px #f43f5e40;color:#fecdd3}.cmd-icon.svelte-rmqsd6{font-size:16px;line-height:1;color:#c084fc;animation:svelte-rmqsd6-flash 1.5s infinite ease-in-out}.mini-eq.svelte-rmqsd6{display:flex;align-items:center;gap:2.5px;height:22px}.eq-bar.svelte-rmqsd6{width:3px;height:8px;border-radius:1.5px;background:#34d399;animation:svelte-rmqsd6-eq-bounce .8s ease-in-out infinite alternate}@keyframes svelte-rmqsd6-eq-bounce{0%{height:7px}to{height:21px}}.pill-text.svelte-rmqsd6{display:flex;flex-direction:column;gap:1px;min-width:0}.pill-title.svelte-rmqsd6{font-size:10px;font-weight:850;letter-spacing:.15em}.pill-target.svelte-rmqsd6{font-size:8.5px;font-weight:600;opacity:.55;max-width:180px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pulse-dot.svelte-rmqsd6{width:10px;height:10px;background-color:#f43f5e;border-radius:50%;animation:svelte-rmqsd6-flash 1.2s infinite ease-in-out}@keyframes svelte-rmqsd6-flash{0%,to{opacity:.3;transform:scale(.9)}50%{opacity:1;transform:scale(1.15)}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.diagnostic-window.svelte-45v8pc{background-color:var(--color-obsidian-950);width:100vw;height:100vh;padding:calc(var(--spacing,.25rem) * 5);color:var(--text);justify-content:center;align-items:flex-start;display:flex;overflow-y:auto}.modal-card.svelte-45v8pc{width:100%;max-width:520px;animation:.3s cubic-bezier(.175,.885,.32,1.2) forwards scaleUp}.head.svelte-45v8pc{margin-bottom:calc(var(--spacing,.25rem) * 5);align-items:flex-start;gap:calc(var(--spacing,.25rem) * 3);display:flex}.head-icon.svelte-45v8pc{--tw-leading:1;flex-shrink:0;font-size:32px;line-height:1}.title.svelte-45v8pc{font-size:var(--text-xl,1.25rem);line-height:var(--tw-leading,var(--text-xl--line-height,calc(1.75 / 1.25)));--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800);--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em);color:var(--color-white,#fff)}.subtitle.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--color-obsidian-400);font-size:12.5px}.steps.svelte-45v8pc{margin:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 2.5);padding:calc(var(--spacing,.25rem) * 0);flex-direction:column;list-style-type:none;display:flex}.step.svelte-45v8pc{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 3);border-radius:var(--radius-lg,.5rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;display:flex}@supports (color:color-mix(in lab,red,red)){.step.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.step.svelte-45v8pc{padding:calc(var(--spacing,.25rem) * 3)}.step.done.svelte-45v8pc{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.step.done.svelte-45v8pc{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.step.done.svelte-45v8pc{background-color:#0000}.step-icon.svelte-45v8pc{--tw-leading:calc(var(--spacing,.25rem) * 6);font-size:16px;line-height:calc(var(--spacing,.25rem) * 6);flex-shrink:0}.step-body.svelte-45v8pc{min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex}.step-title.svelte-45v8pc{--tw-font-weight:var(--font-weight-bold,700);font-size:13.5px;font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff)}.step-detail.svelte-45v8pc{--tw-leading:var(--leading-relaxed,1.625);font-size:12.5px;line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-300)}.step-detail.svelte-45v8pc code:where(.svelte-45v8pc){background-color:#ffffff0d;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.step-detail.svelte-45v8pc code:where(.svelte-45v8pc){background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.step-detail.svelte-45v8pc code:where(.svelte-45v8pc){padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue)}.warn-note.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.warn-note.svelte-45v8pc{color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.privacy-note.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:#5ee9b5e6}@supports (color:color-mix(in lab,red,red)){.privacy-note.svelte-45v8pc{color:color-mix(in oklab,var(--color-emerald-300,oklch(84.5% .143 164.978)) 90%,transparent)}}.muted.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--color-obsidian-400);font-size:11px}.shortcut-list.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 1.5);padding:calc(var(--spacing,.25rem) * 0);flex-wrap:wrap;list-style-type:none;display:flex}.shortcut-keys.svelte-45v8pc{background-color:#ffffff0d;border-radius:.25rem;display:inline-block}@supports (color:color-mix(in lab,red,red)){.shortcut-keys.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.shortcut-keys.svelte-45v8pc{padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);font-size:11px}.shortcut-list.svelte-45v8pc li.unbound:where(.svelte-45v8pc) .shortcut-keys:where(.svelte-45v8pc){color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.shortcut-list.svelte-45v8pc li.unbound:where(.svelte-45v8pc) .shortcut-keys:where(.svelte-45v8pc){color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.step-actions.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 2);align-items:center;gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}.manual.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#0006}@supports (color:color-mix(in lab,red,red)){.manual.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-black,#000) 40%,transparent)}}.manual.svelte-45v8pc{padding:calc(var(--spacing,.25rem) * 2.5)}.manual.svelte-45v8pc pre:where(.svelte-45v8pc){margin:calc(var(--spacing,.25rem) * 0);max-height:180px;font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);word-break:break-all;white-space:pre-wrap;color:var(--color-obsidian-200);overflow-y:auto}.error-container.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 4);align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3633;border-radius:.25rem;width:100%;display:flex}@supports (color:color-mix(in lab,red,red)){.error-container.svelte-45v8pc{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.error-container.svelte-45v8pc{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.error-container.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.error-container.svelte-45v8pc{padding:calc(var(--spacing,.25rem) * 3);text-align:left;color:var(--color-red-400,oklch(70.4% .191 22.216));font-size:12px}.error-icon.svelte-45v8pc{flex-shrink:0}.error-msg.svelte-45v8pc{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word}.modal-actions.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 5);justify-content:flex-end;display:flex}.btn-primary.svelte-45v8pc{cursor:pointer;border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-bold,700);font-size:12.5px;font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 14px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-primary.svelte-45v8pc:hover:not(:disabled){--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 18px var(--tw-shadow-color,#38bdf873);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-primary.svelte-45v8pc:disabled{cursor:default;opacity:.6;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.btn-secondary.svelte-45v8pc{cursor:pointer;border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-800);padding-inline:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-semibold,600);font-size:12.5px;font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-300);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-secondary.svelte-45v8pc:hover{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-45v8pc:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 10%,transparent)}}.btn-secondary.svelte-45v8pc:hover{background-color:var(--color-obsidian-700);color:var(--color-white,#fff)}.btn-link.svelte-45v8pc{cursor:pointer;border-style:var(--tw-border-style);padding:calc(var(--spacing,.25rem) * 0);--tw-font-weight:var(--font-weight-semibold,600);font-size:12px;font-weight:var(--font-weight-semibold,600);color:var(--color-accent-blue);text-underline-offset:2px;background-color:#0000;border-width:0;text-decoration-line:underline}.loading-container.svelte-45v8pc{justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-direction:column;width:100%;height:100%;display:flex}.loading-label.svelte-45v8pc{text-align:center;--tw-font-weight:var(--font-weight-semibold,600);font-size:13.5px;font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-200)}.hint.svelte-45v8pc{text-align:center;max-width:280px;color:var(--color-obsidian-400);font-size:11.5px}.spinner.svelte-45v8pc{height:calc(var(--spacing,.25rem) * 7);width:calc(var(--spacing,.25rem) * 7);animation:var(--animate-spin,spin 1s linear infinite);border-style:var(--tw-border-style);border-width:2.5px;border-color:#ffffff0d;border-radius:3.40282e38px}@supports (color:color-mix(in lab,red,red)){.spinner.svelte-45v8pc{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.spinner.svelte-45v8pc{border-top-color:var(--color-accent-blue)}@keyframes svelte-45v8pc-scaleUp{0%{opacity:0;transform:scale(.98)}to{opacity:1;transform:none}}.vx-wizard{--vx-bg-0: #0e1116;--vx-bg-1: #14181f;--vx-bg-2: #1a1f28;--vx-bg-3: #232a35;--vx-bg-4: #2d3540;--vx-line: #2a313c;--vx-line-2: #3a4350;--vx-txt-0: #e8edf3;--vx-txt-1: #b6bfcb;--vx-txt-2: #7e8896;--vx-txt-3: #555f6c;--vx-cyan-0: #22d4ef;--vx-cyan-1: #7ae8f8;--vx-cyan-2: #5cc4d8;--vx-cyan-d: #0d8ea3;--vx-cyan-b: rgba(34, 212, 239, .45);--vx-gold-0: #e8a019;--vx-gold-1: #f5c842;--vx-gold-glow: rgba(232, 160, 25, .3);--vx-good: #6ad48a;--vx-warn: #ffb454;--vx-bad: #f4636e;--vx-mono: ui-monospace, "JetBrains Mono", SFMono-Regular, Consolas, monospace;--vx-ease: cubic-bezier(.21, .6, .35, 1);--vx-sel-bg: linear-gradient(180deg, rgba(34, 212, 239, .07), rgba(34, 212, 239, .01)), var(--vx-bg-1);--vx-sel-shadow: 0 18px 40px -20px rgba(34, 212, 239, .35), 0 0 0 1px rgba(34, 212, 239, .15);--vx-panel-shadow: 0 12px 36px rgba(0, 0, 0, .5), 0 0 0 1px var(--vx-line);--vx-btn-shadow: 0 6px 24px rgba(34, 212, 239, .25), 0 0 0 1px rgba(34, 212, 239, .4) inset;color:var(--vx-txt-0);background:var(--vx-bg-0)}.vx-wizard .vx-eyebrow{font-family:var(--vx-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--vx-cyan-2)}.vx-wizard .vx-label{font-family:var(--vx-mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--vx-txt-3)}.vx-wizard h2.vx-title{margin:8px 0 6px;font-size:30px;letter-spacing:-.03em;line-height:1.05;font-weight:600}.vx-wizard p.vx-lede{margin:0;font-size:14px;line-height:1.5;color:var(--vx-txt-1)}.vx-wizard p.vx-lede b{color:var(--vx-txt-0);font-weight:600}.vx-wizard .vx-card{border:1px solid var(--vx-line);border-radius:14px;background:var(--vx-bg-1);cursor:pointer;text-align:left;color:inherit;font:inherit;transition:border-color .28s var(--vx-ease),background .28s var(--vx-ease),box-shadow .28s var(--vx-ease)}.vx-wizard .vx-card:hover:not(.vx-on){border-color:var(--vx-line-2)}.vx-wizard .vx-card.vx-on{border-color:var(--vx-cyan-b);background:var(--vx-sel-bg);box-shadow:var(--vx-sel-shadow)}.vx-wizard .vx-check{width:24px;height:24px;flex:none;border-radius:50%;border:1px solid var(--vx-line-2);background:transparent;display:grid;place-items:center;font-family:var(--vx-mono);font-size:12px;color:#00222a;transition:all .25s}.vx-wizard .vx-card.vx-on .vx-check{border-color:var(--vx-cyan-0);background:var(--vx-cyan-0)}.vx-wizard .vx-check>span{opacity:0;transition:opacity .2s}.vx-wizard .vx-card.vx-on .vx-check>span{opacity:1}.vx-wizard .vx-btn{height:44px;padding:0 18px;border-radius:10px;border:1px solid var(--vx-line);background:#ffffff08;color:var(--vx-txt-0);font:inherit;font-size:13.5px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:8px;transition:all .2s}.vx-wizard .vx-btn:hover:not(:disabled){border-color:var(--vx-line-2);background:#ffffff0f}.vx-wizard .vx-btn.vx-primary{border-color:#fff3;background:linear-gradient(180deg,var(--vx-cyan-0),var(--vx-cyan-d));color:#00222a;box-shadow:var(--vx-btn-shadow)}.vx-wizard .vx-btn.vx-primary:hover:not(:disabled){background:linear-gradient(180deg,var(--vx-cyan-1),var(--vx-cyan-0))}.vx-wizard .vx-btn.vx-ghost{border-color:transparent;background:transparent;color:var(--vx-txt-1)}.vx-wizard .vx-btn.vx-ghost:hover:not(:disabled){background:#ffffff0a;color:var(--vx-txt-0)}.vx-wizard .vx-btn:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}.vx-wizard .vx-meter{height:8px;border-radius:999px;background:var(--vx-bg-4);overflow:hidden}.vx-wizard .vx-meter>div{height:100%;border-radius:999px;transition:width .6s var(--vx-ease),background .4s}.vx-wizard .vx-keycap{min-width:56px;height:56px;padding:0 16px;border-radius:12px;display:grid;place-items:center;font-family:var(--vx-mono);font-size:16px;font-weight:500;background:linear-gradient(180deg,var(--vx-bg-3),var(--vx-bg-2));color:var(--vx-txt-0);border:1px solid var(--vx-line-2);box-shadow:0 4px 0 var(--vx-bg-0),inset 0 1px #ffffff14;transition:all .25s}.vx-wizard .vx-keycap.vx-hot{background:linear-gradient(180deg,#22d4ef40,#22d4ef14);color:var(--vx-cyan-1);border-color:var(--vx-cyan-b);box-shadow:0 4px #0d8ea399,inset 0 1px #ffffff14}.vx-wizard .vx-plus{font-family:var(--vx-mono);color:var(--vx-txt-3);font-size:18px}.vx-wizard .vx-pill{display:inline-flex;align-items:center;gap:8px;padding:7px 13px;border-radius:999px;border:1px solid var(--vx-line);background:#ffffff05;font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-txt-2)}.vx-wizard .vx-pill.vx-ok{border-color:#6ad48a66;color:var(--vx-good)}.vx-wizard .vx-pill.vx-busy{border-color:var(--vx-cyan-b);color:var(--vx-cyan-1)}.vx-wizard .vx-pill.vx-err{border-color:#f4636e73;color:var(--vx-bad)}@keyframes vxPulse{0%,to{opacity:1}50%{opacity:.35}}@keyframes vxPop{0%{opacity:0;transform:translateY(6px) scale(.98)}to{opacity:1;transform:none}}@keyframes vxRing{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:none}}@keyframes vxScan{0%{transform:translate(-100%)}to{transform:translate(100%)}}@keyframes vxBar{0%,to{transform:scaleY(.35)}50%{transform:scaleY(1)}}@keyframes vxSpin{to{transform:rotate(360deg)}}.vx-wizard .vx-spinner{width:13px;height:13px;border-radius:50%;border:2px solid rgba(34,212,239,.25);border-top-color:var(--vx-cyan-0);animation:vxSpin .7s linear infinite;flex:none}.welcome.svelte-1gicu21{flex:1;min-height:0;display:grid;grid-template-columns:1.1fr 1fr;gap:48px;align-items:center}.halo.svelte-1gicu21{position:relative;width:96px;height:96px;display:grid;place-items:center;margin-bottom:22px}.ring.svelte-1gicu21{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;border:1px solid rgba(34,212,239,.25);animation:vxPulse 2.4s infinite}.ring.inner.svelte-1gicu21{top:12px;right:12px;bottom:12px;left:12px;border-color:#22d4ef26;animation-delay:.6s}.halo.svelte-1gicu21 img:where(.svelte-1gicu21){width:52px;height:52px;border-radius:12px;box-shadow:0 0 16px #22d4ef66}h1.svelte-1gicu21{margin:12px 0 14px;font-size:clamp(30px,4vw,50px);line-height:1.02;letter-spacing:-.035em;font-weight:600}h1.svelte-1gicu21 span:where(.svelte-1gicu21){color:var(--vx-gold-1)}.intro.svelte-1gicu21 p:where(.svelte-1gicu21){margin:0;max-width:560px;font-size:15px;line-height:1.55;color:var(--vx-txt-1)}.reassure.svelte-1gicu21{margin-top:22px;display:inline-flex;align-items:center;gap:10px;padding:9px 14px;border:1px solid rgba(34,212,239,.25);border-radius:999px;background:#22d4ef0a;font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-cyan-2)}.reassure.svelte-1gicu21 span:where(.svelte-1gicu21){color:var(--vx-gold-1)}.cards.svelte-1gicu21{display:grid;grid-template-columns:1fr 1fr;gap:12px}.step-card.svelte-1gicu21{padding:16px 18px;background:linear-gradient(180deg,#ffffff05,#fff0);cursor:default}.head.svelte-1gicu21{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.glyph.svelte-1gicu21{font-family:var(--vx-mono);font-size:20px;color:var(--vx-cyan-1)}.num.svelte-1gicu21{font-family:var(--vx-mono);font-size:11px;color:var(--vx-txt-3)}.title.svelte-1gicu21{font-weight:600;font-size:14.5px;margin-bottom:4px}.desc.svelte-1gicu21{font-size:12.5px;line-height:1.45;color:var(--vx-txt-2)}@media (max-width: 1000px){.welcome.svelte-1gicu21{grid-template-columns:1fr;gap:24px;align-content:start}}.modal-backdrop.svelte-1c9i6zy{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b8;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);display:flex;align-items:center;justify-content:center;z-index:1200;padding:20px;animation:svelte-1c9i6zy-fadeIn .2s ease-out}@keyframes svelte-1c9i6zy-fadeIn{0%{opacity:0}to{opacity:1}}.modal-card.svelte-1c9i6zy{width:100%;max-width:580px;max-height:90vh;background:var(--vx-bg-1);border:1px solid var(--vx-line-2);border-radius:18px;box-shadow:0 24px 60px #000000b3,0 0 0 1px #22d4ef33;display:flex;flex-direction:column;overflow:hidden;color:var(--vx-txt-0)}.modal-header.svelte-1c9i6zy{display:flex;align-items:center;justify-content:space-between;padding:16px 22px;border-bottom:1px solid var(--vx-line);background:var(--vx-bg-2)}.modal-title-row.svelte-1c9i6zy{display:flex;align-items:center;gap:10px}.modal-glyph.svelte-1c9i6zy{font-size:20px}.modal-header.svelte-1c9i6zy h3:where(.svelte-1c9i6zy){margin:0;font-size:16px;font-weight:600;letter-spacing:-.01em;color:var(--vx-txt-0)}.close-btn.svelte-1c9i6zy{background:transparent;border:none;color:var(--vx-txt-2);font-size:16px;cursor:pointer;padding:6px;border-radius:8px;transition:all .2s;line-height:1}.close-btn.svelte-1c9i6zy:hover{color:var(--vx-txt-0);background:#ffffff14}.modal-body.svelte-1c9i6zy{padding:20px 22px;overflow-y:auto;display:flex;flex-direction:column;gap:16px}.modal-hint.svelte-1c9i6zy{margin:0;font-size:12.5px;line-height:1.5;color:var(--vx-txt-2)}.modal-hint.svelte-1c9i6zy code:where(.svelte-1c9i6zy),.field-hint.svelte-1c9i6zy code:where(.svelte-1c9i6zy){background:var(--vx-bg-4);color:var(--vx-cyan-1);padding:2px 5px;border-radius:4px;font-family:var(--vx-mono);font-size:11px;border:1px solid var(--vx-line)}.field-group.svelte-1c9i6zy{display:flex;flex-direction:column;gap:12px;background:#ffffff05;border:1px solid var(--vx-line);border-radius:14px;padding:16px 18px}.field.svelte-1c9i6zy{display:flex;flex-direction:column;gap:6px}.field-title.svelte-1c9i6zy{font-size:12.5px;font-weight:500;color:var(--vx-txt-1)}.vx-input.svelte-1c9i6zy{width:100%;height:38px;padding:0 12px;background:var(--vx-bg-0);border:1px solid var(--vx-line-2);border-radius:8px;color:var(--vx-txt-0);font-family:inherit;font-size:13px;outline:none;transition:border-color .2s,box-shadow .2s;box-sizing:border-box}.vx-input.svelte-1c9i6zy:focus{border-color:var(--vx-cyan-0);box-shadow:0 0 0 2px var(--vx-cyan-b)}.vx-input.svelte-1c9i6zy::placeholder{color:var(--vx-txt-3)}.field-hint.svelte-1c9i6zy{margin:-4px 0 4px;font-size:11px;line-height:1.45;color:var(--vx-txt-3)}.discovered-models.svelte-1c9i6zy{display:flex;flex-direction:column;gap:6px;margin-top:-4px}.model-tags.svelte-1c9i6zy{display:flex;flex-wrap:wrap;gap:6px}.tag-btn.svelte-1c9i6zy{font-size:11.5px;padding:3px 9px;border-radius:6px;background:var(--vx-bg-3);border:1px solid var(--vx-line-2);color:var(--vx-txt-2);cursor:pointer;transition:all .2s}.tag-btn.svelte-1c9i6zy:hover{color:var(--vx-txt-0);border-color:var(--vx-cyan-0)}.tag-btn.active.svelte-1c9i6zy{background:#22d4ef26;border-color:var(--vx-cyan-0);color:var(--vx-cyan-1);font-weight:600}.test-row.svelte-1c9i6zy{display:flex;align-items:center;gap:12px;margin-top:8px;flex-wrap:wrap}.btn-test.svelte-1c9i6zy{height:36px;padding:0 16px;border-radius:8px;background:var(--vx-bg-4);border:1px solid var(--vx-line-2);color:var(--vx-txt-0);font-size:12.5px;font-weight:600;cursor:pointer;transition:all .2s;display:inline-flex;align-items:center;gap:6px}.btn-test.svelte-1c9i6zy:hover:not(:disabled){background:var(--vx-line-2);border-color:var(--vx-cyan-0)}.btn-test.svelte-1c9i6zy:disabled{opacity:.5;cursor:not-allowed}.status-pill.svelte-1c9i6zy{padding:6px 12px;border-radius:8px;font-size:11.5px;font-weight:500;line-height:1.35;word-break:break-word;max-width:100%}.status-pill.success.svelte-1c9i6zy{background:#6ad48a26;color:var(--vx-good);border:1px solid rgba(106,212,138,.3)}.status-pill.error.svelte-1c9i6zy{background:#f4636e26;color:var(--vx-bad);border:1px solid rgba(244,99,110,.3)}.modal-footer.svelte-1c9i6zy{padding:14px 22px;border-top:1px solid var(--vx-line);background:var(--vx-bg-2);display:flex;align-items:center;justify-content:space-between;gap:12px}.footer-status.svelte-1c9i6zy{font-size:12px}.status-msg.ok.svelte-1c9i6zy{color:var(--vx-good);font-weight:500}.status-msg.warn.svelte-1c9i6zy{color:var(--vx-warn)}.footer-actions.svelte-1c9i6zy{display:flex;gap:10px}.engine-step.svelte-xv54mf{flex:1;min-height:0;display:flex;flex-direction:column;gap:10px}.head.svelte-xv54mf{display:flex;gap:20px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-xv54mf{max-width:760px;min-width:0}.copy.svelte-xv54mf .vx-title:where(.svelte-xv54mf){margin:4px 0 3px;font-size:26px}.copy.svelte-xv54mf .vx-lede:where(.svelte-xv54mf){margin:2px 0 0;font-size:13px;line-height:1.4}.gpu-toggle.svelte-xv54mf{flex:none;width:380px;display:flex;align-items:center;gap:12px;padding:8px 14px}.gpu-toggle.svelte-xv54mf:disabled{opacity:.55;cursor:default}.switch.svelte-xv54mf{width:44px;height:26px;border-radius:999px;position:relative;flex:none;background:var(--vx-bg-4);border:1px solid var(--vx-line-2);transition:background .3s}.switch.on.svelte-xv54mf{background:var(--vx-cyan-0)}.knob.svelte-xv54mf{position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 2px 6px #0006;transition:left .28s var(--vx-ease)}.switch.on.svelte-xv54mf .knob:where(.svelte-xv54mf){left:20px}.gpu-copy.svelte-xv54mf{display:block}.gpu-title.svelte-xv54mf{display:flex;align-items:center;gap:6px;font-weight:600;font-size:13px}.gpu-title.svelte-xv54mf .glyph:where(.svelte-xv54mf){font-family:var(--vx-mono);color:var(--vx-cyan-1)}.state.svelte-xv54mf{font-family:var(--vx-mono);font-size:10px;letter-spacing:.1em;color:var(--vx-txt-3);transition:color .3s}.state.on.svelte-xv54mf{color:var(--vx-cyan-1)}.gpu-desc.svelte-xv54mf{display:block;font-size:11px;color:var(--vx-txt-2);margin-top:2px;line-height:1.35}.engines.svelte-xv54mf{flex:1;min-height:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.engine-card.svelte-xv54mf{position:relative;padding:14px 18px;border-radius:14px;display:grid;grid-template-columns:1fr 144px;gap:10px 14px;align-content:start}.left-col.svelte-xv54mf{min-width:0}.corner.svelte-xv54mf{position:absolute;top:12px;right:12px;width:22px;height:22px}.engine-head.svelte-xv54mf{grid-column:1 / -1}.name-row.svelte-xv54mf{display:flex;align-items:center;gap:8px;margin-bottom:2px}.engine-glyph.svelte-xv54mf{font-family:var(--vx-mono);font-size:20px;color:var(--vx-cyan-1);line-height:1}.engine-name.svelte-xv54mf{font-size:17px;font-weight:600;letter-spacing:-.02em;line-height:1.1}.tagline.svelte-xv54mf{font-size:12px;color:var(--vx-txt-2);line-height:1.35;max-width:92%}.warn.svelte-xv54mf{margin-top:6px;padding:6px 9px;border-radius:8px;border:1px solid rgba(255,180,84,.3);background:#ffb4540f;color:var(--vx-warn);font-size:11px;line-height:1.35}.sizes.svelte-xv54mf{display:flex;gap:4px;margin-top:5px;flex-wrap:wrap;min-width:0}.size.svelte-xv54mf{height:40px;flex:1 1 0;max-width:96px;min-width:0;padding:0 4px;border-radius:8px;border:1px solid var(--vx-line);background:#ffffff05;color:var(--vx-txt-1);font-family:var(--vx-mono);cursor:pointer;transition:all .22s;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:2px;white-space:nowrap}.size.svelte-xv54mf:hover{border-color:var(--vx-line-2)}.size.on.svelte-xv54mf{border-color:var(--vx-cyan-b);background:#22d4ef1f;color:var(--vx-cyan-1)}.size-id.svelte-xv54mf{font-size:11.5px;font-weight:600;line-height:1.1;white-space:nowrap}.size-mb.svelte-xv54mf{font-size:9.5px;line-height:1.1;opacity:.75;white-space:nowrap}.remote-summary-box.svelte-xv54mf{margin-top:5px;padding:7px 10px;background:#00000040;border:1px solid var(--vx-line);border-radius:8px;display:flex;flex-direction:column;gap:4px}.remote-row.svelte-xv54mf{display:flex;justify-content:space-between;align-items:center;gap:8px;font-family:var(--vx-mono);font-size:10.5px}.remote-k.svelte-xv54mf{color:var(--vx-txt-2);flex:none}.remote-v.svelte-xv54mf{color:var(--vx-txt-0);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:240px;text-align:right}.remote-v-ok.svelte-xv54mf{color:var(--vx-good);font-weight:600}.remote-v-warn.svelte-xv54mf{color:var(--vx-warn);font-weight:600}.remote-btn-row.svelte-xv54mf{margin-top:6px}.remote-cfg-btn.svelte-xv54mf{width:100%;height:32px;font-size:11.5px}.metrics.svelte-xv54mf{margin-top:14px;display:flex;flex-direction:column;gap:7px}.metric.svelte-xv54mf{display:flex;flex-direction:column;transition:opacity .3s}.metric.dim.svelte-xv54mf{opacity:.45}.metric-head.svelte-xv54mf{display:flex;justify-content:space-between;font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-2);margin-bottom:3px;line-height:1.2}.metric-head.svelte-xv54mf span:where(.svelte-xv54mf):last-child{color:var(--vx-txt-1)}.right-col.svelte-xv54mf{width:144px;display:flex;flex-direction:column;gap:8px}.spark.svelte-xv54mf{width:144px;height:80px;box-sizing:border-box;padding:7px 9px;border-radius:10px;border:1px solid var(--vx-line);background:#00000040;display:flex;flex-direction:column}.spark-head.svelte-xv54mf{display:flex;justify-content:space-between;font-family:var(--vx-mono);font-size:10px;color:var(--vx-txt-2);margin-bottom:5px;flex:none;line-height:1.2}.spark-head.svelte-xv54mf span:where(.svelte-xv54mf):last-child{color:var(--vx-txt-0)}.spark-bars.svelte-xv54mf{display:flex;align-items:flex-end;gap:3px;flex:1;min-height:0}.spark-bars.svelte-xv54mf>div:where(.svelte-xv54mf){flex:1;border-radius:2px;background:var(--vx-cyan-0);transition:height .6s var(--vx-ease),opacity .4s}.status-row.svelte-xv54mf{flex:none;display:flex;justify-content:flex-end}@media (max-width: 1100px){.head.svelte-xv54mf{flex-direction:column;align-items:stretch;gap:10px}.gpu-toggle.svelte-xv54mf{width:100%}.engines.svelte-xv54mf{grid-template-columns:1fr}}.hotkey-step.svelte-1fbfhk3{flex:1;min-height:0;display:flex;flex-direction:column;gap:14px}.copy.svelte-1fbfhk3{max-width:820px;min-width:0}.body.svelte-1fbfhk3{flex:1;min-height:0;display:grid;grid-template-columns:minmax(300px,1fr) 1.6fr;gap:14px}.gestures.svelte-1fbfhk3{display:grid;grid-auto-rows:min-content;gap:10px;align-content:start}.gesture.svelte-1fbfhk3{padding:12px 16px;display:grid;grid-template-columns:1fr 130px;gap:14px;align-items:center}.g-name.svelte-1fbfhk3{font-weight:600;font-size:14.5px;margin-bottom:3px}.g-desc.svelte-1fbfhk3{font-size:12px;color:var(--vx-txt-2);line-height:1.4}.tracks.svelte-1fbfhk3{display:grid;gap:5px}.track-row.svelte-1fbfhk3{display:grid;grid-template-columns:24px 1fr;gap:6px;align-items:center}.track-label.svelte-1fbfhk3{font-family:var(--vx-mono);font-size:9.5px;color:var(--vx-txt-3);letter-spacing:.1em}.track.svelte-1fbfhk3{display:flex;gap:2px;height:9px}.track.svelte-1fbfhk3>div:where(.svelte-1fbfhk3){border-radius:2px;background:var(--vx-bg-3);transition:background .3s}.track.svelte-1fbfhk3>div.lit:where(.svelte-1fbfhk3){background:var(--vx-txt-2)}.track.svelte-1fbfhk3>div.on:where(.svelte-1fbfhk3){background:var(--vx-cyan-0)}.hidden-note.svelte-1fbfhk3{padding:10px 12px;border-radius:10px;border:1px dashed var(--vx-line-2);font-size:12px;line-height:1.45;color:var(--vx-txt-2)}.right.svelte-1fbfhk3{display:flex;flex-direction:column;gap:12px;min-height:0}.recorder.svelte-1fbfhk3{position:relative;overflow:hidden;flex:1;min-height:220px;border-radius:18px;border:1px dashed var(--vx-line-2);background:#ffffff04;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;cursor:pointer;font:inherit;color:inherit;transition:all .3s var(--vx-ease)}.recorder.rec.svelte-1fbfhk3{border-color:var(--vx-cyan-b);background:#22d4ef0d;box-shadow:0 0 0 1px #22d4ef26,0 0 40px #22d4ef1f}.recorder.done.svelte-1fbfhk3{border-color:var(--vx-cyan-b);background:var(--vx-bg-1);box-shadow:0 0 0 1px #22d4ef1a}.scan.svelte-1fbfhk3{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,transparent,rgba(34,212,239,.08),transparent);animation:vxScan 1.6s linear infinite;pointer-events:none}.rec-label.svelte-1fbfhk3{font-family:var(--vx-mono);font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--vx-txt-2);display:flex;align-items:center;gap:8px;transition:color .3s}.recorder.rec.svelte-1fbfhk3 .rec-label:where(.svelte-1fbfhk3){color:var(--vx-cyan-1)}.recorder.done.svelte-1fbfhk3 .rec-label:where(.svelte-1fbfhk3){color:var(--vx-good)}.dot.svelte-1fbfhk3{width:8px;height:8px;border-radius:50%;background:currentColor;box-shadow:0 0 10px currentColor;animation:vxPulse 1.4s infinite}.keycaps.svelte-1fbfhk3{display:flex;gap:10px;align-items:center;min-height:64px}.rec-hint.svelte-1fbfhk3{font-size:13px;color:var(--vx-txt-2);text-align:center;max-width:520px;line-height:1.5;padding:0 20px}.rec-hint.bad.svelte-1fbfhk3{color:var(--vx-warn)}.sys.svelte-1fbfhk3{flex:none;padding:14px 18px;border-radius:14px;border:1px solid var(--vx-line);background:var(--vx-bg-1);display:flex;gap:16px;align-items:center;animation:vxPop .3s var(--vx-ease)}.sys.ok.svelte-1fbfhk3{border-color:#6ad48a66}.sys-glyph.svelte-1fbfhk3{font-family:var(--vx-mono);font-size:26px;color:var(--vx-gold-1)}.sys.ok.svelte-1fbfhk3 .sys-glyph:where(.svelte-1fbfhk3){color:var(--vx-good)}.sys-copy.svelte-1fbfhk3{flex:1;min-width:0}.sys-title.svelte-1fbfhk3{font-weight:600;font-size:14px}.sys-desc.svelte-1fbfhk3{font-size:12.5px;color:var(--vx-txt-2);line-height:1.45;margin-top:2px}.sys-err.svelte-1fbfhk3{margin-top:6px;font-size:12px;color:var(--vx-bad);line-height:1.4}.sys-actions.svelte-1fbfhk3{display:flex;gap:8px;flex:none}@media (max-width: 1100px){.body.svelte-1fbfhk3{grid-template-columns:1fr}}.preview.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;color:var(--vx-cyan-0);background:radial-gradient(120% 120% at 50% 120%,rgba(34,212,239,.1),transparent 70%)}.preview.mono.svelte-y6l73v{color:#dfe6ee;background:none}.still.svelte-y6l73v,.clip.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover;display:block;pointer-events:none}.clip.svelte-y6l73v{opacity:0;transition:opacity .35s ease}.clip.ready.svelte-y6l73v{opacity:1}.bars.svelte-y6l73v{display:flex;align-items:flex-end;justify-content:center;gap:3px;width:64%;height:56%}.bars.svelte-y6l73v>div:where(.svelte-y6l73v){flex:1;min-height:10%;border-radius:2px;background:currentColor;transform-origin:bottom;animation-name:vxBar;animation-iteration-count:infinite;animation-timing-function:ease-in-out;opacity:.9}.wave.svelte-y6l73v{width:76%;height:46%;color:inherit;animation:svelte-y6l73v-waveShift 2.6s linear infinite}@keyframes svelte-y6l73v-waveShift{0%{transform:translate(0)}to{transform:translate(-16%)}}.ring-wrap.svelte-y6l73v{position:relative;width:46%;aspect-ratio:1;display:grid;place-items:center}.ring.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;border:1.5px solid currentColor;opacity:.4;animation:vxPulse 1.8s ease-in-out infinite}.ring.r2.svelte-y6l73v{top:22%;right:22%;bottom:22%;left:22%;animation-delay:.5s}.ring-core.svelte-y6l73v{width:26%;aspect-ratio:1;border-radius:50%;background:currentColor;animation:vxPulse 1.8s ease-in-out infinite;animation-delay:.25s}.dial.svelte-y6l73v{position:relative;width:62%;aspect-ratio:2 / 1;display:grid;place-items:end center}.dial-arc.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:999px 999px 0 0;border:1.5px solid currentColor;border-bottom:0;opacity:.35}.needle.svelte-y6l73v{position:absolute;bottom:0;left:50%;width:2px;height:82%;background:var(--vx-gold-1);transform-origin:bottom center;animation:svelte-y6l73v-needleSwing 2.2s ease-in-out infinite}@keyframes svelte-y6l73v-needleSwing{0%,to{transform:rotate(-38deg)}50%{transform:rotate(34deg)}}.terminal.svelte-y6l73v{width:76%;font-family:var(--vx-mono);font-size:9px;color:#7ab8ff;display:grid;gap:5px}.blocks.svelte-y6l73v{display:flex;gap:2px;height:10px}.blocks.svelte-y6l73v>div:where(.svelte-y6l73v){flex:1;background:#7ab8ff;transform-origin:bottom;animation:vxBar 1.1s ease-in-out infinite}.overlay-step.svelte-ek86vh{flex:1;min-height:0;display:flex;flex-direction:column;gap:14px}.head.svelte-ek86vh{display:flex;gap:24px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-ek86vh{max-width:720px;min-width:0}.choice.svelte-ek86vh{display:grid;grid-template-columns:1fr 1fr;gap:10px;flex:none;width:520px}.mode.svelte-ek86vh{height:66px;padding:0 16px;display:flex;align-items:center;gap:12px}.mode.off-on.svelte-ek86vh{border-color:var(--vx-line-2);background:var(--vx-bg-3);box-shadow:0 0 0 1px var(--vx-line-2)}.mode-glyph.svelte-ek86vh{font-family:var(--vx-mono);font-size:22px;color:var(--vx-txt-2)}.mode-glyph.on.svelte-ek86vh{color:var(--vx-cyan-1)}.mode-title.svelte-ek86vh{display:block;font-weight:600;font-size:14px}.mode-desc.svelte-ek86vh{display:block;font-size:12px;color:var(--vx-txt-2)}.body.svelte-ek86vh{flex:1;min-height:0;display:grid;grid-template-columns:1.7fr 1fr;gap:16px;transition:opacity .4s,filter .4s}.body.muted.svelte-ek86vh{opacity:.18;filter:grayscale(1) blur(1px);pointer-events:none}.styles.svelte-ek86vh,.position.svelte-ek86vh{display:flex;flex-direction:column;min-height:0}.style-grid.svelte-ek86vh{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:8px}.style-card.svelte-ek86vh{overflow:hidden;padding:0;display:flex;flex-direction:column;min-height:0}.thumb.svelte-ek86vh{position:relative;aspect-ratio:16 / 9;background:#05070a;overflow:hidden}.style-meta.svelte-ek86vh{flex:none;display:flex;align-items:center;justify-content:space-between;padding:8px 12px}.style-name.svelte-ek86vh{font-weight:600;font-size:13px}.style-sub.svelte-ek86vh{font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-2)}.style-glyph.svelte-ek86vh{font-family:var(--vx-mono);font-size:14px;color:var(--vx-txt-3);transition:color .3s}.style-glyph.on.svelte-ek86vh{color:var(--vx-cyan-1)}.screen.svelte-ek86vh{position:relative;aspect-ratio:16 / 10;border-radius:12px;border:1px solid var(--vx-line-2);background:linear-gradient(180deg,var(--vx-bg-2),var(--vx-bg-0));overflow:hidden;box-shadow:var(--vx-panel-shadow);margin-top:8px}.grid-lines.svelte-ek86vh{position:absolute;top:0;right:0;bottom:0;left:0;background-image:linear-gradient(to right,rgba(255,255,255,.03) 1px,transparent 1px),linear-gradient(to bottom,rgba(255,255,255,.03) 1px,transparent 1px);background-size:28px 28px}.taskbar.svelte-ek86vh{position:absolute;left:0;right:0;bottom:0;height:7%;background:#00000080;border-top:1px solid var(--vx-line)}.floating.svelte-ek86vh{position:absolute;left:50%;transform:translate(-50%,-50%);width:44%;aspect-ratio:16 / 9;border-radius:8px;overflow:hidden;border:1px solid rgba(34,212,239,.4);box-shadow:0 0 24px #22d4ef40;background:#05070a;transition:top .5s var(--vx-ease)}.pos-buttons.svelte-ek86vh{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:10px}.pos.svelte-ek86vh{height:46px;border-radius:10px;border:1px solid var(--vx-line);background:#ffffff05;color:var(--vx-txt-1);font:inherit;font-size:13px;font-weight:600;cursor:pointer;transition:all .25s;display:flex;align-items:center;justify-content:center;gap:8px}.pos.svelte-ek86vh:hover{border-color:var(--vx-line-2)}.pos.on.svelte-ek86vh{border-color:var(--vx-cyan-b);background:#22d4ef1f;color:var(--vx-cyan-1)}.pos-glyph.svelte-ek86vh{font-family:var(--vx-mono)}@media (max-width: 1100px){.head.svelte-ek86vh{flex-direction:column;align-items:stretch}.choice.svelte-ek86vh{width:100%}.body.svelte-ek86vh{grid-template-columns:1fr}.style-grid.svelte-ek86vh{grid-template-columns:repeat(2,1fr)}}.test-step.svelte-oqvphh{flex:1;min-height:0;display:flex;flex-direction:column;gap:14px}.head.svelte-oqvphh{display:flex;gap:24px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-oqvphh{max-width:640px;min-width:0}.combo.svelte-oqvphh{display:flex;gap:10px;align-items:center;flex:none}.gesture-pill.svelte-oqvphh{margin-left:10px;font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-txt-2);padding:6px 12px;border:1px solid var(--vx-line);border-radius:999px}.box.svelte-oqvphh{position:relative;flex:1;min-height:0;border-radius:18px;border:1px solid var(--vx-line);background:var(--vx-bg-1);transition:all .4s var(--vx-ease);overflow:hidden;display:flex;flex-direction:column}.box.live.svelte-oqvphh{border-color:var(--vx-cyan-b);box-shadow:0 0 40px #22d4ef26}.box.won.svelte-oqvphh{border-color:#6ad48a80;box-shadow:0 0 40px #6ad48a26}.box-head.svelte-oqvphh{flex:none;display:flex;align-items:center;justify-content:space-between;padding:10px 18px;border-bottom:1px solid var(--vx-line)}.file.svelte-oqvphh{font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-txt-2)}.state.svelte-oqvphh{font-family:var(--vx-mono);font-size:11px;letter-spacing:.1em;display:flex;align-items:center;gap:8px;color:var(--vx-txt-3);transition:color .3s}.state.recording.svelte-oqvphh{color:var(--vx-cyan-0)}.state.transcribing.svelte-oqvphh{color:var(--vx-gold-1)}.state.success.svelte-oqvphh{color:var(--vx-good)}.dot.svelte-oqvphh{width:7px;height:7px;border-radius:50%;background:currentColor;box-shadow:0 0 8px currentColor;animation:vxPulse 1.4s infinite}textarea.svelte-oqvphh{display:block;flex:1;min-height:180px;width:100%;padding:22px;border:0;background:transparent;color:var(--vx-txt-0);font-family:inherit;font-size:19px;line-height:1.6;resize:none;caret-color:var(--vx-cyan-0);outline:none}.wave.svelte-oqvphh{position:absolute;left:0;right:0;bottom:0;height:64px;display:flex;align-items:center;justify-content:center;gap:4px;background:linear-gradient(180deg,transparent,rgba(34,212,239,.1));pointer-events:none}.wave.svelte-oqvphh>div:where(.svelte-oqvphh){width:4px;height:30px;border-radius:2px;background:var(--vx-cyan-0);transform-origin:center;animation-name:vxBar;animation-iteration-count:infinite;animation-timing-function:ease-in-out}.won-overlay.svelte-oqvphh{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;text-align:center;background:#0e1116db;animation:vxPop .35s var(--vx-ease)}.tick.svelte-oqvphh{width:84px;height:84px;margin:0 auto 16px;border-radius:50%;border:2px solid var(--vx-good);display:grid;place-items:center;color:var(--vx-good);font-family:var(--vx-mono);font-size:36px;box-shadow:0 0 30px #6ad48a59;animation:vxRing .5s var(--vx-ease)}.won-title.svelte-oqvphh{font-size:26px;font-weight:600;letter-spacing:-.02em}.won-sub.svelte-oqvphh{font-size:14px;color:var(--vx-txt-2);margin:6px 0 18px}.foot.svelte-oqvphh{flex:none;display:flex;justify-content:space-between;align-items:center;gap:20px;font-size:12.5px;color:var(--vx-txt-2)}.engine.svelte-oqvphh{font-family:var(--vx-mono);font-size:11px;white-space:nowrap}@media (max-width: 1000px){.head.svelte-oqvphh{flex-direction:column;align-items:stretch;gap:12px}}.voice-step.svelte-1yghr3b{flex:1;min-height:0;display:flex;flex-direction:column;gap:12px}.head.svelte-1yghr3b{display:flex;gap:20px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-1yghr3b{max-width:680px;min-width:0}.copy.svelte-1yghr3b .vx-lede:where(.svelte-1yghr3b){margin:4px 0 0;font-size:13px;line-height:1.45}.choice.svelte-1yghr3b{display:grid;grid-template-columns:1fr 1fr;gap:10px;flex:none;width:480px}.mode.svelte-1yghr3b{height:58px;padding:0 14px;display:flex;align-items:center;gap:10px}.mode.off-on.svelte-1yghr3b{border-color:var(--vx-line-2);background:var(--vx-bg-3);box-shadow:0 0 0 1px var(--vx-line-2)}.mode-glyph.svelte-1yghr3b{font-family:var(--vx-mono);font-size:20px;color:var(--vx-txt-2)}.mode-glyph.on.svelte-1yghr3b{color:var(--vx-cyan-1)}.mode-title.svelte-1yghr3b{display:block;font-weight:600;font-size:13.5px}.mode-desc.svelte-1yghr3b{display:block;font-size:11.5px;color:var(--vx-txt-2)}.toolbar.svelte-1yghr3b{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:8px 14px;border:1px solid var(--vx-line);border-radius:10px;background:#ffffff05;flex:none;transition:opacity .4s,filter .4s}.audition-panel.svelte-1yghr3b{display:flex;align-items:center;gap:14px;min-width:0}.audition-btn.svelte-1yghr3b{height:38px;padding:0 16px;display:inline-flex;align-items:center;gap:8px;font-size:13px;font-weight:600;border-radius:8px;background:#22d4ef17;border:1px solid var(--vx-cyan-0);color:var(--vx-cyan-0);cursor:pointer;transition:all .2s}.audition-btn.svelte-1yghr3b:hover:not(:disabled){background:#22d4ef2e;box-shadow:0 0 12px #22d4ef40}.audition-btn.svelte-1yghr3b:disabled{opacity:.4;cursor:not-allowed;border-color:var(--vx-line-2);color:var(--vx-txt-3);background:#ffffff08}.audition-btn.playing.svelte-1yghr3b{border-color:var(--vx-gold-1);color:var(--vx-gold-1);background:#eab3081f}.tri.svelte-1yghr3b{font-family:var(--vx-mono);font-size:14px;color:inherit}.stop-icon.svelte-1yghr3b{font-size:14px;color:inherit}.btn-text.svelte-1yghr3b{font-family:var(--vx-mono);font-size:12px;letter-spacing:.02em}.play-bars.svelte-1yghr3b{display:flex;align-items:center;gap:2.5px;height:18px;margin-left:4px}.play-bars.svelte-1yghr3b>div:where(.svelte-1yghr3b){width:3px;height:18px;border-radius:1.5px;background:currentColor;transform-origin:center;animation-name:vxBar;animation-iteration-count:infinite;animation-timing-function:ease-in-out}.audition-meta.svelte-1yghr3b{display:flex;flex-direction:column;gap:2px}.audition-label.svelte-1yghr3b{font-size:12px;color:var(--vx-cyan-0);font-weight:600}.audition-hint.svelte-1yghr3b{font-size:11px;font-family:var(--vx-mono)}.audition-hint.svelte-1yghr3b .ready:where(.svelte-1yghr3b){color:var(--vx-good)}.audition-hint.svelte-1yghr3b .good:where(.svelte-1yghr3b){color:var(--vx-cyan-0)}.audition-hint.svelte-1yghr3b .warn:where(.svelte-1yghr3b){color:var(--vx-gold-1)}.audition-hint.svelte-1yghr3b .bad:where(.svelte-1yghr3b){color:var(--vx-bad)}.audition-hint.svelte-1yghr3b .dim:where(.svelte-1yghr3b){color:var(--vx-txt-3)}.hf-bar.svelte-1yghr3b{display:flex;align-items:center;gap:12px;padding:4px 10px;border-radius:8px;border:1px solid transparent;background:#0003}.hf-bar.needed.svelte-1yghr3b{border-color:color-mix(in srgb,var(--vx-gold-1) 45%,transparent);background:color-mix(in srgb,var(--vx-gold-1) 6%,transparent)}.hf-header.svelte-1yghr3b{display:flex;flex-direction:column;gap:1px;text-align:right}.hf-title.svelte-1yghr3b{font-size:11.5px;font-weight:600}.hf-sub.svelte-1yghr3b{font-size:10px;color:var(--vx-txt-3)}.hf-control.svelte-1yghr3b{display:flex;flex-direction:column;gap:2px}.hf-input.svelte-1yghr3b{width:170px;padding:5px 8px;font-size:11.5px;font-family:inherit;color:inherit;background:#00000073;border:1px solid var(--vx-line);border-radius:6px;outline:none;transition:border-color .2s}.hf-input.svelte-1yghr3b:focus{border-color:var(--vx-cyan-0)}.hf-input[readonly].svelte-1yghr3b{color:var(--vx-txt-2);cursor:not-allowed}.hf-state.svelte-1yghr3b{font-size:9.5px;font-family:var(--vx-mono);color:var(--vx-txt-3);white-space:nowrap}.hf-state.ok.svelte-1yghr3b{color:var(--vx-good)}.hf-state.bad.svelte-1yghr3b{color:var(--vx-bad)}.non-commercial-notice.svelte-1yghr3b{flex:none;padding:8px 12px;border-radius:8px;border:1px solid color-mix(in srgb,var(--vx-gold-1) 45%,transparent);background:color-mix(in srgb,var(--vx-gold-1) 6%,transparent);font-size:12px;line-height:1.4}.gpu-toggle-row.svelte-1yghr3b{flex:none;display:flex;align-items:center;gap:8px;font-size:12.5px;padding:2px}.gpu-toggle-hint.svelte-1yghr3b{color:var(--vx-txt-3);font-size:11px}.grid.svelte-1yghr3b{flex:1;min-height:0;display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(2,minmax(0,1fr));gap:10px;transition:opacity .4s,filter .4s}.grid.muted.svelte-1yghr3b{opacity:.18;filter:grayscale(1) blur(1px);pointer-events:none}.card.svelte-1yghr3b{padding:12px 14px;display:flex;flex-direction:column;gap:8px;min-height:0;cursor:pointer;transition:all .2s}.card.locked.svelte-1yghr3b{opacity:.55}.card.locked.svelte-1yghr3b .name:where(.svelte-1yghr3b){color:var(--vx-txt-2)}.card-head.svelte-1yghr3b{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}.card-title-group.svelte-1yghr3b{display:flex;align-items:baseline;gap:8px;min-width:0}.name.svelte-1yghr3b{font-weight:600;font-size:14.5px;letter-spacing:-.01em;white-space:nowrap}.kind.svelte-1yghr3b{font-family:var(--vx-mono);font-size:10px;color:var(--vx-txt-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions.svelte-1yghr3b{display:grid}.dl.svelte-1yghr3b{height:30px;width:100%;font-size:11.5px;padding:0 10px}.bundled.svelte-1yghr3b{height:30px;display:flex;align-items:center;justify-content:center;border-radius:8px;border:1px dashed var(--vx-line);font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-3);text-align:center}.bundled.ok.svelte-1yghr3b{border-style:solid;border-color:#6ad48a59;color:var(--vx-good)}.metrics.svelte-1yghr3b{display:flex;flex-direction:column;gap:8px}.metric-head.svelte-1yghr3b{display:flex;justify-content:space-between;font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-2);margin-bottom:4px}.metric-head.svelte-1yghr3b span:where(.svelte-1yghr3b):last-child{color:var(--vx-txt-1)}.note.svelte-1yghr3b{font-size:11px;color:var(--vx-txt-2);line-height:1.35;margin-top:auto;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical}.bad.svelte-1yghr3b{color:var(--vx-bad);word-break:break-word}.note.svelte-1yghr3b .ok:where(.svelte-1yghr3b){color:var(--vx-good)}.play-error.svelte-1yghr3b{flex:none;font-size:12px;color:var(--vx-bad)}@media (max-width: 1100px){.grid.svelte-1yghr3b{grid-template-columns:repeat(2,1fr);grid-template-rows:repeat(3,minmax(0,1fr))}.head.svelte-1yghr3b{flex-direction:column;align-items:stretch}.choice.svelte-1yghr3b{width:100%}}@media (max-width: 800px){.toolbar.svelte-1yghr3b{flex-direction:column;align-items:stretch}.hf-header.svelte-1yghr3b{text-align:left}.hf-input.svelte-1yghr3b{width:100%}}.done-step.svelte-ujy0nl{flex:1;min-height:0;display:grid;grid-template-columns:.95fr 1fr 1fr;gap:18px;align-items:stretch}.hero.svelte-ujy0nl{display:flex;flex-direction:column;justify-content:center}.tick.svelte-ujy0nl{width:76px;height:76px;margin:0 0 20px;border-radius:50%;border:2px solid var(--vx-gold-0);display:grid;place-items:center;color:var(--vx-gold-1);font-family:var(--vx-mono);font-size:32px;box-shadow:0 0 30px var(--vx-gold-glow);animation:vxRing .6s var(--vx-ease)}.tick.warn.svelte-ujy0nl{border-color:var(--vx-bad);color:var(--vx-bad);box-shadow:0 0 30px #f4636e4d}h2.svelte-ujy0nl{margin:10px 0;font-size:clamp(28px,3.2vw,44px);letter-spacing:-.035em;line-height:1.02;font-weight:600}h2.svelte-ujy0nl span:where(.svelte-ujy0nl){color:var(--vx-gold-1)}h2.svelte-ujy0nl span.bad-word:where(.svelte-ujy0nl){color:var(--vx-bad)}.hero.svelte-ujy0nl p:where(.svelte-ujy0nl){margin:0 0 20px;font-size:14.5px;line-height:1.55;color:var(--vx-txt-1)}.summary.svelte-ujy0nl{display:grid;grid-template-columns:1fr 1fr;gap:10px 14px;padding:14px 16px;border-radius:14px;border:1px solid var(--vx-line);background:linear-gradient(180deg,rgba(34,212,239,.04),transparent)}.summary-value.svelte-ujy0nl{font-size:13px;font-weight:600;color:var(--vx-txt-0);margin-top:3px;word-break:break-word}.panel.svelte-ujy0nl{padding:20px;border-radius:18px;border:1px solid var(--vx-line);background:var(--vx-bg-1);display:flex;flex-direction:column;min-height:0}.panel.problems.svelte-ujy0nl{border-color:#f4636e66}.panel-head.svelte-ujy0nl{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.panel-title.svelte-ujy0nl{font-weight:600;font-size:16px;margin:6px 0 4px}.panel-desc.svelte-ujy0nl{font-size:13px;color:var(--vx-txt-2);line-height:1.5;margin-bottom:16px}.issue-list.svelte-ujy0nl{flex:1;min-height:0;overflow:auto;margin:10px 0 12px;display:grid;gap:10px;align-content:start}.issue.svelte-ujy0nl{border:1px solid var(--vx-line);border-radius:12px;background:#f4636e0a;padding:11px 12px}.issue-head.svelte-ujy0nl{display:flex;gap:9px;align-items:baseline}.issue-step.svelte-ujy0nl{flex:none;font-family:var(--vx-mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--vx-bad)}.issue-title.svelte-ujy0nl{font-size:13px;line-height:1.45;color:var(--vx-txt-0)}.issue-detail.svelte-ujy0nl{margin:8px 0 0;padding:8px 10px;border-radius:8px;background:#00000059;font-family:var(--vx-mono);font-size:11px;line-height:1.5;color:var(--vx-txt-2);white-space:pre-wrap;word-break:break-word;max-height:150px;overflow:auto}.problem-actions.svelte-ujy0nl{display:flex;gap:8px;margin-top:auto}.log-status.svelte-ujy0nl{margin-top:8px;font-size:12px;line-height:1.4;color:var(--vx-txt-2)}.mock-screen.svelte-ujy0nl{position:relative;flex:1;min-height:230px;border-radius:12px;border:1px solid var(--vx-line-2);background:linear-gradient(180deg,var(--vx-bg-2),var(--vx-bg-0));overflow:hidden}.mock-bar.svelte-ujy0nl{position:absolute;left:0;right:0;bottom:0;height:40px;background:#0000008c;border-top:1px solid var(--vx-line);display:flex;align-items:center;justify-content:flex-end;padding:0 14px;gap:12px}.mock-sys-icon.svelte-ujy0nl{font-size:11px;color:var(--vx-txt-3);opacity:.65;-webkit-user-select:none;user-select:none}.mock-sys-icon.chevron.svelte-ujy0nl{font-size:14px;margin-left:2px}.tray-btn-wrap.svelte-ujy0nl{position:relative;display:inline-flex;align-items:center;justify-content:center}.tray-btn.svelte-ujy0nl{width:32px;height:32px;border-radius:6px;border:1px solid transparent;background:transparent;cursor:pointer;display:grid;place-items:center;transition:all .2s}.tray-btn.svelte-ujy0nl:hover{background:#ffffff14}.tray-btn.on.svelte-ujy0nl{border-color:#ffffff40;background:#ffffff1f}.tray-btn.svelte-ujy0nl img:where(.svelte-ujy0nl){width:22px;height:22px;display:block;object-fit:contain}.tray-menu.svelte-ujy0nl{position:absolute;right:14px;bottom:48px;width:275px;padding:6px;border-radius:8px;border:1px solid rgba(255,255,255,.15);background:#1f232a;box-shadow:0 10px 30px #000000b3;animation:vxPop .18s var(--vx-ease);z-index:10}.tray-row.svelte-ujy0nl{width:100%;border:none;background:transparent;padding:6px 8px;border-radius:5px;display:flex;align-items:center;gap:8px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:13.5px;color:#e6edf3;text-align:left;cursor:pointer;transition:background .15s,color .15s}.tray-row.svelte-ujy0nl:hover{background:#ffffff14;color:#fff}.chk-gutter.svelte-ujy0nl{width:18px;height:18px;flex:none;display:flex;align-items:center;justify-content:center}.chk.svelte-ujy0nl{width:16px;height:16px;border-radius:4px;border:1px solid rgba(255,255,255,.3);background:#ffffff0f;display:flex;align-items:center;justify-content:center;transition:all .15s ease}.chk.on.svelte-ujy0nl{background:#1d8cf8;border-color:#38bdf8}.tray-icon.svelte-ujy0nl{width:20px;font-size:15px;display:flex;align-items:center;justify-content:center;flex:none}.tray-label.svelte-ujy0nl{flex:1;white-space:nowrap;letter-spacing:-.01em}.tray-label.no-icon.svelte-ujy0nl{padding-left:2px}.tray-sep.svelte-ujy0nl{height:1px;background:#ffffff1f;margin:5px 6px}.click-me.svelte-ujy0nl{position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;gap:2px;font-family:var(--vx-mono);font-size:11px;letter-spacing:.05em;color:var(--vx-cyan-1);white-space:nowrap;pointer-events:none;animation:svelte-ujy0nl-vxNudge 1.6s ease-in-out infinite}.arrow.svelte-ujy0nl{font-size:14px;font-weight:700;line-height:1}@keyframes svelte-ujy0nl-vxNudge{0%,to{transform:translate(-50%) translateY(0)}50%{transform:translate(-50%) translateY(4px)}}.where.svelte-ujy0nl{list-style:none;padding:0;margin:0 0 16px;display:grid;gap:2px}.where.svelte-ujy0nl li:where(.svelte-ujy0nl){display:flex;align-items:center;gap:9px;padding:7px 10px;font-size:12.5px;color:var(--vx-txt-1)}.where.svelte-ujy0nl .glyph:where(.svelte-ujy0nl){font-family:var(--vx-mono);color:var(--vx-cyan-2);width:16px}.where.svelte-ujy0nl .tag:where(.svelte-ujy0nl){margin-left:auto;font-family:var(--vx-mono);font-size:10px;color:var(--vx-txt-3)}.open-settings.svelte-ujy0nl{margin-top:auto;align-self:flex-start}.vx-btn.small.svelte-ujy0nl{height:34px;padding:0 12px;font-size:12px}@media (max-width: 1100px){.done-step.svelte-ujy0nl{grid-template-columns:1fr;align-content:start}}.vx-root.svelte-18pn5kx{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;overflow:hidden}.vx-titlebar.svelte-18pn5kx{height:46px;flex:none;display:flex;align-items:center;gap:9px;padding:0 18px;border-bottom:1px solid var(--vx-line);background:#0e1116b3;z-index:2}.vx-logo.svelte-18pn5kx{width:20px;height:20px;border-radius:5px}.vx-brand.svelte-18pn5kx{font-weight:600;font-size:14.5px;letter-spacing:-.01em}.vx-brand.svelte-18pn5kx span:where(.svelte-18pn5kx){color:var(--vx-cyan-0)}.vx-mono.svelte-18pn5kx{font-family:var(--vx-mono);font-size:11px;letter-spacing:.1em}.vx-dim.svelte-18pn5kx{color:var(--vx-txt-2)}.vx-faint.svelte-18pn5kx{color:var(--vx-txt-3)}.vx-spacer.svelte-18pn5kx{flex:1}.vx-screen.svelte-18pn5kx{flex:1;min-height:0;display:flex;flex-direction:column;padding:22px 32px 16px;overflow:auto;opacity:1;transform:none;transition:opacity .2s ease,transform .2s var(--vx-ease)}.vx-screen.vx-leaving.svelte-18pn5kx{opacity:0;transform:translateY(10px)}.vx-loading.svelte-18pn5kx{margin:auto;display:flex;align-items:center;gap:10px;color:var(--vx-txt-2);font-size:13.5px}.vx-footer.svelte-18pn5kx{flex:none;display:grid;grid-template-columns:170px 1fr auto;align-items:center;gap:28px;border-top:1px solid var(--vx-line);background:#0e1116cc;padding:10px 32px 12px;z-index:3}.vx-nav-left.svelte-18pn5kx,.vx-nav-right.svelte-18pn5kx{display:flex;align-items:center;gap:12px}.vx-nav-right.svelte-18pn5kx{justify-content:flex-end}.vx-skip.svelte-18pn5kx{font-weight:500;color:var(--vx-txt-3)}.vx-blocker.svelte-18pn5kx{max-width:340px;font-size:12px;line-height:1.35;color:var(--vx-txt-2);text-align:right}.vx-track.svelte-18pn5kx,.vx-track-cell.svelte-18pn5kx{display:flex;align-items:center;min-width:0}.vx-track-step.svelte-18pn5kx{display:flex;flex-direction:column;align-items:center;gap:6px;min-width:62px;padding:4px 6px;border:0;background:transparent;font:inherit;color:var(--vx-txt-3);cursor:pointer;transition:color .3s}.vx-track-step.svelte-18pn5kx:disabled{cursor:default}.vx-track-step.vx-done.svelte-18pn5kx{color:var(--vx-txt-1)}.vx-track-step.vx-cur.svelte-18pn5kx{color:var(--vx-txt-0)}.vx-ring.svelte-18pn5kx{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-family:var(--vx-mono);font-size:12px;border:1px solid var(--vx-line-2);background:transparent;color:var(--vx-txt-3);transition:all .35s var(--vx-ease)}.vx-track-step.vx-done.svelte-18pn5kx .vx-ring:where(.svelte-18pn5kx){border-color:#22d4ef66;background:#22d4ef1a;color:var(--vx-cyan-1)}.vx-track-step.vx-cur.svelte-18pn5kx .vx-ring:where(.svelte-18pn5kx){border-color:var(--vx-cyan-0);background:var(--vx-cyan-0);color:#00222a;box-shadow:0 0 16px #22d4ef73}.vx-track-label.svelte-18pn5kx{font-size:11px;font-weight:500;white-space:nowrap}.vx-track-step.vx-cur.svelte-18pn5kx .vx-track-label:where(.svelte-18pn5kx){font-weight:600}.vx-track-line.svelte-18pn5kx{flex:1;min-width:8px;height:2px;margin:0 2px 19px;border-radius:1px;background:var(--vx-bg-4);overflow:hidden}.vx-track-line.svelte-18pn5kx>div:where(.svelte-18pn5kx){height:100%;background:var(--vx-cyan-0);transition:width .5s var(--vx-ease)}.vx-toast.svelte-18pn5kx{position:fixed;left:50%;bottom:84px;transform:translate(-50%);display:flex;align-items:center;gap:14px;max-width:70vw;padding:11px 14px;border-radius:10px;border:1px solid rgba(244,99,110,.45);background:#2a1215;color:#ffb3b8;font-size:13px;box-shadow:var(--vx-panel-shadow);animation:vxPop .25s var(--vx-ease);z-index:20}.vx-toast.svelte-18pn5kx button:where(.svelte-18pn5kx){border:0;background:transparent;color:inherit;cursor:pointer;font-size:13px}@media (max-width: 1000px){.vx-footer.svelte-18pn5kx{grid-template-columns:110px 1fr auto;gap:16px;padding:10px 18px 12px}.vx-track-label.svelte-18pn5kx{display:none}.vx-track-line.svelte-18pn5kx{margin-bottom:0}.vx-screen.svelte-18pn5kx{padding:18px 20px 14px}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}main.svelte-15mrihi{background-color:var(--color-obsidian-950);width:100vw;height:100vh;padding:calc(var(--spacing,.25rem) * 5);color:var(--text);justify-content:center;align-items:flex-start;display:flex;overflow-y:auto}.card.svelte-15mrihi{gap:calc(var(--spacing,.25rem) * 4);flex-direction:column;width:100%;max-width:520px;display:flex}header.svelte-15mrihi{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 3);display:flex}.logo.svelte-15mrihi{height:calc(var(--spacing,.25rem) * 11);width:calc(var(--spacing,.25rem) * 11);border-radius:var(--radius-xl,.75rem);flex-shrink:0}h1.svelte-15mrihi{font-size:var(--text-lg,1.125rem);line-height:var(--tw-leading,var(--text-lg--line-height,calc(1.75 / 1.125)));--tw-leading:var(--leading-tight,1.25);line-height:var(--leading-tight,1.25);--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800);--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em);color:var(--color-white,#fff)}h2.svelte-15mrihi{margin-bottom:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em);color:var(--color-obsidian-400);text-transform:uppercase}.sub.svelte-15mrihi{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--color-obsidian-400);font-size:12.5px}.body.svelte-15mrihi{--tw-leading:var(--leading-relaxed,1.625);font-size:13px;line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-200)}.hint.svelte-15mrihi{--tw-leading:var(--leading-relaxed,1.625);font-size:11.5px;line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-400)}.notes-block.svelte-15mrihi{border-radius:var(--radius-lg,.5rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.notes-block.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.notes-block.svelte-15mrihi{padding:calc(var(--spacing,.25rem) * 3)}.notes.svelte-15mrihi{margin:calc(var(--spacing,.25rem) * 0);max-height:240px;font-family:var(--font-sans,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word;white-space:pre-wrap;color:var(--color-obsidian-200);overflow-y:auto}.warn.svelte-15mrihi{border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0033;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.warn.svelte-15mrihi{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 20%,transparent)}}.warn.svelte-15mrihi{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.warn.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.warn.svelte-15mrihi{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12.5px;line-height:var(--leading-relaxed,1.625);color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.warn.svelte-15mrihi{color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.error.svelte-15mrihi{border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3633;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.error.svelte-15mrihi{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.error.svelte-15mrihi{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.error.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.error.svelte-15mrihi{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12.5px;line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word;color:var(--color-red-400,oklch(70.4% .191 22.216))}.progress-block.svelte-15mrihi{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.bar.svelte-15mrihi{height:calc(var(--spacing,.25rem) * 2);background-color:#ffffff0d;border-radius:3.40282e38px;width:100%;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.bar.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.fill.svelte-15mrihi{background-color:var(--color-accent-blue);height:100%;transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-radius:3.40282e38px}.bar.indeterminate.svelte-15mrihi .fill:where(.svelte-15mrihi){width:33.3333%;animation:var(--animate-pulse,pulse 2s cubic-bezier(.4, 0, .6, 1) infinite)}footer.svelte-15mrihi{margin-top:calc(var(--spacing,.25rem) * 1);justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-wrap:wrap;display:flex}.left-actions.svelte-15mrihi{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;display:flex}.right-actions.svelte-15mrihi{align-items:center;gap:calc(var(--spacing,.25rem) * 2);margin-left:auto;display:flex}.btn-primary.svelte-15mrihi{cursor:pointer;border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-bold,700);font-size:12.5px;font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 14px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-primary.svelte-15mrihi:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 18px var(--tw-shadow-color,#38bdf873);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-secondary.svelte-15mrihi{cursor:pointer;border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-800);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-semibold,600);font-size:12.5px;font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-300);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-secondary.svelte-15mrihi:hover{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-15mrihi:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 10%,transparent)}}.btn-secondary.svelte-15mrihi:hover{background-color:var(--color-obsidian-700);color:var(--color-white,#fff)}.btn-secondary.svelte-15mrihi:disabled,.btn-primary.svelte-15mrihi:disabled{cursor:default;opacity:.6;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.link.svelte-15mrihi{cursor:pointer;border-style:var(--tw-border-style);padding:calc(var(--spacing,.25rem) * 0);text-align:left;--tw-font-weight:var(--font-weight-semibold,600);font-size:12px;font-weight:var(--font-weight-semibold,600);color:var(--color-accent-blue);text-underline-offset:2px;background-color:#0000;border-width:0;text-decoration-line:underline}.centered.svelte-15mrihi{justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 8);flex-direction:column;display:flex}.spinner.svelte-15mrihi{height:calc(var(--spacing,.25rem) * 7);width:calc(var(--spacing,.25rem) * 7);animation:var(--animate-spin,spin 1s linear infinite);border-style:var(--tw-border-style);border-width:2.5px;border-color:#ffffff0d;border-radius:3.40282e38px}@supports (color:color-mix(in lab,red,red)){.spinner.svelte-15mrihi{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.spinner.svelte-15mrihi{border-top-color:var(--color-accent-blue)}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--color-obsidian-950:#08090b;--color-obsidian-900:#0d0e12;--color-obsidian-800:#14171f;--color-obsidian-700:#1e222d;--color-obsidian-300:#9ca3af;--color-obsidian-100:#e5e7eb;--color-accent-tangerine:#ff6b35;--color-accent-blue:#38bdf8;--color-accent-green:#10b981;--radius-desktop:6px;--animate-border-pulse:border-pulse 1.5s infinite;--animate-flash:flash 1s infinite;--transition-snappy:all .25s cubic-bezier(.175, .885, .32, 1.2);--transition-snappy-fast:all .15s cubic-bezier(.175, .885, .32, 1.275)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,var(--font-sans,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"));font-feature-settings:var(--default-font-feature-settings,initial);font-variation-settings:var(--default-font-variation-settings,initial);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace));font-feature-settings:var(--default-mono-font-feature-settings,initial);font-variation-settings:var(--default-mono-font-variation-settings,initial);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing,.25rem) * 0)}.-top-0\.5{top:calc(var(--spacing,.25rem) * -.5)}.top-0{top:calc(var(--spacing,.25rem) * 0)}.top-2\.5{top:calc(var(--spacing,.25rem) * 2.5)}.top-\[15\%\]{top:15%}.right-0{right:calc(var(--spacing,.25rem) * 0)}.right-3\.5{right:calc(var(--spacing,.25rem) * 3.5)}.right-6{right:calc(var(--spacing,.25rem) * 6)}.-bottom-0\.5{bottom:calc(var(--spacing,.25rem) * -.5)}.bottom-6{bottom:calc(var(--spacing,.25rem) * 6)}.left-0{left:calc(var(--spacing,.25rem) * 0)}.isolate{isolation:isolate}.z-10{z-index:10}.z-\[100\]{z-index:100}.z-\[200\]{z-index:200}.z-\[2000\]{z-index:2000}.col-span-full{grid-column:1/-1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing,.25rem) * 0)}.my-1{margin-block:calc(var(--spacing,.25rem) * 1)}.mt-0\.5{margin-top:calc(var(--spacing,.25rem) * .5)}.mt-1{margin-top:calc(var(--spacing,.25rem) * 1)}.mt-1\.5{margin-top:calc(var(--spacing,.25rem) * 1.5)}.mt-2{margin-top:calc(var(--spacing,.25rem) * 2)}.mt-2\.5{margin-top:calc(var(--spacing,.25rem) * 2.5)}.mt-3\.5{margin-top:calc(var(--spacing,.25rem) * 3.5)}.mt-4{margin-top:calc(var(--spacing,.25rem) * 4)}.mt-6{margin-top:calc(var(--spacing,.25rem) * 6)}.mb-1{margin-bottom:calc(var(--spacing,.25rem) * 1)}.mb-2{margin-bottom:calc(var(--spacing,.25rem) * 2)}.mb-3{margin-bottom:calc(var(--spacing,.25rem) * 3)}.mb-3\.5{margin-bottom:calc(var(--spacing,.25rem) * 3.5)}.mb-4{margin-bottom:calc(var(--spacing,.25rem) * 4)}.mb-5{margin-bottom:calc(var(--spacing,.25rem) * 5)}.ml-2\.5{margin-left:calc(var(--spacing,.25rem) * 2.5)}.ml-4{margin-left:calc(var(--spacing,.25rem) * 4)}.ml-6{margin-left:calc(var(--spacing,.25rem) * 6)}.box-border{box-sizing:border-box}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\.5{height:calc(var(--spacing,.25rem) * 1.5)}.h-2{height:calc(var(--spacing,.25rem) * 2)}.h-3\.5{height:calc(var(--spacing,.25rem) * 3.5)}.h-4{height:calc(var(--spacing,.25rem) * 4)}.h-5{height:calc(var(--spacing,.25rem) * 5)}.h-7{height:calc(var(--spacing,.25rem) * 7)}.h-11{height:calc(var(--spacing,.25rem) * 11)}.h-16{height:calc(var(--spacing,.25rem) * 16)}.h-\[5px\]{height:5px}.h-\[70\%\]{height:70%}.h-full{height:100%}.h-screen{height:100vh}.max-h-60{max-height:calc(var(--spacing,.25rem) * 60)}.max-h-\[85vh\]{max-height:85vh}.max-h-\[180px\]{max-height:180px}.max-h-\[240px\]{max-height:240px}.max-h-\[340px\]{max-height:340px}.min-h-\[42px\]{min-height:42px}.min-h-\[70px\]{min-height:70px}.min-h-\[80px\]{min-height:80px}.min-h-\[150px\]{min-height:150px}.w-1\.5{width:calc(var(--spacing,.25rem) * 1.5)}.w-1\/3{width:33.3333%}.w-2{width:calc(var(--spacing,.25rem) * 2)}.w-4{width:calc(var(--spacing,.25rem) * 4)}.w-5{width:calc(var(--spacing,.25rem) * 5)}.w-7{width:calc(var(--spacing,.25rem) * 7)}.w-11{width:calc(var(--spacing,.25rem) * 11)}.w-16{width:calc(var(--spacing,.25rem) * 16)}.w-20{width:calc(var(--spacing,.25rem) * 20)}.w-\[2px\]{width:2px}.w-\[3px\]{width:3px}.w-\[5px\]{width:5px}.w-\[90\%\]{width:90%}.w-fit{width:fit-content}.w-full{width:100%}.w-screen{width:100vw}.max-w-\[280px\]{max-width:280px}.max-w-\[500px\]{max-width:500px}.max-w-\[520px\]{max-width:520px}.min-w-0{min-width:calc(var(--spacing,.25rem) * 0)}.min-w-\[36px\]{min-width:36px}.min-w-\[135px\]{min-width:135px}.min-w-\[190px\]{min-width:190px}.flex-1{flex:1}.flex-\[2\]{flex:2}.flex-shrink,.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-y-0\.5{--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-\[1px\]{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-\[0\.97\]{scale:.97}.scale-\[1\.01\]{scale:1.01}.scale-\[1\.02\]{scale:1.02}.scale-\[1\.18\]{scale:1.18}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.transform\!{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)!important}.animate-\[floating_4s_ease-in-out_infinite\]{animation:4s ease-in-out infinite floating}.animate-\[ripple_1\.6s_infinite_ease-out\]{animation:1.6s ease-out infinite ripple}.animate-border-pulse{animation:var(--animate-border-pulse)}.animate-flash{animation:var(--animate-flash)}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-y{resize:vertical}.list-none{list-style-type:none}.flex-col{flex-direction:column}.flex-row\!{flex-direction:row!important}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing,.25rem) * .5)}.gap-1{gap:calc(var(--spacing,.25rem) * 1)}.gap-1\.5{gap:calc(var(--spacing,.25rem) * 1.5)}.gap-2{gap:calc(var(--spacing,.25rem) * 2)}.gap-2\.5{gap:calc(var(--spacing,.25rem) * 2.5)}.gap-3{gap:calc(var(--spacing,.25rem) * 3)}.gap-3\.5{gap:calc(var(--spacing,.25rem) * 3.5)}.gap-4{gap:calc(var(--spacing,.25rem) * 4)}.gap-5{gap:calc(var(--spacing,.25rem) * 5)}.gap-\[2px\]{gap:2px}.gap-\[10px\]{gap:10px}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded\!{border-radius:.25rem!important}.rounded-\[99px_0_0_99px\]{border-radius:99px 0 0 99px}.rounded-\[var\(--radius\)\]{border-radius:var(--radius)}.rounded-desktop{border-radius:var(--radius-desktop)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg,.5rem)}.rounded-md{border-radius:var(--radius-md,.375rem)}.rounded-xl{border-radius:var(--radius-xl,.75rem)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[2\.5px\]{border-style:var(--tw-border-style);border-width:2.5px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-none\!{--tw-border-style:none!important;border-style:none!important}.border-solid{--tw-border-style:solid;border-style:solid}.border-\[\#f43f5e\]{border-color:#f43f5e}.border-\[\#fbbf24\]{border-color:#fbbf24}.border-\[var\(--accent\)\]{border-color:var(--accent)}.border-\[var\(--accent2\)\],.border-\[var\(--accent2\)\]\/25{border-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--accent2\)\]\/25{border-color:color-mix(in oklab,var(--accent2) 25%,transparent)}}.border-\[var\(--border\)\]{border-color:var(--border)}.border-\[var\(--color-accent-blue\)\]{border-color:var(--color-accent-blue)}.border-\[var\(--color-accent-blue\)\]\/15{border-color:#38bdf826}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-accent-blue\)\]\/15{border-color:color-mix(in oklab,var(--color-accent-blue) 15%,transparent)}}.border-\[var\(--color-accent-blue\)\]\/20{border-color:#38bdf833}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-accent-blue\)\]\/20{border-color:color-mix(in oklab,var(--color-accent-blue) 20%,transparent)}}.border-\[var\(--color-accent-blue\)\]\/25{border-color:#38bdf840}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-accent-blue\)\]\/25{border-color:color-mix(in oklab,var(--color-accent-blue) 25%,transparent)}}.border-amber-500\/20{border-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/20{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 20%,transparent)}}.border-amber-500\/25{border-color:#f99c0040}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/25{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.border-amber-500\/40{border-color:#f99c0066}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/40{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 40%,transparent)}}.border-amber-500\/70\!{border-color:#f99c00b3!important}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/70\!{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 70%,transparent)!important}}.border-emerald-500\/25{border-color:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/25{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 25%,transparent)}}.border-red-500{border-color:var(--color-red-500,oklch(63.7% .237 25.331))}.border-red-500\!{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.border-red-500\/20{border-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.border-red-500\/20{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.border-red-500\/25{border-color:#fb2c3640}@supports (color:color-mix(in lab,red,red)){.border-red-500\/25{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 25%,transparent)}}.border-slate-500\/30{border-color:#62748e4d}@supports (color:color-mix(in lab,red,red)){.border-slate-500\/30{border-color:color-mix(in oklab,var(--color-slate-500,oklch(55.4% .046 257.417)) 30%,transparent)}}.border-white\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.border-white\/5{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.border-white\/12{border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.border-white\/12{border-color:color-mix(in oklab,var(--color-white,#fff) 12%,transparent)}}.border-white\/15{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.border-white\/15{border-color:color-mix(in oklab,var(--color-white,#fff) 15%,transparent)}}.border-white\/\[0\.03\]{border-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.03\]{border-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.border-white\/\[0\.05\]{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.05\]{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.border-yellow-500\/30{border-color:#edb2004d}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/30{border-color:color-mix(in oklab,var(--color-yellow-500,oklch(79.5% .184 86.047)) 30%,transparent)}}.border-t-\[var\(--color-accent-blue\)\]{border-top-color:var(--color-accent-blue)}.bg-\[\#1e2436\]{background-color:#1e2436}.bg-\[\#39ff14\]{background-color:#39ff14}.bg-\[\#444\]{background-color:#444}.bg-\[\#ff6d00\]{background-color:#ff6d00}.bg-\[\#ffab00\]{background-color:#ffab00}.bg-\[rgba\(244\,63\,94\,0\.05\)\]{background-color:#f43f5e0d}.bg-\[rgba\(251\,191\,36\,0\.05\)\]{background-color:#fbbf240d}.bg-\[var\(--accent\)\]{background-color:var(--accent)}.bg-\[var\(--accent2\)\],.bg-\[var\(--accent2\)\]\/8{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--accent2\)\]\/8{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.bg-\[var\(--accent2\)\]\/10{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--accent2\)\]\/10{background-color:color-mix(in oklab,var(--accent2) 10%,transparent)}}.bg-\[var\(--accent2\)\]\/15{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--accent2\)\]\/15{background-color:color-mix(in oklab,var(--accent2) 15%,transparent)}}.bg-\[var\(--bg\)\]{background-color:var(--bg)}.bg-\[var\(--border\)\]{background-color:var(--border)}.bg-\[var\(--color-accent-blue\)\]{background-color:var(--color-accent-blue)}.bg-\[var\(--color-accent-blue\)\]\/8{background-color:#38bdf814}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--color-accent-blue\)\]\/8{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.bg-\[var\(--color-accent-green\)\]{background-color:var(--color-accent-green)}.bg-\[var\(--color-obsidian-300\)\]{background-color:var(--color-obsidian-300)}.bg-\[var\(--color-obsidian-700\)\]{background-color:var(--color-obsidian-700)}.bg-\[var\(--color-obsidian-800\)\]{background-color:var(--color-obsidian-800)}.bg-\[var\(--color-obsidian-900\)\]{background-color:var(--color-obsidian-900)}.bg-\[var\(--color-obsidian-950\)\]{background-color:var(--color-obsidian-950)}.bg-\[var\(--surface2\)\]{background-color:var(--surface2)}.bg-accent-blue{background-color:var(--color-accent-blue)}.bg-accent-blue\!{background-color:var(--color-accent-blue)!important}.bg-amber-400{background-color:var(--color-amber-400,oklch(82.8% .189 84.429))}.bg-amber-500\/6{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/6{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.bg-amber-950\/30{background-color:#4619014d}@supports (color:color-mix(in lab,red,red)){.bg-amber-950\/30{background-color:color-mix(in oklab,var(--color-amber-950,oklch(27.9% .077 45.635)) 30%,transparent)}}.bg-black\/25{background-color:#00000040}@supports (color:color-mix(in lab,red,red)){.bg-black\/25{background-color:color-mix(in oklab,var(--color-black,#000) 25%,transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black,#000) 40%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black,#000) 60%,transparent)}}.bg-cyan-500\/15{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.bg-cyan-500\/15{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.bg-emerald-500\/6{background-color:#00bb7f0f}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/6{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 6%,transparent)}}.bg-emerald-500\/15{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/15{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.bg-emerald-950\/80{background-color:#002c22cc}@supports (color:color-mix(in lab,red,red)){.bg-emerald-950\/80{background-color:color-mix(in oklab,var(--color-emerald-950,oklch(26.2% .051 172.552)) 80%,transparent)}}.bg-red-400\/10{background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.bg-red-400\/10{background-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 10%,transparent)}}.bg-red-500{background-color:var(--color-red-500,oklch(63.7% .237 25.331))}.bg-red-500\/6{background-color:#fb2c360f}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/6{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 6%,transparent)}}.bg-red-500\/8{background-color:#fb2c3614}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/8{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 8%,transparent)}}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.bg-red-500\/15{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/15{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 15%,transparent)}}.bg-slate-500\/10{background-color:#62748e1a}@supports (color:color-mix(in lab,red,red)){.bg-slate-500\/10{background-color:color-mix(in oklab,var(--color-slate-500,oklch(55.4% .046 257.417)) 10%,transparent)}}.bg-transparent{background-color:#0000}.bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/5{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.bg-white\/\[0\.02\]{background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.02\]{background-color:color-mix(in oklab,var(--color-white,#fff) 2%,transparent)}}.bg-white\/\[0\.03\]{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.03\]{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.bg-white\/\[0\.05\]{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.05\]{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.bg-white\/\[0\.08\]{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-white,#fff) 8%,transparent)}}.bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500,oklch(79.5% .184 86.047)) 10%,transparent)}}.object-contain{object-fit:contain}.p-0{padding:calc(var(--spacing,.25rem) * 0)}.p-0\.5{padding:calc(var(--spacing,.25rem) * .5)}.p-1{padding:calc(var(--spacing,.25rem) * 1)}.p-1\.5{padding:calc(var(--spacing,.25rem) * 1.5)}.p-2{padding:calc(var(--spacing,.25rem) * 2)}.p-2\.5{padding:calc(var(--spacing,.25rem) * 2.5)}.p-3{padding:calc(var(--spacing,.25rem) * 3)}.p-4{padding:calc(var(--spacing,.25rem) * 4)}.p-5{padding:calc(var(--spacing,.25rem) * 5)}.p-6{padding:calc(var(--spacing,.25rem) * 6)}.p-10{padding:calc(var(--spacing,.25rem) * 10)}.p-\[3px\]{padding:3px}.p-\[30px\]{padding:30px}.px-1{padding-inline:calc(var(--spacing,.25rem) * 1)}.px-1\.5{padding-inline:calc(var(--spacing,.25rem) * 1.5)}.px-1\.5\!{padding-inline:calc(var(--spacing,.25rem) * 1.5)!important}.px-2{padding-inline:calc(var(--spacing,.25rem) * 2)}.px-2\.5{padding-inline:calc(var(--spacing,.25rem) * 2.5)}.px-3{padding-inline:calc(var(--spacing,.25rem) * 3)}.px-3\.5{padding-inline:calc(var(--spacing,.25rem) * 3.5)}.px-4{padding-inline:calc(var(--spacing,.25rem) * 4)}.px-5{padding-inline:calc(var(--spacing,.25rem) * 5)}.py-0\.5{padding-block:calc(var(--spacing,.25rem) * .5)}.py-0\.5\!{padding-block:calc(var(--spacing,.25rem) * .5)!important}.py-1{padding-block:calc(var(--spacing,.25rem) * 1)}.py-1\.5{padding-block:calc(var(--spacing,.25rem) * 1.5)}.py-2{padding-block:calc(var(--spacing,.25rem) * 2)}.py-5{padding-block:calc(var(--spacing,.25rem) * 5)}.pt-2{padding-top:calc(var(--spacing,.25rem) * 2)}.pt-3\.5{padding-top:calc(var(--spacing,.25rem) * 3.5)}.pt-4{padding-top:calc(var(--spacing,.25rem) * 4)}.pt-\[14px\]{padding-top:14px}.pr-9{padding-right:calc(var(--spacing,.25rem) * 9)}.pb-4{padding-bottom:calc(var(--spacing,.25rem) * 4)}.pl-3{padding-left:calc(var(--spacing,.25rem) * 3)}.pl-3\.5{padding-left:calc(var(--spacing,.25rem) * 3.5)}.pl-4{padding-left:calc(var(--spacing,.25rem) * 4)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace)}.text-2xl{font-size:var(--text-2xl,1.5rem);line-height:var(--tw-leading,var(--text-2xl--line-height,calc(2 / 1.5)))}.text-base{font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ))}.text-lg{font-size:var(--text-lg,1.125rem);line-height:var(--tw-leading,var(--text-lg--line-height,calc(1.75 / 1.125)))}.text-sm{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)))}.text-xl{font-size:var(--text-xl,1.25rem);line-height:var(--tw-leading,var(--text-xl--line-height,calc(1.75 / 1.25)))}.text-xs{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)))}.text-\[7px\]{font-size:7px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11\.5px\]{font-size:11.5px}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-\[12px\]\!{font-size:12px!important}.text-\[13\.5px\]{font-size:13.5px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[32px\]{font-size:32px}.leading-5{--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5)}.leading-6{--tw-leading:calc(var(--spacing,.25rem) * 6);line-height:calc(var(--spacing,.25rem) * 6)}.leading-\[1\.1\]{--tw-leading:1.1;line-height:1.1}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625)}.font-\[850\]{--tw-font-weight:850;font-weight:850}.font-bold{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800)}.font-extrabold\!{--tw-font-weight:var(--font-weight-extrabold,800)!important;font-weight:var(--font-weight-extrabold,800)!important}.font-medium{--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500)}.font-normal{--tw-font-weight:var(--font-weight-normal,400);font-weight:var(--font-weight-normal,400)}.font-semibold{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600)}.tracking-\[-0\.5px\]{--tw-tracking:-.5px;letter-spacing:-.5px}.tracking-\[0\.06em\]{--tw-tracking:.06em;letter-spacing:.06em}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-tight{--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em)}.tracking-wide{--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em)}.tracking-wider{--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--accent\)\]{color:var(--accent)}.text-\[var\(--accent2\)\]{color:var(--accent2)}.text-\[var\(--color-accent-blue\)\]{color:var(--color-accent-blue)}.text-\[var\(--color-obsidian-200\)\]{color:var(--color-obsidian-200)}.text-\[var\(--color-obsidian-300\)\]{color:var(--color-obsidian-300)}.text-\[var\(--color-obsidian-400\)\]{color:var(--color-obsidian-400)}.text-\[var\(--text\)\]{color:var(--text)}.text-\[var\(--text-muted\)\]{color:var(--text-muted)}.text-accent-blue{color:var(--color-accent-blue)}.text-amber-200\/80{color:#fee685cc}@supports (color:color-mix(in lab,red,red)){.text-amber-200\/80{color:color-mix(in oklab,var(--color-amber-200,oklch(92.4% .12 95.746)) 80%,transparent)}}.text-amber-300\/90{color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.text-amber-300\/90{color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.text-amber-400{color:var(--color-amber-400,oklch(82.8% .189 84.429))}.text-black{color:var(--color-black,#000)}.text-black\!{color:var(--color-black,#000)!important}.text-cyan-200{color:var(--color-cyan-200,oklch(91.7% .08 205.041))}.text-cyan-300{color:var(--color-cyan-300,oklch(86.5% .127 207.078))}.text-emerald-200{color:var(--color-emerald-200,oklch(90.5% .093 164.15))}.text-emerald-300{color:var(--color-emerald-300,oklch(84.5% .143 164.978))}.text-emerald-300\/90{color:#5ee9b5e6}@supports (color:color-mix(in lab,red,red)){.text-emerald-300\/90{color:color-mix(in oklab,var(--color-emerald-300,oklch(84.5% .143 164.978)) 90%,transparent)}}.text-emerald-400{color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.text-neutral-900{color:var(--color-neutral-900,oklch(20.5% 0 0))}.text-obsidian-300{color:var(--color-obsidian-300)}.text-red-300{color:var(--color-red-300,oklch(80.8% .114 19.571))}.text-red-400{color:var(--color-red-400,oklch(70.4% .191 22.216))}.text-slate-100{color:var(--color-slate-100,oklch(96.8% .007 247.896))}.text-slate-200{color:var(--color-slate-200,oklch(92.9% .013 255.508))}.text-slate-300{color:var(--color-slate-300,oklch(86.9% .022 252.894))}.text-white{color:var(--color-white,#fff)}.text-white\/30{color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.text-white\/30{color:color-mix(in oklab,var(--color-white,#fff) 30%,transparent)}}.text-yellow-200{color:var(--color-yellow-200,oklch(94.5% .129 101.54))}.text-yellow-500{color:var(--color-yellow-500,oklch(79.5% .184 86.047))}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.not-italic{font-style:normal}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.no-underline{text-decoration-line:none}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-55{opacity:.55}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_6px_\#ffab00\]{--tw-shadow:0 0 6px var(--tw-shadow-color,#ffab00);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_8px_var\(--color-accent-blue\)\]{--tw-shadow:0 0 8px var(--tw-shadow-color,var(--color-accent-blue));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_2px_6px_rgba\(56\,189\,248\,0\.05\)\]{--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf80d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_4px_12px_rgba\(0\,0\,0\,0\.15\)\]{--tw-shadow:0 4px 12px var(--tw-shadow-color,#00000026);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_4px_14px_rgba\(56\,189\,248\,0\.3\)\]{--tw-shadow:0 4px 14px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_6px_14px_rgba\(56\,189\,248\,0\.35\)\]{--tw-shadow:0 6px 14px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_6px_18px_rgba\(56\,189\,248\,0\.45\)\]{--tw-shadow:0 6px 18px var(--tw-shadow-color,#38bdf873);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_10px_30px_rgba\(0\,0\,0\,0\.4\)\,_0_0_12px_rgba\(56\,189\,248\,0\.15\)\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#0006), 0 0 12px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_10px_30px_rgba\(0\,0\,0\,0\.5\)\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[inset_0_2px_4px_rgba\(0\,0\,0\,0\.2\)\]{--tw-shadow:inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2\!{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.ring-red-500\/20\!{--tw-ring-color:#fb2c3633!important}@supports (color:color-mix(in lab,red,red)){.ring-red-500\/20\!{--tw-ring-color:color-mix(in oklab, var(--color-red-500,oklch(63.7% .237 25.331)) 20%, transparent)!important}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.brightness-110{--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_0_6px_rgba\(234\,179\,8\,0\.3\)\]{--tw-drop-shadow-size:drop-shadow(0 0 6px var(--tw-drop-shadow-color,#eab3084d));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_0_10px_rgba\(56\,189\,248\,0\.6\)\]{--tw-drop-shadow-size:drop-shadow(0 0 10px var(--tw-drop-shadow-color,#38bdf899));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_2px_8px_rgba\(56\,189\,248\,0\.3\)\]{--tw-drop-shadow-size:drop-shadow(0 2px 8px var(--tw-drop-shadow-color,#38bdf84d));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_4px_24px_rgba\(56\,189\,248\,0\.35\)\]{--tw-drop-shadow-size:drop-shadow(0 4px 24px var(--tw-drop-shadow-color,#38bdf859));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter\!{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)!important}.backdrop-blur-\[4px\]{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-\[left\]{transition-property:left;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-250{--tw-duration:.25s;transition-duration:.25s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-\[50ms\]{--tw-duration:50ms;transition-duration:50ms}.ease-in-out{--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1))}.ease-out{--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.hover\:border-\[\#fbbf24\]\/80:hover{border-color:#fbbf24cc}.hover\:border-accent-blue:hover{border-color:var(--color-accent-blue)}.hover\:bg-\[var\(--accent2\)\]:hover{background-color:var(--accent2)}.hover\:bg-\[var\(--border\)\]:hover{background-color:var(--border)}.hover\:bg-black\/35:hover{background-color:#00000059}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/35:hover{background-color:color-mix(in oklab,var(--color-black,#000) 35%,transparent)}}.hover\:text-white:hover{color:var(--color-white,#fff)}}.focus\:border-accent-blue:focus{border-color:var(--color-accent-blue)}.focus\:border-red-500\!:focus{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.focus\:bg-black\/35:focus{background-color:#00000059}@supports (color:color-mix(in lab,red,red)){.focus\:bg-black\/35:focus{background-color:color-mix(in oklab,var(--color-black,#000) 35%,transparent)}}.focus\:ring-red-500\/20\!:focus{--tw-ring-color:#fb2c3633!important}@supports (color:color-mix(in lab,red,red)){.focus\:ring-red-500\/20\!:focus{--tw-ring-color:color-mix(in oklab, var(--color-red-500,oklch(63.7% .237 25.331)) 20%, transparent)!important}}.disabled\:opacity-50:disabled{opacity:.5}}section{flex-direction:column;gap:20px;max-width:650px;animation:.25s cubic-bezier(.175,.885,.32,1.15) forwards slideIn;display:flex}@keyframes slideIn{0%{opacity:0;transform:translateY(6px)scale(.995)}to{opacity:1;transform:none}}h2{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em);color:var(--color-obsidian-100);margin-bottom:2px;font-size:20px}h3{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em);text-transform:uppercase;color:var(--color-accent-blue);margin-bottom:8px;font-size:11px}.field-group{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;flex-direction:column;gap:16px;padding:18px 20px;transition:all .2s ease-out;display:flex}.field-group:hover{background-color:#ffffff0d;border-color:#ffffff1f}.field{cursor:pointer;justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 4);padding-top:4px;padding-bottom:4px;display:flex}.field.col{align-items:stretch;gap:calc(var(--spacing,.25rem) * 1.5);flex-direction:column;width:100%}.field span{color:var(--text);flex:1;font-size:13px;font-weight:500;transition:color .15s ease-out}.field:hover span{color:#fff}.field select{min-width:190px;padding:8px 36px 8px 12px;font-size:13px}.hint{color:var(--text-muted);margin-top:4px;font-size:11px;line-height:1.625}.hint code{background-color:var(--color-obsidian-950);color:var(--color-accent-blue);border:1px solid var(--border);border-radius:4px;padding:2px 6px;font-family:monospace;font-size:10px}.field-label-row{justify-content:space-between;align-items:center;width:100%;margin-bottom:2px;display:flex}.btn-add-inline{color:var(--accent2);cursor:pointer;border-radius:var(--radius);background:0 0;border:none;padding:4px 8px;font-size:11px;font-weight:700;transition:all .15s ease-out}.btn-add-inline:hover{color:#fff;background-color:#38bdf81a}.dynamic-list{flex-direction:column;gap:8px;width:100%;margin-top:4px;display:flex}.dynamic-list-row{align-items:center;gap:calc(var(--spacing,.25rem) * 2);width:100%;display:flex}.dynamic-list-row input,.dynamic-list-row select{min-width:calc(var(--spacing,.25rem) * 0)}.btn-remove-inline{box-sizing:border-box;color:#f87171;cursor:pointer;border-radius:var(--radius);background-color:#ef444414;border:1px solid #ef444433;justify-content:center;align-items:center;height:34px;padding:6px 12px;font-size:12px;font-weight:700;transition:all .15s ease-out;display:flex}.btn-remove-inline:hover{color:#fff;background-color:#ef4444;border-color:#ef4444;box-shadow:0 2px 8px #ef444440}.warning-alert{align-items:center;gap:calc(var(--spacing,.25rem) * 2);color:#f59e0b;border-radius:var(--radius);background-color:#f59e0b1a;border:1px solid #f59e0b40;margin-top:4px;padding:10px 14px;font-size:12px;font-weight:500;animation:.25s cubic-bezier(.175,.885,.32,1.15) forwards slideIn;display:flex}@keyframes border-pulse{0%,to{border-color:#f43f5e66}50%{border-color:#f43f5e}}@keyframes flash{0%,to{opacity:1}50%{opacity:.3}}:root{--bg:var(--color-obsidian-950);--surface:var(--color-obsidian-900);--surface2:var(--color-obsidian-800);--accent:var(--color-accent-blue);--accent2:var(--color-accent-blue);--text:var(--color-obsidian-100);--text-muted:var(--color-obsidian-300);--border:#ffffff0d;--radius:var(--radius-desktop);--recording-color:var(--color-accent-tangerine);--idle-color:var(--color-accent-blue);--speaking-color:var(--color-accent-green);--transition-spring:var(--transition-snappy);--transition-spring-fast:var(--transition-snappy-fast)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body,#app{width:100%;height:100%;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;font-family:Outfit,Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;overflow:hidden}html.overlay-window,body.overlay-window,body.overlay-window #app{box-shadow:none!important;background:0 0!important;border:none!important;outline:none!important;overflow:hidden!important}body.overlay-window *{box-shadow:none!important;outline:none!important}body.overlay-window ::-webkit-scrollbar{width:0!important;height:0!important;display:none!important}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#ffffff0f;border-radius:99px;transition:background .2s}::-webkit-scrollbar-thumb:hover{background:#ffffff26}.sr-only{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}button{cursor:pointer;font-family:inherit;font-size:inherit;background:0 0;border:none;outline:none}input,select,textarea{font-family:inherit;font-size:inherit;outline:none}select{-webkit-appearance:none;appearance:none;background:var(--surface2) url("data:image/svg+xml;utf8,") no-repeat right 12px center;color:var(--text);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;transition:var(--transition-snappy-fast);background-size:10px;padding:8px 36px 8px 12px;box-shadow:0 4px 12px #00000026}select:hover{background-color:var(--color-obsidian-700);border-color:#ffffff1f;transform:translateY(-1px)}select:focus{border-color:var(--accent2);box-shadow:0 0 0 2px #38bdf826}select option{background-color:var(--color-obsidian-900);color:var(--text);padding:10px 12px}select:-webkit-autofill{-webkit-text-fill-color:var(--text)!important;-webkit-box-shadow:0 0 0px 1000px var(--color-obsidian-900) inset!important}select:-webkit-autofill:hover{-webkit-text-fill-color:var(--text)!important;-webkit-box-shadow:0 0 0px 1000px var(--color-obsidian-900) inset!important}select:-webkit-autofill:focus{-webkit-text-fill-color:var(--text)!important;-webkit-box-shadow:0 0 0px 1000px var(--color-obsidian-900) inset!important}.interactive-spring{transition:var(--transition-snappy)}.interactive-spring:hover{transform:scale(1.02)translateY(-1px)}.interactive-spring:active{transform:scale(.97)translateY(0)}input[type=checkbox]{-webkit-appearance:none;appearance:none;background:var(--color-obsidian-700);cursor:pointer;width:36px;height:20px;transition:var(--transition-spring-fast);border:1px solid var(--border);border-radius:99px;outline:none;position:relative}input[type=checkbox]:before{content:"";background:var(--color-obsidian-300);width:14px;height:14px;transition:var(--transition-spring-fast);border-radius:50%;position:absolute;top:2px;left:2px}input[type=checkbox]:checked{background:var(--color-accent-blue);border-color:var(--color-accent-blue)}input[type=checkbox]:checked:before{background:#fff;left:18px;box-shadow:0 2px 4px #0003}input[type=checkbox]:hover{border-color:#ffffff26}input[type=number],input[type=text],input[type=password]{background:var(--color-obsidian-950);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);min-width:170px;transition:var(--transition-spring-fast);outline:none;padding:8px 12px;font-size:13px;box-shadow:inset 0 2px 4px #0003}input[type=number]:hover,input[type=text]:hover,input[type=password]:hover{background-color:var(--color-obsidian-900);border-color:#ffffff26}input[type=number]:focus,input[type=text]:focus,input[type=password]:focus{border-color:var(--accent2);background-color:var(--color-obsidian-950);box-shadow:0 0 0 2px #38bdf826,inset 0 2px 4px #0003}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false} diff --git a/dist/index.html b/dist/index.html index be3d9156..5d0965b9 100644 --- a/dist/index.html +++ b/dist/index.html @@ -16,8 +16,8 @@ - - + +
        diff --git a/src/lib/Diagnostics/UdevWarning.svelte b/src/lib/Diagnostics/UdevWarning.svelte index 4056c03f..767883c5 100644 --- a/src/lib/Diagnostics/UdevWarning.svelte +++ b/src/lib/Diagnostics/UdevWarning.svelte @@ -413,7 +413,7 @@ {/if}
        -`);var ke=i(E,2);let We;wl(ke,()=>e(oe),!0),Fs(ke,ye=>Se==null?void 0:Se(ye)),w(()=>We=Te(ke,1,"custom-overlay-content svelte-rmqsd6",null,We,{active:e(ee)})),d(H,A)},it=H=>{xh(H,{get recording(){return r()},get speaking(){return c()},get active(){return e(ee)}})};k(U,H=>{l().ui.overlay_style==="waveform"?H(te):l().ui.overlay_style==="pulse"?H(Y,1):l().ui.overlay_style==="blue_wave"?H(he,2):l().ui.overlay_style==="mono_bars"?H(me,3):l().ui.overlay_style==="spectrum"?H(pe,4):l().ui.overlay_style==="terminal"?H(De,5):l().ui.overlay_style==="vinyl"?H(Ge,6):e(m)?H(st,7):l().ui.overlay_style!=="none"&&H(it,8)})}d(de,G)};k(X,de=>{e(ge)&&de(ve)})}var Me=i(X,2);{var Fe=de=>{var G=Wh();let U;var te=i(n(G),2),Y=n(te),he=n(Y),me=i(Y,2),pe=n(me);w(De=>{var Ge;U=Te(G,1,"system-response-box command svelte-rmqsd6",null,U,{on:e(ee)}),y(he,De),y(pe,`▸ ${(Ge=e(T))!=null?Ge:""}`)},[()=>e(q).toUpperCase()]),d(de,G)};k(Me,de=>{e(M)&&l().ui.show_command_overlay&&!e(D)&&de(Fe)})}var _e=i(Me,2);{var re=de=>{var G=$h();let U;var te=n(G);pt(te,20,()=>[0,1,2,3,4],ft,(pe,De)=>{var Ge=Hh();w(()=>na(Ge,`animation-delay: ${De*.13}s`)),d(pe,Ge)});var Y=i(te,2),he=i(n(Y),2),me=n(he);w(()=>{var pe;U=Te(G,1,"system-response-box speaking svelte-rmqsd6",null,U,{on:e(ee)}),y(me,`▸ ${(pe=e(x))!=null?pe:""}`)}),d(de,G)};k(_e,de=>{e(D)&&de(re)})}var we=i(_e,2);{var Je=de=>{var G=Gh();let U;var te=i(n(G),2),Y=i(n(te),2),he=n(Y);w(()=>{var me;U=Te(G,1,"system-response-box mcp svelte-rmqsd6",null,U,{on:e(ee)}),y(he,`▸ ${(me=e(x))!=null?me:""}`)}),d(de,G)};k(we,de=>{u()&&l().mcp.visual_feedback&&de(Je)})}d(ae,O)};k(le,ae=>{e(I)&&e(b)&&ae($)})}w(()=>{mt(ze,"data-recording",r()),mt(ze,"data-speaking",c()),mt(ze,"data-processing",t().processing)}),d(s,ze),St(),f()}class rl{constructor(...a){this.type="Logical",a.length===1?"Logical"in a[0]?(this.width=a[0].Logical.width,this.height=a[0].Logical.height):(this.width=a[0].width,this.height=a[0].height):(this.width=a[0],this.height=a[1])}toPhysical(a){return new js(this.width*a,this.height*a)}[ls](){return{width:this.width,height:this.height}}toJSON(){return this[ls]()}}class js{constructor(...a){this.type="Physical",a.length===1?"Physical"in a[0]?(this.width=a[0].Physical.width,this.height=a[0].Physical.height):(this.width=a[0].width,this.height=a[0].height):(this.width=a[0],this.height=a[1])}toLogical(a){return new rl(this.width/a,this.height/a)}[ls](){return{width:this.width,height:this.height}}toJSON(){return this[ls]()}}class _n{constructor(a){this.size=a}toLogical(a){return this.size instanceof rl?this.size:this.size.toLogical(a)}toPhysical(a){return this.size instanceof js?this.size:this.size.toPhysical(a)}[ls](){return{[`${this.size.type}`]:{width:this.size.width,height:this.size.height}}}toJSON(){return this[ls]()}}class ll{constructor(...a){this.type="Logical",a.length===1?"Logical"in a[0]?(this.x=a[0].Logical.x,this.y=a[0].Logical.y):(this.x=a[0].x,this.y=a[0].y):(this.x=a[0],this.y=a[1])}toPhysical(a){return new as(this.x*a,this.y*a)}[ls](){return{x:this.x,y:this.y}}toJSON(){return this[ls]()}}class as{constructor(...a){this.type="Physical",a.length===1?"Physical"in a[0]?(this.x=a[0].Physical.x,this.y=a[0].Physical.y):(this.x=a[0].x,this.y=a[0].y):(this.x=a[0],this.y=a[1])}toLogical(a){return new ll(this.x/a,this.y/a)}[ls](){return{x:this.x,y:this.y}}toJSON(){return this[ls]()}}class Ei{constructor(a){this.position=a}toLogical(a){return this.position instanceof ll?this.position:this.position.toLogical(a)}toPhysical(a){return this.position instanceof as?this.position:this.position.toPhysical(a)}[ls](){return{[`${this.position.type}`]:{x:this.position.x,y:this.position.y}}}toJSON(){return this[ls]()}}var $i;(function(s){s[s.Critical=1]="Critical",s[s.Informational=2]="Informational"})($i||($i={}));class Wo{constructor(a){this._preventDefault=!1,this.event=a.event,this.id=a.id}preventDefault(){this._preventDefault=!0}isPreventDefault(){return this._preventDefault}}var Fr;(function(s){s.None="none",s.Normal="normal",s.Indeterminate="indeterminate",s.Paused="paused",s.Error="error"})(Fr||(Fr={}));function ol(){return new cl(window.__TAURI_INTERNALS__.metadata.currentWindow.label,{skip:!0})}async function Vi(){return C("plugin:window|get_all_windows").then(s=>s.map(a=>new cl(a,{skip:!0})))}const br=["tauri://created","tauri://error"];class cl{constructor(a,t={}){var r;this.label=a,this.listeners=Object.create(null),t!=null&&t.skip||C("plugin:window|create",{options:{...t,parent:typeof t.parent=="string"?t.parent:(r=t.parent)===null||r===void 0?void 0:r.label,label:a}}).then(async()=>this.emit("tauri://created")).catch(async l=>this.emit("tauri://error",l))}static async getByLabel(a){var t;return(t=(await Vi()).find(r=>r.label===a))!==null&&t!==void 0?t:null}static getCurrent(){return ol()}static async getAll(){return Vi()}static async getFocusedWindow(){for(const a of await Vi())if(await a.isFocused())return a;return null}async listen(a,t){return this._handleTauriEvent(a,t)?()=>{const r=this.listeners[a];r.splice(r.indexOf(t),1)}:_a(a,t,{target:{kind:"Window",label:this.label}})}async once(a,t){return this._handleTauriEvent(a,t)?()=>{const r=this.listeners[a];r.splice(r.indexOf(t),1)}:Ud(a,t,{target:{kind:"Window",label:this.label}})}async emit(a,t){if(br.includes(a)){for(const r of this.listeners[a]||[])r({event:a,id:-1,payload:t});return}return Vo(a,t)}async emitTo(a,t,r){if(br.includes(t)){for(const l of this.listeners[t]||[])l({event:t,id:-1,payload:r});return}return Wd(a,t,r)}_handleTauriEvent(a,t){return br.includes(a)?(a in this.listeners?this.listeners[a].push(t):this.listeners[a]=[t],!0):!1}async scaleFactor(){return C("plugin:window|scale_factor",{label:this.label})}async innerPosition(){return C("plugin:window|inner_position",{label:this.label}).then(a=>new as(a))}async outerPosition(){return C("plugin:window|outer_position",{label:this.label}).then(a=>new as(a))}async innerSize(){return C("plugin:window|inner_size",{label:this.label}).then(a=>new js(a))}async outerSize(){return C("plugin:window|outer_size",{label:this.label}).then(a=>new js(a))}async isFullscreen(){return C("plugin:window|is_fullscreen",{label:this.label})}async isMinimized(){return C("plugin:window|is_minimized",{label:this.label})}async isMaximized(){return C("plugin:window|is_maximized",{label:this.label})}async isFocused(){return C("plugin:window|is_focused",{label:this.label})}async isDecorated(){return C("plugin:window|is_decorated",{label:this.label})}async isResizable(){return C("plugin:window|is_resizable",{label:this.label})}async isMaximizable(){return C("plugin:window|is_maximizable",{label:this.label})}async isMinimizable(){return C("plugin:window|is_minimizable",{label:this.label})}async isClosable(){return C("plugin:window|is_closable",{label:this.label})}async isVisible(){return C("plugin:window|is_visible",{label:this.label})}async title(){return C("plugin:window|title",{label:this.label})}async theme(){return C("plugin:window|theme",{label:this.label})}async isAlwaysOnTop(){return C("plugin:window|is_always_on_top",{label:this.label})}async activityName(){return C("plugin:window|activity_name",{label:this.label})}async sceneIdentifier(){return C("plugin:window|scene_identifier",{label:this.label})}async center(){return C("plugin:window|center",{label:this.label})}async requestUserAttention(a){let t=null;return a&&(a===$i.Critical?t={type:"Critical"}:t={type:"Informational"}),C("plugin:window|request_user_attention",{label:this.label,value:t})}async setResizable(a){return C("plugin:window|set_resizable",{label:this.label,value:a})}async setEnabled(a){return C("plugin:window|set_enabled",{label:this.label,value:a})}async isEnabled(){return C("plugin:window|is_enabled",{label:this.label})}async setMaximizable(a){return C("plugin:window|set_maximizable",{label:this.label,value:a})}async setMinimizable(a){return C("plugin:window|set_minimizable",{label:this.label,value:a})}async setClosable(a){return C("plugin:window|set_closable",{label:this.label,value:a})}async setTitle(a){return C("plugin:window|set_title",{label:this.label,value:a})}async maximize(){return C("plugin:window|maximize",{label:this.label})}async unmaximize(){return C("plugin:window|unmaximize",{label:this.label})}async toggleMaximize(){return C("plugin:window|toggle_maximize",{label:this.label})}async minimize(){return C("plugin:window|minimize",{label:this.label})}async unminimize(){return C("plugin:window|unminimize",{label:this.label})}async show(){return C("plugin:window|show",{label:this.label})}async hide(){return C("plugin:window|hide",{label:this.label})}async close(){return C("plugin:window|close",{label:this.label})}async destroy(){return C("plugin:window|destroy",{label:this.label})}async setDecorations(a){return C("plugin:window|set_decorations",{label:this.label,value:a})}async setShadow(a){return C("plugin:window|set_shadow",{label:this.label,value:a})}async setEffects(a){return C("plugin:window|set_effects",{label:this.label,value:a})}async clearEffects(){return C("plugin:window|set_effects",{label:this.label,value:null})}async setAlwaysOnTop(a){return C("plugin:window|set_always_on_top",{label:this.label,value:a})}async setAlwaysOnBottom(a){return C("plugin:window|set_always_on_bottom",{label:this.label,value:a})}async setContentProtected(a){return C("plugin:window|set_content_protected",{label:this.label,value:a})}async setSize(a){return C("plugin:window|set_size",{label:this.label,value:a instanceof _n?a:new _n(a)})}async setMinSize(a){return C("plugin:window|set_min_size",{label:this.label,value:a instanceof _n?a:a?new _n(a):null})}async setMaxSize(a){return C("plugin:window|set_max_size",{label:this.label,value:a instanceof _n?a:a?new _n(a):null})}async setSizeConstraints(a){function t(r){return r?{Logical:r}:null}return C("plugin:window|set_size_constraints",{label:this.label,value:{minWidth:t(a==null?void 0:a.minWidth),minHeight:t(a==null?void 0:a.minHeight),maxWidth:t(a==null?void 0:a.maxWidth),maxHeight:t(a==null?void 0:a.maxHeight)}})}async setPosition(a){return C("plugin:window|set_position",{label:this.label,value:a instanceof Ei?a:new Ei(a)})}async setFullscreen(a){return C("plugin:window|set_fullscreen",{label:this.label,value:a})}async setSimpleFullscreen(a){return C("plugin:window|set_simple_fullscreen",{label:this.label,value:a})}async setFocus(){return C("plugin:window|set_focus",{label:this.label})}async setFocusable(a){return C("plugin:window|set_focusable",{label:this.label,value:a})}async setIcon(a){return C("plugin:window|set_icon",{label:this.label,value:Hi(a)})}async setSkipTaskbar(a){return C("plugin:window|set_skip_taskbar",{label:this.label,value:a})}async setCursorGrab(a){return C("plugin:window|set_cursor_grab",{label:this.label,value:a})}async setCursorVisible(a){return C("plugin:window|set_cursor_visible",{label:this.label,value:a})}async setCursorIcon(a){return C("plugin:window|set_cursor_icon",{label:this.label,value:a})}async setBackgroundColor(a){return C("plugin:window|set_background_color",{color:a})}async setCursorPosition(a){return C("plugin:window|set_cursor_position",{label:this.label,value:a instanceof Ei?a:new Ei(a)})}async setIgnoreCursorEvents(a){return C("plugin:window|set_ignore_cursor_events",{label:this.label,value:a})}async startDragging(){return C("plugin:window|start_dragging",{label:this.label})}async startResizeDragging(a){return C("plugin:window|start_resize_dragging",{label:this.label,value:a})}async setBadgeCount(a){return C("plugin:window|set_badge_count",{label:this.label,value:a})}async setBadgeLabel(a){return C("plugin:window|set_badge_label",{label:this.label,value:a})}async setOverlayIcon(a){return C("plugin:window|set_overlay_icon",{label:this.label,value:a?Hi(a):void 0})}async setProgressBar(a){return C("plugin:window|set_progress_bar",{label:this.label,value:a})}async setVisibleOnAllWorkspaces(a){return C("plugin:window|set_visible_on_all_workspaces",{label:this.label,value:a})}async setTitleBarStyle(a){return C("plugin:window|set_title_bar_style",{label:this.label,value:a})}async setTheme(a){return C("plugin:window|set_theme",{label:this.label,value:a})}async onResized(a){return this.listen(Ha.WINDOW_RESIZED,t=>{t.payload=new js(t.payload),a(t)})}async onMoved(a){return this.listen(Ha.WINDOW_MOVED,t=>{t.payload=new as(t.payload),a(t)})}async onCloseRequested(a){return this.listen(Ha.WINDOW_CLOSE_REQUESTED,async t=>{const r=new Wo(t);await a(r),r.isPreventDefault()||await this.destroy()})}async onDragDropEvent(a){const t=await this.listen(Ha.DRAG_ENTER,u=>{a({...u,payload:{type:"enter",paths:u.payload.paths,position:new as(u.payload.position)}})}),r=await this.listen(Ha.DRAG_OVER,u=>{a({...u,payload:{type:"over",position:new as(u.payload.position)}})}),l=await this.listen(Ha.DRAG_DROP,u=>{a({...u,payload:{type:"drop",paths:u.payload.paths,position:new as(u.payload.position)}})}),c=await this.listen(Ha.DRAG_LEAVE,u=>{a({...u,payload:{type:"leave"}})});return()=>{t(),l(),r(),c()}}async onFocusChanged(a){const t=await this.listen(Ha.WINDOW_FOCUS,l=>{a({...l,payload:!0})}),r=await this.listen(Ha.WINDOW_BLUR,l=>{a({...l,payload:!1})});return()=>{t(),r()}}async onScaleChanged(a){return this.listen(Ha.WINDOW_SCALE_FACTOR_CHANGED,a)}async onThemeChanged(a){return this.listen(Ha.WINDOW_THEME_CHANGED,a)}}var zl;(function(s){s.Disabled="disabled",s.Throttle="throttle",s.Suspend="suspend"})(zl||(zl={}));var Dl;(function(s){s.Default="default",s.FluentOverlay="fluentOverlay"})(Dl||(Dl={}));var Br;(function(s){s.AppearanceBased="appearanceBased",s.Light="light",s.Dark="dark",s.MediumLight="mediumLight",s.UltraDark="ultraDark",s.Titlebar="titlebar",s.Selection="selection",s.Menu="menu",s.Popover="popover",s.Sidebar="sidebar",s.HeaderView="headerView",s.Sheet="sheet",s.WindowBackground="windowBackground",s.HudWindow="hudWindow",s.FullScreenUI="fullScreenUI",s.Tooltip="tooltip",s.ContentBackground="contentBackground",s.UnderWindowBackground="underWindowBackground",s.UnderPageBackground="underPageBackground",s.Mica="mica",s.Blur="blur",s.Acrylic="acrylic",s.Tabbed="tabbed",s.TabbedDark="tabbedDark",s.TabbedLight="tabbedLight"})(Br||(Br={}));var qr;(function(s){s.FollowsWindowActiveState="followsWindowActiveState",s.Active="active",s.Inactive="inactive"})(qr||(qr={}));function ir(s){return s===null?null:{name:s.name,scaleFactor:s.scaleFactor,position:new as(s.position),size:new js(s.size),workArea:{position:new as(s.workArea.position),size:new js(s.workArea.size)}}}async function Xh(){return C("plugin:window|current_monitor").then(ir)}async function Zh(){return C("plugin:window|primary_monitor").then(ir)}async function Qh(s,a){return C("plugin:window|monitor_from_point",{x:s,y:a}).then(ir)}async function e_(){return C("plugin:window|available_monitors").then(s=>s.map(ir))}async function t_(){return C("plugin:window|cursor_position").then(s=>new as(s))}const a_=Object.freeze(Object.defineProperty({__proto__:null,CloseRequestedEvent:Wo,get Effect(){return Br},get EffectState(){return qr},LogicalPosition:ll,LogicalSize:rl,PhysicalPosition:as,PhysicalSize:js,get ProgressBarStatus(){return Fr},get UserAttentionType(){return $i},Window:cl,availableMonitors:e_,currentMonitor:Xh,cursorPosition:t_,getAllWindows:Vi,getCurrentWindow:ol,monitorFromPoint:Qh,primaryMonitor:Zh},Symbol.toStringTag,{value:"Module"}));var s_=p('
        Installing the helper packages…

        You may be prompted for your administrator password.

        '),n_=p('
        Checking VoxCtrl setup…
        '),i_=p('

        '),r_=p('

        ',1),l_=p(`

        🔒 VoxCtrl asked your desktop to register its shortcuts and is told nothing + else. It does not read your keyboard, cannot see what you type in other + applications, and needed no special permissions to set up.

        `),o_=p(' '),c_=p('not accepted by your desktop'),d_=p("
      • "),v_=p('
          '),u_=p(`

          Your desktop does not offer the global-shortcuts portal, so VoxCtrl is + reading key events from the X server instead. This needed no permissions + and no setup, and every gesture style works — but in this mode every + keystroke passes through VoxCtrl. Nothing is stored or sent anywhere; a + desktop with portal support (KDE Plasma, GNOME 48+, Hyprland) avoids it + entirely.

          `),p_=p(`

          Your desktop is holding VoxCtrl's shortcuts itself, which is why VoxCtrl + cannot read your keyboard here. It also means the desktop only reports the + key going down, never coming back up: hold and double-tap styles cannot + work on this route, and the Hotkeys tab offers only tap-to-start, + tap-to-stop.

          `),f_=p(`

          Your desktop does not offer the global-shortcuts portal, so VoxCtrl is + falling back to reading input devices — access this machine already had, + which VoxCtrl neither requested nor configured. Shortcuts work, but in this + mode every keystroke passes through VoxCtrl. Nothing is stored or sent + anywhere; if you would rather it did not happen at all, a desktop with + portal support (KDE Plasma, GNOME 48+, Hyprland) avoids it entirely.

          `),h_=p('

          '),__=p(`

          Global shortcuts require approval from your system. If you closed or cancelled + the desktop keybind prompt without approving, click below to show the prompt again.

          `,1),g_=p('

          '),m_=p('

          Global shortcuts require approval or registration from your system. VoxCtrl will not grant itself keyboard access to work around this.

          ',1),b_=p(' '),y_=p(' '),w_=p(` is missing, so transcriptions cannot be + typed into the focused window.`,1),k_=p(''),x_=p(''),T_=p('
           
          '),S_=p('
          ',1),C_=p(' is downloaded and ready.',1),E_=p('Downloading in the background — no action needed.',1),M_=p(' is not downloaded yet, so dictation produces no text.',1),A_=p('
          '),P_=p('
          ❌
          '),z_=p(''),D_=p('
          ');function I_(s,a){Tt(a,!0);let t=S(null),r=S(!1),l=S(!1),c=S(null),u=S(!1),v=S(!1),f=S(!1),_=S(null),b=S(!1),m=S(null),h;async function x(){try{o(t,await C("get_setup_status"),!0)}catch(L){console.error("Failed to read setup status:",L)}}qt(()=>{x(),h=setInterval(x,2e3)}),ar(()=>{h&&clearInterval(h)});async function M(){try{await ol().close()}catch(L){console.error("Failed to close window natively:",L)}}async function q(){var L;o(r,!0),o(c,null);try{await C("install_system_integration"),await x()}catch(B){o(c,(L=B==null?void 0:B.toString())!=null?L:"Install failed",!0),o(u,!0)}finally{o(r,!1)}}async function T(){var L;o(l,!0),o(c,null);try{await C("download_configured_model"),await x()}catch(B){o(c,(L=B==null?void 0:B.toString())!=null?L:"Download failed",!0)}finally{o(l,!1)}}async function z(){try{await C("open_settings_tab",{tab:"engine"})}catch(L){console.error("Failed to open the Engine settings tab:",L)}}async function se(){var L;o(f,!0),o(_,null);try{await C("open_shortcut_settings")}catch(B){o(_,(L=B==null?void 0:B.toString())!=null?L:"Could not open shortcut settings.",!0)}finally{o(f,!1)}}async function ne(){var L;o(b,!0),o(m,null);try{await C("approve_shortcuts"),await x()}catch(B){o(m,(L=B==null?void 0:B.toString())!=null?L:"Failed to configure shortcuts for your desktop.",!0),await x()}finally{o(b,!1)}}async function fe(){if(e(t))try{await navigator.clipboard.writeText(e(t).manual_package_commands),o(v,!0),setTimeout(()=>o(v,!1),2e3)}catch(L){console.error("Clipboard write failed:",L)}}const Q=ce(()=>e(t)?e(t).hotkeys.backend==="starting"?"busy":e(t).hotkeys_active?"ok":"todo":"busy"),D=ce(()=>e(t)?e(t).missing_injection_tool?"todo":"ok":"busy"),I=ce(()=>e(t)?e(t).model_ready?"ok":e(t).model_auto_downloads?"busy":"todo":"busy"),R=L=>L==="ok"?"✅":L==="busy"?"⏳":"⚠️";var ge=D_(),ee=n(ge);{var j=L=>{var B=s_();d(L,B)},V=L=>{var B=n_();d(L,B)},oe=L=>{var B=z_(),be=n(B),Pe=n(be),ue=n(Pe),W=i(Pe,2),J=n(W),Se=n(J),ze=i(J,2),le=n(ze),$=i(be,2),ae=n($);let O;var X=n(ae),ve=n(X),Me=i(X,2),Fe=i(n(Me),2),_e=n(Fe),re=i(Fe,2);{var we=Oe=>{var qe=r_(),K=_t(qe),g=n(K),P=i(K,2),Ae=n(P),Ue=n(Ae),ie=i(P,2);{var xe=Ee=>{var He=i_(),Xe=n(He);w(()=>y(Xe,e(_))),d(Ee,He)};k(ie,Ee=>{e(_)&&Ee(xe)})}w(()=>{var Ee;y(g,`🔧 One more step on KDE: ${(Ee=e(t).hotkeys.manual_enable_hint)!=null?Ee:""}`),Ae.disabled=e(f),y(Ue,e(f)?"Opening…":"Open Shortcut Settings")}),N("click",Ae,se),d(Oe,qe)};k(re,Oe=>{e(t).hotkeys.needs_manual_enable&&Oe(we)})}var Je=i(re,2);{var de=Oe=>{var qe=l_();d(Oe,qe)};k(Je,Oe=>{(e(t).hotkeys.backend==="portal"||e(t).hotkeys.backend==="mint_dbus")&&Oe(de)})}var G=i(Je,2);{var U=Oe=>{var qe=v_();pt(qe,21,()=>e(t).hotkeys.shortcuts,ft,(K,g)=>{var P=d_();let Ae;var Ue=n(P);{var ie=Ee=>{var He=o_(),Xe=n(He);w(()=>y(Xe,e(g).trigger_description||e(g).requested||"chosen in your desktop settings")),d(Ee,He)},xe=Ee=>{var He=c_();d(Ee,He)};k(Ue,Ee=>{e(g).bound?Ee(ie):Ee(xe,-1)})}w(()=>Ae=Te(P,1,"svelte-45v8pc",null,Ae,{unbound:!e(g).bound})),d(K,P)}),d(Oe,qe)};k(G,Oe=>{e(t).hotkeys_active&&e(t).hotkeys.shortcuts.length>0&&Oe(U)})}var te=i(G,2);{var Y=Oe=>{var qe=u_();d(Oe,qe)},he=Oe=>{var qe=p_();d(Oe,qe)},me=Oe=>{var qe=f_();d(Oe,qe)},pe=Oe=>{var qe=__(),K=i(_t(qe),2),g=n(K),P=n(g),Ae=i(K,2);{var Ue=ie=>{var xe=h_(),Ee=n(xe);w(()=>y(Ee,e(m))),d(ie,xe)};k(Ae,ie=>{e(m)&&ie(Ue)})}w(()=>{g.disabled=e(b),y(P,e(b)?"Configuring…":"Approve Keybinds")}),N("click",g,ne),d(Oe,qe)},De=Oe=>{var qe=m_(),K=i(_t(qe),2),g=n(K),P=n(g),Ae=i(K,2);{var Ue=ie=>{var xe=g_(),Ee=n(xe);w(()=>y(Ee,e(m))),d(ie,xe)};k(Ae,ie=>{e(m)&&ie(Ue)})}w(()=>{g.disabled=e(b),y(P,e(b)?"Configuring…":"Approve Shortcuts")}),N("click",g,ne),d(Oe,qe)};k(te,Oe=>{e(t).hotkeys.backend==="x11"?Oe(Y):e(t).hotkeys.backend==="mint_dbus"?Oe(he,1):e(t).hotkeys.backend==="evdev"?Oe(me,2):e(t).hotkeys.portal_refused?Oe(pe,3):e(t).hotkeys.backend!=="starting"&&Oe(De,4)})}var Ge=i(te,2);{var st=Oe=>{var qe=b_(),K=n(qe);w(()=>{var g;return y(K,`Portal reported: ${(g=e(t).hotkeys.portal_error)!=null?g:""}`)}),d(Oe,qe)};k(Ge,Oe=>{e(t).hotkeys.portal_error&&e(t).hotkeys.backend!=="portal"&&e(t).hotkeys.backend!=="evdev"&&Oe(st)})}var it=i(Ge,2);{var H=Oe=>{var qe=y_(),K=n(qe);w(()=>{var g;return y(K,`X11 shortcuts: ${(g=e(t).hotkeys.x11_error)!=null?g:""}`)}),d(Oe,qe)};k(it,Oe=>{e(t).hotkeys.x11_error&&e(t).hotkeys.backend!=="x11"&&e(t).hotkeys.backend!=="portal"&&Oe(H)})}var A=i(ae,2);let E;var ke=n(A),We=n(ke),ye=i(ke,2),Ie=i(n(ye),2),Ye=n(Ie);{var Ze=Oe=>{var qe=w_(),K=_t(qe),g=n(K);w(()=>y(g,e(t).missing_injection_tool)),d(Oe,qe)},Ve=Oe=>{var qe=Be("Ready — transcriptions can be typed straight into the focused window.");d(Oe,qe)};k(Ye,Oe=>{e(t).missing_injection_tool?Oe(Ze):Oe(Ve,-1)})}var at=i(Ie,2);{var et=Oe=>{var qe=S_(),K=_t(qe),g=n(K);{var P=Ee=>{var He=k_();N("click",He,q),d(Ee,He)};k(g,Ee=>{e(t).pkexec_available&&e(t).manual_package_commands&&Ee(P)})}var Ae=i(g,2);{var Ue=Ee=>{var He=x_(),Xe=n(He);w(()=>y(Xe,e(u)?"Hide manual commands":"Install it manually")),N("click",He,()=>o(u,!e(u))),d(Ee,He)};k(Ae,Ee=>{e(t).manual_package_commands&&Ee(Ue)})}var ie=i(K,2);{var xe=Ee=>{var He=T_(),Xe=n(He),zt=n(Xe),Dt=i(Xe,2),Ft=n(Dt);w(()=>{y(zt,e(t).manual_package_commands),y(Ft,e(v)?"Copied":"Copy commands")}),N("click",Dt,fe),d(Ee,He)};k(ie,Ee=>{e(u)&&Ee(xe)})}d(Oe,qe)};k(at,Oe=>{e(t).missing_injection_tool&&Oe(et)})}var rt=i(A,2);let Ce;var Ke=n(rt),ct=n(Ke),vt=i(Ke,2),nt=i(n(vt),2),wt=n(nt);{var dt=Oe=>{var qe=C_(),K=_t(qe),g=n(K);w(()=>y(g,e(t).model_size)),d(Oe,qe)},Ct=Oe=>{var qe=E_(),K=i(_t(qe)),g=n(K);w(()=>y(g,e(t).model_size)),d(Oe,qe)},Wt=Oe=>{var qe=M_(),K=_t(qe),g=n(K);w(()=>y(g,e(t).model_size)),d(Oe,qe)};k(wt,Oe=>{e(t).model_ready?Oe(dt):e(t).model_auto_downloads?Oe(Ct,1):Oe(Wt,-1)})}var ia=i(nt,2);{var ra=Oe=>{var qe=A_(),K=n(qe),g=n(K),P=i(K,2);w(()=>{K.disabled=e(l),y(g,e(l)?"Downloading…":`Download ${e(t).model_size}`)}),N("click",K,T),N("click",P,z),d(Oe,qe)};k(ia,Oe=>{!e(t).model_ready&&!e(t).model_auto_downloads&&Oe(ra)})}var bt=i($,2);{var ea=Oe=>{var qe=P_(),K=i(n(qe),2),g=n(K);w(()=>y(g,e(c))),d(Oe,qe)};k(bt,Oe=>{e(c)&&Oe(ea)})}var Rt=i(bt,2),Ht=n(Rt),ta=n(Ht);w((Oe,qe,K)=>{y(ue,e(t).is_complete?"✅":"🛠️"),y(Se,e(t).is_complete?"VoxCtrl is ready":"Finish setting up VoxCtrl"),y(le,e(t).is_complete?"Press your shortcut anywhere to dictate.":"Dictation is not ready yet — the steps below say why."),O=Te(ae,1,"step svelte-45v8pc",null,O,{done:e(Q)==="ok"}),y(ve,Oe),y(_e,e(t).hotkeys.detail),E=Te(A,1,"step svelte-45v8pc",null,E,{done:e(D)==="ok"}),y(We,qe),Ce=Te(rt,1,"step svelte-45v8pc",null,Ce,{done:e(I)==="ok"}),y(ct,K),y(ta,e(t).is_complete?"Close":"Continue anyway")},[()=>R(e(Q)),()=>R(e(D)),()=>R(e(I))]),N("click",Ht,M),d(L,B)};k(ee,L=>{e(r)?L(j):e(t)?L(oe,-1):L(V,1)})}d(s,ge),St()}Qt(["click"]);const O_=[{id:"tiny",mb:75,speed:.96,accuracy:.58},{id:"base",mb:142,speed:.88,accuracy:.68},{id:"small",mb:466,speed:.68,accuracy:.8},{id:"medium",mb:1500,speed:.42,accuracy:.9},{id:"large-v3",mb:3100,speed:.22,accuracy:.97}],R_=[{id:"tiny",mb:100,speed:.98,accuracy:.64},{id:"base",mb:250,speed:.92,accuracy:.77}],L_=[{id:"tdt-0.6b-v3",mb:665,speed:.95,accuracy:.94}],N_=[{id:"remote",mb:0,speed:.95,accuracy:.95}],Mi=[{id:"whisper-cpp",name:"whisper.cpp",glyph:"∇",tagline:"Reference-grade accuracy in quiet spaces. Five model sizes from 75 MB to 3.1 GB. CUDA, Vulkan or CPU.",models:O_,gpu:!0,noiseRetention:.64},{id:"moonshine",name:"Moonshine",glyph:"↯",tagline:"Streaming ONNX model tuned for real rooms — fans, keyboards, traffic. Fast on any CPU, tiny download.",models:R_,gpu:!1,noiseRetention:.93},{id:"parakeet",name:"Parakeet TDT",glyph:"⚡",tagline:"NVIDIA FastConformer TDT 0.6B. Ultra-fast non-autoregressive transcription, SOTA accuracy, no repetition loops.",models:L_,gpu:!0,noiseRetention:.88},{id:"remote-openai",name:"Remote Speech Engine",glyph:"🌐",tagline:"Connect to an OpenAI-compatible speech-to-text server on your network or cloud (Faster-Whisper, vLLM, etc.).",models:N_,gpu:!1,noiseRetention:.92}],xn=[{id:"toggle",name:"Tap to talk",verb:"tap",desc:"Press once to start, press again to stop. Hands stay free while you speak.",key:[[1,1],[8,0],[1,1],[3,0]],mic:[[1,0],[9,1],[4,0]]},{id:"double_tap",name:"Double-tap to talk",verb:"double-tap",desc:"Two quick presses start dictation; one press stops. Hard to trigger by accident.",key:[[1,1],[.7,0],[1,1],[7,0],[1,1],[3,0]],mic:[[2.7,0],[7.3,1],[4,0]]},{id:"hold",name:"Hold to talk",verb:"hold",desc:"Hold the keys down while speaking, release to stop. Like a walkie-talkie.",key:[[1,0],[9,1],[4,0]],mic:[[1,0],[9,1],[4,0]]},{id:"double_tap_hold",name:"Double-tap & hold",verb:"double-tap and hold",desc:"Tap once, then press and hold. Release to stop. Never collides with a plain shortcut.",key:[[1,1],[.7,0],[8.3,1],[4,0]],mic:[[2.7,0],[6.3,1],[4,0]]}],mn=[{id:"blue_wave",name:"Ocean Wave",meta:"default · tide-pool waves",glyph:"⊟"},{id:"voice_card",name:"Voice Card",meta:"20×6 LED VU matrix",glyph:"⊟"},{id:"waveform",name:"Waveform",meta:"scrolling oscilloscope",glyph:"⌇"},{id:"pulse",name:"Pulse Ring",meta:"sonar sweep · target lock",glyph:"◌"},{id:"mono_bars",name:"Mono Bars",meta:"black & white 5-bar meter",glyph:"▥"},{id:"spectrum",name:"Neon Spectrum",meta:"16-band equalizer",glyph:"▦"},{id:"terminal",name:"Retro Terminal",meta:"DOS-blue ASCII meter",glyph:"▸"},{id:"vinyl",name:"Analog VU",meta:"vintage needle meter",glyph:"◔"}],V_=[{id:"top",label:"Top",glyph:"⤒"},{id:"center",label:"Center",glyph:"⊡"},{id:"bottom",label:"Bottom",glyph:"⤓"}],cs=[{id:"vox_cpm_2",name:"VoxCPM2",kind:"neural · 2B autoregressive",quality:.98,speed:.25,mb:2950,note:"2B autoregressive diffusion. SOTA voice realism & cloning. Runs via audio.cpp, best on a Vulkan GPU."},{id:"breeze_tts_2",name:"Breeze-TTS-2",kind:"neural · expressive",quality:.96,speed:.32,mb:5080,note:"Most natural prosody. Runs via audio.cpp, best on a Vulkan GPU or fast CPU.",nonCommercial:!0,licenceUrl:"huggingface.co/BreezeBlue/Breeze-TTS-2"},{id:"pocket_tts",name:"Pocket TTS",kind:"neural · voice cloning",quality:.86,speed:.55,mb:130,note:"Cloned voices, downloaded in-app. Runs via audio.cpp with optional Vulkan acceleration."},{id:"piper",name:"Piper TTS",kind:"onnx · ~11 voices",quality:.72,speed:.8,mb:60,note:"The sweet spot for most machines. Per-voice ~60 MB."},{id:"inflect_micro",name:"Inflect Micro",kind:"compact neural",quality:.55,speed:.92,mb:38,note:"Tiny footprint, still human-ish. Good for laptops."},{id:"espeak",name:"eSpeak-NG",kind:"formant synth",quality:.3,speed:.99,mb:0,note:"Instant, robotic, runs anywhere. Zero download."}],ds=["Welcome","Engine","Hotkey","Overlay","Test","Voice","Done"];function Tn(s){return s<=0?"none":s>=1e3?`${(s/1e3).toFixed(1)} GB`:`${Math.round(s)} MB`}function F_(s,a=cs){const t=Math.max(0,...a.map(r=>r.mb));return t<=0||s<=0?0:Math.min(100,s/t*100)}function Fi(s){return`${Math.round(s*100)}%`}function B_(s){return s>.85?"instant":s>.6?"< 1 s":s>.35?"1–3 s":"3–8 s"}function q_(s){return s>.9?"instant":s>.7?"< 0.5 s":s>.5?"~1 s":"2–4 s"}function Ai(s,a){return Array.from({length:s},(t,r)=>{const l=(r+1)/s;return{h:Math.max(8,Math.round(100*a*(.55+.45*Math.sin(r*1.7+a*5)))),o:l<=a?1:.18}})}function Ho(s){return Array.from({length:s},(a,t)=>({d:(.6+t*7%5*.12).toFixed(2),dl:(t*.07).toFixed(2)}))}const j_={KEY_LEFTCTRL:"Ctrl",KEY_RIGHTCTRL:"Ctrl",KEY_LEFTALT:"Alt",KEY_RIGHTALT:"Alt",KEY_LEFTSHIFT:"Shift",KEY_RIGHTSHIFT:"Shift",KEY_LEFTMETA:"Super",KEY_RIGHTMETA:"Super",KEY_SPACE:"Space",KEY_ESC:"Esc",KEY_ENTER:"Enter",KEY_TAB:"Tab",KEY_BACKSPACE:"Backspace",KEY_DELETE:"Delete"};function dl(s){var a;return(a=j_[s])!=null?a:s.replace(/^KEY_/,"")}const yr="default_hold",$n="command",U_="Command";function W_(s){return{...s,id:$n,label:U_,delivery:"command",command:null}}var li,oi,ci,di,vi,ui,pi,fi,hi,_i,gi;class H_{constructor(){lt(this,li,S(0));lt(this,oi,S(0));lt(this,ci,S(!1));lt(this,di,S("hold"));lt(this,vi,S(null));lt(this,ui,S(!1));lt(this,pi,S(yt([])));lt(this,fi,S(null));lt(this,hi,S(yt([])));lt(this,_i,S(!1));lt(this,gi,S(!1))}get step(){return e(F(this,li))}set step(a){o(F(this,li),a,!0)}get visited(){return e(F(this,oi))}set visited(a){o(F(this,oi),a,!0)}get leaving(){return e(F(this,ci))}set leaving(a){o(F(this,ci),a,!0)}get gesture(){return e(F(this,di))}set gesture(a){o(F(this,di),a,!0)}get combo(){return e(F(this,vi))}set combo(a){o(F(this,vi),a,!0)}get recording(){return e(F(this,ui))}set recording(a){o(F(this,ui),a,!0)}get held(){return e(F(this,pi))}set held(a){o(F(this,pi),a,!0)}get captureHint(){return e(F(this,fi))}set captureHint(a){o(F(this,fi),a,!0)}get issues(){return e(F(this,hi))}set issues(a){o(F(this,hi),a,!0)}get engineChosen(){return e(F(this,_i))}set engineChosen(a){o(F(this,_i),a,!0)}get modelChosen(){return e(F(this,gi))}set modelChosen(a){o(F(this,gi),a,!0)}get gestureInfo(){var a;return(a=xn.find(t=>t.id===this.gesture))!=null?a:xn[2]}get displayKeys(){var a;return this.recording?this.held:(a=this.combo)!=null?a:[]}recordIssue(a){this.issues=[...this.issues.filter(t=>t.id!==a.id),a]}clearIssue(a){this.issues=this.issues.filter(t=>t.id!==a)}goTo(a){a===this.step||this.leaving||a<0||a>=ds.length||(this.leaving=!0,this.recording=!1,setTimeout(()=>{this.step=a,this.visited=Math.max(this.visited,a),this.leaving=!1},200))}async ensureCommandTarget(){var l;const a=await C("get_targets");if(a.some(c=>c.id===$n&&c.delivery==="command"))return $n;const t=(l=a.find(c=>c.delivery==="inject"))!=null?l:a[0];if(!t)return"default";const r=[...a.filter(c=>c.id!==$n),W_(t)];return await C("save_targets",{targets:r}),$n}async saveBinding(){if(!this.combo||this.combo.length===0)return;const a=await this.ensureCommandTarget(),t=await C("get_bindings").catch(()=>[]),r=this.gestureInfo,l={id:yr,label:`Dictate (${r.name})`,keys:[...this.combo],gesture:this.gesture,target_id:a,target_ids:[a],tap_ms:300,hold_threshold_ms:200,disabled:!1,openai_enabled:!1,openai_model:"",openai_mode:"custom",openai_prompt:"",openai_system_prompt:""},c=t.filter(u=>u.id!==yr&&u.id!=="default_toggle"&&u.id!=="__tts_stop__");await C("save_bindings",{bindings:[l,...c]})}async loadBinding(){var a;try{const t=await C("get_bindings"),r=(a=t.find(l=>l.id===yr))!=null?a:t.find(l=>l.id!=="__tts_stop__");r&&r.keys.length>0&&(this.combo=[...r.keys],xn.some(l=>l.id===r.gesture)&&(this.gesture=r.gesture))}catch(t){console.error("Wizard: failed to read existing bindings:",t)}}reset(){this.step=0,this.visited=0,this.leaving=!1,this.gesture="hold",this.combo=null,this.recording=!1,this.held=[],this.captureHint=null,this.issues=[],this.engineChosen=!1,this.modelChosen=!1}}li=new WeakMap,oi=new WeakMap,ci=new WeakMap,di=new WeakMap,vi=new WeakMap,ui=new WeakMap,pi=new WeakMap,fi=new WeakMap,hi=new WeakMap,_i=new WeakMap,gi=new WeakMap;const Ne=new H_;function fs(s){const a={...bn(Ot)};s(a),Ot.set(a)}var $_=p('
          '),G_=p(`
          VoxCtrl
          // welcome

          Speak to anything on your machine.

          A few minutes of setup. Pick a transcription engine, bind a hotkey, choose how VoxCtrl shows + itself, and test it end to end. Everything runs on this device — nothing leaves it.

          ↺ Nothing is permanent — every choice can be changed later in Settings.
          `);function K_(s){const a=[{glyph:"∇",n:"01",title:"Transcription engine",desc:"whisper.cpp or Moonshine, sized to your hardware."},{glyph:"⌁",n:"02",title:"Hotkey",desc:"A gesture and a key combo to start talking."},{glyph:"⌬",n:"03",title:"Overlay",desc:"A visual signal while the mic is live — or none."},{glyph:"◉",n:"04",title:"Live test",desc:"Dictate into a box and watch it land."},{glyph:"⊕",n:"05",title:"Voice output",desc:"Optional: let agents talk back through your speakers."}];var t=G_(),r=n(t),l=n(r),c=i(n(l),4),u=i(r,2);pt(u,5,()=>a,ft,(v,f)=>{var _=$_(),b=n(_),m=n(b),h=n(m),x=i(m,2),M=n(x),q=i(b,2),T=n(q),z=i(q,2),se=n(z);w(()=>{y(h,e(f).glyph),y(M,e(f).n),y(T,e(f).title),y(se,e(f).desc)}),d(v,_)}),w(()=>mt(c,"src",nr)),d(s,t)}var Y_=p(''),J_=p('
          Discovered models from server:
          '),X_=p("
          "),Z_=p('✔ Tested & verified successfully'),Q_=p('⚠️ Test connection required to proceed'),eg=p(``);function tg(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",r),[r,l]=Ca();let c=Et(a,"isOpen",15,!1),u=S(""),v=S(""),f=S("whisper-1"),_=S(""),b=S(30),m=S(!1),h=S(null),x=S(yt([])),M=S(!1),q=!1;pa(()=>{c()&&!q&&Ts(()=>{var R;const I=t().engine.remote_openai;o(u,(I==null?void 0:I.endpoint)||"http://localhost:8000/v1",!0),o(v,(I==null?void 0:I.api_key)||"",!0),o(f,(I==null?void 0:I.model)||"whisper-1",!0),o(_,(I==null?void 0:I.language)||"",!0),o(b,(R=I==null?void 0:I.timeout_secs)!=null?R:30,!0),o(h,null)}),q=c()});function T(){fs(I=>{I.engine.remote_openai?(I.engine.remote_openai.endpoint=e(u).trim()||"http://localhost:8000/v1",I.engine.remote_openai.api_key=e(v).trim()?e(v).trim():null,I.engine.remote_openai.model=e(f).trim()||"whisper-1",I.engine.remote_openai.language=e(_).trim(),I.engine.remote_openai.timeout_secs=Number(e(b))||30):I.engine.remote_openai={endpoint:e(u).trim()||"http://localhost:8000/v1",api_key:e(v).trim()?e(v).trim():null,model:e(f).trim()||"whisper-1",language:e(_).trim(),timeout_secs:Number(e(b))||30}})}async function z(){var I;if(!e(m)){T(),o(m,!0),o(h,null);try{const R=await C("test_remote_stt",{endpoint:e(u).trim()||"http://localhost:8000/v1",apiKey:e(v).trim()?e(v).trim():null,model:e(f).trim()||"whisper-1",timeoutSecs:Number(e(b))||30});o(h,{success:R.success,message:R.message},!0),R.models&&R.models.length>0&&(o(x,R.models,!0),e(f)||(o(f,R.models[0],!0),T())),R.success&&(o(M,!0),T(),(I=a.onSuccess)==null||I.call(a))}catch(R){o(h,{success:!1,message:R.toString()},!0)}finally{o(m,!1)}}}function se(){T(),c(!1)}function ne(I){I.key==="Escape"&&se()}var fe=xi();xs("keydown",Or,ne);var Q=_t(fe);{var D=I=>{var R=eg(),ge=n(R),ee=n(ge),j=i(n(ee),2),V=i(ee,2),oe=i(n(V),2),L=n(oe),B=i(n(L),2),be=i(L,4),Pe=i(n(be),2),ue=i(be,4),W=i(n(ue),2),J=i(ue,2);{var Se=pe=>{var De=J_(),Ge=i(n(De),2);pt(Ge,21,()=>e(x),ft,(st,it)=>{var H=Y_();let A;var E=n(H);w(()=>{A=Te(H,1,"tag-btn svelte-1c9i6zy",null,A,{active:e(f)===e(it)}),y(E,e(it))}),N("click",H,()=>{o(f,e(it),!0),T()}),d(st,H)}),d(pe,De)};k(J,pe=>{e(x).length>0&&pe(Se)})}var ze=i(J,2),le=i(n(ze),2),$=i(ze,4),ae=i(n($),2),O=i($,2),X=n(O),ve=n(X);{var Me=pe=>{var De=Be("⏳ Testing Connection...");d(pe,De)},Fe=pe=>{var De=Be("🧪 Test Connection");d(pe,De)};k(ve,pe=>{e(m)?pe(Me):pe(Fe,-1)})}var _e=i(X,2);{var re=pe=>{var De=X_();let Ge;var st=n(De);{var it=A=>{var E=Be();w(()=>{var ke;return y(E,`✔ ${(ke=e(h).message)!=null?ke:""}`)}),d(A,E)},H=A=>{var E=Be();w(()=>{var ke;return y(E,`⚠️ ${(ke=e(h).message)!=null?ke:""}`)}),d(A,E)};k(st,A=>{e(h).success?A(it):A(H,-1)})}w(()=>Ge=Te(De,1,"status-pill svelte-1c9i6zy",null,Ge,{success:e(h).success,error:!e(h).success})),d(pe,De)};k(_e,pe=>{e(h)&&pe(re)})}var we=i(V,2),Je=n(we),de=n(Je);{var G=pe=>{var De=Z_();d(pe,De)},U=pe=>{var De=Q_();d(pe,De)};k(de,pe=>{e(M)?pe(G):pe(U,-1)})}var te=i(Je,2),Y=n(te),he=i(Y,2),me=n(he);w(()=>{X.disabled=e(m),y(me,e(M)?"Done":"Save & Close")}),N("click",R,pe=>{pe.target===pe.currentTarget&&se()}),N("keydown",R,pe=>{pe.key==="Escape"&&se()}),N("click",j,se),N("change",B,T),$e(B,()=>e(u),pe=>o(u,pe)),N("change",Pe,T),$e(Pe,()=>e(v),pe=>o(v,pe)),N("change",W,T),$e(W,()=>e(f),pe=>o(f,pe)),N("change",le,T),$e(le,()=>e(_),pe=>o(_,pe)),N("change",ae,T),$e(ae,()=>e(b),pe=>o(b,pe)),N("click",X,z),N("click",Y,se),N("click",he,se),d(I,R)};k(Q,I=>{c()&&I(D)})}d(s,fe),St(),l()}Qt(["click","keydown","change"]);var ag=p(`
          This build was compiled without the Moonshine backend — choosing it runs whisper.cpp + with the model above instead.
          `),sg=p(`
          This build was compiled without the Parakeet backend — choosing it runs whisper.cpp + with the model above instead.
          `),ng=p('
          '),ig=p('
          server configuration
          URL
          Model
          Status
          ',1),rg=p(''),lg=p('
          '),og=p('
          model size
          ',1),cg=p('
          '),dg=p('
          '),vg=p('
          ✓
          ◌ quiet room
          ≋ noisy room
          '),ug=p(' '),pg=p(' '),fg=p(' Checking local models…'),hg=p(' '),_g=p('⚠️ Test connection required before continuing'),gg=p(' '),mg=p('◇ Pick an engine and a model size — they download before the next step'),bg=p(' '),yg=p(`
          // 01 · transcription engine

          Which ears should VoxCtrl use?

          Choose between on-device engines (whisper.cpp, Moonshine, Parakeet TDT) or connect to a Remote Speech Engine over your network. + Pick a model size inside each card or configure your remote endpoint to get started.

          `);function wg(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",r),[r,l]=Ca(),c=1;let u=S(!0),v=S(!0),f=S(null),_=S(yt({})),b=S(yt({})),m=S(yt({})),h=S(null),x=S(null),M=S(!1),q=S(!1),T=S(!1);const z=ce(()=>t().engine.backend==="remote-openai"?"remote-openai":t().engine.backend==="parakeet"?"parakeet":t().engine.backend==="moonshine"?"moonshine":"whisper-cpp"),se={cuda:"CUDA",vulkan:"Vulkan",coreml:"CoreML"},ne=ce(()=>!!e(f)&&t().engine.whisper_cpp.device!=="cpu"),fe=ce(()=>{var H;return e(f)?(H=se[e(f)])!=null?H:e(f):""}),Q=ce(()=>{var H;return e(z)==="remote-openai"?((H=t().engine.remote_openai)==null?void 0:H.model)||"whisper-1":e(z)==="parakeet"&&e(v)?t().engine.parakeet.model_size:e(z)==="moonshine"&&e(u)?t().engine.moonshine.model_size:t().engine.whisper_cpp.model_size}),D=ce(()=>e(z)==="remote-openai"?e(T):e(z)==="parakeet"&&e(v)?!!e(m)[e(Q)]:e(z)==="moonshine"&&e(u)?!!e(b)[e(Q)]:!!e(_)[e(Q)]);function I(H,A){var E;return H!==e(z)?!1:A.id===(H==="remote-openai"?((E=t().engine.remote_openai)==null?void 0:E.model)||"whisper-1":H==="parakeet"?t().engine.parakeet.model_size:H==="moonshine"?t().engine.moonshine.model_size:t().engine.whisper_cpp.model_size)}function R(H,A){return H==="remote-openai"?e(T):H==="parakeet"?!!e(m)[A.id]:H==="moonshine"?!!e(b)[A.id]:!!e(_)[A.id]}function ge(H){fs(A=>{A.engine.backend=H,H==="remote-openai"&&!A.engine.remote_openai&&(A.engine.remote_openai={endpoint:"http://localhost:8000/v1",api_key:null,model:"whisper-1",language:"",timeout_secs:30})}),Ne.engineChosen=!0,H==="remote-openai"&&(Ne.modelChosen=!0,o(q,!0))}function ee(H,A){fs(E=>{E.engine.backend=H,H==="parakeet"?E.engine.parakeet.model_size=A.id:H==="moonshine"?E.engine.moonshine.model_size=A.id:H==="remote-openai"?E.engine.remote_openai?E.engine.remote_openai.model=A.id:E.engine.remote_openai={endpoint:"http://localhost:8000/v1",api_key:null,model:A.id,language:"",timeout_secs:30}:E.engine.whisper_cpp.model_size=A.id}),o(x,null),Ne.engineChosen=!0,Ne.modelChosen=!0}function j(){e(f)&&fs(H=>{H.engine.whisper_cpp.device=e(ne)?"cpu":"auto"})}async function V(){const H=t().engine.whisper_cpp.model_dir,A={};for(const E of Mi[0].models)try{A[E.id]=await C("check_model_downloaded",{modelSize:E.id,modelDir:H})}catch(ke){console.error("Wizard: whisper model check failed for",E.id,ke),A[E.id]=!1}o(_,A,!0)}async function oe(){const H={},A=Mi.find(E=>E.id==="moonshine");if(A)for(const E of A.models)try{H[E.id]=await C("check_moonshine_downloaded",{modelSize:E.id})}catch(ke){console.error("Wizard: moonshine model check failed for",E.id,ke),H[E.id]=!1}o(b,H,!0)}async function L(){const H={},A=Mi.find(E=>E.id==="parakeet");if(A)for(const E of A.models)try{H[E.id]=await C("check_parakeet_downloaded",{modelSize:E.id})}catch(ke){console.error("Wizard: parakeet model check failed for",E.id,ke),H[E.id]=!1}o(m,H,!0)}async function B(){if(e(z)==="remote-openai")return e(T)?!0:(a.setBlocker(c,"Test the remote connection successfully to continue."),o(q,!0),!1);if(e(D))return!0;const H=e(z),A=e(Q);o(h,A,!0),o(x,null);try{return H==="parakeet"&&e(v)?(await C("download_parakeet_model",{modelSize:A}),o(m,{...e(m),[A]:!0},!0)):H==="moonshine"&&e(u)?(await C("download_moonshine_model",{modelSize:A}),o(b,{...e(b),[A]:!0},!0)):(await C("download_model",{modelSize:A,modelDir:t().engine.whisper_cpp.model_dir}),o(_,{...e(_),[A]:!0},!0)),Ne.clearIssue("model-download"),!0}catch(E){return o(x,`${E}`),Ne.recordIssue({id:"model-download",step:c,title:`Speech model "${A}" could not be downloaded — dictation will produce no text.`,detail:`engine=${H} model=${A} model_dir=${t().engine.whisper_cpp.model_dir||"(default)"} +${E}`}),!1}finally{o(h,null)}}pa(()=>{e(h)?a.setBlocker(c,`Downloading ${e(h)}…`):e(M)?e(z)==="remote-openai"&&!e(T)?a.setBlocker(c,"Test the remote connection successfully to continue."):e(D)?a.setBlocker(c,null):Ne.engineChosen?Ne.modelChosen?a.setBlocker(c,null):a.setBlocker(c,"Choose a model size to continue."):a.setBlocker(c,"Choose a transcription engine to continue."):a.setBlocker(c,"Checking which models are already on disk…")});async function be(){o(M,!1),await Promise.all([V(),oe(),L()]),o(M,!0)}qt(()=>(a.registerGate(c,B),C("moonshine_available").then(H=>o(u,H,!0)).catch(()=>o(u,!1)),C("parakeet_available").then(H=>o(v,H,!0)).catch(()=>o(v,!1)),C("accelerator_support").then(H=>{var A;return o(f,(A=H==null?void 0:H.whisper_gpu)!=null?A:null,!0)}).catch(()=>o(f,null)),be(),()=>{a.registerGate(c,null),a.setBlocker(c,null)}));function Pe(H){var Ye,Ze;if(H.id==="remote-openai")return{model:{id:((Ye=t().engine.remote_openai)==null?void 0:Ye.model)||"whisper-1",mb:0,speed:.95,accuracy:.95},rows:[{label:"speed",pct:95,value:"network",color:"var(--vx-cyan-0)",dim:!1},{label:"accuracy",pct:95,value:"server",color:"var(--vx-cyan-2)",dim:!1},{label:"RAM",pct:2,value:"offloaded",color:"var(--vx-gold-1)",dim:!1},{label:"VRAM",pct:0,value:"0 MB",color:"var(--vx-gold-0)",dim:!0}],quiet:Ai(12,.95),noisy:Ai(12,.92),quietPct:"server",noisyPct:"server"};const A=H.id==="parakeet"?t().engine.parakeet.model_size:H.id==="moonshine"?t().engine.moonshine.model_size:t().engine.whisper_cpp.model_size,E=(Ze=H.models.find(Ve=>Ve.id===A))!=null?Ze:H.models[0],ke=H.gpu&&e(ne),We=Math.min(1,E.speed+(ke?.3:0)),ye=ke?E.mb*.3:E.mb,Ie=ke?E.mb*1.1:0;return{model:E,rows:[{label:"speed",pct:Math.round(We*100),value:B_(We),color:"var(--vx-cyan-0)",dim:!1},{label:"accuracy",pct:Math.round(E.accuracy*100),value:Fi(E.accuracy),color:"var(--vx-cyan-2)",dim:!1},{label:"RAM",pct:Math.max(2,Math.min(100,Math.round(ye/3400*100))),value:Tn(ye),color:"var(--vx-gold-1)",dim:!1},{label:"VRAM",pct:Ie?Math.max(2,Math.min(100,Math.round(Ie/3400*100))):0,value:Ie?Tn(Ie):H.gpu?"off":"cpu only",color:"var(--vx-gold-0)",dim:!Ie}],quiet:Ai(12,E.accuracy),noisy:Ai(12,E.accuracy*H.noiseRetention),quietPct:Fi(E.accuracy),noisyPct:Fi(E.accuracy*H.noiseRetention)}}var ue=yg(),W=n(ue),J=i(n(W),2);let Se;var ze=n(J);let le;var $=i(ze,2),ae=n($),O=i(n(ae),2);let X;var ve=n(O);{var Me=H=>{var A=Be("UNAVAILABLE · CPU BUILD");d(H,A)},Fe=H=>{var A=Be();w(()=>{var E;return y(A,`ON · ${(E=e(fe))!=null?E:""}`)}),d(H,A)},_e=H=>{var A=Be("OFF · CPU");d(H,A)};k(ve,H=>{e(f)?e(ne)?H(Fe,1):H(_e,-1):H(Me)})}var re=i(ae,2),we=n(re);{var Je=H=>{var A=Be(`Moves whisper.cpp weights from RAM to your GPU: faster, less RAM, uses VRAM. Moonshine is + CPU-native and unaffected.`);d(H,A)},de=H=>{var A=Be(`This build has no GPU backend compiled in, so both engines run on the CPU. The Vulkan + download accelerates whisper.cpp; Moonshine is CPU-native either way.`);d(H,A)};k(we,H=>{e(f)?H(Je):H(de,-1)})}var G=i(W,2);pt(G,21,()=>Mi,ft,(H,A)=>{const E=ce(()=>Pe(e(A))),ke=ce(()=>e(z)===e(A).id);var We=vg();let ye;var Ie=i(n(We),2),Ye=n(Ie),Ze=n(Ye),Ve=n(Ze),at=i(Ze,2),et=n(at),rt=i(Ye,2),Ce=n(rt),Ke=i(rt,2);{var ct=g=>{var P=ag();d(g,P)},vt=g=>{var P=sg();d(g,P)};k(Ke,g=>{e(A).id==="moonshine"&&!e(u)?g(ct):e(A).id==="parakeet"&&!e(v)&&g(vt,1)})}var nt=i(Ie,2),wt=n(nt);{var dt=g=>{var P=ig(),Ae=i(_t(P),2),Ue=n(Ae),ie=i(n(Ue),2),xe=n(ie),Ee=i(Ue,2),He=i(n(Ee),2),Xe=n(He),zt=i(Ee,2),Dt=i(n(zt),2);let Ft;var $t=n(Dt);{var Gt=ut=>{var Mt=Be("✔ Verified");d(ut,Mt)},fa=ut=>{var Mt=Be("⚠️ Untested");d(ut,Mt)};k($t,ut=>{e(T)?ut(Gt):ut(fa,-1)})}var Yt=i(Ae,2),ma=n(Yt);let Oa;var Ya=n(ma);{var tt=ut=>{var Mt=Be("⚙ Configure Server");d(ut,Mt)},gt=ut=>{var Mt=Be("⚡ Setup & Test");d(ut,Mt)};k(Ya,ut=>{e(T)?ut(tt):ut(gt,-1)})}var It=i(Yt,2);pt(It,21,()=>e(E).rows,ft,(ut,Mt)=>{var jt=ng();let wa;var oa=n(jt),Ra=n(oa),ja=n(Ra),Z=i(Ra),Re=n(Z),je=i(oa,2),Le=n(je);let Qe;w(()=>{var Jt;wa=Te(jt,1,"metric svelte-xv54mf",null,wa,{dim:e(Mt).dim}),y(ja,e(Mt).label),y(Re,e(Mt).value),Qe=na(Le,"",Qe,{width:`${(Jt=e(Mt).pct)!=null?Jt:""}%`,background:e(Mt).color})}),d(ut,jt)}),w(()=>{var ut,Mt,jt;mt(ie,"title",((ut=t().engine.remote_openai)==null?void 0:ut.endpoint)||"http://localhost:8000/v1"),y(xe,((Mt=t().engine.remote_openai)==null?void 0:Mt.endpoint)||"http://localhost:8000/v1"),y(Xe,((jt=t().engine.remote_openai)==null?void 0:jt.model)||"whisper-1"),Ft=Te(Dt,1,"remote-v svelte-xv54mf",null,Ft,{"remote-v-ok":e(T),"remote-v-warn":!e(T)}),Oa=Te(ma,1,"vx-btn vx-btn-sm remote-cfg-btn svelte-xv54mf",null,Oa,{"vx-primary":!e(T)})}),N("click",ma,ut=>{ut.stopPropagation(),ge("remote-openai"),o(q,!0)}),d(g,P)},Ct=g=>{var P=og(),Ae=i(_t(P),2);pt(Ae,21,()=>e(A).models,ft,(ie,xe)=>{var Ee=rg();let He;var Xe=n(Ee),zt=n(Xe),Dt=i(Xe,2),Ft=n(Dt);w(($t,Gt,fa)=>{He=Te(Ee,1,"size svelte-xv54mf",null,He,$t),y(zt,e(xe).id),y(Ft,`${Gt!=null?Gt:""}${fa!=null?fa:""}`)},[()=>({on:I(e(A).id,e(xe))}),()=>Tn(e(xe).mb),()=>R(e(A).id,e(xe))?" ✔":""]),N("click",Ee,$t=>{$t.stopPropagation(),ee(e(A).id,e(xe))}),d(ie,Ee)});var Ue=i(Ae,2);pt(Ue,21,()=>e(E).rows,ft,(ie,xe)=>{var Ee=lg();let He;var Xe=n(Ee),zt=n(Xe),Dt=n(zt),Ft=i(zt),$t=n(Ft),Gt=i(Xe,2),fa=n(Gt);let Yt;w(()=>{var ma;He=Te(Ee,1,"metric svelte-xv54mf",null,He,{dim:e(xe).dim}),y(Dt,e(xe).label),y($t,e(xe).value),Yt=na(fa,"",Yt,{width:`${(ma=e(xe).pct)!=null?ma:""}%`,background:e(xe).color})}),d(ie,Ee)}),d(g,P)};k(wt,g=>{e(A).id==="remote-openai"?g(dt):g(Ct,-1)})}var Wt=i(nt,2),ia=n(Wt),ra=n(ia),bt=i(n(ra)),ea=n(bt),Rt=i(ra,2);pt(Rt,21,()=>e(E).quiet,ft,(g,P)=>{var Ae=cg();let Ue;w(()=>{var ie;return Ue=na(Ae,"",Ue,{height:`${(ie=e(P).h)!=null?ie:""}%`,opacity:e(P).o})}),d(g,Ae)});var Ht=i(ia,2),ta=n(Ht),Oe=i(n(ta)),qe=n(Oe),K=i(ta,2);pt(K,21,()=>e(E).noisy,ft,(g,P)=>{var Ae=dg();let Ue;w(()=>{var ie;return Ue=na(Ae,"",Ue,{height:`${(ie=e(P).h)!=null?ie:""}%`,opacity:e(P).o})}),d(g,Ae)}),w(()=>{ye=Te(We,1,"vx-card engine-card svelte-xv54mf",null,ye,{"vx-on":e(ke)}),mt(We,"aria-checked",e(ke)),y(Ve,e(A).glyph),y(et,e(A).name),y(Ce,e(A).tagline),y(ea,e(E).quietPct),y(qe,e(E).noisyPct)}),N("click",We,()=>{ge(e(A).id),e(A).id==="remote-openai"&&o(q,!0)}),N("keydown",We,g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),ge(e(A).id),e(A).id==="remote-openai"&&o(q,!0))}),d(H,We)});var U=i(G,2),te=n(U);{var Y=H=>{var A=ug(),E=i(n(A));w(()=>{var ke;return y(E,` Downloading ${(ke=e(h))!=null?ke:""} — this can take a few minutes`)}),d(H,A)},he=H=>{var A=pg(),E=n(A);w(()=>{var ke;return y(E,`✕ Download failed: ${(ke=e(x))!=null?ke:""}`)}),d(H,A)},me=H=>{var A=fg();d(H,A)},pe=H=>{var A=xi(),E=_t(A);{var ke=ye=>{var Ie=hg(),Ye=n(Ie);w(()=>{var Ze;return y(Ye,`✓ Remote engine connected (${(Ze=e(Q))!=null?Ze:""})`)}),d(ye,Ie)},We=ye=>{var Ie=_g();d(ye,Ie)};k(E,ye=>{e(T)?ye(ke):ye(We,-1)})}d(H,A)},De=H=>{var A=gg(),E=n(A);w(()=>{var ke;return y(E,`✓ ${(ke=e(Q))!=null?ke:""} is on disk and ready`)}),d(H,A)},Ge=H=>{var A=mg();d(H,A)},st=H=>{var A=bg(),E=n(A);w(()=>{var ke;return y(E,`↓ ${(ke=e(Q))!=null?ke:""} will download when you continue`)}),d(H,A)};k(te,H=>{e(h)?H(Y):e(x)?H(he,1):e(M)?e(z)==="remote-openai"?H(pe,3):e(D)?H(De,4):!Ne.engineChosen||!Ne.modelChosen?H(Ge,5):H(st,-1):H(me,2)})}var it=i(U,2);tg(it,{onSuccess:()=>{o(T,!0)},get isOpen(){return e(q)},set isOpen(H){o(q,H,!0)}}),w(()=>{Se=Te(J,1,"vx-card gpu-toggle svelte-xv54mf",null,Se,{"vx-on":e(ne)}),J.disabled=!e(f),le=Te(ze,1,"switch svelte-xv54mf",null,le,{on:e(ne)}),X=Te(O,1,"state svelte-xv54mf",null,X,{on:e(ne)})}),N("click",J,j),d(s,ue),St(),l()}Qt(["click","keydown"]);var kg=p("
          "),xg=p("
          "),Tg=p(''),Sg=p('
          '),Cg=p('
          '),Eg=p('+'),Mg=p("
          ",1),Ag=p('
          '),Pg=p(' Asking…',1),zg=p('
          '),Dg=p('
          '),Ig=p(`
          // 02 · first key binding

          How do you want to start talking?

          Pick a gesture, then record the keys. Taps keep your hands free while speaking; holds can't be + left running by accident. Double-taps avoid clashes with shortcuts you already use.

          `);function Og(s,a){Tt(a,!0);const t=2;let r=S(null),l=S(!1),c=S(null);const u=ce(()=>{var $,ae;return(ae=($=e(r))==null?void 0:$.supported_gestures)!=null&&ae.length?xn.filter(O=>e(r).supported_gestures.includes(O.id)):xn}),v=ce(()=>xn.length-e(u).length),f=ce(()=>{var $;return(($=e(r))==null?void 0:$.is_active)===!0}),_=ce(()=>!!Ne.combo&&Ne.combo.length>0&&e(r)!==null&&!e(r).is_active),b=ce(()=>Ne.recording&&Vr(Ne.held)?"Keep holding and add a regular key — modifiers alone cannot be a shortcut.":null);async function m(){try{o(r,await C("check_hotkey_status"),!0),e(r).is_active&&Ne.clearIssue("shortcut-register")}catch($){console.error("Wizard: failed to read hotkey status:",$)}}function h(){Ne.recording=!0,Ne.held=[],Ne.captureHint=null,C("set_hotkeys_inhibited",{inhibited:!0}).catch(()=>{})}function x(){Ne.recording=!1,Ne.held=[],C("set_hotkeys_inhibited",{inhibited:!1}).catch(()=>{})}async function M($){var O;if($.length===0)return;let ae;try{ae=await C("check_hotkey_keys",{keys:$})}catch(X){console.error("Wizard: hotkey validation failed:",X),Ne.combo=[...$];return}ae.accepted?(Ne.combo=[...$],Ne.captureHint=null,await z()):Ne.captureHint=(O=ae.message)!=null?O:"This key combination cannot be used as a shortcut. Try another."}function q($){if(!Ne.recording)return;$.preventDefault(),$.stopPropagation();const ae=il($.key,$.code);if($.key==="Escape"&&Ne.held.length===0){x();return}Ne.held.includes(ae)||(Ne.held=[...Ne.held,ae])}function T($){if(!Ne.recording)return;$.preventDefault(),$.stopPropagation();const ae=[...Ne.held];x(),M(ae)}async function z(){var $;try{await Ne.saveBinding()}catch(ae){console.error("Wizard: failed to save binding:",ae),o(c,`Could not save the binding: ${ae}`),Ne.recordIssue({id:"binding-save",step:t,title:"The hotkey binding could not be written — no shortcut will start dictation.",detail:`keys=${(($=Ne.combo)!=null?$:[]).join("+")} gesture=${Ne.gesture} +${ae}`});return}Ne.clearIssue("binding-save"),await m()}async function se(){var $,ae,O,X,ve,Me;o(l,!0),o(c,null);try{o(r,await C("approve_shortcuts"),!0)}catch(Fe){o(c,`${Fe}`),Ne.recordIssue({id:"shortcut-register",step:t,title:"Your desktop refused to register the global shortcut.",detail:`backend=${(ae=($=e(r))==null?void 0:$.backend)!=null?ae:"unknown"} portal_refused=${(X=(O=e(r))==null?void 0:O.portal_refused)!=null?X:"?"} +portal_error=${(Me=(ve=e(r))==null?void 0:ve.portal_error)!=null?Me:"(none)"} +${Fe}`}),await m()}finally{o(l,!1)}}async function ne(){try{await C("open_shortcut_settings")}catch($){o(c,`${$}`)}}pa(()=>{let $=null;Ne.recording?$="Press the keys you want to use.":!Ne.combo||Ne.combo.length===0?$="Record a key combination first.":e(_)&&($="Register the shortcut with your desktop to continue."),a.setBlocker(t,$)}),pa(()=>{const $=e(u);$.length>0&&!$.some(ae=>ae.id===Ne.gesture)&&(Ne.gesture=$[0].id)}),qt(()=>{a.registerGate(t,async()=>{var O;return await z(),((O=e(r))==null?void 0:O.is_active)!==!1}),Ne.loadBinding(),m();const $=_a("setup-status-changed",()=>void m()),ae=setInterval(()=>{Ne.recording||m()},3e3);return window.addEventListener("keydown",q,!0),window.addEventListener("keyup",T,!0),()=>{clearInterval(ae),$.then(O=>O()).catch(()=>{}),window.removeEventListener("keydown",q,!0),window.removeEventListener("keyup",T,!0),Ne.recording&&x(),a.registerGate(t,null),a.setBlocker(t,null)}});const fe=ce(()=>{var $,ae,O,X;return Ne.recording?{label:"listening for keys",hint:(ae=($=Ne.captureHint)!=null?$:e(b))!=null?ae:"Hold one or more modifiers, then press a key. Esc to cancel.",tone:"rec"}:Ne.combo&&Ne.combo.length>0?{label:"binding captured",hint:(O=Ne.captureHint)!=null?O:"Click anywhere in this area to record a different combination.",tone:"done"}:{label:"click to record",hint:(X=Ne.captureHint)!=null?X:"Needs at least one modifier (Ctrl, Alt, Shift or Super) plus a regular key — e.g. Super + Space.",tone:"idle"}});var Q=Ig(),D=i(n(Q),2),I=n(D),R=n(I);pt(R,17,()=>e(u),ft,($,ae)=>{const O=ce(()=>Ne.gesture===e(ae).id);var X=Tg();let ve;var Me=n(X),Fe=n(Me),_e=n(Fe),re=i(Fe,2),we=n(re),Je=i(Me,2),de=n(Je),G=i(n(de),2);pt(G,21,()=>e(ae).key,ft,(Y,he)=>{var me=ce(()=>pl(e(he),2));let pe=()=>e(me)[0],De=()=>e(me)[1];var Ge=kg();let st,it;w(()=>{st=Te(Ge,1,"svelte-1fbfhk3",null,st,{on:De()&&e(O),lit:De()}),it=na(Ge,"",it,{flex:pe()})}),d(Y,Ge)});var U=i(de,2),te=i(n(U),2);pt(te,21,()=>e(ae).mic,ft,(Y,he)=>{var me=ce(()=>pl(e(he),2));let pe=()=>e(me)[0],De=()=>e(me)[1];var Ge=xg();let st,it;w(()=>{st=Te(Ge,1,"svelte-1fbfhk3",null,st,{on:De()&&e(O),lit:De()}),it=na(Ge,"",it,{flex:pe()})}),d(Y,Ge)}),w(()=>{ve=Te(X,1,"vx-card gesture svelte-1fbfhk3",null,ve,{"vx-on":e(O)}),y(_e,e(ae).name),y(we,e(ae).desc)}),N("click",X,()=>Ne.gesture=e(ae).id),d($,X)});var ge=i(R,2);{var ee=$=>{var ae=Sg(),O=n(ae);w(()=>{var X;return y(O,`${(X=e(v))!=null?X:""} gesture${e(v)===1?"":"s"} hidden — this desktop's shortcut + backend only tells VoxCtrl that a shortcut fired, so it cannot time a hold.`)}),d($,ae)};k(ge,$=>{e(v)>0&&$(ee)})}var j=i(I,2),V=n(j);let oe;var L=n(V);{var B=$=>{var ae=Cg();d($,ae)};k(L,$=>{Ne.recording&&$(B)})}var be=i(L,2),Pe=i(n(be),1,!0),ue=i(be,2);pt(ue,21,()=>Ne.displayKeys,ft,($,ae,O)=>{var X=Mg(),ve=_t(X);let Me;var Fe=n(ve),_e=i(ve,2);{var re=we=>{var Je=Eg();d(we,Je)};k(_e,we=>{O{Me=Te(ve,1,"vx-keycap",null,Me,{"vx-hot":Ne.recording||e(fe).tone==="done"}),y(Fe,we)},[()=>dl(e(ae))]),d($,X)});var W=i(ue,2);let J;var Se=n(W),ze=i(V,2);{var le=$=>{var ae=Dg();let O;var X=n(ae),ve=n(X),Me=i(X,2),Fe=n(Me),_e=n(Fe),re=i(Fe,2),we=n(re);{var Je=me=>{var pe=Be("The binding is registered system-wide. Continue to choose an overlay.");d(me,pe)},de=me=>{var pe=Be();w(()=>y(pe,e(r).portal_error)),d(me,pe)},G=me=>{var pe=Be(`Wayland desktops ask you to confirm global shortcuts. Click below and approve the + dialog your desktop shows — you come straight back here.`);d(me,pe)};k(we,me=>{var pe;e(f)?me(Je):(pe=e(r))!=null&&pe.portal_error?me(de,1):me(G,-1)})}var U=i(re,2);{var te=me=>{var pe=Ag(),De=n(pe);w(()=>y(De,e(c))),d(me,pe)};k(U,me=>{e(c)&&me(te)})}var Y=i(Me,2);{var he=me=>{var pe=zg(),De=n(pe),Ge=i(De,2),st=n(Ge);{var it=A=>{var E=Pg();d(A,E)},H=A=>{var E=Be("Register →");d(A,E)};k(st,A=>{e(l)?A(it):A(H,-1)})}w(()=>Ge.disabled=e(l)),N("click",De,ne),N("click",Ge,se),d(me,pe)};k(Y,me=>{e(f)||me(he)})}w(()=>{var me,pe;O=Te(ae,1,"sys svelte-1fbfhk3",null,O,{ok:e(f)}),y(ve,e(f)?"✓":"⌬"),y(_e,e(f)?`Shortcuts are live (${(pe=(me=e(r))==null?void 0:me.backend)!=null?pe:"ready"})`:"Your desktop still needs to approve the shortcut")}),d($,ae)};k(ze,$=>{Ne.combo&&Ne.combo.length>0&&$(le)})}w(()=>{oe=Te(V,1,"recorder svelte-1fbfhk3",null,oe,{rec:e(fe).tone==="rec",done:e(fe).tone==="done"}),y(Pe,e(fe).label),J=Te(W,1,"rec-hint svelte-1fbfhk3",null,J,{bad:!!Ne.captureHint}),y(Se,e(fe).hint)}),N("click",V,()=>Ne.recording?x():h()),d(s,Q),St()}Qt(["click"]);const Rg="/assets/blue_wave-DGfyQFFo.webm",Lg="/assets/mono_bars-1wA0h3Fz.webm",Ng="/assets/pulse-Cdnh-rAb.webm",Vg="/assets/spectrum-CLEHMZrI.webm",Fg="/assets/terminal-CvV88uWw.webm",Bg="/assets/vinyl-BG1f8NO1.webm",qg="/assets/voice_card-BZZeHAB9.webm",jg="/assets/waveform-DUI2x_EP.webm",Ug="/assets/blue_wave-OqjJ-fxD.webp",Wg="/assets/mono_bars-CPLx02Ku.webp",Hg="/assets/pulse-ESYJH4j2.webp",$g="/assets/spectrum-DV9agKUG.webp",Gg="/assets/terminal-DhrByqCl.webp",Kg="/assets/vinyl-BfHn3C6g.webp",Yg="/assets/voice_card-QnCU8RiM.webp",Jg="/assets/waveform-B5-owbWT.webp";var Xg=p('
          '),Zg=p('
          '),Qg=Oo(''),em=p('
          '),tm=p('
          '),am=p('
          '),sm=p('
          > listening
          '),nm=p(''),im=p('',2),rm=p("
          ",1);function Il(s,a){Tt(a,!0);let t=Et(a,"seed",3,1),r=Et(a,"showClip",3,!0);const l=Object.assign({"../../assets/overlays/blue_wave.webm":Rg,"../../assets/overlays/mono_bars.webm":Lg,"../../assets/overlays/pulse.webm":Ng,"../../assets/overlays/spectrum.webm":Vg,"../../assets/overlays/terminal.webm":Fg,"../../assets/overlays/vinyl.webm":Bg,"../../assets/overlays/voice_card.webm":qg,"../../assets/overlays/waveform.webm":jg}),c=Object.assign({"../../assets/overlays/blue_wave.webp":Ug,"../../assets/overlays/mono_bars.webp":Wg,"../../assets/overlays/pulse.webp":Hg,"../../assets/overlays/spectrum.webp":$g,"../../assets/overlays/terminal.webp":Gg,"../../assets/overlays/vinyl.webp":Kg,"../../assets/overlays/voice_card.webp":Yg,"../../assets/overlays/waveform.webp":Jg});function u(j,V){var L;const oe=Object.entries(j).find(([B])=>B.endsWith(`/${V}`));return(L=oe==null?void 0:oe[1])!=null?L:null}const v=(()=>{if(typeof document>"u")return!0;const j=document.createElement("video");return j.canPlayType('video/webm; codecs="av01.0.05M.08"')!==""||j.canPlayType("video/webm")!==""})(),f=ce(()=>r()&&v?u(l,`${a.styleId}.webm`):null),_=ce(()=>u(c,`${a.styleId}.webp`));let b=S(!1);pa(()=>{e(f),o(b,!1)});const m=ce(()=>Array.from({length:14},(j,V)=>{const oe=.3+.7*Math.abs(Math.sin(t()*2.3+V*1.3));return{h:Math.round(oe*100),delay:((V*.11+t()*.07)%1.1).toFixed(2),dur:(.9+V*5%4*.15).toFixed(2)}})),h=ce(()=>a.styleId==="pulse"?"ring":a.styleId==="vinyl"?"needle":a.styleId==="terminal"?"terminal":a.styleId==="waveform"||a.styleId==="blue_wave"?"wave":"bars"),x=ce(()=>a.styleId==="mono_bars");var M=rm(),q=_t(M);let T;var z=n(q);{var se=j=>{var V=Zg();pt(V,21,()=>e(m).slice(0,a.styleId==="mono_bars"?5:14),ft,(oe,L)=>{var B=Xg();let be;w(()=>{var Pe,ue,W;return be=na(B,"",be,{height:`${(Pe=e(L).h)!=null?Pe:""}%`,"animation-delay":`${(ue=e(L).delay)!=null?ue:""}s`,"animation-duration":`${(W=e(L).dur)!=null?W:""}s`})}),d(oe,B)}),d(j,V)},ne=j=>{var V=Qg();d(j,V)},fe=j=>{var V=em();d(j,V)},Q=j=>{var V=tm();d(j,V)},D=j=>{var V=sm(),oe=i(n(V),2);pt(oe,21,()=>e(m).slice(0,10),ft,(L,B)=>{var be=am();let Pe;w(()=>{var ue;return Pe=na(be,"",Pe,{"animation-delay":`${(ue=e(B).delay)!=null?ue:""}s`})}),d(L,be)}),d(j,V)};k(z,j=>{e(h)==="bars"?j(se):e(h)==="wave"?j(ne,1):e(h)==="ring"?j(fe,2):e(h)==="needle"?j(Q,3):j(D,-1)})}var I=i(q,2);{var R=j=>{var V=nm();w(()=>mt(V,"src",e(_))),d(j,V)};k(I,j=>{e(_)&&j(R)})}var ge=i(I,2);{var ee=j=>{var V=im();let oe;V.muted=!0,w(()=>{var L;oe=Te(V,1,"clip svelte-y6l73v",null,oe,{ready:e(b)}),mt(V,"src",e(f)),mt(V,"poster",(L=e(_))!=null?L:void 0)}),xs("playing",V,()=>o(b,!0)),xs("error",V,()=>o(b,!1)),d(j,V)};k(ge,j=>{e(f)&&j(ee)})}w(()=>T=Te(q,1,"preview svelte-y6l73v",null,T,{mono:e(x)})),d(s,M),St()}var lm=p(''),om=p(''),cm=p(`
          // 03 · on-screen overlay

          Show a signal while listening?

          The overlay appears the moment your hotkey fires and shows live mic level plus the active + target — so you know VoxCtrl is hearing you, and where the words are going. Turn it off for + a silent setup.

          `);function dm(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",r),[r,l]=Ca(),c=ce(()=>t().ui.show_overlay),u=ce(()=>t().ui.overlay_style),v=ce(()=>t().ui.overlay_position),f=ce(()=>{var ue;return(ue=mn.find(W=>W.id===e(u)))!=null?ue:mn[0]}),_=ce(()=>{var ue;return(ue={top:16,center:46,bottom:76}[e(v)])!=null?ue:46});function b(ue){fs(W=>{W.ui.show_overlay=ue})}function m(ue){fs(W=>{W.ui.overlay_style=ue,W.ui.show_overlay=!0})}function h(ue){fs(W=>{W.ui.overlay_position=ue})}var x=cm(),M=n(x),q=i(n(M),2),T=n(q);let z;var se=i(T,2);let ne;var fe=i(M,2);let Q;var D=n(fe),I=n(D),R=n(I),ge=i(I,2);pt(ge,21,()=>mn,ft,(ue,W,J)=>{var Se=lm();let ze;var le=n(Se),$=n(le);{let Je=ce(()=>e(W).id===e(u));Il($,{seed:J+1,get styleId(){return e(W).id},get showClip(){return e(Je)}})}var ae=i(le,2),O=n(ae),X=n(O),ve=n(X),Me=i(X,2),Fe=n(Me),_e=i(O,2);let re;var we=n(_e);w(()=>{ze=Te(Se,1,"vx-card style-card svelte-ek86vh",null,ze,{"vx-on":e(W).id===e(u)}),y(ve,e(W).name),y(Fe,e(W).meta),re=Te(_e,1,"style-glyph svelte-ek86vh",null,re,{on:e(W).id===e(u)}),y(we,e(W).glyph)}),N("click",Se,()=>m(e(W).id)),d(ue,Se)});var ee=i(D,2),j=n(ee),V=n(j),oe=i(j,2),L=i(n(oe),4);let B;var be=n(L);{let ue=ce(()=>mn.indexOf(e(f))+1);Il(be,{get seed(){return e(ue)},get styleId(){return e(f).id},showClip:!0})}var Pe=i(oe,2);pt(Pe,21,()=>V_,ft,(ue,W)=>{var J=om();let Se;var ze=n(J),le=n(ze),$=i(ze,1,!0);w(()=>{Se=Te(J,1,"pos svelte-ek86vh",null,Se,{on:e(W).id===e(v)}),y(le,e(W).glyph),y($,e(W).label)}),N("click",J,()=>h(e(W).id)),d(ue,J)}),w(()=>{var ue,W,J;z=Te(T,1,"vx-card mode svelte-ek86vh",null,z,{"vx-on":e(c)}),ne=Te(se,1,"vx-card mode svelte-ek86vh",null,ne,{"off-on":!e(c)}),Q=Te(fe,1,"body svelte-ek86vh",null,Q,{muted:!e(c)}),y(R,`style · ${(ue=mn.length)!=null?ue:""} built in`),y(V,`position · ${(W=e(v))!=null?W:""}`),B=na(L,"",B,{top:`${(J=e(_))!=null?J:""}%`})}),N("click",T,()=>b(!0)),N("click",se,()=>b(!1)),d(s,x),St(),l()}Qt(["click"]);var vm=p('+'),um=p('
          ',1),pm=p('
          '),fm=p('
          '),hm=p('
          ✓
          It works.
          '),_m=p(`
          // 04 · live test

          Say something.

          Click into the box, then your binding and speak. Your words land where + the cursor is.

          ▸ test.txt
          Nothing happening? The overlay and tray icon show whether VoxCtrl heard the key. You can + continue and come back to this from Settings → Hotkeys at any time.
          `);function gm(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",l),r=()=>Zt(ga,"$status",l),[l,c]=Ca();let u=S(null),v=S(""),f=S(0),_=S("idle"),b=0,m=0;const h=Ho(28),x=ce(()=>Ne.gestureInfo),M=ce(()=>{var X;return(X=Ne.combo)!=null?X:[]}),q=ce(()=>{var X;return t().engine.backend==="remote-openai"?`Remote Speech Engine · ${((X=t().engine.remote_openai)==null?void 0:X.model)||"whisper-1"}`:t().engine.backend==="parakeet"?`Parakeet TDT · ${t().engine.parakeet.model_size}`:t().engine.backend==="moonshine"?`Moonshine · ${t().engine.moonshine.model_size}`:`whisper.cpp · ${t().engine.whisper_cpp.model_size} · ${t().engine.whisper_cpp.device==="cpu"?"cpu":"gpu/auto"}`}),T=ce(()=>({idle:"waiting for hotkey",recording:"recording",transcribing:"transcribing",success:"delivered"})[e(_)]);let z=!1;pa(()=>{const X=r();X.recording&&!z?(o(_,"recording"),b=performance.now(),m=e(v).length):!X.recording&&X.processing&&e(_)==="recording"&&o(_,"transcribing"),z=X.recording});function se(){if(!e(u))return;const X=e(u).value,ve=X.length>m&&X.trim().length>0;o(v,X,!0),ve&&(e(_)==="recording"||e(_)==="transcribing")&&(o(f,Math.max(1,Math.round(performance.now()-b)),!0),o(_,"success"))}function ne(){o(_,"idle"),o(v,""),m=0,e(u)&&(e(u).value="",e(u).focus())}qt(()=>{setTimeout(()=>{var X;return(X=e(u))==null?void 0:X.focus()},60)});var fe=_m(),Q=n(fe),D=n(Q),I=i(n(D),4),R=i(n(I)),ge=n(R),ee=i(D,2),j=n(ee);pt(j,17,()=>e(M),ft,(X,ve,Me)=>{var Fe=um(),_e=_t(Fe),re=n(_e),we=i(_e,2);{var Je=de=>{var G=vm();d(de,G)};k(we,de=>{Mey(re,de),[()=>dl(e(ve))]),d(X,Fe)});var V=i(j,2),oe=n(V),L=i(Q,2);let B;var be=n(L),Pe=i(n(be),2),ue=i(n(Pe),1,!0),W=i(be,2);sl(W,X=>o(u,X),()=>e(u));var J=i(W,2);{var Se=X=>{var ve=fm();pt(ve,21,()=>h,ft,(Me,Fe)=>{var _e=pm();let re;w(()=>{var we,Je;return re=na(_e,"",re,{"animation-duration":`${(we=e(Fe).d)!=null?we:""}s`,"animation-delay":`${(Je=e(Fe).dl)!=null?Je:""}s`})}),d(Me,_e)}),d(X,ve)};k(J,X=>{(e(_)==="recording"||e(_)==="transcribing")&&X(Se)})}var ze=i(J,2);{var le=X=>{var ve=hm(),Me=n(ve),Fe=i(n(Me),4),_e=n(Fe),re=i(Fe,2);w(()=>{var we;return y(_e,`Transcribed${t().engine.backend==="remote-openai"?" via Remote Speech Engine":" on-device"} in ${(we=e(f))!=null?we:""} ms · delivered via inject`)}),N("click",re,ne),d(X,ve)};k(ze,X=>{e(_)==="success"&&X(le)})}var $=i(L,2),ae=i(n($),2),O=n(ae);w(()=>{var X;y(ge,e(x).verb),y(oe,e(x).name),B=Te(L,1,"box svelte-oqvphh",null,B,{live:e(_)==="recording"||e(_)==="transcribing",won:e(_)==="success"}),Te(Pe,1,`state ${(X=e(_))!=null?X:""}`,"svelte-oqvphh"),y(ue,e(T)),y(O,e(q))}),N("input",W,se),d(s,fe),St(),c()}Qt(["input","click"]);var mm=p('
          '),bm=p('■ Stop ',1),ym=p('▶ play sample',1),wm=p('Speaking sample aloud…'),km=p('Downloading voice…'),xm=p('Locked (token required)'),Tm=p('Ready for playback'),Sm=p('Download voice first'),Cm=p('
          ⚠ Non-commercial license:
          '),Em=p(''),Mm=p('
          bundled · zero download
          '),Am=p(''),Pm=p('
          '),zm=p(''),Dm=p('
          '),Im=p('Needs a HuggingFace access token — enter one above to unlock this voice.'),Om=p(' '),Rm=p(`Already downloaded — the token is only needed to fetch the weights, so this voice + works without one.`),Lm=p('This build was compiled without the `inflect-micro` feature, so this engine cannot\n synthesize.'),Nm=p('
          '),Vm=p('
          '),Fm=p(`
          // 05 · text to speech · optional

          Should VoxCtrl talk back?

          Agents can stream replies back through a response pipe and VoxCtrl speaks them aloud. Richer + voices need bigger models and more time per sentence; lighter engines answer instantly.

          HuggingFace access token optional — speeds up downloads if you have one
          `);function Bm(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",r),[r,l]=Ca(),c=5,u=ce(()=>t().tts.enabled),v=ce(()=>t().tts.engine),f=ce(()=>{var g;return(g=cs.find(P=>P.id===e(v)))!=null?g:cs[0]});let _=S(yt({espeak:!0})),b=S(yt({})),m=S(null),h=S(yt({})),x=S(!0),M=S(null);const q=ce(()=>!!e(M)),T=ce(()=>{var g,P;return(P=e(M))!=null?P:((g=t().tts.hf_token)!=null?g:"").trim()}),z=ce(()=>e(T).length>0),se=cs.filter(g=>g.needsHfToken);function ne(g){e(q)||(o(Q,!1),fs(P=>{P.tts.hf_token=g.trim()?g.trim():null}))}function fe(g){const P=cs.find(Ae=>Ae.id===g);return!!(P!=null&&P.needsHfToken)&&!e(z)&&!e(_)[g]}let Q=S(!1);const D="hf-token-rejected";function I(g){return`${g}`.toLowerCase().includes(D)}let R=S(null),ge=S(null);const ee=Ho(12);let j=null,V=null,oe=0,L=!1;const B=300,be=1500,Pe=3e4;function ue(){j&&(clearTimeout(j),j=null),V&&(clearInterval(V),V=null)}function W(){o(R,null),ue()}async function J(){if(!e(R))return;let g;try{g=await C("get_status")}catch(P){console.error("Wizard: status poll failed:",P);return}if(g&&ga.set(g),g!=null&&g.speaking){L=!0;return}(L||Date.now()-oe>be)&&W()}function Se(g,P){const Ae={...e(h)};P?Ae[g]=P:delete Ae[g],o(h,Ae,!0)}async function ze(g){var Ae,Ue,ie,xe,Ee,He;const P=bn(Ot);try{switch(g){case"espeak":return!0;case"piper":return await C("check_voice_downloaded",{voiceName:P.tts.voice,voiceDir:P.tts.voice_dir});case"pocket_tts":return await C("check_pocket_tts_ready",{voice:P.tts.pocket_tts.voice,voiceDir:P.tts.pocket_tts.voice_dir});case"inflect_micro":return await C("check_inflect_micro_downloaded",{modelDir:(Ue=(Ae=P.tts.inflect_micro)==null?void 0:Ae.model_dir)!=null?Ue:""});case"breeze_tts_2":return await C("check_breeze_tts_2_ready",{modelDir:(xe=(ie=P.tts.breeze_tts_2)==null?void 0:ie.model_dir)!=null?xe:""});case"vox_cpm_2":return await C("check_vox_cpm_2_ready",{modelDir:(He=(Ee=P.tts.vox_cpm_2)==null?void 0:Ee.model_dir)!=null?He:""})}}catch(Xe){return console.error("Wizard: TTS readiness check failed for",g,Xe),!1}}async function le(){await Promise.all(cs.map(async g=>{o(b,{...e(b),[g.id]:!0},!0);const P=await ze(g.id);o(_,{...e(_),[g.id]:P},!0),o(b,{...e(b),[g.id]:!1},!0)}))}async function $(g){var Ae,Ue,ie,xe,Ee,He,Xe,zt,Dt,Ft,$t,Gt;if(e(m))return;o(m,g,!0),Se(g,null);const P=bn(Ot);try{switch(g){case"piper":await C("download_voice",{voiceName:P.tts.voice,voiceDir:P.tts.voice_dir});break;case"pocket_tts":await C("download_pocket_tts",{voice:(Ae=P.tts.pocket_tts)==null?void 0:Ae.voice,voiceDir:(Ue=P.tts.pocket_tts)==null?void 0:Ue.voice_dir,hfToken:P.tts.hf_token});break;case"inflect_micro":await C("download_inflect_micro",{modelDir:(xe=(ie=P.tts.inflect_micro)==null?void 0:ie.model_dir)!=null?xe:""});break;case"breeze_tts_2":await C("download_breeze_tts_2",{modelDir:(He=(Ee=P.tts.breeze_tts_2)==null?void 0:Ee.model_dir)!=null?He:"",hfToken:P.tts.hf_token});break;case"vox_cpm_2":await C("download_vox_cpm_2",{modelDir:(zt=(Xe=P.tts.vox_cpm_2)==null?void 0:Xe.model_dir)!=null?zt:"",hfToken:P.tts.hf_token});break;case"espeak":break}o(Q,!1),o(_,{...e(_),[g]:!0},!0),Ne.clearIssue(`tts-download-${g}`)}catch(fa){const Yt=cs.find(Oa=>Oa.id===g),ma=I(fa);ma&&o(Q,!0),Se(g,ma?`HuggingFace did not accept that access token, so ${(Dt=Yt==null?void 0:Yt.name)!=null?Dt:g} could not be downloaded. Check the token is a valid read token, and that the same account has accepted the licence at ${(Ft=Yt==null?void 0:Yt.licenceUrl)!=null?Ft:"huggingface.co"}.`:`${fa}`),Ne.recordIssue({id:`tts-download-${g}`,step:c,title:ma?`${($t=Yt==null?void 0:Yt.name)!=null?$t:g} could not be downloaded — HuggingFace did not accept the access token.`:`${(Gt=Yt==null?void 0:Yt.name)!=null?Gt:g} could not be downloaded — speech output will stay silent.`,detail:`engine=${g} +${fa}`})}finally{o(m,null)}}const ae=["pocket_tts","breeze_tts_2","vox_cpm_2"],O=ce(()=>ae.includes(e(v))),X=ce(()=>e(v)==="pocket_tts"?t().tts.pocket_tts.gpu:e(v)==="breeze_tts_2"?t().tts.breeze_tts_2.gpu:e(v)==="vox_cpm_2"?t().tts.vox_cpm_2.gpu:!1);function ve(g){fs(P=>{e(v)==="pocket_tts"?P.tts.pocket_tts.gpu=g:e(v)==="breeze_tts_2"?P.tts.breeze_tts_2.gpu=g:e(v)==="vox_cpm_2"&&(P.tts.vox_cpm_2.gpu=g)})}function Me(g){fe(g)||fs(P=>{P.tts.enabled=!0,P.tts.engine=g})}function Fe(g){fs(P=>{P.tts.enabled=g})}async function _e(g){if(e(R)){W(),C("stop_tts").catch(()=>{});return}Me(g),o(ge,null),o(R,g,!0),oe=Date.now(),L=!1,ue(),V=setInterval(()=>void J(),B),j=setTimeout(()=>{W(),o(ge,"The sample never finished playing. The engine may have failed silently — check Settings → TTS, or try another voice.")},Pe);const P=bn(Ot),Ae=cs.find(ie=>ie.id===g),Ue=g==="piper"?P.tts.voice:g==="pocket_tts"?P.tts.pocket_tts.voice:null;try{await C("save_config",{newConfig:P}),await C("speak_text",{text:`Hi this is ${Ae.name} speaking from VoxCtrl`,voice:Ue})}catch(ie){o(ge,`${ie}`),W(),Ne.recordIssue({id:`tts-speak-${g}`,step:c,title:`${Ae.name} failed to speak the sample.`,detail:`engine=${g} voice=${Ue!=null?Ue:"(fixed)"} +${ie}`})}}pa(()=>{var g;if(!e(u)){a.setBlocker(c,null);return}if(e(m)){a.setBlocker(c,`Downloading ${(g=cs.find(P=>P.id===e(m)))==null?void 0:g.name}…`);return}if(fe(e(v))){a.setBlocker(c,"Enter a HuggingFace access token, or pick a voice that does not need one.");return}if(e(v)==="inflect_micro"&&!e(x)){a.setBlocker(c,"This build has no Inflect Micro engine — pick another voice or skip.");return}a.setBlocker(c,e(_)[e(v)]?null:"Download the voice you picked, or turn speech output off to continue.")}),qt(()=>{le(),C("hf_token_env").then(P=>o(M,P&&P.trim()?P.trim():null,!0)).catch(()=>o(M,null)),C("inflect_micro_available").then(P=>o(x,P,!0)).catch(()=>o(x,!1));const g=[_a("tts-playback-end",()=>W()),_a("tts-error",P=>{o(ge,P.payload,!0),W(),Ne.recordIssue({id:"tts-runtime",step:c,title:"The text-to-speech engine reported an error while speaking.",detail:`engine=${bn(Ot).tts.engine} +${P.payload}`})})];return()=>{a.setBlocker(c,null),ue();for(const P of g)P.then(Ae=>Ae()).catch(()=>{});C("stop_tts").catch(()=>{})}});const re=ce(()=>!!e(_)[e(v)]),we=ce(()=>fe(e(v))),Je=ce(()=>e(v)==="inflect_micro"&&!e(x)),de=ce(()=>e(re)&&!e(Je)&&!e(we)&&!e(m));var G=Fm(),U=n(G),te=i(n(U),2),Y=n(te);let he;var me=i(Y,2);let pe;var De=i(U,2),Ge=n(De),st=n(Ge);let it;var H=n(st);{var A=g=>{var P=bm(),Ae=i(_t(P),4);pt(Ae,21,()=>ee,ft,(Ue,ie)=>{var xe=mm();let Ee;w(()=>{var He,Xe;return Ee=na(xe,"",Ee,{"animation-duration":`${(He=e(ie).d)!=null?He:""}s`,"animation-delay":`${(Xe=e(ie).dl)!=null?Xe:""}s`})}),d(Ue,xe)}),d(g,P)},E=g=>{var P=ym();d(g,P)};k(H,g=>{e(R)?g(A):g(E,-1)})}var ke=i(st,2),We=n(ke),ye=n(We),Ie=i(We,2),Ye=n(Ie);{var Ze=g=>{var P=wm();d(g,P)},Ve=g=>{var P=km();d(g,P)},at=g=>{var P=xm();d(g,P)},et=g=>{var P=Tm();d(g,P)},rt=g=>{var P=Sm();d(g,P)};k(Ye,g=>{e(R)?g(Ze):e(m)?g(Ve,1):e(we)?g(at,2):e(re)?g(et,3):g(rt,-1)})}var Ce=i(Ge,2);let Ke;var ct=i(n(Ce),2),vt=n(ct),nt=i(vt,2);let wt;var dt=n(nt);{var Ct=g=>{var P=Be("did not accept this token");d(g,P)},Wt=g=>{var P=Be("HF_TOKEN environment variable");d(g,P)},ia=g=>{var P=Be("✓ token saved");d(g,P)},ra=g=>{var P=Be("token required for gated voices");d(g,P)};k(dt,g=>{e(Q)?g(Ct):e(q)?g(Wt,1):e(z)?g(ia,2):g(ra,-1)})}var bt=i(De,2);{var ea=g=>{var P=Cm(),Ae=i(n(P));w(()=>{var Ue;return y(Ae,` ${(Ue=e(f).name)!=null?Ue:""} weights are released under a research/non-commercial license. Commercial + use requires a separate license from the model's publisher.`)}),d(g,P)};k(bt,g=>{e(u)&&e(f).nonCommercial&&!e(_)[e(v)]&&g(ea)})}var Rt=i(bt,2);{var Ht=g=>{var P=Em(),Ae=n(P),Ue=i(Ae,2),ie=n(Ue);w(()=>{var xe;Od(Ae,e(X)),y(ie,`Vulkan GPU acceleration for ${(xe=e(f).name)!=null?xe:""}`)}),N("change",Ae,xe=>ve(xe.currentTarget.checked)),d(g,P)};k(Rt,g=>{e(u)&&e(O)&&g(Ht)})}var ta=i(Rt,2);let Oe;pt(ta,21,()=>cs,ft,(g,P)=>{const Ae=ce(()=>e(u)&&e(v)===e(P).id),Ue=ce(()=>!!e(_)[e(P).id]),ie=ce(()=>e(m)===e(P).id),xe=ce(()=>e(P).id==="inflect_micro"&&!e(x)),Ee=ce(()=>fe(e(P).id));var He=Nm();let Xe;var zt=n(He),Dt=n(zt),Ft=n(Dt),$t=n(Ft),Gt=i(Ft,2),fa=n(Gt),Yt=i(Dt,2),ma=n(Yt),Oa=n(ma),Ya=i(zt,2),tt=n(Ya);{var gt=Le=>{var Qe=Mm();d(Le,Qe)},It=Le=>{var Qe=Am();d(Le,Qe)},ut=Le=>{var Qe=Pm(),Jt=n(Qe);w(Kt=>y(Jt,`✓ Downloaded (${Kt!=null?Kt:""})`),[()=>Tn(e(P).mb)]),d(Le,Qe)},Mt=Le=>{var Qe=zm(),Jt=n(Qe);w(Kt=>{Qe.disabled=!!e(m)||e(xe)||e(Ee),y(Jt,`↓ Download ${Kt!=null?Kt:""}`)},[()=>Tn(e(P).mb)]),N("click",Qe,Kt=>{Kt.stopPropagation(),$(e(P).id)}),d(Le,Qe)};k(tt,Le=>{e(P).mb===0?Le(gt):e(ie)?Le(It,1):e(Ue)?Le(ut,2):Le(Mt,-1)})}var jt=i(Ya,2);pt(jt,21,()=>[{label:"quality",pct:Math.round(e(P).quality*100),value:Fi(e(P).quality),color:"var(--vx-cyan-0)"},{label:"speed",pct:Math.round(e(P).speed*100),value:q_(e(P).speed),color:"var(--vx-cyan-2)"},{label:"model size",pct:F_(e(P).mb),value:Tn(e(P).mb),color:"var(--vx-gold-1)"}],ft,(Le,Qe)=>{var Jt=Dm(),Kt=n(Jt),ka=n(Kt),xa=n(ka),Ta=i(ka),la=n(Ta),ha=i(Kt,2),Pa=n(ha);let Ea;w(()=>{var Ut;y(xa,e(Qe).label),y(la,e(Qe).value),Ea=na(Pa,"",Ea,{width:`${(Ut=e(Qe).pct)!=null?Ut:""}%`,background:e(Qe).color})}),d(Le,Jt)});var wa=i(jt,2),oa=n(wa);{var Ra=Le=>{var Qe=Im();d(Le,Qe)},ja=Le=>{var Qe=Om(),Jt=n(Qe);w(()=>y(Jt,e(h)[e(P).id])),d(Le,Qe)},Z=Le=>{var Qe=Rm();d(Le,Qe)},Re=Le=>{var Qe=Lm();d(Le,Qe)},je=Le=>{var Qe=Be();w(()=>y(Qe,e(P).note)),d(Le,Qe)};k(oa,Le=>{e(Ee)?Le(Ra):e(h)[e(P).id]?Le(ja,1):e(P).needsHfToken&&!e(z)&&e(Ue)?Le(Z,2):e(xe)?Le(Re,3):Le(je,-1)})}w(()=>{Xe=Te(He,1,"vx-card card svelte-1yghr3b",null,Xe,{"vx-on":e(Ae),locked:e(Ee)}),mt(He,"aria-disabled",e(Ee)),mt(He,"aria-checked",e(Ae)),y($t,e(P).name),y(fa,e(P).kind),y(Oa,e(Ae)?"✓":"")}),N("click",He,()=>Me(e(P).id)),N("keydown",He,Le=>{(Le.key==="Enter"||Le.key===" ")&&(Le.preventDefault(),Me(e(P).id))}),d(g,He)});var qe=i(ta,2);{var K=g=>{var P=Vm(),Ae=n(P);w(()=>{var Ue;return y(Ae,`⚠ ${(Ue=e(ge))!=null?Ue:""}`)}),d(g,P)};k(qe,g=>{e(ge)&&g(K)})}w(g=>{var P;he=Te(Y,1,"vx-card mode svelte-1yghr3b",null,he,{"vx-on":e(u)}),pe=Te(me,1,"vx-card mode svelte-1yghr3b",null,pe,{"off-on":!e(u)}),it=Te(st,1,"vx-btn audition-btn svelte-1yghr3b",null,it,{playing:!!e(R)}),st.disabled=!e(de)&&!e(R),mt(st,"title",e(R)?"Stop":e(re)?"Play a sample":e(we)?"Needs a HuggingFace access token":"Download this voice first"),y(ye,`Audition: ${(P=e(f).name)!=null?P:""}`),Ke=Te(Ce,1,"hf-bar svelte-1yghr3b",null,Ke,g),vt.readOnly=e(q),mt(vt,"title",e(q)?"Set by the HF_TOKEN environment variable":"Enter a HuggingFace read token for gated models"),sr(vt,e(T)),wt=Te(nt,1,"hf-state svelte-1yghr3b",null,wt,{ok:e(z)&&!e(Q),bad:e(Q)}),Oe=Te(ta,1,"grid svelte-1yghr3b",null,Oe,{muted:!e(u)})},[()=>({needed:e(u)&&(e(Q)||se.some(g=>fe(g.id)))})]),N("click",Y,()=>Fe(!0)),N("click",me,()=>Fe(!1)),N("click",st,()=>{e(R)?(W(),C("stop_tts").catch(()=>{})):_e(e(v))}),N("input",vt,g=>ne(g.currentTarget.value)),d(s,G),St(),l()}Qt(["click","input","change","keydown"]);const qm="/assets/record_off-DqBdWxcg.png";var jm=p('VoxCtrl is ready.',1),Um=p('Setup is incomplete.',1),Wm=p('
          '),Hm=Oo(''),$m=p('
          '),Gm=p('
          click me ↓
          '),Km=p(`
          where everything lives
          Every choice is editable
          Nothing you picked here is locked in. Settings holds the same options plus the ones the + wizard skipped — output targets, per-binding LLM cleanup, audio devices and the MCP server.
          • ⌁ Hotkeys gestures & bindings
          • ∇ Engine model & device
          • ⌬ Visual overlay style & position
          • ⊕ TTS voice output
          • ⊳ Output Commands where text goes
          `),Ym=p(''),Jm=p('
           
          '),Xm=p(''),Zm=p('
          '),Qm=p('
          What still needs fixing
          '),eb=p('

          system tray
          Find VoxCtrl in the tray
          Click the icon to open Settings, diagnostics, or toggle TTS memory. Try it:
          📶 🔊 ᛒ
          ⌃
          ');function tb(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",r),[r,l]=Ca();let c=S(!1),u=S(!1),v=S(!0),f=S(!1),_=S(null),b=S(null),m=S(!1);async function h(){o(m,!0);try{o(b,await C("get_setup_status"),!0)}catch(U){console.error("Wizard: could not read setup status:",U),o(b,null)}finally{o(m,!1)}}const x=ce(()=>{var te;if(!e(b))return[];const U=[];return e(b).hotkeys_active||U.push({id:"sys-hotkeys",step:2,title:"No global shortcut is active — pressing your hotkey will do nothing.",detail:`backend=${e(b).hotkeys.backend} portal_refused=${e(b).hotkeys.portal_refused} +portal_error=${(te=e(b).hotkeys.portal_error)!=null?te:"(none)"}`}),!e(b).model_ready&&!e(b).model_auto_downloads&&U.push({id:"sys-model",step:1,title:`Speech model "${e(b).model_size}" is not on disk — dictation will record but produce no text.`,detail:`model_size=${e(b).model_size} model_ready=false auto_downloads=${e(b).model_auto_downloads}`}),e(b).missing_injection_tool&&U.push({id:"sys-inject",step:4,title:`"${e(b).missing_injection_tool}" is not installed — VoxCtrl cannot type text into other windows.`,detail:`missing_injection_tool=${e(b).missing_injection_tool} +install with: ${e(b).manual_package_commands||"(unknown package manager)"}`}),U}),M=ce(()=>{const U=new Set(Ne.issues.map(te=>te.id));return[...Ne.issues,...e(x).filter(te=>!U.has(te.id))]}),q=ce(()=>e(M).length===0),T=ce(()=>{var U;return((U=Ne.combo)!=null?U:[]).map(dl).join(" + ")||"not set"}),z=ce(()=>{var U,te,Y,he,me;return[{k:"engine",v:t().engine.backend==="remote-openai"?`Remote Speech Engine · ${((U=t().engine.remote_openai)==null?void 0:U.model)||"whisper-1"}`:t().engine.backend==="parakeet"?`Parakeet TDT · ${t().engine.parakeet.model_size}`:t().engine.backend==="moonshine"?`Moonshine · ${t().engine.moonshine.model_size}`:`whisper.cpp · ${t().engine.whisper_cpp.model_size}`},{k:"hotkey",v:`${e(T)} · ${Ne.gestureInfo.name}`},{k:"overlay",v:t().ui.show_overlay?`${(Y=(te=mn.find(pe=>pe.id===t().ui.overlay_style))==null?void 0:te.name)!=null?Y:t().ui.overlay_style} · ${t().ui.overlay_position}`:"off"},{k:"voice output",v:t().tts.enabled?(me=(he=cs.find(pe=>pe.id===t().tts.engine))==null?void 0:he.name)!=null?me:t().tts.engine:"off"}]}),se=ce(()=>{var U,te,Y;return["VoxCtrl setup report",`engine: ${t().engine.backend} / ${t().engine.backend==="remote-openai"?((U=t().engine.remote_openai)==null?void 0:U.model)||"whisper-1":t().engine.backend==="parakeet"?t().engine.parakeet.model_size:t().engine.backend==="moonshine"?t().engine.moonshine.model_size:t().engine.whisper_cpp.model_size}`,`device: ${t().engine.whisper_cpp.device}`,`hotkey: ${e(T)} (${Ne.gesture})`,`overlay: ${t().ui.show_overlay?`${t().ui.overlay_style} / ${t().ui.overlay_position}`:"off"}`,`tts: ${t().tts.enabled?t().tts.engine:"off"}`,`shortcut backend: ${(Y=(te=e(b))==null?void 0:te.hotkeys.backend)!=null?Y:"unknown"}`,"",...e(M).map(he=>{var me;return`[${(me=ds[he.step])!=null?me:"setup"}] ${he.title} +${he.detail} +`})].join(` +`)});async function ne(){try{await navigator.clipboard.writeText(e(se)),o(u,!0),setTimeout(()=>o(u,!1),2e3)}catch(U){console.error("Wizard: clipboard write failed:",U)}}async function fe(){o(f,!0),o(_,null);try{const U=await C("wizard_failure_log");try{await navigator.clipboard.writeText(U)}catch(me){console.error("Wizard: clipboard write failed:",me)}const te=encodeURIComponent("VoxCtrl Bug Report"),Y=encodeURIComponent(`Paste the log contents below and I will get back to you with a fix ASAP. + +`),he=`mailto:jrufer@gmail.com?subject=${te}&body=${Y}`;await C("send_bug_report_email",{mailtoUrl:he,attachmentPath:null}),o(_,"Log copied to your clipboard — paste it into the email that just opened.")}catch(U){o(_,`Could not open your email app: ${U}`)}finally{o(f,!1)}}async function Q(){try{await C("open_settings_tab",{tab:"general"})}catch(U){console.error("Wizard: could not open Settings:",U)}}qt(()=>{var U;h(),((U=t().tts)==null?void 0:U.memory_mode)!==void 0&&o(v,t().tts.memory_mode==="on_demand")});function D(){o(v,!e(v)),Ot.update(U=>(U.tts&&(U.tts.memory_mode=e(v)?"on_demand":"always_loaded"),U))}var I=eb(),R=n(I),ge=n(R);let ee;var j=n(ge),V=i(ge,2),oe=n(V),L=i(V,2),B=n(L);{var be=U=>{var te=jm();d(U,te)},Pe=U=>{var te=Um();d(U,te)};k(B,U=>{e(q)?U(be):U(Pe,-1)})}var ue=i(L,2),W=n(ue);{var J=U=>{var te=Be(`This window can close. VoxCtrl keeps running quietly in your system tray and listens for + your hotkey in any app.`);d(U,te)},Se=U=>{var te=Be();w(()=>{var Y;return y(te,`Sorry about that — ${(Y=e(M).length)!=null?Y:""} problem${e(M).length===1?"":"s"} came up during setup + and will stop VoxCtrl working end to end. Your choices are still saved. The details are on + the right — fix them here or in Settings, or send us the log and we'll take it from there.`)}),d(U,te)};k(W,U=>{e(q)?U(J):U(Se,-1)})}var ze=i(ue,2);pt(ze,21,()=>e(z),ft,(U,te)=>{var Y=Wm(),he=n(Y),me=n(he),pe=i(he,2),De=n(pe);w(()=>{y(me,e(te).k),y(De,e(te).v)}),d(U,Y)});var le=i(R,2),$=i(n(le),6),ae=n($);{var O=U=>{var te=$m(),Y=n(te),he=i(Y,2),me=i(he,2),pe=n(me),De=n(pe);let Ge;var st=n(De);{var it=A=>{var E=Hm();d(A,E)};k(st,A=>{e(v)&&A(it)})}var H=i(me,4);w(()=>Ge=Te(De,1,"chk svelte-ujy0nl",null,Ge,{on:e(v)})),N("click",Y,Q),N("click",he,()=>{o(c,!1),h()}),N("click",me,D),N("click",H,()=>o(c,!1)),d(U,te)};k(ae,U=>{e(c)&&U(O)})}var X=i(ae,2),ve=i(n(X),6),Me=n(ve);let Fe;var _e=n(Me),re=i(Me,2);{var we=U=>{var te=Gm();d(U,te)};k(re,U=>{e(c)||U(we)})}var Je=i(le,2);{var de=U=>{var te=Km(),Y=i(n(te),8);N("click",Y,Q),d(U,te)},G=U=>{var te=Qm(),Y=n(te),he=n(Y),me=n(he),pe=n(me),De=i(he,2),Ge=n(De);{var st=Ve=>{var at=Ym();d(Ve,at)};k(Ge,Ve=>{e(m)&&Ve(st)})}var it=i(Y,2);pt(it,21,()=>e(M),Ve=>Ve.id,(Ve,at)=>{var et=Jm(),rt=n(et),Ce=n(rt),Ke=n(Ce),ct=i(Ce,2),vt=n(ct),nt=i(rt,2),wt=n(nt);w(()=>{var dt;y(Ke,(dt=ds[e(at).step])!=null?dt:"setup"),y(vt,e(at).title),y(wt,e(at).detail)}),d(Ve,et)});var H=i(it,2),A=n(H),E=n(A),ke=i(A,2),We=i(ke,2),ye=n(We);{var Ie=Ve=>{var at=Xm();d(Ve,at)};k(ye,Ve=>{e(f)&&Ve(Ie)})}var Ye=i(H,2);{var Ze=Ve=>{var at=Zm(),et=n(at);w(()=>y(et,e(_))),d(Ve,at)};k(Ye,Ve=>{e(_)&&Ve(Ze)})}w(()=>{var Ve;y(pe,`problems · ${(Ve=e(M).length)!=null?Ve:""}`),De.disabled=e(m),y(E,e(u)?"✓ Copied":"Copy diagnostics"),We.disabled=e(f)}),N("click",De,h),N("click",A,ne),N("click",ke,Q),N("click",We,fe),d(U,te)};k(Je,U=>{e(q)?U(de):U(G,-1)})}w(()=>{ee=Te(ge,1,"tick svelte-ujy0nl",null,ee,{warn:!e(q)}),y(j,e(q)?"✓":"!"),y(oe,e(q)?"// configured":"// finished with problems"),Fe=Te(Me,1,"tray-btn svelte-ujy0nl",null,Fe,{on:e(c)}),mt(_e,"src",qm)}),N("click",Me,()=>o(c,!e(c))),d(s,I),St(),l()}Qt(["click"]);var ab=p('
          Loading your settings…
          '),sb=p(''),nb=p(''),ib=p('
          '),rb=p('
          '),lb=p(' '),ob=p(' Working…',1),cb=p('
          '),db=p('
          voxctrl // setup
          ');function vb(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",l),r=()=>Zt(Wi,"$configLoaded",l),[l,c]=Ca();let u={};function v(G,U){U?u[G]=U:delete u[G]}let f=S(yt({}));function _(G,U){var te;((te=e(f)[G])!=null?te:null)!==U&&o(f,{...e(f),[G]:U},!0)}let b=S(!1),m=S(null);const h=ce(()=>Ne.step),x=ce(()=>{var G;return(G=e(f)[e(h)])!=null?G:null}),M=ce(()=>e(h)===0?"Get started →":e(h)===5&&!t().tts.enabled?"Skip →":e(h)===ds.length-1?Ne.issues.length>0?"Finish anyway":"Finish":"Continue →");async function q(){if(e(b))return;if(o(m,null),e(h)===ds.length-1){await se();return}const G=u[e(h)];if(G){o(b,!0);try{if(!await G())return}catch(U){o(m,`${U}`);return}finally{o(b,!1)}}Ne.goTo(e(h)+1)}function T(){e(b)||(o(m,null),Ne.goTo(e(h)-1))}let z=S(!1);async function se(){if(!e(z)){o(z,!0);try{await C("save_config",{newConfig:t()}),await C("finish_setup_wizard",{openSettings:!1})}catch(G){o(m,`Could not finish setup: ${G}`),o(z,!1)}}}async function ne(){await se()}function fe(G){Ne.recordIssue({id:`uncaught-${Ne.issues.filter(U=>U.id.startsWith("uncaught-")).length}`,step:Ne.step,title:"Something went wrong during setup that the wizard did not expect.",detail:G})}qt(()=>{const G=te=>{var Y;fe(((Y=te.error)==null?void 0:Y.stack)||te.message||String(te))},U=te=>{var Y,he;fe(((Y=te.reason)==null?void 0:Y.stack)||((he=te.reason)==null?void 0:he.message)||String(te.reason))};return window.addEventListener("error",G),window.addEventListener("unhandledrejection",U),C("wizard_error_test_active").then(te=>{te&&(Ne.recordIssue({id:"simulated-test-failure",step:4,title:"Simulated failure (--simulate-wizard-error) — the live test did not detect any transcribed audio.",detail:"This is a test fixture, not a real failure: it exists so the wizard's error screen (apology, log capture, copy-to-clipboard, email-us) can be verified without needing a genuinely broken hotkey or microphone."}),Ne.visited=ds.length-1,Ne.step=ds.length-1)}).catch(te=>console.error("Wizard: could not check for the error-test flag:",te)),()=>{window.removeEventListener("error",G),window.removeEventListener("unhandledrejection",U)}});var Q=db(),D=n(Q),I=n(D),R=i(I,8),ge=n(R),ee=i(D,2);let j;var V=n(ee);{var oe=G=>{var U=ab();d(G,U)},L=G=>{K_(G)},B=G=>{wg(G,{registerGate:v,setBlocker:_})},be=G=>{Og(G,{registerGate:v,setBlocker:_})},Pe=G=>{dm(G,{})},ue=G=>{gm(G,{})},W=G=>{Bm(G,{setBlocker:_})},J=G=>{tb(G,{})};k(V,G=>{r()?e(h)===0?G(L,1):e(h)===1?G(B,2):e(h)===2?G(be,3):e(h)===3?G(Pe,4):e(h)===4?G(ue,5):e(h)===5?G(W,6):G(J,-1):G(oe)})}var Se=i(ee,2),ze=n(Se),le=n(ze);{var $=G=>{var U=sb();w(()=>U.disabled=e(b)),N("click",U,T),d(G,U)},ae=G=>{var U=nb();w(()=>U.disabled=e(z)),N("click",U,ne),d(G,U)};k(le,G=>{e(h)>0?G($):G(ae,-1)})}var O=i(ze,2);pt(O,21,()=>ds,ft,(G,U,te)=>{var Y=rb();let he;var me=n(Y);let pe;var De=n(me),Ge=n(De),st=i(De,2),it=n(st),H=i(me,2);{var A=E=>{var ke=ib(),We=n(ke);let ye;w(()=>ye=na(We,"",ye,{width:te{te{he=na(Y,"",he,{flex:teNe.visited||e(b),y(Ge,E),y(it,e(U))},[()=>teNe.goTo(te)),d(G,Y)});var X=i(O,2),ve=n(X);{var Me=G=>{var U=lb(),te=n(U);w(()=>{mt(U,"title",e(x)),y(te,e(x))}),d(G,U)};k(ve,G=>{e(x)&&!e(b)&&G(Me)})}var Fe=i(ve,2),_e=n(Fe);{var re=G=>{var U=ob();d(G,U)},we=G=>{var U=Be();w(()=>y(U,e(M))),d(G,U)};k(_e,G=>{e(b)||e(z)?G(re):G(we,-1)})}var Je=i(Se,2);{var de=G=>{var U=cb(),te=n(U),Y=n(te),he=i(te,2);w(()=>{var me;return y(Y,`⚠ ${(me=e(m))!=null?me:""}`)}),N("click",he,()=>o(m,null)),d(G,U)};k(Je,G=>{e(m)&&G(de)})}w(()=>{var G;mt(I,"src",nr),y(ge,`step ${e(h)+1} / ${(G=ds.length)!=null?G:""} · every choice editable later in Settings`),j=Te(ee,1,"vx-screen svelte-18pn5kx",null,j,{"vx-leaving":Ne.leaving}),Fe.disabled=e(b)||e(z)||!!e(x)}),N("click",Fe,q),d(s,Q),St(),c()}Qt(["click"]);function Ol(s){if(!s||s<0)return"";if(s<1024)return`${s} B`;const a=["KB","MB","GB"];let t=s/1024,r=0;for(;t>=1024&&r

          '),fb=p('

          '),hb=p('

          Asking GitHub for the latest release…

          '),_b=p('

          Nothing to install. Check again any time from Settings → General.

          '),gb=p(`

          What's new

           
          `),mb=p('

          '),bb=p('

          VoxCtrl keeps running until the download is verified. Nothing is replaced before then.

          '),yb=p('

          The new version is installed. VoxCtrl is closing and will start again in a moment.

          '),wb=p('

          '),kb=p('

          Your current version is untouched and still working.

          ',1),xb=p(" ",1),Tb=p('

          '),Sb=p(''),Cb=p(''),Eb=p(''),Mb=p(''),Ab=p('
          ',1),Pb=p(''),zb=p('

          ');function Db(s,a){Tt(a,!0);let t=S("checking"),r=S(null),l=S(""),c=S(null),u=S(null),v=[];const f=ce(()=>ub(e(c)));qt(async()=>{v.push(await _a("update-progress",le=>{o(c,le.payload,!0)})),v.push(await _a("update-installed",()=>{o(t,"installed")})),v.push(await _a("update-failed",le=>{o(t,"failed"),o(u,le.payload,!0)})),await _()}),ar(()=>{v.forEach(le=>le())});async function _(){try{let le=await C("get_pending_update");le.update||(le=await C("check_for_update")),o(l,le.current_version,!0),o(r,le.update,!0),o(t,le.update?"available":"up-to-date",!0)}catch(le){o(t,"failed"),o(u,`${le}`)}}async function b(){var le;if((le=e(r))!=null&&le.can_self_update){o(t,"installing"),o(u,null),o(c,{downloaded:0,total:e(r).download_size},!0);try{await C("install_update")}catch($){o(t,"failed"),o(u,`${$}`)}}}async function m(){await C("dismiss_update")}async function h(){var le,$;try{await Uo(($=(le=e(r))==null?void 0:le.release_url)!=null?$:"https://github.com/JRufer/VoxCtrl/releases/latest")}catch(ae){console.error("Could not open the release page:",ae)}}var x=zb(),M=n(x),q=n(M),T=n(q),z=i(T,2),se=n(z),ne=n(se);{var fe=le=>{var $=Be("VoxCtrl is up to date");d(le,$)},Q=le=>{var $=Be();w(()=>{var ae,O;return y($,`Restarting into ${(O=(ae=e(r))==null?void 0:ae.version)!=null?O:""}`)}),d(le,$)},D=le=>{var $=Be();w(()=>{var ae,O;return y($,`Updating to ${(O=(ae=e(r))==null?void 0:ae.version)!=null?O:""}`)}),d(le,$)},I=le=>{var $=Be();w(()=>{var ae;return y($,`VoxCtrl ${(ae=e(r).version)!=null?ae:""} is available`)}),d(le,$)},R=le=>{var $=Be("Checking for updates…");d(le,$)};k(ne,le=>{e(t)==="up-to-date"?le(fe):e(t)==="installed"?le(Q,1):e(t)==="installing"?le(D,2):e(r)?le(I,3):le(R,-1)})}var ge=i(se,2);{var ee=le=>{var $=pb(),ae=n($);w(()=>{var O,X;return y(ae,`You have ${(O=e(r).current_version)!=null?O:""} — ${(X=e(r).version)!=null?X:""} is the latest release.`)}),d(le,$)},j=le=>{var $=fb(),ae=n($);w(()=>{var O;return y(ae,`Version ${(O=e(l))!=null?O:""} is the latest release.`)}),d(le,$)};k(ge,le=>{e(r)&&e(t)!=="up-to-date"?le(ee):e(t)==="up-to-date"&&le(j,1)})}var V=i(q,2);{var oe=le=>{var $=hb();d(le,$)},L=le=>{var $=_b();d(le,$)},B=le=>{var $=xb(),ae=_t($);{var O=de=>{var G=gb(),U=i(n(G),2),te=n(U);w(()=>y(te,e(r).notes)),d(de,G)};k(ae,de=>{e(r).notes&&de(O)})}var X=i(ae,2);{var ve=de=>{var G=mb(),U=n(G);w(()=>y(U,e(r).unsupported_reason)),d(de,G)};k(X,de=>{!e(r).can_self_update&&e(r).unsupported_reason&&de(ve)})}var Me=i(X,2);{var Fe=de=>{var G=bb(),U=n(G);let te;var Y=n(U),he=i(U,2),me=n(he);{var pe=Ge=>{var st=Be();w(()=>{var it,H;return y(st,`Downloading ${(H=(it=e(r).asset_name)!=null?it:"the update")!=null?H:""}…`)}),d(Ge,st)},De=Ge=>{var st=Be();w(it=>{var H;return y(st,`Downloading — ${(H=e(f))!=null?H:""}% of ${it!=null?it:""}`)},[()=>{var it,H;return Ol((H=(it=e(c))==null?void 0:it.total)!=null?H:e(r).download_size)}]),d(Ge,st)};k(me,Ge=>{e(f)===null?Ge(pe):Ge(De,-1)})}w(()=>{te=Te(U,1,"bar svelte-15mrihi",null,te,{indeterminate:e(f)===null}),na(Y,e(f)===null?"":`width: ${e(f)}%`)}),d(de,G)},_e=de=>{var G=yb();d(de,G)},re=de=>{var G=wb(),U=n(G);w(te=>y(U,`VoxCtrl will download ${te!=null?te:""}, verify it against the checksum + GitHub published, replace itself and restart. Your settings, models and voices are not + touched.`),[()=>Ol(e(r).download_size)]),d(de,G)};k(Me,de=>{e(t)==="installing"?de(Fe):e(t)==="installed"?de(_e,1):e(r).can_self_update&&de(re,2)})}var we=i(Me,2);{var Je=de=>{var G=kb(),U=_t(G),te=n(U);w(()=>y(te,e(u))),d(de,G)};k(we,de=>{e(t)==="failed"&&e(u)&&de(Je)})}d(le,$)},be=le=>{var $=Tb(),ae=n($);w(()=>y(ae,e(u))),d(le,$)};k(V,le=>{e(t)==="checking"?le(oe):e(t)==="up-to-date"?le(L,1):e(r)?le(B,2):e(t)==="failed"&&e(u)&&le(be,3)})}var Pe=i(V,2),ue=n(Pe);{var W=le=>{var $=Sb();w(()=>$.disabled=e(t)==="installing"),N("click",$,m),d(le,$)},J=le=>{var $=Cb();N("click",$,m),d(le,$)},Se=le=>{var $=Ab(),ae=_t($),O=n(ae),X=i(ae,2),ve=n(X),Me=i(ve,2);{var Fe=re=>{var we=Eb();N("click",we,b),d(re,we)},_e=re=>{var we=Mb();N("click",we,h),d(re,we)};k(Me,re=>{e(r).can_self_update?re(Fe):re(_e,-1)})}N("click",O,h),N("click",ve,m),d(le,$)},ze=le=>{var $=Pb();N("click",$,m),d(le,$)};k(ue,le=>{e(t)==="installing"||e(t)==="installed"?le(W):e(t)==="up-to-date"?le(J,1):e(r)?le(Se,2):le(ze,-1)})}w(()=>mt(T,"src",nr)),d(s,x),St()}Qt(["click"]);function Ib(s){const a=window.location.pathname;function t(){return a.startsWith("/overlay")?"overlay":a.startsWith("/udev-warning")?"udev-warning":a.startsWith("/wizard")?"wizard":a.startsWith("/update")?"update":"settings"}const r=t();r==="overlay"&&(document.documentElement.classList.add("overlay-window"),document.body.classList.add("overlay-window"));var l=xi(),c=_t(l);{var u=m=>{Jh(m,{})},v=m=>{I_(m,{})},f=m=>{vb(m,{})},_=m=>{Db(m,{})},b=m=>{bh(m,{})};k(c,m=>{r==="overlay"?m(u):r==="udev-warning"?m(v,1):r==="wizard"?m(f,2):r==="update"?m(_,3):m(b,-1)})}d(s,l)}bd(Ib,{target:document.getElementById("app")}); diff --git a/dist/assets/index-DnkJtkQU.js b/dist/assets/index-DnkJtkQU.js deleted file mode 100644 index b79284f6..00000000 --- a/dist/assets/index-DnkJtkQU.js +++ /dev/null @@ -1,156 +0,0 @@ -var sc=Object.defineProperty;var Sl=a=>{throw TypeError(a)};var ac=(a,s,t)=>s in a?sc(a,s,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[s]=t;var Hs=(a,s,t)=>ac(a,typeof s!="symbol"?s+"":s,t),Sr=(a,s,t)=>s.has(a)||Sl("Cannot "+t);var $=(a,s,t)=>(Sr(a,s,"read from private field"),t?t.call(a):s.get(a)),vt=(a,s,t)=>s.has(a)?Sl("Cannot add the same private member more than once"):s instanceof WeakSet?s.add(a):s.set(a,t),mt=(a,s,t,r)=>(Sr(a,s,"write to private field"),r?r.call(a,t):s.set(a,t),t),jt=(a,s,t)=>(Sr(a,s,"access private method"),t);(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const d of o)if(d.type==="childList")for(const u of d.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&r(u)}).observe(document,{childList:!0,subtree:!0});function t(o){const d={};return o.integrity&&(d.integrity=o.integrity),o.referrerPolicy&&(d.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?d.credentials="include":o.crossOrigin==="anonymous"?d.credentials="omit":d.credentials="same-origin",d}function r(o){if(o.ep)return;o.ep=!0;const d=t(o);fetch(o.href,d)}})();const nc="5";var Hl,Kl,Gl;typeof window<"u"&&((Gl=(Kl=(Hl=window.__svelte)!=null?Hl:window.__svelte={}).v)!=null?Gl:Kl.v=new Set).add(nc);let ti=!1,ic=!1;function rc(){ti=!0}rc();const lc=1,oc=2,Zl=4,cc=8,dc=16,vc=1,uc=2,pc=4,fc=8,_c=16,hc=1,gc=2,Ss=Symbol("uninitialized"),Xl="http://www.w3.org/1999/xhtml",mc="http://www.w3.org/2000/svg",bc="http://www.w3.org/1998/Math/MathML",Ql=!1;var nl=Array.isArray,yc=Array.prototype.indexOf,Yn=Array.prototype.includes,pr=Array.from,eo=Object.defineProperty,Fn=Object.getOwnPropertyDescriptor,wc=Object.getOwnPropertyDescriptors,kc=Object.prototype,xc=Array.prototype,to=Object.getPrototypeOf,El=Object.isExtensible;const Wa=()=>{};function so(a){for(var s=0;s{a=r,s=o});return{promise:t,resolve:a,reject:s}}function Cl(a,s){if(Array.isArray(a))return a;if(!(Symbol.iterator in a))return Array.from(a);const t=[];for(const r of a)if(t.push(r),t.length===s)break;return t}const zs=2,Jn=4,fr=8,no=1<<24,Sa=16,Aa=32,nn=64,Nr=128,pa=512,Es=1024,As=2048,La=4096,js=8192,fa=16384,Mn=32768,Fr=1<<25,Zn=65536,ar=1<<17,Tc=1<<18,si=1<<19,Sc=1<<20,Ia=1<<25,Sn=65536,nr=1<<21,Vn=1<<22,tn=1<<23,wn=Symbol("$state"),Ec=Symbol("legacy props"),Cc=Symbol(""),Ki=Symbol("attributes"),Vr=Symbol("class"),$r=Symbol("style"),ii=Symbol("text"),Gi=Symbol("form reset"),_r=new class extends Error{constructor(){super(...arguments);Hs(this,"name","StaleReactionError");Hs(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}};var Yl;const Ac=!!((Yl=globalThis.document)!=null&&Yl.contentType)&&globalThis.document.contentType.includes("xml");function io(a){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function Mc(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function Pc(a,s,t){throw new Error("https://svelte.dev/e/each_key_duplicate")}function Dc(a){throw new Error("https://svelte.dev/e/effect_in_teardown")}function zc(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function Ic(a){throw new Error("https://svelte.dev/e/effect_orphan")}function Oc(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function Rc(a){throw new Error("https://svelte.dev/e/props_invalid_value")}function Lc(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function Nc(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function Fc(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function Vc(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}function $c(){console.warn("https://svelte.dev/e/derived_inert")}function Bc(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function qc(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function ro(a){return a===this.v}function lo(a,s){return a!=a?s==s:a!==s||a!==null&&typeof a=="object"||typeof a=="function"}function oo(a){return!lo(a,this.v)}let ms=null;function Xn(a){ms=a}function Ot(a,s=!1,t){ms={p:ms,i:!1,c:null,e:null,s:a,x:null,r:Ct,l:ti&&!s?{s:null,u:null,$:[]}:null}}function Rt(a){var s=ms,t=s.e;if(t!==null){s.e=null;for(var r of t)Po(r)}return s.i=!0,ms=s.p,{}}function Ri(){return!ti||ms!==null&&ms.l===null}let pn=[];function co(){var a=pn;pn=[],so(a)}function sn(a){if(pn.length===0&&!vi){var s=pn;queueMicrotask(()=>{s===pn&&co()})}pn.push(a)}function jc(){for(;pn.length>0;)co()}function vo(a){var s=Ct;if(s===null)return It.f|=tn,a;if(!(s.f&Mn)&&!(s.f&Jn))throw a;Qa(a,s)}function Qa(a,s){for(;s!==null;){if(s.f&Nr){if(!(s.f&Mn))throw a;try{s.b.error(a);return}catch(t){a=t}}s=s.parent}throw a}const Wc=-7169;function hs(a,s){a.f=a.f&Wc|s}function il(a){a.f&pa||a.deps===null?hs(a,Es):hs(a,La)}function uo(a){if(a!==null)for(const s of a)!(s.f&zs)||!(s.f&Sn)||(s.f^=Sn,uo(s.deps))}function po(a,s,t){a.f&As?s.add(a):a.f&La&&t.add(a),uo(a.deps),hs(a,Es)}function rl(a,s,t){if(a==null)return s(void 0),t&&t(void 0),Wa;const r=Fa(()=>a.subscribe(s,t));return r.unsubscribe?()=>r.unsubscribe():r}const Pn=[];function Uc(a,s){return{subscribe:Li(a,s).subscribe}}function Li(a,s=Wa){let t=null;const r=new Set;function o(v){if(lo(a,v)&&(a=v,t)){const f=!Pn.length;for(const _ of r)_[1](),Pn.push(_,a);if(f){for(let _=0;_{r.delete(_),r.size===0&&t&&(t(),t=null)}}return{set:o,update:d,subscribe:u}}function Ni(a,s,t){const r=!Array.isArray(a),o=r?[a]:a;if(!o.every(Boolean))throw new Error("derived() expects stores as input, got a falsy value");const d=s.length<2;return Uc(t,(u,v)=>{let f=!1;const _=[];let b=0,m=Wa;const g=()=>{if(b)return;m();const A=s(r?_[0]:_,u,v);d?u(A):m=typeof A=="function"?A:Wa},M=o.map((A,H)=>rl(A,E=>{_[H]=E,b&=~(1<{b|=1<s=t)(),s}let Br=!1,ri=!1,qr=Symbol("unmounted");function ls(a,s,t){var d;const r=(d=t[s])!=null?d:t[s]={store:null,source:xo(void 0),unsubscribe:Wa};if(r.store!==a&&!(qr in t))if(r.unsubscribe(),r.store=a!=null?a:null,a==null)r.source.v=void 0,r.unsubscribe=Wa;else{var o=!0;r.unsubscribe=rl(a,u=>{o?r.source.v=u:l(r.source,u)}),o=!1}return a&&qr in t?Ln(a):e(r.source)}function vn(a,s){return Hc(a,s),s}function Ms(){const a={};function s(){gr(()=>{for(var t in a)a[t].unsubscribe();eo(a,qr,{enumerable:!1,value:!0})})}return[a,s]}function Hc(a,s){Br=!0;try{a.set(s)}finally{Br=!1}}function un(){ri=!0}function Kc(a){var s=ri;try{return ri=!1,[a(),ri]}finally{ri=s}}let Er=null,Dn=null,ut=null,di=null,Ds=null,jr=null,vi=!1,Cr=!1,Nn=null,Yi=null;var Al=0;let Gc=1;var qn,Ja,hn,jn,Wn,gn,Un,$a,mi,sa,bi,Za,Pa,Da,Hn,Kn,Zt,Wr,li,Ur,fo,_o,Ji,Yc,Hr,On;const dr=class dr{constructor(){vt(this,Zt);Hs(this,"id",Gc++);vt(this,qn,!1);Hs(this,"linked",!0);vt(this,Ja,null);vt(this,hn,null);Hs(this,"async_deriveds",new Map);Hs(this,"current",new Map);Hs(this,"previous",new Map);Hs(this,"unblocked",new Set);vt(this,jn,new Set);vt(this,Wn,new Set);vt(this,gn,new Set);vt(this,Un,0);vt(this,$a,new Map);vt(this,mi,null);vt(this,sa,[]);vt(this,bi,[]);vt(this,Za,new Set);vt(this,Pa,new Set);vt(this,Da,new Map);vt(this,Hn,new Set);Hs(this,"is_fork",!1);vt(this,Kn,!1)}skip_effect(s){$(this,Da).has(s)||$(this,Da).set(s,{d:[],m:[]}),$(this,Hn).delete(s)}unskip_effect(s,t=r=>this.schedule(r)){var r=$(this,Da).get(s);if(r){$(this,Da).delete(s);for(var o of r.d)hs(o,As),t(o);for(o of r.m)hs(o,La),t(o)}$(this,Hn).add(s)}capture(s,t,r=!1){s.v!==Ss&&!this.previous.has(s)&&this.previous.set(s,s.v),s.f&tn||(this.current.set(s,[t,r]),Ds==null||Ds.set(s,t)),this.is_fork||(s.v=t)}activate(){ut=this}deactivate(){ut=null,Ds=null}flush(){try{Cr=!0,ut=this,jt(this,Zt,li).call(this)}finally{Al=0,jr=null,Nn=null,Yi=null,Cr=!1,ut=null,Ds=null,kn.clear()}}discard(){for(const s of $(this,Wn))s(this);$(this,Wn).clear(),$(this,gn).clear(),jt(this,Zt,On).call(this)}register_created_effect(s){$(this,bi).push(s)}increment(s,t){var r;if(mt(this,Un,$(this,Un)+1),s){let o=(r=$(this,$a).get(t))!=null?r:0;$(this,$a).set(t,o+1)}}decrement(s,t){var r;if(mt(this,Un,$(this,Un)-1),s){let o=(r=$(this,$a).get(t))!=null?r:0;o===1?$(this,$a).delete(t):$(this,$a).set(t,o-1)}$(this,Kn)||(mt(this,Kn,!0),sn(()=>{mt(this,Kn,!1),this.linked&&this.flush()}))}transfer_effects(s,t){for(const r of s)$(this,Za).add(r);for(const r of t)$(this,Pa).add(r);s.clear(),t.clear()}oncommit(s){$(this,jn).add(s)}ondiscard(s){$(this,Wn).add(s)}on_fork_commit(s){$(this,gn).add(s)}run_fork_commit_callbacks(){for(const s of $(this,gn))s(this);$(this,gn).clear()}settled(){var s;return((s=$(this,mi))!=null?s:mt(this,mi,ao())).promise}static ensure(){var s;if(ut===null){const t=ut=new dr;jt(s=t,Zt,Hr).call(s),!Cr&&!vi&&sn(()=>{$(t,qn)||t.flush()})}return ut}apply(){{Ds=null;return}}schedule(s){var o;if(jr=s,(o=s.b)!=null&&o.is_pending&&s.f&(Jn|fr|no)&&!(s.f&Mn)){s.b.defer_effect(s);return}for(var t=s;t.parent!==null;){t=t.parent;var r=t.f;if(Nn!==null&&t===Ct&&(It===null||!(It.f&zs))&&!Br)return;if(r&(nn|Aa)){if(!(r&Es))return;t.f^=Es}}$(this,sa).push(t)}};qn=new WeakMap,Ja=new WeakMap,hn=new WeakMap,jn=new WeakMap,Wn=new WeakMap,gn=new WeakMap,Un=new WeakMap,$a=new WeakMap,mi=new WeakMap,sa=new WeakMap,bi=new WeakMap,Za=new WeakMap,Pa=new WeakMap,Da=new WeakMap,Hn=new WeakMap,Kn=new WeakMap,Zt=new WeakSet,Wr=function(){if(this.is_fork)return!0;for(const r of $(this,$a).keys()){for(var s=r,t=!1;s.parent!==null;){if($(this,Da).has(s)){t=!0;break}s=s.parent}if(!t)return!0}return!1},li=function(){var f,_,b,m;if(mt(this,qn,!0),Al++>1e3&&(jt(this,Zt,On).call(this),Zc()),!jt(this,Zt,Wr).call(this)){for(const g of $(this,Za))$(this,Pa).delete(g),hs(g,As),this.schedule(g);for(const g of $(this,Pa))hs(g,La),this.schedule(g)}const s=$(this,sa);mt(this,sa,[]),this.apply();var t=Nn=[],r=[],o=Yi=[];for(const g of s)try{jt(this,Zt,Ur).call(this,g,t,r)}catch(M){throw mo(g),M}if(ut=null,o.length>0){var d=dr.ensure();for(const g of o)d.schedule(g)}if(Nn=null,Yi=null,jt(this,Zt,Wr).call(this)){jt(this,Zt,Ji).call(this,r),jt(this,Zt,Ji).call(this,t);for(const[g,M]of $(this,Da))go(g,M);o.length>0&&jt(f=ut,Zt,li).call(f);return}const u=jt(this,Zt,fo).call(this);if(u){jt(_=u,Zt,_o).call(_,this);return}$(this,Za).clear(),$(this,Pa).clear();for(const g of $(this,jn))g(this);$(this,jn).clear(),di=this,Ml(r),Ml(t),di=null,(b=$(this,mi))==null||b.resolve();var v=ut;if(this.linked&&$(this,Un)===0&&jt(this,Zt,On).call(this),$(this,sa).length>0){v===null&&(v=this,jt(this,Zt,Hr).call(this));const g=v;$(g,sa).push(...$(this,sa).filter(M=>!$(g,sa).includes(M)))}v!==null&&jt(m=v,Zt,li).call(m)},Ur=function(s,t,r){s.f^=Es;for(var o=s.first;o!==null;){var d=o.f,u=(d&(Aa|nn))!==0,v=u&&(d&Es)!==0,f=v||(d&js)!==0||$(this,Da).has(o);if(!f&&o.fn!==null){u?o.f^=Es:d&Jn?t.push(o):Vi(o)&&(d&Sa&&$(this,Pa).add(o),ei(o));var _=o.first;if(_!==null){o=_;continue}}for(;o!==null;){var b=o.next;if(b!==null){o=b;break}o=o.parent}}},fo=function(){for(var s=$(this,Ja);s!==null;){if(!s.is_fork){for(const[t,[,r]]of this.current)if(s.current.has(t)&&!r)return s}s=$(s,Ja)}return null},_o=function(s){var r;for(const[o,d]of s.current)!this.previous.has(o)&&s.previous.has(o)&&this.previous.set(o,s.previous.get(o)),this.current.set(o,d);for(const[o,d]of s.async_deriveds){const u=this.async_deriveds.get(o);u&&d.promise.then(u.resolve)}const t=o=>{var d=o.reactions;if(d!==null)for(const f of d){var u=f.f;if(u&zs)t(f);else{var v=f;u&(Vn|Sa)&&!this.async_deriveds.has(v)&&($(this,Pa).delete(v),hs(v,As),this.schedule(v))}}};for(const o of this.current.keys())t(o);this.oncommit(()=>s.discard()),jt(r=s,Zt,On).call(r),ut=this,jt(this,Zt,li).call(this)},Ji=function(s){for(var t=0;t!this.current.has(g));if(o.length===0)s&&m.discard();else if(t.length>0){if(s)for(const g of $(this,Hn))m.unskip_effect(g,M=>{var A;M.f&(Sa|Vn)?m.schedule(M):jt(A=m,Zt,Ji).call(A,[M])});m.activate();var d=new Set,u=new Map;for(var v of t)ho(v,o,d,u);u=new Map;var f=[...m.current.keys()].filter(g=>this.current.has(g)?this.current.get(g)[0]!==g.v:!0);if(f.length>0)for(const g of $(this,bi))!(g.f&(fa|js|ar))&&ll(g,f,u)&&(g.f&(Vn|Sa)?(hs(g,As),m.schedule(g)):$(m,Za).add(g));if($(m,sa).length>0){m.apply();for(var _ of $(m,sa))jt(b=m,Zt,Ur).call(b,_,[],[]);mt(m,sa,[])}m.deactivate()}}}},Hr=function(){Dn===null?Er=Dn=this:(mt(Dn,hn,this),mt(this,Ja,Dn)),Dn=this},On=function(){var s=$(this,Ja),t=$(this,hn);s===null?Er=t:mt(s,hn,t),t===null?Dn=s:mt(t,Ja,s),this.linked=!1};let En=dr;function Jc(a){var s=vi;vi=!0;try{for(var t;;){if(jc(),ut===null)return t;ut.flush()}}finally{vi=s}}function Zc(){try{Oc()}catch(a){Qa(a,jr)}}let wa=null;function Ml(a){var s=a.length;if(s!==0){for(var t=0;t0)){kn.clear();for(const o of wa){if(o.f&(fa|js))continue;const d=[o];let u=o.parent;for(;u!==null;)wa.has(u)&&(wa.delete(u),d.push(u)),u=u.parent;for(let v=d.length-1;v>=0;v--){const f=d[v];f.f&(fa|js)||ei(f)}}wa.clear()}}wa=null}}function ho(a,s,t,r){if(!t.has(a)&&(t.add(a),a.reactions!==null))for(const o of a.reactions){const d=o.f;d&zs?ho(o,s,t,r):d&(Vn|Sa)&&!(d&As)&&ll(o,s,r)&&(hs(o,As),ol(o))}}function ll(a,s,t){const r=t.get(a);if(r!==void 0)return r;if(a.deps!==null)for(const o of a.deps){if(Yn.call(s,o))return!0;if(o.f&zs&&ll(o,s,t))return t.set(o,!0),!0}return t.set(a,!1),!1}function ol(a){ut.schedule(a)}function go(a,s){if(!(a.f&Aa&&a.f&Es)){a.f&As?s.d.push(a):a.f&La&&s.m.push(a),hs(a,Es);for(var t=a.first;t!==null;)go(t,s),t=t.next}}function mo(a){hs(a,Es);for(var s=a.first;s!==null;)mo(s),s=s.next}function Xc(a){let s=0,t=Cn(0),r;return()=>{ul()&&(e(t),mr(()=>(s===0&&(r=Fa(()=>a(()=>ui(t)))),s+=1,()=>{sn(()=>{s-=1,s===0&&(r==null||r(),r=void 0,ui(t))})})))}}var Qc=Zn|si;function ed(a,s,t,r){new td(a,s,t,r)}var oa,al,ca,mn,Ks,da,Bs,aa,Ba,bn,Xa,Gn,yi,wi,qa,vr,bs,sd,ad,nd,Kr,Zi,Xi,Gr,Yr;class td{constructor(s,t,r,o){vt(this,bs);Hs(this,"parent");Hs(this,"is_pending",!1);Hs(this,"transform_error");vt(this,oa);vt(this,al,null);vt(this,ca);vt(this,mn);vt(this,Ks);vt(this,da,null);vt(this,Bs,null);vt(this,aa,null);vt(this,Ba,null);vt(this,bn,0);vt(this,Xa,0);vt(this,Gn,!1);vt(this,yi,new Set);vt(this,wi,new Set);vt(this,qa,null);vt(this,vr,Xc(()=>(mt(this,qa,Cn($(this,bn))),()=>{mt(this,qa,null)})));var d,u;mt(this,oa,s),mt(this,ca,t),mt(this,mn,v=>{var f=Ct;f.b=this,f.f|=Nr,r(v)}),this.parent=Ct.b,this.transform_error=(u=o!=null?o:(d=this.parent)==null?void 0:d.transform_error)!=null?u:v=>v,mt(this,Ks,pl(()=>{jt(this,bs,Kr).call(this)},Qc))}defer_effect(s){po(s,$(this,yi),$(this,wi))}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!$(this,ca).pending}update_pending_count(s,t){jt(this,bs,Gr).call(this,s,t),mt(this,bn,$(this,bn)+s),!(!$(this,qa)||$(this,Gn))&&(mt(this,Gn,!0),sn(()=>{mt(this,Gn,!1),$(this,qa)&&Qn($(this,qa),$(this,bn))}))}get_effect_pending(){return $(this,vr).call(this),e($(this,qa))}error(s){if(!$(this,ca).onerror&&!$(this,ca).failed)throw s;ut!=null&&ut.is_fork?($(this,da)&&ut.skip_effect($(this,da)),$(this,Bs)&&ut.skip_effect($(this,Bs)),$(this,aa)&&ut.skip_effect($(this,aa)),ut.on_fork_commit(()=>{jt(this,bs,Yr).call(this,s)})):jt(this,bs,Yr).call(this,s)}}oa=new WeakMap,al=new WeakMap,ca=new WeakMap,mn=new WeakMap,Ks=new WeakMap,da=new WeakMap,Bs=new WeakMap,aa=new WeakMap,Ba=new WeakMap,bn=new WeakMap,Xa=new WeakMap,Gn=new WeakMap,yi=new WeakMap,wi=new WeakMap,qa=new WeakMap,vr=new WeakMap,bs=new WeakSet,sd=function(){try{mt(this,da,va(()=>$(this,mn).call(this,$(this,oa))))}catch(s){this.error(s)}},ad=function(s){const t=$(this,ca).failed;t&&mt(this,aa,va(()=>{t($(this,oa),()=>s,()=>()=>{})}))},nd=function(){const s=$(this,ca).pending;s&&(this.is_pending=!0,mt(this,Bs,va(()=>s($(this,oa)))),sn(()=>{var t=mt(this,Ba,document.createDocumentFragment()),r=Ua();t.append(r),mt(this,da,jt(this,bs,Xi).call(this,()=>va(()=>$(this,mn).call(this,r)))),$(this,Xa)===0&&($(this,oa).before(t),mt(this,Ba,null),xn($(this,Bs),()=>{mt(this,Bs,null)}),jt(this,bs,Zi).call(this,ut))}))},Kr=function(){try{if(this.is_pending=this.has_pending_snippet(),mt(this,Xa,0),mt(this,bn,0),mt(this,da,va(()=>{$(this,mn).call(this,$(this,oa))})),$(this,Xa)>0){var s=mt(this,Ba,document.createDocumentFragment());hl($(this,da),s);const t=$(this,ca).pending;mt(this,Bs,va(()=>t($(this,oa))))}else jt(this,bs,Zi).call(this,ut)}catch(t){this.error(t)}},Zi=function(s){this.is_pending=!1,s.transfer_effects($(this,yi),$(this,wi))},Xi=function(s){var t=Ct,r=It,o=ms;Na($(this,Ks)),ha($(this,Ks)),Xn($(this,Ks).ctx);try{return En.ensure(),s()}catch(d){return vo(d),null}finally{Na(t),ha(r),Xn(o)}},Gr=function(s,t){var r;if(!this.has_pending_snippet()){this.parent&&jt(r=this.parent,bs,Gr).call(r,s,t);return}mt(this,Xa,$(this,Xa)+s),$(this,Xa)===0&&(jt(this,bs,Zi).call(this,t),$(this,Bs)&&xn($(this,Bs),()=>{mt(this,Bs,null)}),$(this,Ba)&&($(this,oa).before($(this,Ba)),mt(this,Ba,null)))},Yr=function(s){$(this,da)&&(Ys($(this,da)),mt(this,da,null)),$(this,Bs)&&(Ys($(this,Bs)),mt(this,Bs,null)),$(this,aa)&&(Ys($(this,aa)),mt(this,aa,null));var t=$(this,ca).onerror;let r=$(this,ca).failed;var o=!1,d=!1;const u=()=>{if(o){qc();return}o=!0,d&&Vc(),$(this,aa)!==null&&xn($(this,aa),()=>{mt(this,aa,null)}),jt(this,bs,Xi).call(this,()=>{jt(this,bs,Kr).call(this)})},v=f=>{try{d=!0,t==null||t(f,u),d=!1}catch(_){Qa(_,$(this,Ks)&&$(this,Ks).parent)}r&&mt(this,aa,jt(this,bs,Xi).call(this,()=>{try{return va(()=>{var _=Ct;_.b=this,_.f|=Nr,r($(this,oa),()=>f,()=>u)})}catch(_){return Qa(_,$(this,Ks).parent),null}}))};sn(()=>{var f;try{f=this.transform_error(s)}catch(_){Qa(_,$(this,Ks)&&$(this,Ks).parent);return}f!==null&&typeof f=="object"&&typeof f.then=="function"?f.then(v,_=>Qa(_,$(this,Ks)&&$(this,Ks).parent)):v(f)})};function id(a,s,t,r){const o=Ri()?_i:cl;var d=a.filter(g=>!g.settled);if(t.length===0&&d.length===0){r(s.map(o));return}var u=Ct,v=rd(),f=d.length===1?d[0].promise:d.length>1?Promise.all(d.map(g=>g.promise)):null;function _(g){if(!(u.f&fa)){v();try{r(g)}catch(M){Qa(M,u)}ir()}}var b=bo();if(t.length===0){f.then(()=>_(s.map(o))).finally(b);return}function m(){Promise.all(t.map(g=>ld(g))).then(g=>_([...s.map(o),...g])).catch(g=>Qa(g,u)).finally(b)}f?f.then(()=>{v(),m(),ir()}):m()}function rd(){var a=Ct,s=It,t=ms,r=ut;return function(d=!0){Na(a),ha(s),Xn(t),d&&!(a.f&fa)&&(r==null||r.activate(),r==null||r.apply())}}function ir(a=!0){Na(null),ha(null),Xn(null),a&&(ut==null||ut.deactivate())}function bo(){var a=Ct,s=a.b,t=ut,r=s.is_rendered();return s.update_pending_count(1,t),t.increment(r,a),()=>{s.update_pending_count(-1,t),t.decrement(r,a)}}function _i(a){var s=zs|As;return Ct!==null&&(Ct.f|=si),{ctx:ms,deps:null,effects:null,equals:ro,f:s,fn:a,reactions:null,rv:0,v:Ss,wv:0,parent:Ct,ac:null}}const qi=Symbol("obsolete");function ld(a,s,t){let r=Ct;r===null&&Mc();var o=void 0,d=Cn(Ss),u=!It,v=new Set;return md(()=>{var M;var f=Ct,_=ao();o=_.promise;try{Promise.resolve(a()).then(_.resolve,A=>{A!==_r&&_.reject(A)}).finally(ir)}catch(A){_.reject(A),ir()}var b=ut;if(u){if(f.f&Mn)var m=bo();if(r.b.is_rendered())(M=b.async_deriveds.get(f))==null||M.reject(qi);else for(const A of v.values())A.reject(qi);v.add(_),b.async_deriveds.set(f,_)}const g=(A,H=void 0)=>{m==null||m(),v.delete(_),H!==qi&&(b.activate(),H?(d.f|=tn,Qn(d,H)):(d.f&tn&&(d.f^=tn),Qn(d,A)),b.deactivate())};_.promise.then(g,A=>g(null,A||"unknown"))}),gr(()=>{for(const f of v)f.reject(qi)}),new Promise(f=>{function _(b){function m(){b===o?f(d):_(o)}b.then(m,m)}_(o)})}function ue(a){const s=_i(a);return Lo(s),s}function cl(a){const s=_i(a);return s.equals=oo,s}function od(a){var s=a.effects;if(s!==null){a.effects=null;for(var t=0;t0&&!ko&&dd()}return s}function dd(){ko=!1;for(const a of rr){a.f&Es&&hs(a,La);let s;try{s=Vi(a)}catch{s=!0}s&&ei(a)}rr.clear()}function ui(a){l(a,a.v+1)}function To(a,s,t){var r=a.reactions;if(r!==null)for(var o=Ri(),d=r.length,u=0;u{if(Tn===d)return v();var f=It,_=Tn;ha(null),Il(d);var b=v();return ha(f),Il(_),b};return r&&t.set("length",T(a.length)),new Proxy(a,{defineProperty(v,f,_){(!("value"in _)||_.configurable===!1||_.enumerable===!1||_.writable===!1)&&Lc();var b=t.get(f);return b===void 0?u(()=>{var m=T(_.value);return t.set(f,m),m}):l(b,_.value,!0),!0},deleteProperty(v,f){var _=t.get(f);if(_===void 0){if(f in v){const b=u(()=>T(Ss));t.set(f,b),ui(o)}}else l(_,Ss),ui(o);return!0},get(v,f,_){var M;if(f===wn)return a;var b=t.get(f),m=f in v;if(b===void 0&&(!m||(M=Fn(v,f))!=null&&M.writable)&&(b=u(()=>{var A=kt(m?v[f]:Ss),H=T(A);return H}),t.set(f,b)),b!==void 0){var g=e(b);return g===Ss?void 0:g}return Reflect.get(v,f,_)},getOwnPropertyDescriptor(v,f){var _=Reflect.getOwnPropertyDescriptor(v,f);if(_&&"value"in _){var b=t.get(f);b&&(_.value=e(b))}else if(_===void 0){var m=t.get(f),g=m==null?void 0:m.v;if(m!==void 0&&g!==Ss)return{enumerable:!0,configurable:!0,value:g,writable:!0}}return _},has(v,f){var g;if(f===wn)return!0;var _=t.get(f),b=_!==void 0&&_.v!==Ss||Reflect.has(v,f);if(_!==void 0||Ct!==null&&(!b||(g=Fn(v,f))!=null&&g.writable)){_===void 0&&(_=u(()=>{var M=b?kt(v[f]):Ss,A=T(M);return A}),t.set(f,_));var m=e(_);if(m===Ss)return!1}return b},set(v,f,_,b){var ce;var m=t.get(f),g=f in v;if(r&&f==="length")for(var M=_;MT(Ss)),t.set(M+"",A))}if(m===void 0)(!g||(ce=Fn(v,f))!=null&&ce.writable)&&(m=u(()=>T(void 0)),l(m,kt(_)),t.set(f,m));else{g=m.v!==Ss;var H=u(()=>kt(_));l(m,H)}var E=Reflect.getOwnPropertyDescriptor(v,f);if(E!=null&&E.set&&E.set.call(b,_),!g){if(r&&typeof f=="string"){var O=t.get("length"),ve=Number(f);Number.isInteger(ve)&&ve>=O.v&&l(O,ve+1)}ui(o)}return!0},ownKeys(v){e(o);var f=Reflect.ownKeys(v).filter(m=>{var g=t.get(m);return g===void 0||g.v!==Ss});for(var[_,b]of t)b.v!==Ss&&!(_ in v)&&f.push(_);return f},setPrototypeOf(){Nc()}})}function Pl(a){try{if(a!==null&&typeof a=="object"&&wn in a)return a[wn]}catch{}return a}function vd(a,s){return Object.is(Pl(a),Pl(s))}var Jr,So,Eo,Co;function ud(){if(Jr===void 0){Jr=window,So=/Firefox/.test(navigator.userAgent);var a=Element.prototype,s=Node.prototype,t=Text.prototype;Eo=Fn(s,"firstChild").get,Co=Fn(s,"nextSibling").get,El(a)&&(a[Vr]=void 0,a[Ki]=null,a[$r]=void 0,a.__e=void 0),El(t)&&(t[ii]=void 0)}}function Ua(a=""){return document.createTextNode(a)}function Oa(a){return Eo.call(a)}function Fi(a){return Co.call(a)}function n(a,s){return Oa(a)}function wt(a,s=!1){{var t=Oa(a);return t instanceof Comment&&t.data===""?Fi(t):t}}function i(a,s=1,t=!1){let r=a;for(;s--;)r=Fi(r);return r}function pd(a){a.textContent=""}function Ao(){return!1}function Mo(a,s,t){return document.createElementNS(s!=null?s:Xl,a,void 0)}let Dl=!1;function fd(){Dl||(Dl=!0,document.addEventListener("reset",a=>{Promise.resolve().then(()=>{var s;if(!a.defaultPrevented)for(const t of a.target.elements)(s=t[Gi])==null||s.call(t)})},{capture:!0}))}function hr(a){var s=It,t=Ct;ha(null),Na(null);try{return a()}finally{ha(s),Na(t)}}function vl(a,s,t,r=t){a.addEventListener(s,()=>hr(t));const o=a[Gi];o?a[Gi]=()=>{o(),r(!0)}:a[Gi]=()=>r(!0),fd()}function _d(a){Ct===null&&(It===null&&Ic(),zc()),Ha&&Dc()}function hd(a,s){var t=s.last;t===null?s.last=s.first=a:(t.next=a,a.prev=t,s.last=a)}function Ka(a,s){var u;var t=Ct;t!==null&&t.f&js&&(a|=js);var r={ctx:ms,deps:null,nodes:null,f:a|As|pa,first:null,fn:s,last:null,next:null,parent:t,b:t&&t.b,prev:null,teardown:null,wv:0,ac:null};ut==null||ut.register_created_effect(r);var o=r;if(a&Jn)Nn!==null?Nn.push(r):En.ensure().schedule(r);else if(s!==null){try{ei(r)}catch(v){throw Ys(r),v}o.deps===null&&o.teardown===null&&o.nodes===null&&o.first===o.last&&!(o.f&si)&&(o=o.first,a&Sa&&a&Zn&&o!==null&&(o.f|=Zn))}if(o!==null&&(o.parent=t,t!==null&&hd(o,t),It!==null&&It.f&zs&&!(a&nn))){var d=It;((u=d.effects)!=null?u:d.effects=[]).push(o)}return r}function ul(){return It!==null&&!Ea}function gr(a){const s=Ka(fr,null);return hs(s,Es),s.teardown=a,s}function gs(a){var o;_d();var s=Ct.f,t=!It&&(s&Aa)!==0&&(s&Mn)===0;if(t){var r=ms;((o=r.e)!=null?o:r.e=[]).push(a)}else return Po(a)}function Po(a){return Ka(Jn|Sc,a)}function gd(a){En.ensure();const s=Ka(nn|si,a);return(t={})=>new Promise(r=>{t.outro?xn(s,()=>{Ys(s),r(void 0)}):(Ys(s),r(void 0))})}function ja(a){return Ka(Jn,a)}function md(a){return Ka(Vn|si,a)}function mr(a,s=0){return Ka(fr|s,a)}function w(a,s=[],t=[],r=[]){id(r,s,t,o=>{Ka(fr,()=>a(...o.map(e)))})}function pl(a,s=0){var t=Ka(Sa|s,a);return t}function va(a){return Ka(Aa|si,a)}function Do(a){var s=a.teardown;if(s!==null){const t=Ha,r=It;zl(!0),ha(null);try{s.call(null)}finally{zl(t),ha(r)}}}function fl(a,s=!1){var t=a.first;for(a.first=a.last=null;t!==null;){const o=t.ac;o!==null&&hr(()=>{o.abort(_r)});var r=t.next;t.f&nn?t.parent=null:Ys(t,s),t=r}}function bd(a){for(var s=a.first;s!==null;){var t=s.next;s.f&Aa||Ys(s),s=t}}function Ys(a,s=!0){var t=!1;(s||a.f&Tc)&&a.nodes!==null&&a.nodes.end!==null&&(zo(a.nodes.start,a.nodes.end),t=!0),hs(a,Fr),fl(a,s&&!t),hi(a,0);var r=a.nodes&&a.nodes.t;if(r!==null)for(const d of r)d.stop();Do(a),a.f^=Fr,a.f|=fa;var o=a.parent;o!==null&&o.first!==null&&Io(a),a.next=a.prev=a.teardown=a.ctx=a.deps=a.fn=a.nodes=a.ac=a.b=null}function zo(a,s){for(;a!==null;){var t=a===s?null:Fi(a);a.remove(),a=t}}function Io(a){var s=a.parent,t=a.prev,r=a.next;t!==null&&(t.next=r),r!==null&&(r.prev=t),s!==null&&(s.first===a&&(s.first=r),s.last===a&&(s.last=t))}function xn(a,s,t=!0){var r=[];Oo(a,r,!0);var o=()=>{t&&Ys(a),s&&s()},d=r.length;if(d>0){var u=()=>--d||o();for(var v of r)v.out(u)}else o()}function Oo(a,s,t){if(!(a.f&js)){a.f^=js;var r=a.nodes&&a.nodes.t;if(r!==null)for(const v of r)(v.is_global||t)&&s.push(v);for(var o=a.first;o!==null;){var d=o.next;if(!(o.f&nn)){var u=(o.f&Zn)!==0||(o.f&Aa)!==0&&(a.f&Sa)!==0;Oo(o,s,u?t:!1)}o=d}}}function _l(a){Ro(a,!0)}function Ro(a,s){if(a.f&js){a.f^=js,a.f&Es||(hs(a,As),En.ensure().schedule(a));for(var t=a.first;t!==null;){var r=t.next,o=(t.f&Zn)!==0||(t.f&Aa)!==0;Ro(t,o?s:!1),t=r}var d=a.nodes&&a.nodes.t;if(d!==null)for(const u of d)(u.is_global||s)&&u.in()}}function hl(a,s){if(a.nodes)for(var t=a.nodes.start,r=a.nodes.end;t!==null;){var o=t===r?null:Fi(t);s.append(t),t=o}}let Qi=!1,Ha=!1;function zl(a){Ha=a}let It=null,Ea=!1;function ha(a){It=a}let Ct=null;function Na(a){Ct=a}let _a=null;function Lo(a){It!==null&&(_a===null?_a=[a]:_a.push(a))}let Gs=null,ea=0,la=null;function yd(a){la=a}let No=1,fn=0,Tn=fn;function Il(a){Tn=a}function Fo(){return++No}function Vi(a){var s=a.f;if(s&As)return!0;if(s&zs&&(a.f&=~Sn),s&La){for(var t=a.deps,r=t.length,o=0;oa.wv)return!0}s&pa&&Ds===null&&hs(a,Es)}return!1}function Vo(a,s,t=!0){var r=a.reactions;if(r!==null&&!(_a!==null&&Yn.call(_a,a)))for(var o=0;o{a.ac.abort(_r)}),a.ac=null);try{a.f|=nr;var b=a.fn,m=b();a.f|=Mn;var g=a.deps,M=ut==null?void 0:ut.is_fork;if(Gs!==null){var A;if(M||hi(a,ea),g!==null&&ea>0)for(g.length=ea+Gs.length,A=0;At==null?void 0:t.call(this,d))}return a.startsWith("pointer")||a.startsWith("touch")||a==="wheel"?sn(()=>{s.addEventListener(a,o,r)}):s.addEventListener(a,o,r),o}function Ra(a,s,t,r,o){var d={capture:r,passive:o},u=xd(a,s,t,d);(s===document.body||s===window||s===document||s instanceof HTMLMediaElement)&&gr(()=>{s.removeEventListener(a,u,d)})}function z(a,s,t){var r;((r=s[_n])!=null?r:s[_n]={})[a]=t}function us(a){for(var s=0;s{throw ve});throw g}}finally{a[_n]=s,delete a.currentTarget,ha(b),Na(m)}}}var Jl;const Ar=((Jl=globalThis==null?void 0:globalThis.window)==null?void 0:Jl.trustedTypes)&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:a=>a});function Td(a){var s;return(s=Ar==null?void 0:Ar.createHTML(a))!=null?s:a}function Wo(a){var s=Mo("template");return s.innerHTML=Td(a.replaceAll("","")),s.content}function An(a,s){var t=Ct;t.nodes===null&&(t.nodes={start:a,end:s,a:null,t:null})}function p(a,s){var t=(s&hc)!==0,r=(s&gc)!==0,o,d=!a.startsWith("");return()=>{o===void 0&&(o=Wo(d?a:""+a),t||(o=Oa(o)));var u=r||So?document.importNode(o,!0):o.cloneNode(!0);if(t){var v=Oa(u),f=u.lastChild;An(v,f)}else An(u,u);return u}}function Sd(a,s,t="svg"){var r=!a.startsWith(""),o=`<${t}>${r?a:""+a}`,d;return()=>{if(!d){var u=Wo(o),v=Oa(u);d=Oa(v)}var f=d.cloneNode(!0);return An(f,f),f}}function Uo(a,s){return Sd(a,s,"svg")}function qe(a=""){{var s=Ua(a+"");return An(s,s),s}}function $i(){var a=document.createDocumentFragment(),s=document.createComment(""),t=Ua();return a.append(s,t),An(s,t),a}function c(a,s){a!==null&&a.before(s)}const Ed=["touchstart","touchmove"];function Cd(a){return Ed.includes(a)}function y(a,s){var r;var t=s==null?"":typeof s=="object"?`${s}`:s;t!==((r=a[ii])!=null?r:a[ii]=a.nodeValue)&&(a[ii]=t,a.nodeValue=`${t}`)}function Ad(a,s){return Md(a,s)}const ji=new Map;function Md(a,{target:s,anchor:t,props:r={},events:o,context:d,intro:u=!0,transformError:v}){ud();var f=void 0,_=gd(()=>{var b=t!=null?t:s.appendChild(Ua());ed(b,{pending:()=>{}},M=>{Ot({});var A=ms;d&&(A.c=d),o&&(r.$$events=o),f=a(M,r)||{},Rt()},v);var m=new Set,g=M=>{for(var A=0;A{var E;for(var M of m)for(const O of[s,document]){var A=ji.get(O),H=A.get(M);--H==0?(O.removeEventListener(M,Xr),A.delete(M),A.size===0&&ji.delete(O)):A.set(M,H)}Zr.delete(g),b!==t&&((E=b.parentNode)==null||E.removeChild(b))}});return Pd.set(f,_),f}let Pd=new WeakMap;var Ta,za,na,yn,ki,xi,ur;class Dd{constructor(s,t=!0){Hs(this,"anchor");vt(this,Ta,new Map);vt(this,za,new Map);vt(this,na,new Map);vt(this,yn,new Set);vt(this,ki,!0);vt(this,xi,s=>{if($(this,Ta).has(s)){var t=$(this,Ta).get(s),r=$(this,za).get(t);if(r)_l(r),$(this,yn).delete(t);else{var o=$(this,na).get(t);o&&($(this,za).set(t,o.effect),$(this,na).delete(t),o.fragment.lastChild.remove(),this.anchor.before(o.fragment),r=o.effect)}for(const[d,u]of $(this,Ta)){if($(this,Ta).delete(d),d===s)break;const v=$(this,na).get(u);v&&(Ys(v.effect),$(this,na).delete(u))}for(const[d,u]of $(this,za)){if(d===t||$(this,yn).has(d))continue;const v=()=>{if(Array.from($(this,Ta).values()).includes(d)){var _=document.createDocumentFragment();hl(u,_),_.append(Ua()),$(this,na).set(d,{effect:u,fragment:_})}else Ys(u);$(this,yn).delete(d),$(this,za).delete(d)};$(this,ki)||!r?($(this,yn).add(d),xn(u,v,!1)):v()}}});vt(this,ur,s=>{$(this,Ta).delete(s);const t=Array.from($(this,Ta).values());for(const[r,o]of $(this,na))t.includes(r)||(Ys(o.effect),$(this,na).delete(r))});this.anchor=s,mt(this,ki,t)}ensure(s,t){var r=ut,o=Ao();if(t&&!$(this,za).has(s)&&!$(this,na).has(s))if(o){var d=document.createDocumentFragment(),u=Ua();d.append(u),$(this,na).set(s,{effect:va(()=>t(u)),fragment:d})}else $(this,za).set(s,va(()=>t(this.anchor)));if($(this,Ta).set(r,s),o){for(const[v,f]of $(this,za))v===s?r.unskip_effect(f):r.skip_effect(f);for(const[v,f]of $(this,na))v===s?r.unskip_effect(f.effect):r.skip_effect(f.effect);r.oncommit($(this,xi)),r.ondiscard($(this,ur))}else $(this,xi).call(this,r)}}Ta=new WeakMap,za=new WeakMap,na=new WeakMap,yn=new WeakMap,ki=new WeakMap,xi=new WeakMap,ur=new WeakMap;function Xt(a){ms===null&&io(),ti&&ms.l!==null?zd(ms).m.push(a):gs(()=>{const s=Fa(a);if(typeof s=="function")return s})}function br(a){ms===null&&io(),Xt(()=>()=>Fa(a))}function zd(a){var t;var s=a.l;return(t=s.u)!=null?t:s.u={a:[],b:[],m:[]}}function k(a,s,t=!1){var r=new Dd(a),o=t?Zn:0;function d(u,v){r.ensure(u,v)}pl(()=>{var u=!1;s((v,f=0)=>{u=!0,d(f,v)}),u||d(-1,null)},o)}function ht(a,s){return s}function Id(a,s,t){var m;for(var r=[],o=s.length,d,u=s.length,v=0;v{if(d){if(d.pending.delete(g),d.done.add(g),d.pending.size===0){var M=a.outrogroups;Qr(a,pr(d.done)),M.delete(d),M.size===0&&(a.outrogroups=null)}}else u-=1},!1)}if(u===0){var f=r.length===0&&t!==null;if(f){var _=t,b=_.parentNode;pd(b),b.append(_),a.items.clear()}Qr(a,s,!f)}else d={pending:new Set(s),done:new Set},((m=a.outrogroups)!=null?m:a.outrogroups=new Set).add(d)}function Qr(a,s,t=!0){var r;if(a.pending.size>0){r=new Set;for(const u of a.pending.values())for(const v of u)r.add(a.items.get(v).e)}for(var o=0;o{var ce=t();return nl(ce)?ce:ce==null?[]:pr(ce)}),g,M=new Map,A=!0;function H(ce){ve.effect.f&fa||(ve.pending.delete(ce),ve.fallback=b,Od(ve,g,u,s,r),b!==null&&(g.length===0?b.f&Ia?(b.f^=Ia,oi(b,null,u)):_l(b):xn(b,()=>{b=null})))}function E(ce){ve.pending.delete(ce)}var O=pl(()=>{g=e(m);for(var ce=g.length,me=new Set,ie=ut,I=Ao(),V=0;Vd(u)):(b=va(()=>d(zn!=null?zn:zn=Ua())),b.f|=Ia)),ce>me.size&&Pc(),!A)if(M.set(ie,me),I){for(const[D,P]of v)me.has(D)||ie.skip_effect(P.e);ie.oncommit(H),ie.ondiscard(E)}else H(ie);e(m)}),ve={effect:O,items:v,pending:M,outrogroups:null,fallback:b};A=!1}function ni(a){for(;a!==null&&!(a.f&Aa);)a=a.next;return a}function Od(a,s,t,r,o){var ke,D,P,he,B,L,ge,De,fe;var d=(r&cc)!==0,u=s.length,v=a.items,f=ni(a.effect.first),_,b=null,m,g=[],M=[],A,H,E,O;if(d)for(O=0;O0){var be=r&Zl&&u===0?t:null;if(d){for(O=0;O{var G,J;if(m!==void 0)for(E of m)(J=(G=E.nodes)==null?void 0:G.a)==null||J.apply()})}function Rd(a,s,t,r,o,d,u,v){var f=u&lc?u&dc?Cn(t):xo(t,!1,!1):null,_=u&oc?Cn(o):null;return{v:f,i:_,e:va(()=>(d(s,f!=null?f:t,_!=null?_:o,v),()=>{a.delete(r)}))}}function oi(a,s,t){if(a.nodes)for(var r=a.nodes.start,o=a.nodes.end,d=s&&!(s.f&Ia)?s.nodes.start:t;r!==null;){var u=Fi(r);if(d.before(r),r===o)return;r=u}}function Ya(a,s,t){s===null?a.effect.first=t:s.next=t,t===null?a.effect.last=s:t.prev=s}function Rl(a,s,t=!1,r=!1,o=!1,d=!1){var u=a,v="";if(t)var f=a;w(()=>{var M;var _=Ct;if(v!==(v=(M=s())!=null?M:"")){if(t){_.nodes=null,f.innerHTML=v,v!==""&&An(Oa(f),f.lastChild);return}if(_.nodes!==null&&(zo(_.nodes.start,_.nodes.end),_.nodes=null),v!==""){var b=r?mc:o?bc:void 0,m=Mo(r?"svg":o?"math":"template",b);m.innerHTML=v;var g=r||o?m:m.content;if(An(Oa(g),g.lastChild),r||o)for(;Oa(g);)u.before(Oa(g));else u.before(g)}}})}function en(a,s,t){ja(()=>{var r=Fa(()=>s(a,t==null?void 0:t())||{});if(r!=null&&r.destroy)return()=>r.destroy()})}function Ho(a){var s,t,r="";if(typeof a=="string"||typeof a=="number")r+=a;else if(typeof a=="object")if(Array.isArray(a)){var o=a.length;for(s=0;s=0;){var v=u+d;(u===0||Ll.includes(r[u-1]))&&(v===r.length||Ll.includes(r[v]))?r=(u===0?"":r.substring(0,u))+r.substring(v+1):u=v}}return r===""?null:r}function Nl(a,s=!1){var t=s?" !important;":";",r="";for(var o of Object.keys(a)){var d=a[o];d!=null&&d!==""&&(r+=" "+o+": "+d+t)}return r}function Mr(a){return a[0]!=="-"||a[1]!=="-"?a.toLowerCase():a}function Fd(a,s){if(s){var t="",r,o;if(Array.isArray(s)?(r=s[0],o=s[1]):r=s,a){a=String(a).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var d=!1,u=0,v=!1,f=[];r&&f.push(...Object.keys(r).map(Mr)),o&&f.push(...Object.keys(o).map(Mr));var _=0,b=-1;const H=a.length;for(var m=0;m{Ko(a,a.__value)});s.observe(a,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),gr(()=>{s.disconnect()})}function Fl(a,s,t=s){var r=new WeakSet,o=!0;vl(a,"change",d=>{var _;var u=d?"[selected]":":checked",v;if(a.multiple)v=[].map.call(a.querySelectorAll(u),pi);else{var f=(_=a.querySelector(u))!=null?_:a.querySelector("option:not([disabled])");v=f&&pi(f)}t(v),a.__value=v,ut!==null&&r.add(ut)}),ja(()=>{var d=s();if(a===document.activeElement){var u=ut;if(r.has(u))return}if(Ko(a,d,o),o&&d===void 0){var v=a.querySelector(":checked");v!==null&&(d=pi(v),t(d))}a.__value=d,o=!1}),Vd(a)}function pi(a){return"__value"in a?a.__value:a.value}const $d=Symbol("is custom element"),Bd=Symbol("is html"),qd=Ac?"progress":"PROGRESS";function yr(a,s){var t=gl(a);t.value===(t.value=s!=null?s:void 0)||a.value===s&&(s!==0||a.nodeName!==qd)||(a.value=s!=null?s:"")}function jd(a,s){var t=gl(a);t.checked!==(t.checked=s!=null?s:void 0)&&(a.checked=s)}function St(a,s,t,r){var o=gl(a);o[s]!==(o[s]=t)&&(s==="loading"&&(a[Cc]=t),t==null?a.removeAttribute(s):typeof t!="string"&&Wd(a).includes(s)?a[s]=t:a.setAttribute(s,t))}function gl(a){var s;return(s=a[Ki])!=null?s:a[Ki]={[$d]:a.nodeName.includes("-"),[Bd]:a.namespaceURI===Xl}}var Vl=new Map;function Wd(a){var s=a.getAttribute("is")||a.nodeName,t=Vl.get(s);if(t)return t;Vl.set(s,t=[]);for(var r,o=a,d=Element.prototype;d!==o;){r=wc(o);for(var u in r)r[u].set&&u!=="innerHTML"&&u!=="textContent"&&u!=="innerText"&&t.push(u);o=to(o)}return t}function Ze(a,s,t=s){var r=new WeakSet;vl(a,"input",async o=>{var d=o?a.defaultValue:a.value;if(d=Dr(a)?zr(d):d,t(d),ut!==null&&r.add(ut),await kd(),d!==(d=s())){var u=a.selectionStart,v=a.selectionEnd,f=a.value.length;if(a.value=d!=null?d:"",v!==null){var _=a.value.length;u===v&&v===f&&_>f?(a.selectionStart=_,a.selectionEnd=_):(a.selectionStart=u,a.selectionEnd=Math.min(v,_))}}}),Fa(s)==null&&a.value&&(t(Dr(a)?zr(a.value):a.value),ut!==null&&r.add(ut)),mr(()=>{var o=s();if(a===document.activeElement){var d=ut;if(r.has(d))return}Dr(a)&&o===zr(a.value)||a.type==="date"&&!o&&!a.value||o!==a.value&&(a.value=o!=null?o:"")})}function is(a,s,t=s){vl(a,"change",r=>{var o=r?a.defaultChecked:a.checked;t(o)}),Fa(s)==null&&t(a.checked),mr(()=>{var r=s();a.checked=!!r})}function Dr(a){var s=a.type;return s==="number"||s==="range"}function zr(a){return a===""?null:+a}function Ir(a,s){return a===s||(a==null?void 0:a[wn])===s}function ml(a={},s,t,r){var o=ms.r,d=Ct;return ja(()=>{var u,v;return mr(()=>{u=v,v=[],Fa(()=>{Ir(t(...v),a)||(s(a,...v),u&&Ir(t(...u),a)&&s(null,...u))})}),()=>{let f=d;for(;f!==o&&f.parent!==null&&f.parent.f&Fr;)f=f.parent;const _=()=>{v&&Ir(t(...v),a)&&s(null,...v)},b=f.teardown;f.teardown=()=>{_(),b==null||b()}}}),a}function Nt(a,s,t,r){var me,ie;var o=!ti||(t&uc)!==0,d=(t&fc)!==0,u=(t&_c)!==0,v=r,f=!0,_=void 0,b=()=>u&&o?(_!=null||(_=_i(r)),e(_)):(f&&(f=!1,v=u?Fa(r):r),v);let m;if(d){var g=wn in a||Ec in a;m=(ie=(me=Fn(a,s))==null?void 0:me.set)!=null?ie:g&&s in a?I=>a[s]=I:void 0}var M,A=!1;d?[M,A]=Kc(()=>a[s]):M=a[s],M===void 0&&r!==void 0&&(M=b(),m&&(o&&Rc(),m(M)));var H;if(o?H=()=>{var I=a[s];return I===void 0?b():(f=!0,I)}:H=()=>{var I=a[s];return I!==void 0&&(v=void 0),I===void 0?v:I},o&&!(t&pc))return H;if(m){var E=a.$$legacy;return function(I,V){return arguments.length>0?((!o||!V||E||A)&&m(V?H():I),I):H()}}var O=!1,ve=(t&vc?_i:cl)(()=>(O=!1,H()));d&&e(ve);var ce=Ct;return function(I,V){if(arguments.length>0){const Y=V?e(ve):o&&d?kt(I):I;return l(ve,Y),O=!0,v!==void 0&&(v=Y),I}return Ha&&O||ce.f&fa?ve.v:e(ve)}}const Ud="modulepreload",Hd=function(a){return"/"+a},$l={},Kd=function(s,t,r){let o=Promise.resolve();if(t&&t.length>0){document.getElementsByTagName("link");const u=document.querySelector("meta[property=csp-nonce]"),v=(u==null?void 0:u.nonce)||(u==null?void 0:u.getAttribute("nonce"));o=Promise.allSettled(t.map(f=>{if(f=Hd(f),f in $l)return;$l[f]=!0;const _=f.endsWith(".css"),b=_?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${f}"]${b}`))return;const m=document.createElement("link");if(m.rel=_?"stylesheet":Ud,_||(m.as="script"),m.crossOrigin="",m.href=f,v&&m.setAttribute("nonce",v),document.head.appendChild(m),_)return new Promise((g,M)=>{m.addEventListener("load",g),m.addEventListener("error",()=>M(new Error(`Unable to preload CSS for ${f}`)))})}))}function d(u){const v=new Event("vite:preloadError",{cancelable:!0});if(v.payload=u,window.dispatchEvent(v),!v.defaultPrevented)throw u}return o.then(u=>{for(const v of u||[])v.status==="rejected"&&d(v.reason);return s().catch(d)})},wr="/assets/app_icon-CfHainhY.png";function Gd(a,s,t,r){if(typeof s=="function"?a!==s||!r:!s.has(a))throw new TypeError("Cannot read private member from an object whose class did not declare it");return t==="m"?r:t==="a"?r.call(a):r?r.value:s.get(a)}function Yd(a,s,t,r,o){if(typeof s=="function"?a!==s||!0:!s.has(a))throw new TypeError("Cannot write private member to an object whose class did not declare it");return s.set(a,t),t}var er;const ga="__TAURI_TO_IPC_KEY__";function Jd(a,s=!1){return window.__TAURI_INTERNALS__.transformCallback(a,s)}async function S(a,s={},t){return window.__TAURI_INTERNALS__.invoke(a,s,t)}class Zd{get rid(){return Gd(this,er,"f")}constructor(s){er.set(this,void 0),Yd(this,er,s)}async close(){return S("plugin:resources|close",{rid:this.rid})}}er=new WeakMap;var ta;(function(a){a.WINDOW_RESIZED="tauri://resize",a.WINDOW_MOVED="tauri://move",a.WINDOW_CLOSE_REQUESTED="tauri://close-requested",a.WINDOW_DESTROYED="tauri://destroyed",a.WINDOW_FOCUS="tauri://focus",a.WINDOW_BLUR="tauri://blur",a.WINDOW_SCALE_FACTOR_CHANGED="tauri://scale-change",a.WINDOW_THEME_CHANGED="tauri://theme-changed",a.WINDOW_CREATED="tauri://window-created",a.WINDOW_SUSPENDED="tauri://suspended",a.WINDOW_RESUMED="tauri://resumed",a.WEBVIEW_CREATED="tauri://webview-created",a.DRAG_ENTER="tauri://drag-enter",a.DRAG_OVER="tauri://drag-over",a.DRAG_DROP="tauri://drag-drop",a.DRAG_LEAVE="tauri://drag-leave"})(ta||(ta={}));async function Go(a,s){window.__TAURI_EVENT_PLUGIN_INTERNALS__.unregisterListener(a,s),await S("plugin:event|unlisten",{event:a,eventId:s})}async function ks(a,s,t){var r;const o=typeof(t==null?void 0:t.target)=="string"?{kind:"AnyLabel",label:t.target}:(r=t==null?void 0:t.target)!==null&&r!==void 0?r:{kind:"Any"};return S("plugin:event|listen",{event:a,target:o,handler:Jd(s)}).then(d=>async()=>Go(a,d))}async function Xd(a,s,t){return ks(a,r=>{Go(a,r.id),s(r)},t)}async function Yo(a,s){await S("plugin:event|emit",{event:a,payload:s})}async function Qd(a,s,t){await S("plugin:event|emit_to",{target:typeof a=="string"?{kind:"AnyLabel",label:a}:a,event:s,payload:t})}const ev={engine:{backend:"whisper-cpp",whisper_cpp:{model_dir:"",model_size:"tiny",device:"auto",threads:0,language:"auto"},moonshine:{model_size:"base",language:"en"},parakeet:{model_size:"tdt-0.6b-v3",language:"auto"},remote_openai:{endpoint:"http://localhost:8000/v1",api_key:null,model:"whisper-1",language:"",timeout_secs:30},s1_mini:{enabled:!1,styling:"semi-formal"}},audio:{vad_threshold:.5,input_device_index:null,evdev_device:null,noise_suppression:!1,gain:1,dynamic_stream:!0},ui:{show_overlay:!0,overlay_style:"mono_bars",overlay_position:"center",overlay_monitor:"primary",auto_show_settings:!1,show_notification:!1,show_command_overlay:!0,command_overlay_duration_secs:3},features:{remove_fillers:!0,custom_vocabulary:["VoxCtrl","Hey Vox"],spoken_punctuation:!0,auto_format_lists:!0,snippets:{},early_command_detection:!0},openai:{enabled:!1,model:"llama3.2:1b",mode:"clean",custom_prompt:null,system_prompt:"Fix grammar and punctuation only. Return only the corrected text, no commentary.",user_prompt:"{text}",endpoint:"http://localhost:11434",api_key:null,timeout_secs:8},tts:{enabled:!1,engine:"espeak",voice:"en-us-lessac-medium",voice_dir:"",stop_key:["KEY_ESCAPE"],response_overlay:!0,speed:1,gpu:!1,hf_token:null,pocket_tts:{voice:"alba",prewarm:!1,voice_dir:"",gpu:!1},inflect_micro:{model_dir:"",seed:0,noise_scale:.667,prewarm:!1},breeze_tts_2:{voice_mode:"prompt",cloned_voice:"alba",speaker_prompt:"A calm and clear female voice speaking at a natural pace",model_dir:"",prewarm:!1,gpu:!1},vox_cpm_2:{voice_mode:"prompt",cloned_voice:"alba",voice_dir:"",speaker_prompt:"A calm young female voice speaking clearly with a gentle tone.",ultimate_cloning:!1,model_dir:"",prewarm:!1,gpu:!1},memory_mode:"always_loaded",idle_unload_secs:900,snippets:{VoxCtrl:"Vox Control"}},mcp:{server_enabled:!1,record_timeout:15,visual_feedback:!0}},Lt=Li(ev),Va=Li(!1),lr=Li(!1);let gi=!1,Or=null;async function tv(){try{const a=await S("get_config");Lt.set(a),Va.set(!1),lr.set(!0),setTimeout(()=>{gi=!0},0)}catch(a){console.error("loadConfig:",a),lr.set(!0),setTimeout(()=>{gi=!0},0)}}async function bl(a){await S("save_config",{newConfig:a}),Va.set(!1)}Lt.subscribe(a=>{gi&&(Or&&clearTimeout(Or),Or=setTimeout(async()=>{try{await bl(a),console.log("Config auto-saved successfully!")}catch(s){console.error("Auto-saving config failed:",s)}},400))});tv();ks("config-changed",a=>{gi=!1,Lt.set(a.payload),setTimeout(()=>{gi=!0},0)}).catch(a=>{console.error("Failed to setup config-changed listener:",a)});const xs=Li({recording:!1,processing:!1,speaking:!1,mcp_recording:!1,audio_ready:!0,word_count:0,active_target_id:"default",active_target_label:"Focused Window"}),sv=Ni(xs,a=>a.recording),av=Ni(xs,a=>a.speaking),nv=Ni(xs,a=>a.mcp_recording);Ni(xs,a=>a.word_count);Ni(xs,a=>{var s;return(s=a.active_target_label)!=null?s:"Focused Window"});let Jo=0;ks("status-tick",a=>{Jo=Date.now(),xs.set(a.payload)});S("get_status").then(xs.set).catch(console.error);const iv=2e3,rv=1e3;setInterval(()=>{Date.now()-Jo{})},rv);var lv=p('

          '),ov=p(`

          Using the HF_TOKEN environment variable. It takes precedence over a saved - token and is not written to your config.

          `),cv=p('

          '),dv=p(`

          `),vv=p('

          '),uv=p(`

          General

          Setup

          Run the first-launch setup wizard again

          Walks through the engine, model, hotkey, overlay and voice choices in one flow, and downloads - whatever it needs. Your current settings stay in place until you change them in the wizard.

          Hugging Face Access Token

          Hugging Face access token

          Used by every gated model VoxCtrl can download — Pocket-TTS, Breeze-TTS-2, and VoxCPM2 in - the TTS tab. Create a token at huggingface.co/settings/tokens and accept each - model's license on its Hugging Face page before downloading. Enter it once here; the setup - wizard reads and writes the same token, so the two always match.

          Updates

          VoxCtrl never checks for updates on its own. Press "Check now" to ask GitHub whether a newer - release has been published — that request carries nothing about you or your machine.

          Check now

          MCP Server

          How long transcribe_voice listens when the calling agent does not ask for a - specific timeout. An explicit timeout_seconds in the tool call still wins.

          Socket: /tmp/voxctrl-mcp.sock (Linux) / \\\\.\\pipe\\voxctrl-mcp (Windows)

          `);function pv(a,s){Ot(s,!0);let t=Nt(s,"cfg",15);function r(){Lt.set(t()),Va.set(!0)}let o=T(null);const d=ue(()=>!!e(o)),u=ue(()=>{var R,ee;return(ee=(R=e(o))!=null?R:t().tts.hf_token)!=null?ee:""});function v(R){if(e(d))return;const ee=R.target.value;t(t().tts.hf_token=ee.trim()?ee.trim():null,!0),r()}let f=T(null),_=T(!1),b=T(null),m=T(null);async function g(){l(_,!0),l(m,null),l(b,null);try{l(b,await S("check_for_update"),!0)}catch(R){l(m,`${R}`)}finally{l(_,!1)}}async function M(){try{await S("open_update_window")}catch(R){l(m,`${R}`)}}async function A(){l(f,null);try{await S("open_setup_wizard")}catch(R){l(f,`${R}`)}}Xt(()=>{S("hf_token_env").then(R=>l(o,R&&R.trim()?R.trim():null,!0)).catch(()=>l(o,null))});var H=uv(),E=i(n(H),2),O=i(n(E),2),ve=i(n(O),2),ce=i(O,4);{var me=R=>{var ee=lv(),Oe=n(ee);w(()=>{var je;return y(Oe,`Could not open the wizard: ${(je=e(f))!=null?je:""}`)}),c(R,ee)};k(ce,R=>{e(f)&&R(me)})}var ie=i(E,2),I=i(n(ie),2),V=i(n(I),2),Y=i(I,2);{var be=R=>{var ee=ov();c(R,ee)};k(Y,R=>{e(d)&&R(be)})}var ke=i(ie,2),D=i(n(ke),4),P=i(n(D),2),he=n(P),B=i(D,2);{var L=R=>{var ee=cv(),Oe=n(ee);w(()=>{var je;return y(Oe,`VoxCtrl ${(je=e(b).current_version)!=null?je:""} is the latest release.`)}),c(R,ee)},ge=R=>{var ee=dv(),Oe=n(ee),je=i(Oe);w(()=>{var Ke,_e;return y(Oe,`Version ${(Ke=e(b).update.version)!=null?Ke:""} is available (you have - ${(_e=e(b).update.current_version)!=null?_e:""}). `)}),z("click",je,M),c(R,ee)};k(B,R=>{var ee;e(b)&&!e(b).update?R(L):(ee=e(b))!=null&&ee.update&&R(ge,1)})}var De=i(B,2);{var fe=R=>{var ee=vv(),Oe=n(ee);w(()=>{var je;return y(Oe,`Could not check for updates: ${(je=e(m))!=null?je:""}`)}),c(R,ee)};k(De,R=>{e(m)&&R(fe)})}var G=i(ke,2),J=i(n(G),2),xe=i(n(J),2),Ie=i(J,2),re=i(n(Ie),2),W=i(Ie,2),le=i(n(W),2);w(()=>{yr(V,e(u)),V.readOnly=e(d),St(V,"title",e(d)?"Set by the HF_TOKEN environment variable":void 0),P.disabled=e(_),y(he,e(_)?"Checking…":"Check for updates")}),z("click",ve,A),z("input",V,v),z("click",P,g),z("change",xe,r),is(xe,()=>t().mcp.server_enabled,R=>t(t().mcp.server_enabled=R,!0)),z("change",re,r),is(re,()=>t().mcp.visual_feedback,R=>t(t().mcp.visual_feedback=R,!0)),z("change",le,r),Ze(le,()=>t().mcp.record_timeout,R=>t(t().mcp.record_timeout=R,!0)),c(a,H),Rt()}us(["click","input","change"]);var fv=p(''),_v=p('
          '),hv=p('
          ');function cs(a,s){Ot(s,!0);let t=Nt(s,"value",15),r=Nt(s,"options",19,()=>[]),o=Nt(s,"disabled",3,!1),d=Nt(s,"defaultToFirst",3,!1),u=T(!1),v=T(null),f=T("");const _=4,b=8;function m(I){let V=I.parentElement;for(;V&&V!==document.body&&V!==document.documentElement;){const Y=window.getComputedStyle(V);if(Y.transform&&Y.transform!=="none"||Y.perspective&&Y.perspective!=="none"||Y.filter&&Y.filter!=="none"||Y.contain==="paint"||Y.contain==="layout"||Y.contain==="strict"||Y.contain==="content"||Y.willChange==="transform")return V;V=V.parentElement}return null}function g(){if(!e(v))return;const I=e(v).getBoundingClientRect(),V=m(e(v)),Y=V?V.getBoundingClientRect():null,be=Y?Y.left:0,ke=Y?Y.top:0,D=Y?Y.bottom:window.innerHeight,P=window.innerHeight-I.bottom-_-b,he=I.top-_-b,B=P<160&&he>P,L=Math.max(120,Math.floor(B?he:P));l(f,B?`position: fixed; left: ${I.left-be}px; width: ${I.width}px; bottom: ${D-I.top+_}px; max-height: ${L}px;`:`position: fixed; left: ${I.left-be}px; width: ${I.width}px; top: ${I.bottom+_-ke}px; max-height: ${L}px;`,!0)}function M(){l(u,!e(u)),e(u)&&g()}let A=ue(()=>r().map(I=>typeof I=="string"?{value:I,label:I,disabled:!1}:{value:I.value,label:I.label,disabled:!!I.disabled}));gs(()=>{if(d()&&e(A).length>0&&!e(A).find(V=>V.value===t())){const V=e(A).find(Y=>!Y.disabled)||e(A)[0];V&&t()!==V.value&&(t(V.value),s.onchange&&s.onchange(V.value))}});let H=ue(()=>{const I=e(A).find(V=>V.value===t());if(I)return I.label;if(d()&&e(A).length>0){const V=e(A).find(Y=>!Y.disabled)||e(A)[0];if(V)return V.label}return t()!==void 0&&t()!==null?String(t()):""});gs(()=>{if(!e(u))return;const I=Y=>{e(v)&&!e(v).contains(Y.target)&&l(u,!1)},V=()=>g();return document.addEventListener("click",I),window.addEventListener("scroll",V,!0),window.addEventListener("resize",V),()=>{document.removeEventListener("click",I),window.removeEventListener("scroll",V,!0),window.removeEventListener("resize",V)}});function E(I){t(I),l(u,!1),s.onchange&&s.onchange(I)}var O=hv(),ve=n(O),ce=n(ve),me=i(ve,2);{var ie=I=>{var V=_v();_t(V,21,()=>e(A),ht,(Y,be)=>{var ke=fv();let D;var P=n(ke);w(()=>{D=Se(ke,1,"custom-dropdown-item svelte-1heock4",null,D,{selected:e(be).value===t()}),ke.disabled=e(be).disabled,y(P,e(be).label)}),z("click",ke,he=>{he.preventDefault(),he.stopPropagation(),E(e(be).value)}),c(Y,ke)}),w(()=>ds(V,e(f))),c(I,V)};k(me,I=>{e(u)&&!o()&&I(ie)})}ml(O,I=>l(v,I),()=>e(v)),w(()=>{ve.disabled=o(),y(ce,e(H))}),z("click",ve,M),c(a,O),Rt()}us(["click"]);var gv=p(''),mv=p('
          '),bv=p(`

          Design your own overlay style by adding a folder with an index.html and style.css to the folder below — it - shows up here as a selectable style automatically. A working example - (a copy of Voice Card, ready to duplicate) and a README covering the - format live there already.

          Custom overlay styles:

          `,1),yv=p('

          Visual & Feedback

          Overlay & HUD

          Alerts & OS Integration

          Application Window

          ');function wv(a,s){Ot(s,!0);let t=Nt(s,"cfg",15),r=T(kt([])),o=T(kt([])),d=T(""),u=ue(()=>[{value:"voice_card",label:"Voice Card"},{value:"waveform",label:"Waveform"},{value:"pulse",label:"Pulse Ring"},{value:"blue_wave",label:"Ocean Wave"},{value:"mono_bars",label:"Mono Bars"},{value:"spectrum",label:"Neon Spectrum"},{value:"terminal",label:"Retro Terminal"},{value:"vinyl",label:"Analog VU"},...e(r).map(J=>({value:J.name,label:J.name}))]);const v=[{value:"top",label:"Top of screen"},{value:"center",label:"Center of screen"},{value:"bottom",label:"Bottom of screen"}];let f=ue(()=>[{value:"primary",label:"Primary Monitor"},...e(o).filter(J=>J.name).map(J=>({value:J.name,label:`${J.name} (${J.width}x${J.height})${J.is_primary?" [Primary]":""}`}))]);Xt(async()=>{try{l(r,await S("get_custom_overlays"),!0)}catch(J){console.error("Failed to fetch custom overlays:",J)}try{l(o,await S("get_available_monitors"),!0)}catch(J){console.error("Failed to fetch available monitors:",J)}try{l(d,await S("get_custom_overlays_dir"),!0)}catch(J){console.error("Failed to fetch custom overlays directory:",J)}});function _(){Lt.set(t()),Va.set(!0)}function b(J){_(),Yo("overlay-style-selected",J)}var m=yv(),g=i(n(m),2),M=i(n(g),2),A=i(n(M),2),H=i(M,2),E=i(n(H),2),O=i(H,2);{var ve=J=>{var xe=gv(),Ie=i(n(xe),2);z("change",Ie,_),Ze(Ie,()=>t().ui.command_overlay_duration_secs,re=>t(t().ui.command_overlay_duration_secs=re,!0)),c(J,xe)};k(O,J=>{t().ui.show_command_overlay&&J(ve)})}var ce=i(O,2),me=i(n(ce),2);cs(me,{get options(){return e(u)},onchange:b,get value(){return t().ui.overlay_style},set value(J){t(t().ui.overlay_style=J,!0)}});var ie=i(ce,2),I=i(n(ie),2);cs(I,{get options(){return v},onchange:_,get value(){return t().ui.overlay_position},set value(J){t(t().ui.overlay_position=J,!0)}});var V=i(ie,2),Y=i(n(V),2);cs(Y,{get options(){return e(f)},onchange:_,get value(){return t().ui.overlay_monitor},set value(J){t(t().ui.overlay_monitor=J,!0)}});var be=i(V,2);{var ke=J=>{var xe=mv(),Ie=n(xe),re=n(Ie);w(()=>{var W;return y(re,`⚠️ Configured monitor "${(W=t().ui.overlay_monitor)!=null?W:""}" is disconnected. Using Primary Monitor.`)}),c(J,xe)},D=ue(()=>t().ui.overlay_monitor!=="primary"&&e(o).length>0&&!e(o).some(J=>J.name===t().ui.overlay_monitor));k(be,J=>{e(D)&&J(ke)})}var P=i(be,2);{var he=J=>{var xe=bv(),Ie=i(wt(xe),2),re=i(n(Ie)),W=n(re);w(()=>y(W,e(d))),c(J,xe)};k(P,J=>{e(d)&&J(he)})}var B=i(g,2),L=i(n(B),2),ge=i(n(L),2),De=i(B,2),fe=i(n(De),2),G=i(n(fe),2);z("change",A,_),is(A,()=>t().ui.show_overlay,J=>t(t().ui.show_overlay=J,!0)),z("change",E,_),is(E,()=>t().ui.show_command_overlay,J=>t(t().ui.show_command_overlay=J,!0)),z("change",ge,_),is(ge,()=>t().ui.show_notification,J=>t(t().ui.show_notification=J,!0)),z("change",G,_),is(G,()=>t().ui.auto_show_settings,J=>t(t().ui.auto_show_settings=J,!0)),c(a,m),Rt()}us(["change"]);var kv=p(`
          ⚠️
          Voice Model Not Downloaded

          The configuration specifies a voice model ( ) that is not currently downloaded. Please select the model size to - use and download it below, or choose another model.

          `),xv=p('⏳ Checking local model files...'),Tv=p(' '),Sv=p('✔ Model downloaded and ready'),Ev=p('
          ❌ Model file missing
          '),Cv=p('

          '),Av=p(`

          Whisper.cpp Settings

          Model directory (leave blank for default)

          Language code (e.g. en, da, fr) to force transcription in that - language, or auto to let whisper.cpp detect it. Forcing a language helps short phrases - that auto-detect sometimes misidentifies.

          Default model directory: ~/.local/share/voxctrl/models/

          `),Mv=p(`
          ⚠️
          Moonshine backend not included in this build

          This build was compiled without Moonshine, so selecting it will fall - back to Whisper.cpp (using the Whisper model configured above). - Rebuild with --features moonshine to enable it.

          `),Pv=p(`
          🖥️
          Moonshine runs on the CPU in this build

          ONNX Runtime, which Moonshine uses, has no Vulkan backend, so the - Device setting above applies to Whisper.cpp only. Moonshine holds - its weights in RAM as fp32 — roughly 530 MB for base, 240 MB for tiny

          `),Dv=p('⏳ Checking local model files...'),zv=p(' '),Iv=p('✔ Model downloaded'),Ov=p('
          Model not downloaded
          '),Rv=p('
          '),Lv=p('

          Moonshine Settings

          '),Nv=p(`
          ⚠️
          Parakeet backend not included in this build

          This build was compiled without Parakeet, so selecting it will fall - back to Whisper.cpp. Rebuild with --features parakeet to enable it.

          `),Fv=p('⏳ Checking local model files...'),Vv=p(' '),$v=p('✔ Model downloaded and ready'),Bv=p('
          Model not downloaded
          '),qv=p('
          '),jv=p('

          Parakeet Settings

          NVIDIA FastConformer TDT 0.6B with 128-mel ONNX preprocessor and INT8 quantization (~665 MB total).

          '),Wv=p(''),Uv=p('
          Discovered models from server:
          '),Hv=p("
          "),Kv=p(`

          Remote Speech Engine Settings

          Connect to a network speech-to-text service supporting the OpenAI /v1/audio/transcriptions API (e.g., Faster-Whisper-Server, vLLM, LocalAI, Whisper-standalone, or OpenAI Whisper). - Audio will begin streaming to the endpoint as soon as your keybind is triggered.

          Base URL or full transcriptions path (e.g. http://192.168.1.50:8000/v1 or https://api.openai.com/v1).

          Leave blank if your local network server does not require authentication.

          Language code (e.g. en, es, fr) or leave blank/auto for automatic detection.

          `),Gv=p('

          Inference Engine

          Backend

          ');function Yv(a,s){Ot(s,!0);let t=Nt(s,"cfg",15);function r(){Lt.set(t()),Va.set(!0)}const o=["tiny","tiny.en","base","base.en","small","small.en","medium","medium.en","large-v2","large-v3","large-v3-turbo"];let d=T(null),u=T(null),v=T(null);const f={cuda:"CUDA (NVIDIA)",vulkan:"Vulkan (AMD/Intel/NVIDIA)",coreml:"CoreML (Apple)",webgpu:"WebGPU (AMD/Intel/NVIDIA)"},_=C=>{var X;return(X=f[C])!=null?X:C};let b=ue(()=>[{value:"whisper-cpp",label:"Whisper.cpp"},{value:"moonshine",label:e(u)?`Moonshine (${_(e(u))})`:"Moonshine (CPU only)"},{value:"parakeet",label:e(v)?`Parakeet TDT (${_(e(v))})`:"Parakeet TDT (CPU only)"},{value:"remote-openai",label:"Remote Speech Engine (OpenAI API)"}]),m=ue(()=>o.map(C=>({value:C,label:`${C}${e(H)[C]?" ✔":""}`}))),g=ue(()=>[{value:"auto",label:e(d)?`Auto (${_(e(d))})`:"Auto"},...e(d)?[{value:e(d),label:_(e(d))}]:[],{value:"cpu",label:"CPU"}]);const M=[{value:"base",label:"Base"},{value:"tiny",label:"Tiny"}],A=[{value:"tdt-0.6b-v3",label:"TDT 0.6B v3 (INT8, ~665 MB)"}];let H=T(kt({})),E=T(!1),O=T(!1),ve=T(null),ce=T(!0),me=T(kt({})),ie=T(!1),I=T(!1),V=T(!0),Y=T(kt({})),be=T(!1),ke=T(!1);async function D(){l(be,!0);const C={};for(const X of A)try{C[X.value]=await S("check_parakeet_downloaded",{modelSize:X.value})}catch(de){console.error("Failed to check Parakeet download status for "+X.value,de),C[X.value]=!1}l(Y,C,!0),l(be,!1)}async function P(C){if(!e(ke)){l(ke,!0);try{await S("download_parakeet_model",{modelSize:C}),e(Y)[C]=!0}catch(X){alert(`Failed to download Parakeet model: ${X}`)}finally{l(ke,!1)}}}async function he(){var X,de;r();const C=(de=(X=t().engine.parakeet)==null?void 0:X.model_size)!=null?de:"tdt-0.6b-v3";e(V)&&!e(Y)[C]&&await P(C)}let B=T(!1),L=T(null),ge=T(kt([]));function De(){t().engine.remote_openai||t(t().engine.remote_openai={endpoint:"http://localhost:8000/v1",api_key:null,model:"whisper-1",language:"",timeout_secs:30},!0)}async function fe(){if(De(),!e(B)){l(B,!0),l(L,null);try{const C=await S("test_remote_stt",{endpoint:t().engine.remote_openai.endpoint||"http://localhost:8000/v1",apiKey:t().engine.remote_openai.api_key||null,model:t().engine.remote_openai.model||"whisper-1",timeoutSecs:t().engine.remote_openai.timeout_secs||30});l(L,{success:C.success,message:C.message},!0),C.models&&C.models.length>0&&(l(ge,C.models,!0),t().engine.remote_openai.model||(t(t().engine.remote_openai.model=C.models[0],!0),r()))}catch(C){l(L,{success:!1,message:C.toString()},!0)}finally{l(B,!1)}}}async function G(){l(ie,!0);const C={};for(const X of M)try{C[X.value]=await S("check_moonshine_downloaded",{modelSize:X.value})}catch(de){console.error("Failed to check Moonshine download status for "+X.value,de),C[X.value]=!1}l(me,C,!0),l(ie,!1)}async function J(C){if(!e(I)){l(I,!0);try{await S("download_moonshine_model",{modelSize:C}),e(me)[C]=!0}catch(X){alert(`Failed to download Moonshine model: ${X}`)}finally{l(I,!1)}}}async function xe(){r();const C=t().engine.moonshine.model_size;e(ce)&&!e(me)[C]&&await J(C)}async function Ie(){l(E,!0);const C={};for(const X of o)try{C[X]=await S("check_model_downloaded",{modelSize:X,modelDir:t().engine.whisper_cpp.model_dir})}catch(de){console.error("Failed to check download status for model "+X,de),C[X]=!1}l(H,C,!0),l(E,!1)}async function re(C){if(!e(O)){l(O,!0);try{await S("download_model",{modelSize:C,modelDir:t().engine.whisper_cpp.model_dir}),e(H)[C]=!0}catch(X){alert(`Failed to download model: ${X}`)}finally{l(O,!1)}}}async function W(){r();const C=t().engine.whisper_cpp.model_size;e(H)[C]||await re(C)}async function le(){const C=t().engine.whisper_cpp.model_dir;if(!C){l(ve,null);return}const X=await S("check_directory_exists",{path:C});l(ve,X?null:"This folder does not exist. Please create it first or leave blank for the default location.",!0),e(ve)||await Ie()}function R(){r()}function ee(C){C.key==="Enter"&&C.currentTarget.blur()}Xt(async()=>{var X,de,oe;Ie();try{l(ce,await S("moonshine_available"),!0)}catch(Ae){console.error("Failed to query Moonshine availability",Ae)}G();try{l(V,await S("parakeet_available"),!0)}catch(Ae){console.error("Failed to query Parakeet availability",Ae)}D();try{const Ae=await S("accelerator_support");l(d,(X=Ae.whisper_gpu)!=null?X:null,!0),l(u,(de=Ae.moonshine_gpu)!=null?de:null,!0),l(v,(oe=Ae.parakeet_gpu)!=null?oe:null,!0)}catch(Ae){console.error("Failed to query GPU support",Ae)}const C=t().engine.whisper_cpp.device;C!=="auto"&&C!=="cpu"&&C!==e(d)&&(t(t().engine.whisper_cpp.device="auto",!0),r())});var Oe=Gv(),je=i(n(Oe),2);{var Ke=C=>{var X=kv(),de=i(n(X),2),oe=i(n(de),2),Ae=i(n(oe)),$e=n(Ae);w(()=>y($e,t().engine.whisper_cpp.model_size)),c(C,X)};k(je,C=>{t().engine.backend==="whisper-cpp"&&!e(E)&&!e(H)[t().engine.whisper_cpp.model_size]&&C(Ke)})}var _e=i(je,2),se=i(n(_e),2),ye=i(n(se),2);cs(ye,{get options(){return e(b)},onchange:r,get value(){return t().engine.backend},set value(C){t(t().engine.backend=C,!0)}});var et=i(_e,2);{var te=C=>{var X=Av(),de=i(n(X),2),oe=i(n(de),2);cs(oe,{get options(){return e(m)},onchange:W,get value(){return t().engine.whisper_cpp.model_size},set value(Me){t(t().engine.whisper_cpp.model_size=Me,!0)}});var Ae=i(de,2),$e=n(Ae);{var tt=Me=>{var Ye=xv();c(Me,Ye)},st=Me=>{var Ye=Tv(),rt=n(Ye);w(()=>{var Z;return y(rt,`⏳ Downloading ${(Z=t().engine.whisper_cpp.model_size)!=null?Z:""} (GGUF format)...`)}),c(Me,Ye)},U=Me=>{var Ye=Sv();c(Me,Ye)},Q=Me=>{var Ye=Ev(),rt=i(n(Ye),2);z("click",rt,()=>re(t().engine.whisper_cpp.model_size)),c(Me,Ye)};k($e,Me=>{e(E)?Me(tt):e(O)?Me(st,1):e(H)[t().engine.whisper_cpp.model_size]?Me(U,2):Me(Q,-1)})}var ne=i(Ae,2),Re=i(n(ne),2);cs(Re,{get options(){return e(g)},onchange:r,get value(){return t().engine.whisper_cpp.device},set value(Me){t(t().engine.whisper_cpp.device=Me,!0)}});var at=i(ne,2),lt=i(n(at),2);let Ee;var Ge=i(lt,2);{var nt=Me=>{var Ye=Cv(),rt=n(Ye);w(()=>y(rt,e(ve))),c(Me,Ye)};k(Ge,Me=>{e(ve)&&Me(nt)})}var Ne=i(at,2),it=i(n(Ne),2),dt=i(Ne,2),ot=i(n(dt),2);w(()=>Ee=Se(lt,1,"svelte-nfi4ak",null,Ee,{"field-input-error":!!e(ve)})),z("change",lt,R),Ra("blur",lt,le),z("keydown",lt,ee),Ze(lt,()=>t().engine.whisper_cpp.model_dir,Me=>t(t().engine.whisper_cpp.model_dir=Me,!0)),z("change",it,r),Ze(it,()=>t().engine.whisper_cpp.threads,Me=>t(t().engine.whisper_cpp.threads=Me,!0)),z("change",ot,r),Ze(ot,()=>t().engine.whisper_cpp.language,Me=>t(t().engine.whisper_cpp.language=Me,!0)),c(C,X)},j=C=>{var X=Lv(),de=i(n(X),2);{var oe=at=>{var lt=Mv();c(at,lt)};k(de,at=>{e(ce)||at(oe)})}var Ae=i(de,2);{var $e=at=>{var lt=Pv(),Ee=i(n(lt),2),Ge=i(n(Ee),2),nt=i(n(Ge),8);w(Ne=>y(nt,` — - where Whisper.cpp${Ne!=null?Ne:""}. Pick Whisper.cpp if memory - matters more than Moonshine's latency.`),[()=>e(d)?` puts a quantized model in VRAM via ${_(e(d))}`:" uses a smaller quantized model"]),c(at,lt)};k(Ae,at=>{e(ce)&&!e(u)&&at($e)})}var tt=i(Ae,2),st=i(n(tt),2);cs(st,{get options(){return M},onchange:xe,get value(){return t().engine.moonshine.model_size},set value(at){t(t().engine.moonshine.model_size=at,!0)}});var U=i(tt,2);{var Q=at=>{var lt=Rv(),Ee=n(lt);{var Ge=dt=>{var ot=Dv();c(dt,ot)},nt=dt=>{var ot=zv(),Me=n(ot);w(()=>{var Ye;return y(Me,`⏳ Downloading Moonshine ${(Ye=t().engine.moonshine.model_size)!=null?Ye:""} (ONNX)...`)}),c(dt,ot)},Ne=dt=>{var ot=Iv();c(dt,ot)},it=dt=>{var ot=Ov(),Me=i(n(ot),2),Ye=n(Me);w(()=>{var rt;return y(Ye,`Download ${(rt=t().engine.moonshine.model_size)!=null?rt:""}`)}),z("click",Me,()=>J(t().engine.moonshine.model_size)),c(dt,ot)};k(Ee,dt=>{e(ie)?dt(Ge):e(I)?dt(nt,1):e(me)[t().engine.moonshine.model_size]?dt(Ne,2):dt(it,-1)})}c(at,lt)};k(U,at=>{e(ce)&&at(Q)})}var ne=i(U,2),Re=i(n(ne),2);z("change",Re,r),Ze(Re,()=>t().engine.moonshine.language,at=>t(t().engine.moonshine.language=at,!0)),c(C,X)},F=C=>{var X=jv(),de=i(n(X),2);{var oe=ne=>{var Re=Nv();c(ne,Re)};k(de,ne=>{e(V)||ne(oe)})}var Ae=i(de,2),$e=i(n(Ae),2);cs($e,{get options(){return A},onchange:he,get value(){return t().engine.parakeet.model_size},set value(ne){t(t().engine.parakeet.model_size=ne,!0)}});var tt=i(Ae,2);{var st=ne=>{var Re=qv(),at=n(Re);{var lt=Ne=>{var it=Fv();c(Ne,it)},Ee=Ne=>{var it=Vv(),dt=n(it);w(()=>{var ot;return y(dt,`⏳ Downloading Parakeet ${(ot=t().engine.parakeet.model_size)!=null?ot:""} (ONNX INT8)...`)}),c(Ne,it)},Ge=Ne=>{var it=$v();c(Ne,it)},nt=Ne=>{var it=Bv(),dt=i(n(it),2),ot=n(dt);w(()=>{var Me;return y(ot,`Download ${(Me=t().engine.parakeet.model_size)!=null?Me:""}`)}),z("click",dt,()=>P(t().engine.parakeet.model_size)),c(Ne,it)};k(at,Ne=>{e(be)?Ne(lt):e(ke)?Ne(Ee,1):e(Y)[t().engine.parakeet.model_size]?Ne(Ge,2):Ne(nt,-1)})}c(ne,Re)};k(tt,ne=>{e(V)&&ne(st)})}var U=i(tt,2),Q=i(n(U),2);z("change",Q,r),Ze(Q,()=>t().engine.parakeet.language,ne=>t(t().engine.parakeet.language=ne,!0)),c(C,X)},ae=C=>{var X=Kv(),de=i(n(X),4),oe=i(n(de),2),Ae=i(de,4),$e=i(n(Ae),2),tt=i(Ae,4),st=i(n(tt),2),U=i(tt,2);{var Q=Me=>{var Ye=Uv(),rt=i(n(Ye),2);_t(rt,21,()=>e(ge),ht,(Z,K)=>{var pe=Wv();let We;var Ve=n(pe);w(()=>{We=Se(pe,1,"tag-btn svelte-nfi4ak",null,We,{active:t().engine.remote_openai.model===e(K)}),y(Ve,e(K))}),z("click",pe,()=>{t(t().engine.remote_openai.model=e(K),!0),r()}),c(Z,pe)}),c(Me,Ye)};k(U,Me=>{e(ge).length>0&&Me(Q)})}var ne=i(U,2),Re=i(n(ne),2),at=i(ne,4),lt=i(n(at),2),Ee=i(at,2),Ge=n(Ee),nt=n(Ge);{var Ne=Me=>{var Ye=qe("⏳ Testing Connection...");c(Me,Ye)},it=Me=>{var Ye=qe("🧪 Test Connection");c(Me,Ye)};k(nt,Me=>{e(B)?Me(Ne):Me(it,-1)})}var dt=i(Ge,2);{var ot=Me=>{var Ye=Hv();let rt;var Z=n(Ye);{var K=We=>{var Ve=qe();w(()=>{var gt;return y(Ve,`✔ ${(gt=e(L).message)!=null?gt:""}`)}),c(We,Ve)},pe=We=>{var Ve=qe();w(()=>{var gt;return y(Ve,`⚠️ ${(gt=e(L).message)!=null?gt:""}`)}),c(We,Ve)};k(Z,We=>{e(L).success?We(K):We(pe,-1)})}w(()=>rt=Se(Ye,1,"status-pill svelte-nfi4ak",null,rt,{success:e(L).success,error:!e(L).success})),c(Me,Ye)};k(dt,Me=>{e(L)&&Me(ot)})}w(()=>Ge.disabled=e(B)),z("change",oe,r),Ze(oe,()=>t().engine.remote_openai.endpoint,Me=>t(t().engine.remote_openai.endpoint=Me,!0)),z("change",$e,r),Ze($e,()=>t().engine.remote_openai.api_key,Me=>t(t().engine.remote_openai.api_key=Me,!0)),z("change",st,r),Ze(st,()=>t().engine.remote_openai.model,Me=>t(t().engine.remote_openai.model=Me,!0)),z("change",Re,r),Ze(Re,()=>t().engine.remote_openai.language,Me=>t(t().engine.remote_openai.language=Me,!0)),z("change",lt,r),Ze(lt,()=>t().engine.remote_openai.timeout_secs,Me=>t(t().engine.remote_openai.timeout_secs=Me,!0)),z("click",Ge,fe),c(C,X)};k(et,C=>{t().engine.backend==="whisper-cpp"?C(te):t().engine.backend==="moonshine"?C(j,1):t().engine.backend==="parakeet"?C(F,2):t().engine.backend==="remote-openai"&&C(ae,3)})}c(a,Oe),Rt()}us(["click","change","keydown"]);var Jv=p("
          "),Zv=p('
          '),Xv=p(`

          Audio

          Input Device

          Microphone Monitor

          Only opens the microphone stream when recording is triggered, which saves power but cannot capture anything spoken while the microphone is still opening. Turn this off to keep the stream open: the last 300ms before you trigger recording is then kept and included, so a first word spoken early — the one carrying a voice command's "Hey Vox" or "Vox Control" — is not lost.

          Voice Activity Detection

          Processing

          Removes steady background noise (fans, hiss, hum) from the microphone before - transcription, keeping speech intact. Takes effect on the next recording — no restart needed.

          `);function Qv(a,s){Ot(s,!0);let t=Nt(s,"cfg",15);function r(){Lt.set(t()),Va.set(!0)}let o=T(kt([])),d=ue(()=>[{value:-1,label:"Default system device"},...e(o).map(R=>({value:R.index,label:R.name}))]),u=T(0),v=T(0),f=T(0),_=0,b=T(null),m;function g(){const R=e(u);R>e(v)?l(v,e(v)+(R-e(v))*.45):l(v,e(v)+(R-e(v))*.12),e(v)>e(f)?(l(f,e(v),!0),_=25):_>0?_--:l(f,Math.max(0,e(f)-.012),!0),m=requestAnimationFrame(g)}Xt(async()=>{l(o,await S("list_audio_devices"),!0);try{await S("start_monitoring_audio"),l(b,await ks("audio-level",R=>{l(u,R.payload,!0)}),!0)}catch(R){console.error("Failed to start audio monitoring:",R)}m=requestAnimationFrame(g)}),br(async()=>{m&&cancelAnimationFrame(m),e(b)&&e(b)();try{await S("stop_monitoring_audio")}catch(R){console.error("Failed to stop audio monitoring:",R)}});var M=Xv(),A=i(n(M),2),H=i(n(A),2),E=i(n(H),2);{let R=ue(()=>{var ee;return(ee=t().audio.input_device_index)!=null?ee:-1});cs(E,{get value(){return e(R)},get options(){return e(d)},onchange:ee=>{t(t().audio.input_device_index=ee<0?null:ee,!0),r()}})}var O=i(H,2),ve=n(O),ce=i(n(ve),2);let me;var ie=i(ce,2),I=n(ie),V=i(ve,2),Y=n(V),be=n(Y);_t(be,16,()=>Array(24),ht,(R,ee,Oe)=>{const je=ue(()=>Oe/24),Ke=ue(()=>e(v)>=e(je)),_e=ue(()=>Oe>=17);var se=Jv();let ye;w(()=>ye=Se(se,1,"vu-segment svelte-1msnq7i",null,ye,{active:e(Ke),orange:e(_e)})),c(R,se)});var ke=i(be,2);{var D=R=>{var ee=Zv();w(Oe=>ds(ee,`left: ${Oe!=null?Oe:""}%;`),[()=>Math.min(.99,e(f))*100]),c(R,ee)};k(ke,R=>{e(f)>.01&&R(D)})}var P=i(O,2),he=i(n(P),2),B=i(A,2),L=i(n(B),2),ge=i(n(L),2),De=i(ge,2),fe=n(De),G=i(B,2),J=i(n(G),2),xe=i(n(J),2),Ie=i(J,4),re=i(n(Ie),2),W=i(re,2),le=n(W);w((R,ee)=>{me=Se(ce,1,"vu-status-dot svelte-1msnq7i",null,me,{active:e(u)>.005}),y(I,e(u)>.005?"Signal Detected":"Listening..."),y(fe,R),y(le,`${ee!=null?ee:""}×`)},[()=>t().audio.vad_threshold.toFixed(2),()=>t().audio.gain.toFixed(1)]),z("change",he,r),is(he,()=>t().audio.dynamic_stream,R=>t(t().audio.dynamic_stream=R,!0)),z("change",ge,r),Ze(ge,()=>t().audio.vad_threshold,R=>t(t().audio.vad_threshold=R,!0)),z("change",xe,r),is(xe,()=>t().audio.noise_suppression,R=>t(t().audio.noise_suppression=R,!0)),z("change",re,r),Ze(re,()=>t().audio.gain,R=>t(t().audio.gain=R,!0)),c(a,M),Rt()}us(["change"]);var eu=p(''),tu=p('
          Voice Command Router Settings

          Types dictated text into your active application by default. If your dictation contains Hey Vox <target_name> <text> or Vox Control <target_name> <text> (for example, "Hey Vox, Notes Hello world" or "Vox Control Notes Hello world"), VoxCtrl dynamically reroutes the text to that target instead.

          '),su=p(' '),au=p('
          Shell Executor Settings
          Terminal Command Shell command

          Use inside the command string as a placeholder to substitute transcribed speech.

          '),nu=p(' '),iu=p('

          Each line starts with:

          '),ru=p(`

          A strftime pattern, written in UTC. Common pieces: %Y year (2026), %m month (09), %d day (04), %H hour (17), %M minute, %S second, %b month name (Sep), %a weekday (Fri), %p AM/PM, %Z zone (UTC), %% a literal percent. Anything else is written as typed. - Default:

          `,1),lu=p('
          Local File Writer Settings
          '),ou=p('
          Network Socket settings
          '),cu=p('
          FIFO Named Pipe settings
          '),du=p('
          Linux DBus emitter settings
          '),vu=p(''),uu=p(''),pu=p(' '),fu=p('
          Method
          Custom Post Body JSON Template

          Must be valid JSON. Use to substitute transcribed speech.

          ',1),_u=p(' '),hu=p('
          Webhook Secret Token (HMAC)
          Custom Webhook Body JSON Template

          Must be valid JSON. Use to substitute transcribed speech.

          ',1),gu=p('
          API Endpoint Client settings
          REST endpoint URL
          '),mu=p(' '),bu=p('
          MCP Server Client settings
          Custom Socket/Pipe Path Optional override

          Leave empty to use defaults (/tmp/voxctrl-mcp.sock on Linux, \\\\.\\pipe\\voxctrl-mcp on Windows).

          MCP Tool Name
          Custom Tool Arguments JSON Template

          Must be valid JSON. Use to substitute transcribed speech.

          '),yu=p(' '),wu=p(''),ku=p(' '),xu=p(" "),Tu=p(`

          Discards this target's stored conversation so the next dictation starts a new - thread. History is in-memory only and is never written to disk.

          `),Su=p(`
          Conversational LLM settings

          Sends each dictation to an OpenAI-compatible /v1/chat/completions endpoint — Hermes, Ollama, llama.cpp — - carrying the running conversation so the model keeps its context between turns.

          Server Base URL

          The /v1 suffix is optional — it is added automatically.

          Model

          Press Test & fetch models to confirm the server is reachable and - pick from the ids it reports.

          API Key Optional
          System Prompt

          Sent ahead of every turn and never trimmed from the history window.

          Reply Handling

          Speaking the reply requires TTS to be enabled in the TTS tab.

          Conversation Memory Messages

          Most recent messages sent with each turn. 0 sends the whole conversation.

          Request Timeout Seconds
          Spoken Reset Phrase Optional

          Saying exactly this clears the conversation instead of sending it to the model. - Casing and punctuation are ignored.

          `),Eu=p('
          Output
          '),Cu=p(`
          `);function Zo(a,s){Ot(s,!0);let t=Nt(s,"editingTarget",15),r=Nt(s,"isNested",3,!1),o=T(""),d=T(""),u=T(""),v=T(kt([])),f=T(!1),_=T(""),b=T(!1);const m="%Y-%m-%dT%H:%M:%SZ";let g=T(""),M=T(null);gs(()=>{var he,B;const D=(B=(he=t())==null?void 0:he.file_timestamp_format)!=null?B:"";if(!t()||t().delivery!=="file"||!t().file_timestamp){l(M,null),l(g,"");return}let P=!1;return S("preview_timestamp_format",{format:D}).then(L=>{P||(l(g,L,!0),l(M,null))}).catch(L=>{P||(l(g,""),l(M,`${L}`))}),()=>{P=!0}});let A=ue(()=>!t()||t().delivery!=="exec"||(t().command||"").includes("{text}")?null:"Command must contain '{text}' placeholder."),H=ue(()=>{if(!e(o).trim())return null;try{JSON.parse(e(o))}catch(D){return"Invalid JSON format: "+D.message}return e(o).includes("{text}")?null:"Arguments must contain '{text}' placeholder."}),E=ue(()=>{if(!e(d).trim())return null;try{JSON.parse(e(d))}catch(D){return"Invalid JSON format: "+D.message}return e(d).includes("{text}")?null:"JSON template must contain '{text}' placeholder."}),O=ue(()=>{if(!e(u).trim())return null;try{JSON.parse(e(u))}catch(D){return"Invalid JSON format: "+D.message}return e(u).includes("{text}")?null:"JSON template must contain '{text}' placeholder."}),ve=ue(()=>{if(!t()||t().delivery!=="chat")return null;const D=(t().chat_url||"").trim();return D?/^https?:\/\//i.test(D)?null:"URL must start with http:// or https://":"A server base URL is required."}),ce=ue(()=>!t()||t().delivery!=="chat"||(t().chat_model||"").trim()?null:"A model name is required.");async function me(){if(t()){l(f,!0);try{const D=await S("test_chat_target",{target:t()});l(v,D.models,!0),l(_,D.message,!0),l(b,D.success,!0),D.success&&!t().chat_model&&D.models.length>0&&t(t().chat_model=D.models[0],!0)}catch(D){l(v,[],!0),l(_,String(D),!0),l(b,!1)}finally{l(f,!1)}}}async function ie(){if(t())try{const D=await S("reset_chat_conversation",{targetId:t().id});l(_,`Conversation cleared (${D} message(s) discarded).`),l(b,!0)}catch(D){l(_,String(D),!0),l(b,!1)}}function I(D){function P(){D.style.height="auto",D.style.height=`${D.scrollHeight}px`}D.addEventListener("input",P);const he=setTimeout(P,0);return{update(){P()},destroy(){clearTimeout(he),D.removeEventListener("input",P)}}}Xt(()=>{var D,P,he,B,L;t()&&(t().processing||t(t().processing={},!0),t().file_mode||t(t().file_mode="append",!0),t().file_timestamp_format||t(t().file_timestamp_format=m,!0),t((P=(D=t()).chat_max_history)!=null?P:D.chat_max_history=20,!0),t((B=(he=t()).chat_timeout_secs)!=null?B:he.chat_timeout_secs=120,!0),t((L=t()).chat_reply_mode||(L.chat_reply_mode="speak"),!0),l(o,t().mcp_args?JSON.stringify(t().mcp_args,null,2):`{ - "text": "{text}" -}`,!0),l(d,t().http_json_template?JSON.stringify(t().http_json_template,null,2):`{ - "text": "{text}" -}`,!0),l(u,t().webhook_json_template?JSON.stringify(t().webhook_json_template,null,2):`{ - "text": "{text}" -}`,!0))});function V(){if(t()){if(t().id.trim()===""){alert("Target ID cannot be empty.");return}if(t().delivery==="file"&&t().file_timestamp&&e(M)){alert("Validation Error: "+e(M));return}if(t().delivery==="exec"&&e(A)){alert("Validation Error: "+e(A));return}if(t().delivery==="mcp"){if(e(H)){alert("Validation Error: "+e(H));return}try{t(t().mcp_args=JSON.parse(e(o)),!0)}catch{alert("Invalid JSON format in MCP Custom Tool Arguments.");return}}if(t().delivery==="http"){if(e(E)){alert("Validation Error: "+e(E));return}try{t(t().http_json_template=JSON.parse(e(d)),!0)}catch{alert("Invalid JSON format in HTTP Custom Post Body.");return}}if(t().delivery==="webhook"){if(e(O)){alert("Validation Error: "+e(O));return}try{t(t().webhook_json_template=JSON.parse(e(u)),!0)}catch{alert("Invalid JSON format in Webhook Custom Post Body.");return}}if(t().delivery==="chat"){const D=e(ve)||e(ce);if(D){alert("Validation Error: "+D);return}t(t().chat_max_history=Number(t().chat_max_history)||0,!0),t(t().chat_timeout_secs=Number(t().chat_timeout_secs)||120,!0)}s.onSave()}}var Y=$i(),be=wt(Y);{var ke=D=>{var P=Cu(),he=n(P),B=n(he),L=n(B),ge=n(L),De=i(L,2),fe=i(B,2),G=n(fe);{var J=Ee=>{var Ge=eu(),nt=i(n(Ge),2);w(()=>nt.disabled=!s.isNew),Ze(nt,()=>t().id,Ne=>t(t().id=Ne,!0)),c(Ee,Ge)};k(G,Ee=>{r()||Ee(J)})}var xe=i(G,2),Ie=i(n(xe),2),re=i(xe,2),W=i(n(re)),le=n(W),R=i(W,2),ee=n(R),Oe=i(re,2),je=i(n(Oe),2);cs(je,{options:[{value:"command",label:"Voice Command Router (Hey Vox / Vox Control keyword)"},{value:"inject",label:"Inject Text Directly (Simulate keyboard)"},{value:"clipboard",label:"Save to Clipboard"},{value:"exec",label:"Execute Command"},{value:"file",label:"Write to File"},{value:"pipe",label:"FIFO Named Pipe"},{value:"socket",label:"TCP / Unix Socket"},{value:"dbus",label:"DBus Signal"},{value:"http",label:"HTTP Custom Client"},{value:"webhook",label:"Send Webhook Event"},{value:"mcp",label:"Call MCP Server Tool"},{value:"speak",label:"Speak Text Aloud (TTS)"},{value:"chat",label:"Chat with a Local LLM (Hermes / OpenAI-compatible)"}],get value(){return t().delivery},set value(Ee){t(t().delivery=Ee,!0)}});var Ke=i(Oe,2);{var _e=Ee=>{var Ge=tu();c(Ee,Ge)};k(Ke,Ee=>{t().delivery==="command"&&Ee(_e)})}var se=i(Ke,2);{var ye=Ee=>{var Ge=au(),nt=i(n(Ge),2),Ne=i(n(nt),2);St(Ne,"placeholder","e.g. xdg-open {text}");var it=i(Ne,2),dt=i(n(it));dt.textContent="{text}";var ot=i(it,2);{var Me=Ye=>{var rt=su(),Z=n(rt);w(()=>{var K;return y(Z,`⚠️ ${(K=e(A))!=null?K:""}`)}),c(Ye,rt)};k(ot,Ye=>{e(A)&&Ye(Me)})}w(()=>Se(Ne,1,`full-width-input ${e(A)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""}`,"svelte-oc07pw")),Ze(Ne,()=>t().command,Ye=>t(t().command=Ye,!0)),c(Ee,Ge)};k(se,Ee=>{t().delivery==="exec"&&Ee(ye)})}var et=i(se,2);{var te=Ee=>{var Ge=lu(),nt=i(n(Ge),2),Ne=i(n(nt),2),it=i(nt,2),dt=i(n(it),2);cs(dt,{options:[{value:"append",label:"Append (Add to end of file)"},{value:"prepend",label:"Prepend (Add to beginning of file)"}],get value(){return t().file_mode},set value(pe){t(t().file_mode=pe,!0)}});var ot=i(it,2),Me=i(n(ot),2),Ye=i(ot,2),rt=n(Ye),Z=i(Ye,2);{var K=pe=>{var We=ru(),Ve=wt(We),gt=i(n(Ve),2);St(gt,"placeholder",m);var as=i(Ve,2),Ht=i(n(as),25);Ht.textContent="%Y-%m-%dT%H:%M:%SZ";var Kt=i(as,2);{var ft=At=>{var Et=nu(),ze=n(Et);w(()=>{var Je;return y(ze,`⚠️ ${(Je=e(M))!=null?Je:""}`)}),c(At,Et)},Ft=At=>{var Et=iu(),ze=i(n(Et)),Je=n(ze);w(()=>{var q;return y(Je,`[${(q=e(g))!=null?q:""}]`)}),c(At,Et)};k(Kt,At=>{e(M)?At(ft):e(g)&&At(Ft,1)})}w(()=>Se(gt,1,qs(e(M)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""))),Ze(gt,()=>t().file_timestamp_format,At=>t(t().file_timestamp_format=At,!0)),c(pe,We)};k(Z,pe=>{t().file_timestamp&&pe(K)})}Ze(Ne,()=>t().file_path,pe=>t(t().file_path=pe,!0)),Ze(Me,()=>t().file_prefix,pe=>t(t().file_prefix=pe,!0)),is(rt,()=>t().file_timestamp,pe=>t(t().file_timestamp=pe,!0)),c(Ee,Ge)};k(et,Ee=>{t().delivery==="file"&&Ee(te)})}var j=i(et,2);{var F=Ee=>{var Ge=ou(),nt=i(n(Ge),2),Ne=i(n(nt),2),it=i(nt,2),dt=i(n(it),2),ot=i(it,2),Me=i(n(ot),2);Ze(Ne,()=>t().socket_host,Ye=>t(t().socket_host=Ye,!0)),Ze(dt,()=>t().socket_port,Ye=>t(t().socket_port=Ye,!0)),Ze(Me,()=>t().socket_unix,Ye=>t(t().socket_unix=Ye,!0)),c(Ee,Ge)};k(j,Ee=>{t().delivery==="socket"&&Ee(F)})}var ae=i(j,2);{var C=Ee=>{var Ge=cu(),nt=i(n(Ge),2),Ne=i(n(nt),2),it=i(nt,2),dt=i(n(it),2);Ze(Ne,()=>t().pipe_path,ot=>t(t().pipe_path=ot,!0)),Ze(dt,()=>t().response_pipe,ot=>t(t().response_pipe=ot,!0)),c(Ee,Ge)};k(ae,Ee=>{t().delivery==="pipe"&&Ee(C)})}var X=i(ae,2);{var de=Ee=>{var Ge=du(),nt=i(n(Ge),2),Ne=i(n(nt),2);Ze(Ne,()=>t().dbus_signal,it=>t(t().dbus_signal=it,!0)),c(Ee,Ge)};k(X,Ee=>{t().delivery==="dbus"&&Ee(de)})}var oe=i(X,2);{var Ae=Ee=>{var Ge=gu(),nt=i(n(Ge),2),Ne=i(n(nt),2);{var it=rt=>{var Z=vu();Ze(Z,()=>t().http_url,K=>t(t().http_url=K,!0)),c(rt,Z)},dt=rt=>{var Z=uu();Ze(Z,()=>t().webhook_url,K=>t(t().webhook_url=K,!0)),c(rt,Z)};k(Ne,rt=>{t().delivery==="http"?rt(it):rt(dt,-1)})}var ot=i(nt,2);{var Me=rt=>{var Z=fu(),K=wt(Z),pe=i(n(K),2);cs(pe,{options:[{value:"POST",label:"POST"},{value:"GET",label:"GET"},{value:"PUT",label:"PUT"}],get value(){return t().http_method},set value(ft){t(t().http_method=ft,!0)}});var We=i(K,2),Ve=i(n(We),2);St(Ve,"placeholder",'{"text": "{text}"}'),ja(()=>Ze(Ve,()=>e(d),ft=>l(d,ft))),en(Ve,ft=>I==null?void 0:I(ft));var gt=i(Ve,2),as=i(n(gt));as.textContent="{text}";var Ht=i(gt,2);{var Kt=ft=>{var Ft=pu(),At=n(Ft);w(()=>{var Et;return y(At,`⚠️ ${(Et=e(E))!=null?Et:""}`)}),c(ft,Ft)};k(Ht,ft=>{e(E)&&ft(Kt)})}w(()=>Se(Ve,1,qs(e(E)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""),"svelte-oc07pw")),c(rt,Z)},Ye=rt=>{var Z=hu(),K=wt(Z),pe=i(n(K),2),We=i(K,2),Ve=i(n(We),2);St(Ve,"placeholder",'{"text": "{text}"}'),ja(()=>Ze(Ve,()=>e(u),ft=>l(u,ft))),en(Ve,ft=>I==null?void 0:I(ft));var gt=i(Ve,2),as=i(n(gt));as.textContent="{text}";var Ht=i(gt,2);{var Kt=ft=>{var Ft=_u(),At=n(Ft);w(()=>{var Et;return y(At,`⚠️ ${(Et=e(O))!=null?Et:""}`)}),c(ft,Ft)};k(Ht,ft=>{e(O)&&ft(Kt)})}w(()=>Se(Ve,1,qs(e(O)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""),"svelte-oc07pw")),Ze(pe,()=>t().webhook_secret,ft=>t(t().webhook_secret=ft,!0)),c(rt,Z)};k(ot,rt=>{t().delivery==="http"?rt(Me):rt(Ye,-1)})}c(Ee,Ge)};k(oe,Ee=>{(t().delivery==="http"||t().delivery==="webhook")&&Ee(Ae)})}var $e=i(oe,2);{var tt=Ee=>{var Ge=bu(),nt=i(n(Ge),2),Ne=i(n(nt),2),it=i(nt,2),dt=i(n(it),2),ot=i(it,2),Me=i(n(ot),2);St(Me,"placeholder",'{"text": "{text}"}'),ja(()=>Ze(Me,()=>e(o),pe=>l(o,pe))),en(Me,pe=>I==null?void 0:I(pe));var Ye=i(Me,2),rt=i(n(Ye));rt.textContent="{text}";var Z=i(Ye,2);{var K=pe=>{var We=mu(),Ve=n(We);w(()=>{var gt;return y(Ve,`⚠️ ${(gt=e(H))!=null?gt:""}`)}),c(pe,We)};k(Z,pe=>{e(H)&&pe(K)})}w(()=>Se(Me,1,qs(e(H)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""),"svelte-oc07pw")),Ze(Ne,()=>t().mcp_path,pe=>t(t().mcp_path=pe,!0)),Ze(dt,()=>t().mcp_tool,pe=>t(t().mcp_tool=pe,!0)),c(Ee,Ge)};k($e,Ee=>{t().delivery==="mcp"&&Ee(tt)})}var st=i($e,2);{var U=Ee=>{var Ge=Su(),nt=i(n(Ge),4),Ne=i(n(nt),2),it=i(Ne,4);{var dt=Te=>{var Ce=yu(),Ue=n(Ce);w(()=>{var Xe;return y(Ue,`⚠️ ${(Xe=e(ve))!=null?Xe:""}`)}),c(Te,Ce)};k(it,Te=>{e(ve)&&Te(dt)})}var ot=i(nt,2),Me=n(ot),Ye=i(n(Me),2),rt=n(Ye),Z=i(Me,2);{var K=Te=>{{let Ce=ue(()=>e(v).map(Ue=>({value:Ue,label:Ue})));cs(Te,{get options(){return e(Ce)},get value(){return t().chat_model},set value(Ue){t(t().chat_model=Ue,!0)}})}},pe=Te=>{var Ce=wu();w(()=>Se(Ce,1,`full-width-input ${e(ce)?"border-red-500! ring-2! ring-red-500/20!":""}`,"svelte-oc07pw")),Ze(Ce,()=>t().chat_model,Ue=>t(t().chat_model=Ue,!0)),c(Te,Ce)};k(Z,Te=>{e(v).length>0?Te(K):Te(pe,-1)})}var We=i(Z,4);{var Ve=Te=>{var Ce=ku(),Ue=n(Ce);w(()=>{var Xe;return y(Ue,`⚠️ ${(Xe=e(ce))!=null?Xe:""}`)}),c(Te,Ce)};k(We,Te=>{e(ce)&&Te(Ve)})}var gt=i(We,2);{var as=Te=>{var Ce=xu(),Ue=n(Ce);w(()=>{Se(Ce,1,`chat-status ${e(b)?"ok":"bad"}`,"svelte-oc07pw"),y(Ue,e(_))}),c(Te,Ce)};k(gt,Te=>{e(_)&&Te(as)})}var Ht=i(ot,2),Kt=i(n(Ht),2),ft=i(Ht,2),Ft=i(n(ft),2);ja(()=>Ze(Ft,()=>t().chat_system_prompt,Te=>t(t().chat_system_prompt=Te,!0))),en(Ft,Te=>I==null?void 0:I(Te));var At=i(ft,2),Et=i(n(At),2);cs(Et,{options:[{value:"speak",label:"Speak the reply aloud (TTS)"},{value:"inject",label:"Type the reply into the focused window"},{value:"clipboard",label:"Copy the reply to the clipboard"},{value:"none",label:"Discard the reply (fire and forget)"}],get value(){return t().chat_reply_mode},set value(Te){t(t().chat_reply_mode=Te,!0)}});var ze=i(At,2),Je=i(n(ze),2),q=i(ze,2),h=i(n(q),2),x=i(q,2),we=i(n(x),2),Be=i(x,2);{var He=Te=>{var Ce=Tu(),Ue=n(Ce),Xe=n(Ue);z("click",Xe,ie),c(Te,Ce)};k(Be,Te=>{s.isNew||Te(He)})}w(()=>{Se(Ne,1,`full-width-input ${e(ve)?"border-red-500! ring-2! ring-red-500/20!":""}`,"svelte-oc07pw"),Ye.disabled=e(f),y(rt,e(f)?"Connecting…":"Test & fetch models")}),Ze(Ne,()=>t().chat_url,Te=>t(t().chat_url=Te,!0)),z("click",Ye,me),Ze(Kt,()=>t().chat_api_key,Te=>t(t().chat_api_key=Te,!0)),Ze(Je,()=>t().chat_max_history,Te=>t(t().chat_max_history=Te,!0)),Ze(h,()=>t().chat_timeout_secs,Te=>t(t().chat_timeout_secs=Te,!0)),Ze(we,()=>t().chat_reset_phrase,Te=>t(t().chat_reset_phrase=Te,!0)),c(Ee,Ge)};k(st,Ee=>{t().delivery==="chat"&&Ee(U)})}var Q=i(st,2);{var ne=Ee=>{var Ge=Eu(),nt=i(n(Ge),2),Ne=n(nt);is(Ne,()=>t().strip_newlines,it=>t(t().strip_newlines=it,!0)),c(Ee,Ge)};k(Q,Ee=>{(t().delivery==="inject"||t().delivery==="command")&&Ee(ne)})}var Re=i(fe,2),at=n(Re),lt=i(at,2);w(()=>{Se(P,1,`modal-backdrop ${r()?"target-modal-backdrop":""}`,"svelte-oc07pw"),y(ge,s.isNew?"Create Target":"Edit Target"),y(le,t().label||"Obsidian Notes"),y(ee,t().label||"Obsidian Notes")}),z("click",De,function(...Ee){var Ge;(Ge=s.onCancel)==null||Ge.apply(this,Ee)}),Ze(Ie,()=>t().label,Ee=>t(t().label=Ee,!0)),z("click",at,function(...Ee){var Ge;(Ge=s.onCancel)==null||Ge.apply(this,Ee)}),z("click",lt,V),c(D,P)};k(be,D=>{t()&&D(ke)})}c(a,Y),Rt()}us(["click"]);var Au=p(`Your desktop decides which keys VoxCtrl may claim, and may ask you to confirm them. - If a shortcut below shows different keys than you chose, that is your desktop's - choice and it wins.`),Mu=p(''),Pu=p('
          '),Du=p(' '),zu=p(''),Iu=p('
          '),Ou=p('
          ⚠️ Conflict detected: Some key bindings share the same key combination and gesture type. Disabling one of the conflicting binds will fix the problem.
          '),Ru=p('CONFLICT'),Lu=p('LLM'),Nu=p('S1-mini'),Fu=p(' '),Vu=p('needs a regular key'),$u=p('not bound by your desktop'),Bu=p(' '),qu=p('Delete? ',1),ju=p(''),Wu=p('
          '),Uu=p('
          ⌨

          No keyboard bindings defined. Create a binding to link a physical hotkey to a routing target!

          '),Hu=p(''),Ku=p('
          ',1),Gu=p(''),Yu=p('
          '),Ju=p(' '),Zu=p(`⚠️ This binding uses a gesture this system cannot deliver, so it will not fire. - Pick one of the styles above.`),Xu=p(''),Qu=p(``),ep=p(' '),tp=p('
          ',1),sp=p(' '),ap=p('
          (Click / Tab here to record)',1),np=p(''),ip=p(''),rp=p('
          ⚠️
          '),lp=p('Your desktop will register this as .'),op=p('⚠️ Warning: This key combination and gesture type conflicts with another existing binding.'),cp=p('⚠️ Validation Error: Prompt template MUST contain the placeholder.'),dp=p('

          Prompt template MUST contain the placeholder. Leave empty to inherit the default user prompt.

          '),vp=p('
          System Prompt Override LLM Prompt

          Overrides the default system prompt configured in Settings → OpenAI API. Leave empty to inherit it.

          User Prompt Template LLM Prompt
          '),up=p(''),pp=p('

          Hotkey Bindings

          Bind keyboard combinations to your output targets. Each hotkey supports customizable triggers (double-taps, holding keys, etc.)

          ',1);function fp(a,s){Ot(s,!0);const t=()=>ls(Lt,"$config",r),[r,o]=Ms();let d=T(kt([])),u=T(kt([])),v=T(null),f=T(!1),_=T(null),b=T(null),m=T(null),g=T(!1),M=T(null),A=T(null),H=T(!1),E=T(!1),O=T(""),ve=T("custom"),ce=T(""),me=T("");function ie(Z,K){const pe=[...Z].sort().join(",");return`${K}:${pe}`}let I=ue(()=>{const Z=new Map;for(const pe of e(u))if(pe.keys&&pe.keys.length>0){const We=ie(pe.keys,pe.gesture);Z.set(We,(Z.get(We)||0)+1)}const K=new Set;for(const[pe,We]of Z.entries())We>1&&K.add(pe);return K}),V=ue(()=>{const Z=new Map;for(const pe of e(u))if(!pe.disabled&&pe.keys&&pe.keys.length>0){const We=ie(pe.keys,pe.gesture);Z.set(We,(Z.get(We)||0)+1)}const K=new Set;for(const[pe,We]of Z.entries())We>1&&K.add(pe);return K}),Y=ue(()=>{if(!e(v)||!e(v).keys||e(v).keys.length===0)return!1;const Z=ie(e(v).keys,e(v).gesture);return e(u).some(K=>K.id!==e(v).id&&ie(K.keys,K.gesture)===Z)});function be(Z){function K(){Z.style.height="auto",Z.style.height=`${Z.scrollHeight}px`}Z.addEventListener("input",K);const pe=setTimeout(K,0);return{update(){K()},destroy(){clearTimeout(pe),Z.removeEventListener("input",K)}}}const ke={hold:"Hold keys to dictate (Release to transcribe)",toggle:"Tap once to start recording, tap again to finish",double_tap:"Double-tap hotkey to trigger recording",double_tap_hold:"Double-tap & hold keys to dictate (Release to transcribe)"},D=["hold","toggle","double_tap","double_tap_hold"];let P=T(null),he=T(!1),B=T(null),L=T(!1),ge=T(!1);async function De(){try{l(P,await S("check_hotkey_status"),!0)}catch(Z){console.error("Failed to read hotkey status:",Z)}}async function fe(){var Z;l(he,!0),l(B,null);try{await S("open_shortcut_settings")}catch(K){l(B,(Z=K==null?void 0:K.toString())!=null?Z:"Could not open shortcut settings.",!0)}finally{l(he,!1)}}let G=ue(()=>{var K,pe;const Z=new Map;for(const We of(pe=(K=e(P))==null?void 0:K.shortcuts)!=null?pe:[])for(const Ve of We.binding_ids)Z.set(Ve,We);return Z});const J=ue(()=>{var Z,K;return(K=(Z=e(P))==null?void 0:Z.supported_gestures)!=null&&K.length?D.filter(pe=>e(P).supported_gestures.includes(pe)):D}),xe=ue(()=>D.length-e(J).length),Ie=ue(()=>{var pe,We;const Z=e(J).map(Ve=>({value:Ve,label:ke[Ve]})),K=(pe=e(v))==null?void 0:pe.gesture;return K&&!e(J).includes(K)&&Z.push({value:K,label:`${(We=ke[K])!=null?We:K} — not supported on this system`}),Z});Xt(async()=>{l(d,await S("get_targets"),!0),l(u,await S("get_bindings"),!0),await De()});async function re(){try{await S("save_targets",{targets:e(d)}),console.log("Targets auto-saved successfully!")}catch(Z){console.error("Failed to save targets:",Z)}}async function W(){try{await S("save_bindings",{bindings:e(u)}),console.log("Bindings auto-saved successfully!"),await De()}catch(Z){console.error("Failed to save bindings:",Z)}}function le(Z){return(Z.target_ids&&Z.target_ids.length>0?Z.target_ids:[Z.target_id]).map(pe=>{const We=e(d).find(Ve=>Ve.id===pe);return We?We.label:pe==="default"?"Focused Window":pe}).join(", ")}function R(Z){const K=e(d).find(pe=>pe.id===Z);return K?`${K.label} (${K.delivery})`:Z==="default"?"Focused Window":Z}function ee(){var Z,K,pe,We;if(e(d).length===0){alert("Please create at least one Output Command before making a hotkey binding.");return}l(f,!0),l(F,null),l(j,[],!0),l(H,(We=(pe=(K=(Z=t())==null?void 0:Z.engine)==null?void 0:K.s1_mini)==null?void 0:pe.enabled)!=null?We:!1,!0),l(E,!1),l(O,""),l(ve,"custom"),l(ce,""),l(me,""),l(v,{id:"binding_"+Math.random().toString(36).substring(2,6),label:"New Binding",keys:[],gesture:e(J).includes("hold")?"hold":e(J)[0],target_id:e(d)[0].id,target_ids:[e(d)[0].id],tap_ms:300,hold_threshold_ms:200,disabled:!1,openai_enabled:!1,openai_model:"",openai_mode:"custom",openai_prompt:"",openai_system_prompt:"",s1_mini_enabled:e(H)},!0)}function Oe(Z){var pe,We,Ve,gt;l(f,!1),l(F,null),l(j,[...Z.keys],!0);const K=JSON.parse(JSON.stringify(Z));K.target_ids||(K.target_ids=K.target_id?[K.target_id]:[]),K.s1_mini_enabled!==void 0&&K.s1_mini_enabled!==null?l(H,K.s1_mini_enabled,!0):l(H,(gt=(Ve=(We=(pe=t())==null?void 0:pe.engine)==null?void 0:We.s1_mini)==null?void 0:Ve.enabled)!=null?gt:!1,!0),l(E,K.openai_enabled===!0),l(O,K.openai_model||"",!0),l(ve,K.openai_mode||"custom",!0),l(ce,K.openai_prompt||"",!0),l(me,K.openai_system_prompt||"",!0),l(v,K,!0)}async function je(Z){l(u,e(u).map(K=>K.id===Z?{...K,disabled:!K.disabled}:K),!0),await W()}function Ke(){if(!e(v))return;e(v).target_ids||(e(v).target_ids=[e(v).target_id]);const Z=e(d).find(pe=>!e(v).target_ids.includes(pe.id)),K=Z?Z.id:e(d)[0].id;e(v).target_ids=[...e(v).target_ids,K]}function _e(Z){!e(v)||!e(v).target_ids||(e(v).target_ids=e(v).target_ids.filter((K,pe)=>pe!==Z))}async function se(){var We;if(!e(v))return;if(e(v).id.trim()===""){alert("Binding ID cannot be empty.");return}if(e(v).keys.length===0){alert("Please capture at least one hotkey before saving.");return}const Z=[...e(v).keys].sort().join(","),K=[...e(j)].sort().join(",");if(!(!e(f)&&Z===K))try{const Ve=await S("check_hotkey_keys",{keys:e(v).keys});if(!Ve.accepted){l(F,Ve,!0),alert((We=Ve.message)!=null?We:"This key combination cannot be used as a shortcut.");return}}catch(Ve){console.error("Failed to validate hotkey keys before saving:",Ve)}if(e(E)&&e(ve)==="custom"&&!e(ce).includes("{text}")){alert(`LLM Configuration Error: -Your custom prompt template MUST contain the '{text}' placeholder so the model knows where to insert the transcribed text. - -Example: -write a haiku about {text}`);return}if(e(v).openai_enabled=e(E),e(v).openai_model=e(O),e(v).openai_mode=e(ve),e(v).openai_prompt=e(ce),e(v).openai_system_prompt=e(me),e(v).s1_mini_enabled=e(H),e(v).target_ids&&e(v).target_ids.length>0){if(e(v).target_ids=e(v).target_ids.filter(gt=>gt.trim()!==""),e(v).target_ids.length===0){alert("Please assign at least one Output Command.");return}if(new Set(e(v).target_ids).size!==e(v).target_ids.length){alert(`Duplicate commands detected. -You cannot assign the same Output Command multiple times to a single keybind.`);return}e(v).target_id=e(v).target_ids[0]}else e(v).target_id="",e(v).target_ids=[];if(e(f)){if(e(u).some(Ve=>Ve.id===e(v).id)){alert("Binding with this ID already exists.");return}l(u,[...e(u),e(v)],!0)}else l(u,e(u).map(Ve=>Ve.id===e(v).id?e(v):Ve),!0);l(v,null),l(_,null),await W()}async function ye(Z){l(u,e(u).filter(K=>K.id!==Z),!0),await W()}function et(Z,K){const pe=K.toUpperCase();return Z==="Control"?"KEY_LEFTCTRL":Z==="Alt"?"KEY_LEFTALT":Z==="Shift"?"KEY_LEFTSHIFT":Z==="Meta"||Z==="OS"||Z==="Super"?"KEY_LEFTMETA":pe==="SPACE"?"KEY_SPACE":pe==="ENTER"?"KEY_ENTER":pe==="ESCAPE"||pe==="ESC"?"KEY_ESC":pe==="TAB"?"KEY_TAB":pe==="BACKSPACE"?"KEY_BACKSPACE":pe==="DELETE"?"KEY_DELETE":/^KEY[A-Z]$/.test(pe)?`KEY_${pe.slice(3)}`:pe.startsWith("KEY")?pe:pe.startsWith("DIGIT")?`KEY_${pe.replace("DIGIT","")}`:pe.startsWith("ARROW")?`KEY_${pe.replace("ARROW","")}`:pe.startsWith("F")&&pe.length>1?`KEY_${pe}`:Z.length===1?`KEY_${Z.toUpperCase()}`:`KEY_${pe}`}let te=T(kt([])),j=T(kt([]));gs(()=>{S("set_hotkeys_inhibited",{inhibited:e(_)==="keys"}).catch(Z=>console.error("Failed to set hotkeys inhibited:",Z))});let F=T(null);const ae=new Set(["KEY_LEFTCTRL","KEY_RIGHTCTRL","KEY_LEFTALT","KEY_RIGHTALT","KEY_LEFTSHIFT","KEY_RIGHTSHIFT","KEY_LEFTMETA","KEY_RIGHTMETA"]);function C(Z){return Z.length>0&&Z.every(K=>ae.has(K))}let X=ue(()=>e(P)===null||e(P).backend==="portal"||e(P).backend==="starting"),de=ue(()=>e(_)!=="keys"||!C(e(te))||!e(X)?null:"Keep holding and add a regular key — modifiers alone cannot be a shortcut.");async function oe(Z){if(!e(v)||Z.length===0)return;const K=[...Z].sort().join(","),pe=[...e(j)].sort().join(",");if(K===pe){l(F,null),e(v).keys=[...Z];return}let We;try{We=await S("check_hotkey_keys",{keys:Z})}catch(Ve){console.error("Failed to validate hotkey keys:",Ve),e(v).keys=[...Z];return}l(F,We,!0),We.accepted&&e(v)&&(e(v).keys=[...Z])}function Ae(Z){if(!e(_)||!e(v))return;Z.preventDefault(),Z.stopPropagation();const K=et(Z.key,Z.code);if(e(_)==="keys"&&(e(te).includes(K)||l(te,[...e(te),K],!0),Z.key==="Escape")){const pe=[...e(te)];l(te,[],!0),l(_,null),oe(pe)}}function $e(Z){if(!(!e(_)||!e(v))&&(Z.preventDefault(),Z.stopPropagation(),e(_)==="keys")){const K=[...e(te)];l(te,[],!0),l(_,null),oe(K)}}function tt(){if(e(_)){if(e(_)==="keys"&&e(te).length>0){const Z=[...e(te)];l(te,[],!0),oe(Z)}l(_,null)}}function st(Z){l(M,Z,!0),l(g,!0),l(m,{id:"new_target_"+Math.random().toString(36).substring(2,6),label:"New Target",delivery:"inject",file_prefix:"- ",file_timestamp:!0,file_timestamp_format:"%Y-%m-%dT%H:%M:%SZ",file_mode:"append",http_method:"POST",http_json_template:{text:"{text}"},webhook_json_template:{text:"{text}"},mcp_tool:"speak_text",mcp_args:{text:"{text}"},chat_max_history:20,chat_timeout_secs:120,chat_reply_mode:"speak",strip_newlines:!1,processing:{}},!0)}function U(){l(m,null),l(M,null)}async function Q(){if(e(m)){if(e(d).some(Z=>Z.id===e(m).id)){alert("Target with this ID already exists.");return}l(d,[...e(d),e(m)],!0),e(M)!==null&&e(v)&&(e(v).target_ids||(e(v).target_ids=[]),e(v).target_ids[e(M)]=e(m).id),l(m,null),l(M,null),await re()}}var ne=pp(),Re=wt(ne),at=i(n(Re),2);{var lt=Z=>{var K=Pu();let pe;var We=n(K),Ve=n(We),gt=n(Ve),as=i(Ve,2),Ht=n(as);{var Kt=x=>{var we=qe("Your desktop is handling these shortcuts");c(x,we)},ft=x=>{var we=qe("Reading keystrokes with a keyboard hook");c(x,we)},Ft=x=>{var we=qe("Reading input devices directly");c(x,we)},At=x=>{var we=qe("Starting up…");c(x,we)},Et=x=>{var we=qe("Global shortcuts are not available");c(x,we)};k(Ht,x=>{e(P).backend==="portal"?x(Kt):e(P).backend==="windows_hook"?x(ft,1):e(P).backend==="evdev"?x(Ft,2):e(P).backend==="starting"?x(At,3):x(Et,-1)})}var ze=i(as,2);let Je;var q=i(We,2);{var h=x=>{var we=Mu(),Be=n(we),He=n(Be),Te=i(Be,2);{var Ce=Ue=>{var Xe=Au();c(Ue,Xe)};k(Te,Ue=>{e(P).backend==="portal"&&Ue(Ce)})}w(()=>y(He,e(P).detail)),c(x,we)};k(q,x=>{e(L)&&x(h)})}w(()=>{pe=Se(K,1,"backend-banner svelte-w4d8v7",null,pe,{private:e(P).is_private,warn:!e(P).is_private&&e(P).is_active,broken:!e(P).is_active}),St(We,"aria-expanded",e(L)),y(gt,e(P).is_private?"🔒":e(P).is_active?"⚠️":"⛔"),Je=Se(ze,0,"banner-chevron svelte-w4d8v7",null,Je,{expanded:e(L)})}),z("click",We,()=>l(L,!e(L))),c(Z,K)};k(at,Z=>{e(P)&&Z(lt)})}var Ee=i(at,2);{var Ge=Z=>{var K=Iu(),pe=n(K),We=i(n(pe),4);let Ve;var gt=i(pe,2);{var as=Ht=>{var Kt=zu(),ft=n(Kt),Ft=n(ft),At=i(ft,2),Et=n(At),ze=n(Et),Je=i(At,2);{var q=h=>{var x=Du(),we=n(x);w(()=>y(we,e(B))),c(h,x)};k(Je,h=>{e(B)&&h(q)})}w(()=>{y(Ft,e(P).manual_enable_hint),Et.disabled=e(he),y(ze,e(he)?"Opening…":"Open Shortcut Settings")}),z("click",Et,fe),c(Ht,Kt)};k(gt,Ht=>{e(ge)&&Ht(as)})}w(()=>{St(pe,"aria-expanded",e(ge)),Ve=Se(We,0,"banner-chevron svelte-w4d8v7",null,Ve,{expanded:e(ge)})}),z("click",pe,()=>l(ge,!e(ge))),c(Z,K)};k(Ee,Z=>{var K;(K=e(P))!=null&&K.needs_manual_enable&&Z(Ge)})}var nt=i(Ee,2),Ne=i(nt,2);{var it=Z=>{var K=Ou();c(Z,K)};k(Ne,Z=>{e(I).size>0&&Z(it)})}var dt=i(Ne,2);_t(dt,21,()=>e(u),ht,(Z,K)=>{var pe=Wu();let We;var Ve=n(pe);{var gt=bt=>{var Wt=Ru();c(bt,Wt)},as=ue(()=>!e(K).disabled&&e(K).keys&&e(K).keys.length>0&&e(V).has(ie(e(K).keys,e(K).gesture)));k(Ve,bt=>{e(as)&&bt(gt)})}var Ht=i(Ve,2),Kt=n(Ht),ft=n(Kt);let Ft;var At=n(ft),Et=i(ft,2);{var ze=bt=>{var Wt=Lu();c(bt,Wt)};k(Et,bt=>{e(K).openai_enabled&&bt(ze)})}var Je=i(Et,2);{var q=bt=>{var Wt=Nu();c(bt,Wt)};k(Je,bt=>{var Wt,fs,zt,Yt;((Yt=e(K).s1_mini_enabled)!=null?Yt:(zt=(fs=(Wt=t())==null?void 0:Wt.engine)==null?void 0:fs.s1_mini)!=null&&zt.enabled)&&bt(q)})}var h=i(Kt,2),x=n(h);_t(x,21,()=>e(K).keys,ht,(bt,Wt)=>{var fs=Fu(),zt=n(fs);w(Yt=>y(zt,Yt),[()=>e(Wt).replace("KEY_","")]),c(bt,fs)});var we=i(x,2),Be=n(we),He=i(we,2);{var Te=bt=>{var Wt=Vu();c(bt,Wt)},Ce=ue(()=>e(X)&&C(e(K).keys));k(He,bt=>{e(Ce)&&bt(Te)})}var Ue=i(He,2);{var Xe=bt=>{const Wt=ue(()=>e(G).get(e(K).id));var fs=$i(),zt=wt(fs);{var Yt=Os=>{var Zs=$u();c(Os,Zs)},Is=Os=>{var Zs=Bu(),ma=n(Zs);w(()=>{var ba;return y(ma,`desktop: ${(ba=e(Wt).trigger_description)!=null?ba:""}`)}),c(Os,Zs)};k(zt,Os=>{e(Wt).bound?e(Wt).trigger_description&&Os(Is,1):Os(Yt)})}c(bt,fs)},Vt=ue(()=>{var bt;return((bt=e(P))==null?void 0:bt.backend)==="portal"&&!e(K).disabled&&e(G).get(e(K).id)});k(Ue,bt=>{e(Vt)&&bt(Xe)})}var Qt=i(h,2),ts=n(Qt),Gt=i(Qt,2),Dt=n(Gt),ps=n(Dt),es=i(Dt,2),ys=i(es,2);{var Ps=bt=>{var Wt=qu(),fs=i(wt(Wt),2),zt=i(fs,2);z("click",fs,()=>{ye(e(K).id),l(b,null)}),z("click",zt,()=>l(b,null)),c(bt,Wt)},Js=bt=>{var Wt=ju();z("click",Wt,()=>l(b,e(K).id,!0)),c(bt,Wt)};k(ys,bt=>{e(b)===e(K).id?bt(Ps):bt(Js,-1)})}w((bt,Wt,fs)=>{We=Se(pe,1,"binding-item glass svelte-w4d8v7",null,We,bt),Ft=Se(ft,1,"binding-title svelte-w4d8v7",null,Ft,Wt),y(At,e(K).label||e(K).id),y(Be,e(K).gesture),y(ts,fs),y(ps,e(K).disabled?"Enable":"Disable")},[()=>({disabled:e(K).disabled,"has-conflict":e(K).keys&&e(K).keys.length>0&&e(I).has(ie(e(K).keys,e(K).gesture)),"active-conflict":!e(K).disabled&&e(K).keys&&e(K).keys.length>0&&e(V).has(ie(e(K).keys,e(K).gesture))}),()=>({"has-conflict":!e(K).disabled&&e(K).keys&&e(K).keys.length>0&&e(V).has(ie(e(K).keys,e(K).gesture))}),()=>le(e(K))]),z("click",Dt,()=>je(e(K).id)),z("click",es,()=>Oe(e(K))),c(Z,pe)},Z=>{var K=Uu();c(Z,K)});var ot=i(Re,2);{var Me=Z=>{var K=up(),pe=n(K),We=n(pe),Ve=n(We),gt=n(Ve),as=i(Ve,2),Ht=i(We,2),Kt=n(Ht),ft=i(n(Kt),2),Ft=i(Kt,2),At=i(n(Ft),2),Et=i(Ft,2),ze=n(Et),Je=i(n(ze),2),q=i(ze,2);_t(q,21,()=>e(v).target_ids||[],ht,(Qe,pt,$t)=>{var Jt=Yu(),Cs=n(Jt),ws=n(Cs),Ws=n(ws),Ts=i(ws,2);{var Us=Rs=>{var ns=Ku(),Ma=wt(ns),N=i(Ma,2),Pe=n(N);_t(Pe,17,()=>e(d),ht,(ct,yt)=>{var Ut=Hu(),ss=n(Ut);w(vs=>{var Vs,Ls;Ut.disabled=vs,y(ss,`${(Vs=e(yt).label)!=null?Vs:""} (${(Ls=e(yt).delivery)!=null?Ls:""})`)},[()=>e(v).target_ids.includes(e(yt).id)&&e(yt).id!==e(pt)]),z("click",Ut,vs=>{vs.preventDefault(),vs.stopPropagation(),e(v).target_ids[$t]=e(yt).id,l(A,null)}),c(ct,Ut)});var Fe=i(Pe,2);z("click",Ma,()=>l(A,null)),z("click",Fe,ct=>{ct.preventDefault(),ct.stopPropagation(),l(A,null),st($t)}),c(Rs,ns)};k(Ts,Rs=>{e(A)===$t&&Rs(Us)})}var ia=i(Cs,2);{var Ga=Rs=>{var ns=Gu();z("click",ns,()=>_e($t)),c(Rs,ns)};k(ia,Rs=>{$t>0&&Rs(Ga)})}w(Rs=>y(Ws,Rs),[()=>R(e(pt))]),z("click",ws,()=>l(A,e(A)===$t?null:$t,!0)),c(Qe,Jt)});var h=i(Et,2),x=i(n(h),2);cs(x,{get options(){return e(Ie)},get value(){return e(v).gesture},set value(Qe){e(v).gesture=Qe}});var we=i(x,2);{var Be=Qe=>{var pt=Ju(),$t=n(pt);w(()=>{var Jt;return y($t,((Jt=e(P))==null?void 0:Jt.backend)==="mint_dbus"?"Your desktop delivers VoxCtrl's shortcuts itself and only reports the key going down, never coming back up — so hold and double-tap styles cannot work here and are not offered.":`${e(xe)} gesture style${e(xe)===1?"":"s"} are hidden because the way this system delivers shortcuts cannot produce them.`)}),c(Qe,pt)};k(we,Qe=>{e(xe)>0&&Qe(Be)})}var He=i(we,2);{var Te=Qe=>{var pt=Zu();c(Qe,pt)},Ce=ue(()=>e(v).gesture&&!e(J).includes(e(v).gesture));k(He,Qe=>{e(Ce)&&Qe(Te)})}var Ue=i(h,2);{var Xe=Qe=>{var pt=Xu(),$t=i(n(pt),2),Jt=i($t,2),Cs=n(Jt);w(()=>y(Cs,e(v).gesture==="double_tap_hold"?"How long the second tap must stay held before recording starts. Keeps a plain double-tap from being read as a double-tap-and-hold.":"Minimum duration to keep keys pressed to count as a 'hold'.")),Ze($t,()=>e(v).hold_threshold_ms,ws=>e(v).hold_threshold_ms=ws),c(Qe,pt)};k(Ue,Qe=>{(e(v).gesture==="hold"||e(v).gesture==="double_tap_hold")&&Qe(Xe)})}var Vt=i(Ue,2);{var Qt=Qe=>{var pt=Qu(),$t=i(n(pt),2);Ze($t,()=>e(v).tap_ms,Jt=>e(v).tap_ms=Jt),c(Qe,pt)};k(Vt,Qe=>{(e(v).gesture==="double_tap"||e(v).gesture==="double_tap_hold")&&Qe(Qt)})}var ts=i(Vt,2),Gt=n(ts),Dt=i(n(Gt),2),ps=n(Dt);{var es=Qe=>{var pt=tp(),$t=wt(pt),Jt=i(n($t),2),Cs=n(Jt),ws=i($t,2);{var Ws=Ts=>{var Us=ep(),ia=n(Us);w(()=>y(ia,e(de))),c(Ts,Us)};k(ws,Ts=>{e(de)&&Ts(Ws)})}w(Ts=>y(Cs,Ts),[()=>e(te).length>0?e(te).join(" + ").replace(/KEY_/g,""):"Press your physical shortcut combination now..."]),c(Qe,pt)},ys=Qe=>{var pt=np(),$t=n(pt);{var Jt=ws=>{var Ws=ap(),Ts=wt(Ws);_t(Ts,21,()=>e(v).keys,ht,(Us,ia)=>{var Ga=sp(),Rs=n(Ga);w(ns=>y(Rs,ns),[()=>e(ia).replace("KEY_","")]),c(Us,Ga)}),c(ws,Ws)},Cs=ws=>{var Ws=qe("⚠️ Click/Focus here to press keys!");c(ws,Ws)};k($t,ws=>{e(v).keys.length>0?ws(Jt):ws(Cs,-1)})}c(Qe,pt)};k(ps,Qe=>{e(_)==="keys"?Qe(es):Qe(ys,-1)})}var Ps=i(Gt,2);{var Js=Qe=>{var pt=ip(),$t=i(n(pt),2),Jt=i(n($t));w(()=>{var Cs;return y(Jt,` ${(Cs=e(F).message)!=null?Cs:""}`)}),c(Qe,pt)},bt=Qe=>{var pt=rp(),$t=i(n(pt),2),Jt=n($t);w(()=>y(Jt,e(F).message)),c(Qe,pt)},Wt=Qe=>{var pt=lp(),$t=i(n(pt)),Jt=n($t);w(()=>y(Jt,e(F).accelerator)),c(Qe,pt)};k(Ps,Qe=>{var pt;e(F)&&!e(F).accepted?Qe(Js):e(F)&&e(F).problem?Qe(bt,1):(pt=e(F))!=null&&pt.accelerator&&e(X)&&Qe(Wt,2)})}var fs=i(Ps,2);{var zt=Qe=>{var pt=op();c(Qe,pt)};k(fs,Qe=>{e(Y)&&Qe(zt)})}var Yt=i(ts,2),Is=i(n(Yt),2),Os=n(Is),Zs=i(Is,2);{var ma=Qe=>{var pt=vp(),$t=n(pt),Jt=i(n($t),2),Cs=i($t,2),ws=i(n(Cs),2);ja(()=>Ze(ws,()=>e(me),ns=>l(me,ns))),en(ws,ns=>be==null?void 0:be(ns));var Ws=i(Cs,2),Ts=i(n(Ws),2);St(Ts,"placeholder","e.g. write a haiku about {text}"),ja(()=>Ze(Ts,()=>e(ce),ns=>l(ce,ns))),en(Ts,ns=>be==null?void 0:be(ns));var Us=i(Ts,2);{var ia=ns=>{var Ma=cp(),N=i(n(Ma));N.textContent="{text}",c(ns,Ma)},Ga=ue(()=>e(ce)&&!e(ce).includes("{text}")),Rs=ns=>{var Ma=dp(),N=i(n(Ma));N.textContent="{text}",c(ns,Ma)};k(Us,ns=>{e(Ga)?ns(ia):ns(Rs,-1)})}w(ns=>Se(Ts,1,ns,"svelte-w4d8v7"),[()=>qs(e(ce)&&!e(ce).includes("{text}")?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":"")]),Ze(Jt,()=>e(O),ns=>l(O,ns)),c(Qe,pt)};k(Zs,Qe=>{e(E)&&Qe(ma)})}var ba=i(Yt,2),ln=i(n(ba),2),on=n(ln),cn=i(Ht,2),xt=n(cn),Mt=i(xt,2);w(Qe=>{y(gt,e(f)?"Create Hotkey Binding":"Edit Hotkey Binding"),ft.disabled=!e(f),Se(Dt,1,Qe,"svelte-w4d8v7")},[()=>qs(["border-2 rounded-desktop p-4 text-center cursor-pointer outline-none transition-all duration-200 flex flex-col items-center justify-center min-h-[70px]",e(_)==="keys"?"border-solid border-[#f43f5e] bg-[rgba(244,63,94,0.05)] animate-border-pulse":e(Y)?"border-solid border-[#fbbf24] bg-[rgba(251,191,36,0.05)] hover:border-[#fbbf24]/80":"border-dashed border-white/5 bg-black/25 hover:border-accent-blue hover:bg-black/35 focus:border-accent-blue focus:bg-black/35"].join(" "))]),z("click",as,()=>{l(v,null),l(_,null)}),Ze(ft,()=>e(v).id,Qe=>e(v).id=Qe),Ze(At,()=>e(v).label,Qe=>e(v).label=Qe),z("click",Je,Ke),z("click",Dt,()=>l(_,"keys")),Ra("focus",Dt,()=>l(_,"keys")),Ra("blur",Dt,()=>tt()),z("keydown",Dt,Ae),z("keyup",Dt,$e),is(Os,()=>e(E),Qe=>l(E,Qe)),is(on,()=>e(H),Qe=>l(H,Qe)),z("click",xt,()=>{l(v,null),l(_,null)}),z("click",Mt,se),c(Z,K)};k(ot,Z=>{e(v)&&Z(Me)})}var Ye=i(ot,2);{var rt=Z=>{Zo(Z,{isNew:!0,get existingTargets(){return e(d)},isNested:!0,onSave:Q,onCancel:U,get editingTarget(){return e(m)},set editingTarget(K){l(m,K,!0)}})};k(Ye,Z=>{e(m)&&Z(rt)})}z("click",nt,ee),c(a,ne),Rt(),o()}us(["click","keydown","keyup"]);var _p=p('
          '),hp=p('
          '),gp=p('
          '),mp=p('
          '),bp=p('
          '),yp=p('
          '),wp=p('
          Speech: Plays transcribed text via TTS
          '),kp=p('
          '),xp=p('Delete? ',1),Tp=p(''),Sp=p('
          '),Ep=p('
          🎯

          No output targets defined. Create one to route your transcription output!

          '),Cp=p(`

          Output Commands

          Define routing destinations where transcribed text is typed, copied, piped, or sent over network sockets.

          Saying a command by name. Start dictation and say “Hey Vox,” (or “VoxCtrl” / “Vox Control”), then the command's name, then what you want to send — for - example “Hey Vox, notes, remember to call the plumber” or “VoxCtrl notes, remember to call the plumber” routes remember to call the plumber to the command named notes. - Everything after the name is the text. Natural phrasing works too - (“Hey Vox, add this to my notes: …”). Say nothing of the sort and - dictation goes wherever your hotkey already points.

          `,1);function Ap(a,s){Ot(s,!0);let t=T(kt([])),r=T(kt([])),o=T(null),d=T(!1),u=T(null),v=T(null);Xt(async()=>{l(t,await S("get_targets"),!0),l(r,await S("get_bindings"),!0)});async function f(){try{await S("save_targets",{targets:e(t)}),console.log("Targets auto-saved successfully!")}catch(ie){console.error("Failed to save targets:",ie)}}async function _(){try{await S("save_bindings",{bindings:e(r)}),console.log("Bindings auto-saved successfully!")}catch(ie){console.error("Failed to save bindings:",ie)}}function b(){l(d,!0),l(o,{id:"new_target_"+Math.random().toString(36).substring(2,6),label:"New Target",delivery:"inject",file_prefix:"- ",file_timestamp:!0,file_timestamp_format:"%Y-%m-%dT%H:%M:%SZ",file_mode:"append",http_method:"POST",http_json_template:{text:"{text}"},webhook_json_template:{text:"{text}"},mcp_tool:"speak_text",mcp_args:{text:"{text}"},chat_max_history:20,chat_timeout_secs:120,chat_reply_mode:"speak",strip_newlines:!1,processing:{}},!0)}function m(ie){l(d,!1),l(u,ie.id,!0);const I=JSON.parse(JSON.stringify(ie));I.processing||(I.processing={}),I.file_mode||(I.file_mode="append"),l(o,I,!0)}function g(){l(o,null),l(u,null)}async function M(){if(e(o)){if(e(d))l(t,[...e(t),e(o)],!0);else{if(e(u)&&e(u)!==e(o).id){let ie=!1;l(r,e(r).map(I=>{let V=!1,Y=I.target_ids?[...I.target_ids]:[I.target_id];for(let be=0;beie.id===e(u)?e(o):ie),!0)}l(o,null),l(u,null),await f()}}async function A(ie){const I=e(r).filter(V=>(V.target_ids&&V.target_ids.length>0?V.target_ids:[V.target_id]).includes(ie)).map(V=>V.label||V.id);if(I.length>0){alert(`Cannot delete target. It is currently being used by hotkeys: ${I.join(", ")}`);return}l(t,e(t).filter(V=>V.id!==ie),!0),await f()}var H=Cp(),E=wt(H),O=i(n(E),4),ve=i(O,2);_t(ve,21,()=>e(t),ht,(ie,I)=>{var V=Sp(),Y=n(V),be=n(Y),ke=n(be),D=n(ke),P=i(ke,2),he=n(P),B=i(be,2);{var L=te=>{var j=_p(),F=n(j);w(()=>{var ae;return y(F,`Cmd: ${(ae=e(I).command)!=null?ae:""}`)}),c(te,j)};k(B,te=>{e(I).delivery==="exec"&&te(L)})}var ge=i(B,2);{var De=te=>{var j=hp(),F=n(j);w(()=>{var ae;return y(F,`File: ${(ae=e(I).file_path)!=null?ae:""}`)}),c(te,j)};k(ge,te=>{e(I).delivery==="file"&&te(De)})}var fe=i(ge,2);{var G=te=>{var j=gp(),F=n(j);w(()=>{var ae,C;return y(F,`Socket: ${(ae=e(I).socket_host)!=null?ae:""}:${(C=e(I).socket_port)!=null?C:""}`)}),c(te,j)};k(fe,te=>{e(I).delivery==="socket"&&te(G)})}var J=i(fe,2);{var xe=te=>{var j=mp(),F=n(j),ae=i(F);{var C=X=>{var de=qe();w(()=>{var oe;return y(de,`→ ${(oe=e(I).response_pipe)!=null?oe:""}`)}),c(X,de)};k(ae,X=>{e(I).response_pipe&&X(C)})}w(()=>{var X;return y(F,`Pipe: ${(X=e(I).pipe_path)!=null?X:""} `)}),c(te,j)};k(J,te=>{e(I).delivery==="pipe"&&te(xe)})}var Ie=i(J,2);{var re=te=>{var j=bp(),F=n(j);w(()=>{var ae;return y(F,`API: ${(ae=e(I).http_url||e(I).webhook_url)!=null?ae:""}`)}),c(te,j)};k(Ie,te=>{(e(I).delivery==="http"||e(I).delivery==="webhook")&&te(re)})}var W=i(Ie,2);{var le=te=>{var j=yp(),F=n(j);w(()=>{var ae;return y(F,`MCP Tool: ${(ae=e(I).mcp_tool||"speak_text")!=null?ae:""}`)}),c(te,j)};k(W,te=>{e(I).delivery==="mcp"&&te(le)})}var R=i(W,2);{var ee=te=>{var j=wp();c(te,j)};k(R,te=>{e(I).delivery==="speak"&&te(ee)})}var Oe=i(R,2);{var je=te=>{var j=kp(),F=n(j);w(()=>{var ae,C,X;return y(F,`Chat: ${(ae=e(I).chat_model||"no model")!=null?ae:""} @ ${(C=e(I).chat_url||"no endpoint")!=null?C:""} → ${(X=e(I).chat_reply_mode||"speak")!=null?X:""}`)}),c(te,j)};k(Oe,te=>{e(I).delivery==="chat"&&te(je)})}var Ke=i(Oe,2),_e=n(Ke),se=i(_e,2);{var ye=te=>{var j=xp(),F=i(wt(j),2),ae=i(F,2);z("click",F,()=>{A(e(I).id),l(v,null)}),z("click",ae,()=>l(v,null)),c(te,j)},et=te=>{var j=Tp();z("click",j,()=>l(v,e(I).id,!0)),c(te,j)};k(se,te=>{e(v)===e(I).id?te(ye):te(et,-1)})}w(()=>{y(D,e(I).label),y(he,e(I).delivery)}),z("click",_e,()=>m(e(I))),c(ie,V)},ie=>{var I=Ep();c(ie,I)});var ce=i(E,2);{var me=ie=>{Zo(ie,{get isNew(){return e(d)},get existingTargets(){return e(t)},isNested:!1,onSave:M,onCancel:g,get editingTarget(){return e(o)},set editingTarget(I){l(o,I,!0)}})};k(ce,ie=>{e(o)&&ie(me)})}z("click",O,b),c(a,H),Rt()}us(["click"]);var Mp=p('

          Use CUDA GPU acceleration (ONNX Runtime). Falls back to CPU if unavailable.

          ',1),Pp=p('

          Runs synthesis on the GPU via Vulkan. Falls back to the CPU whenever no Vulkan device can be opened.

          ',1),Dp=p('

          Runs synthesis on the GPU via Vulkan. Falls back to the CPU whenever no Vulkan device can be opened.

          ',1),zp=p('

          Runs synthesis on the GPU via Vulkan. Falls back to the CPU whenever no Vulkan device can be opened.

          ',1),Ip=p('
          Run speed
          '),Op=p('

          '),Rp=p('

          '),Lp=p('⏳ Checking local voice files...'),Np=p(' '),Fp=p('
          '),Vp=p('

          '),$p=p('

          Piper Voice

          Voice directory (leave blank for default)

          Default voice directory: ~/.local/share/voxctrl/piper-voices/

          '),Bp=p('⏳ Checking local model files...'),qp=p('⏳ Downloading VoxCPM2 model weights from HuggingFace (4.5 GB)...'),jp=p('
          '),Wp=p("Currently using the HF_TOKEN environment variable.",1),Up=p(`

          VoxCPM2 Voice

          ⚡ OpenBMB VoxCPM2 — 2B Autoregressive Diffusion TTS

          Runs through audio.cpp with optional Vulkan acceleration. Supports reference Voice Cloning and Ultimate Cloning (reference audio + transcript matching). Licensed under Apache 2.0.

          Voice Design (prompt-based) isn't offered here: audio.cpp's current VoxCPM2 build doesn't - act on the prompt yet, an upstream limitation. Voice Cloning below works correctly.

          Shared Voice Folder (leave blank for default)

          Default directory: ~/.local/share/voxctrl/cloned-tts-voices/

          Enable Ultimate Cloning

          When enabled, VoxCPM2 reads a companion .txt transcript file next to the .wav reference audio (e.g. voice_name.txt alongside voice_name.wav) for maximum phoneme alignment, nuanced breathing, and exact prosodic preservation.

          VoxCPM2 model files are hosted on HuggingFace at huggingface.co/openbmb/VoxCPM2. - An optional token can avoid anonymous download rate limits — set it once in the General tab.

          Model directory (leave blank for default)

          Default directory: ~/.local/share/voxctrl/models/voxcpm2/

          Loads the model at startup so the first reply doesn't pay the load cost.

          `),Hp=p('⏳ Checking local model files...'),Kp=p('⏳ Downloading Breeze-TTS-2 model weights from HuggingFace...'),Gp=p('
          '),Yp=p(`

          Breeze-TTS-2 Voice

          ⚠️ Non-Commercial License Warning

          Breeze-TTS-2 model weights are released under the BreezeBlue Research and Non-Commercial License. - Commercial use requires a personal or commercial license directly from the creator (RESONIA, INC.).

          Voice Design (prompt-based) isn't offered here: it doesn't reliably apply the described - voice and quality suffers compared to Voice Cloning below, which works correctly.

          Shared Voice Folder (leave blank for default)

          Default directory: ~/.local/share/voxctrl/cloned-tts-voices/

          ⚠️ Voice Cloning Transcript Required

          Unlike Pocket-TTS and VoxCPM2, Breeze-TTS-2 cannot clone a voice without a transcript. - Drop reference .wav audio files into your shared voice folder along with a - matching text file (e.g. voice_name.txt) containing exactly what is spoken - in the audio — cloning fails without one.

          Breeze-TTS-2 runs through the audio.cpp engine, which downloads the model on its first use - here — no HuggingFace token required.

          Model directory (leave blank for default)

          Default directory: ~/.local/share/voxctrl/models/breeze-tts-2/

          Loads the model at startup so the first reply doesn't pay the load cost.

          `),Jp=p('⏳ Checking local model files...'),Zp=p('⏳ Downloading Pocket-TTS model & voice clip (may take a few minutes)...'),Xp=p('
          '),Qp=p('

          '),ef=p(`

          Pocket-TTS Voice

          Pocket-TTS runs through the audio.cpp engine, which downloads the model and voice clip on - their first use here — no HuggingFace token required.

          Custom voice directory (leave blank for default)

          Drop a .wav reference clip into this folder to add it to the voice list — - the filename (without extension) becomes the voice's id, e.g. narrator.wav adds - "Narrator (Custom)". Naming a clip after a built-in voice (e.g. alba.wav) replaces - that voice's reference clip. Default: ~/.local/share/voxctrl/cloned-tts-voices/

          Loads the model at startup so the first reply doesn't pay the load cost.

          `),tf=p(`

          This build cannot run this engine. The ONNX half is behind an opt-in - cargo feature, so Test TTS stays disabled until the app is rebuilt with it:
          npm run tauri dev -- --features inflect-micro
          npm run tauri build -- --features inflect-micro
          The -- is required, or npm consumes the flag itself. Downloading the - model works either way — only synthesis needs the feature.

          `),sf=p('⏳ Checking local model files...'),af=p('⏳ Downloading Inflect-Micro-v2 model (~38 MB)...'),nf=p('
          '),rf=p('
           
          '),lf=p('
           
          '),of=p(`

          Inflect Micro

          A 9.4M-parameter VITS model (38 MB) with a single fixed English voice at 24 kHz, so - there is no voice to choose. Needs espeak-ng installed for phonemization.

          The model is deterministic for a fixed seed, so the same text always produces identical - audio. Change it to resample the prosody.

          Higher values give more expressive but less predictable delivery. Default is 0.667.

          Loads the ONNX graphs at launch so the first spoken response has no load delay.

          Model directory (leave blank for default)

          Point this at an existing copy of the model to skip downloading. Default: ~/.local/share/voxctrl/models/inflect-micro/

          Model diagnostics

          Reports the tensor names the downloaded export declares. Useful if synthesis fails with a - message about an input that could not be mapped.

          `),cf=p('

          ',1),df=p(`

          The model stays in memory for the whole session — the fastest possible response, at - the cost of holding its memory even while TTS sits unused.

          `),vf=p('
          '),uf=p(' '),pf=p('
          (Click / Tab here to record a new stop key)',1),ff=p(''),_f=p('
          →
          '),hf=p('

          No pronunciation snippets defined.

          '),gf=p('

          Text to Speech

          TTS Engine

          Model Memory

          Playback

          Stop Key Bind

          Press a key combo to immediately stop TTS playback — works even when this window is hidden.

          TTS Snippets (Pronunciation Guide)

          Type a word (e.g. "voxctrl") ➔ its spoken expansion/pronunciation (e.g. "vox control"). Only affects speech playback.

          ');function mf(a,s){Ot(s,!0);let t=Nt(s,"cfg",15);function r(){Lt.set(t()),Va.set(!0)}let o=T(null),d=T(0),u=T(!1),v=null,f=null,_=null,b=null,m=T(!1),g=T(null),M=0;function A(){l(u,!0),l(d,0),l(o,null),M=performance.now(),v&&clearInterval(v),v=setInterval(()=>{l(d,Math.round(performance.now()-M),!0),e(d)>1e4&&(clearInterval(v),l(u,!1),l(o,null))},10)}const H=["en-us-libritts-high","en-us-amy-low","en-us-kathleen-low","en-gb-southern_english_female-low","en-us-ryan-high","en-us-ryan-medium","en-us-ryan-low","en-us-lessac-medium","en-us-lessac-low","en-us-danny-low","en-gb-alan-low"];let E=T(kt({})),O=T(!1),ve=T(!1),ce=T(!1),me=T(null);async function ie(){l(O,!0);const N={};for(const Pe of H)try{N[Pe]=await S("check_voice_downloaded",{voiceName:Pe,voiceDir:t().tts.voice_dir})}catch(Fe){console.error("Failed to check download status for voice "+Pe,Fe),N[Pe]=!1}l(E,N,!0),l(O,!1)}async function I(N){if(!e(ve)){l(ve,!0);try{await S("download_voice",{voiceName:N,voiceDir:t().tts.voice_dir}),e(E)[N]=!0}catch(Pe){alert(`Failed to download voice: ${Pe}`)}finally{l(ve,!1)}}}async function V(){const N=t().tts.voice_dir;if(!N){l(me,null);return}const Pe=await S("check_directory_exists",{path:N});l(me,Pe?null:"This folder does not exist. Please create it first or leave blank for the default location.",!0),e(me)||await ie()}function Y(){r()}function be(N){N.key==="Enter"&&N.currentTarget.blur()}async function ke(){r()}async function D(){if(e(ce))return;try{await bl(t())}catch(ct){l(g,`Failed to save configuration: ${ct}`);return}if(e(m)){l(m,!1);try{await S("stop_tts")}catch(ct){console.error("Failed to stop TTS:",ct)}}l(ce,!0),l(g,null),A();let N="TTS",Pe=null;t().tts.engine==="piper"?(N="Piper",Pe=t().tts.voice):t().tts.engine==="pocket_tts"?(N="Pocket-TTS",Pe=t().tts.pocket_tts.voice):t().tts.engine==="breeze_tts_2"?(N="Breeze-TTS-2",Pe=null):t().tts.engine==="vox_cpm_2"?(N="VoxCPM2",Pe=null):t().tts.engine==="inflect_micro"?(N="Inflect Micro",Pe=null):t().tts.engine==="espeak"&&(N="eSpeak-NG",Pe=null);const Fe=`Hi this is ${N} speaking from VoxCtrl`;try{await S("speak_text",{text:Fe,voice:Pe})}catch(ct){l(g,`${ct}`),clearInterval(v),l(u,!1),l(ce,!1)}}let P=T(!1);function he(){if(!t().tts.enabled)return"Enable text-to-speech above first.";if(e(P))return"Switching engine...";if(e(m))return null;if(e(ce))return"Already speaking.";if(t().tts.engine==="inflect_micro"){if(!e(Ke))return"This build was compiled without the `inflect-micro` feature, so this engine cannot synthesize. Rebuild with: npm run tauri dev -- --features inflect-micro";if(e(se))return"Checking local model files...";if(e(ye))return"Downloading the model...";if(!e(_e))return"Download the model first."}if(t().tts.engine==="breeze_tts_2"){if(e(Ge))return"Checking local model files...";if(e(nt))return"Downloading the model...";if(!e(Ee))return"Download the model first."}if(t().tts.engine==="vox_cpm_2"){if(e(ne))return"Checking local model files...";if(e(Re))return"Downloading the model...";if(!e(Q))return"Download the model first."}return null}function B(){return!t().tts.enabled||e(P)?!0:e(m)?!1:e(ce)?!0:t().tts.engine==="piper"?e(O)||e(ve)||!e(E)[t().tts.voice]:t().tts.engine==="pocket_tts"?e(Ae)||e($e)||!e(oe):t().tts.engine==="breeze_tts_2"?e(Ge)||e(nt)||!e(Ee):t().tts.engine==="vox_cpm_2"?e(ne)||e(Re)||!e(Q):t().tts.engine==="inflect_micro"?e(se)||e(ye)||!e(_e)||!e(Ke):!1}let L=T(kt([])),ge=T(null);function De(){return t().tts.engine==="vox_cpm_2"?t().tts.vox_cpm_2.voice_dir||"":t().tts.engine==="breeze_tts_2"?t().tts.breeze_tts_2.voice_dir||"":t().tts.pocket_tts.voice_dir||""}function fe(){if(!e(L)||e(L).length===0)return;const N=e(L)[0].id;let Pe=!1;(!t().tts.vox_cpm_2.cloned_voice||!e(L).some(Fe=>Fe.id===t().tts.vox_cpm_2.cloned_voice))&&(t(t().tts.vox_cpm_2.cloned_voice=N,!0),Pe=!0),(!t().tts.breeze_tts_2.cloned_voice||!e(L).some(Fe=>Fe.id===t().tts.breeze_tts_2.cloned_voice))&&(t(t().tts.breeze_tts_2.cloned_voice=N,!0),Pe=!0),(!t().tts.pocket_tts.voice||!e(L).some(Fe=>Fe.id===t().tts.pocket_tts.voice))&&(t(t().tts.pocket_tts.voice=N,!0),Pe=!0),Pe&&r()}gs(()=>{fe(),t().tts.vox_cpm_2.voice_mode!=="clone"&&(t(t().tts.vox_cpm_2.voice_mode="clone",!0),r()),t().tts.breeze_tts_2.voice_mode!=="clone"&&(t(t().tts.breeze_tts_2.voice_mode="clone",!0),r())});async function G(){try{l(L,await S("list_pocket_tts_voices",{voiceDir:De()}),!0),fe()}catch(N){console.error("list_pocket_tts_voices:",N)}}async function J(N){const Pe=typeof N=="string"?N:De();if(!Pe){l(ge,null),await G();return}const Fe=await S("check_directory_exists",{path:Pe});l(ge,Fe?null:"This folder does not exist. Please create it first or leave blank for the default location.",!0),e(ge)||await G()}function xe(){r()}function Ie(N){N.key==="Enter"&&N.currentTarget.blur()}let re=ue(()=>H.map(N=>({value:N,label:`${N}${e(E)[N]?" ✔":""}`}))),W=ue(()=>e(L).map(N=>({value:N.id,label:N.label})));const le=[{value:"always_loaded",label:"Always loaded (fastest response)"},{value:"on_demand",label:"Load when needed, unload when idle (saves memory)"}];let R=ue(()=>{var N;return Math.round(((N=t().tts.idle_unload_secs)!=null?N:900)/60)});function ee(){t().tts.memory_mode==="on_demand"&&!t().tts.idle_unload_secs&&t(t().tts.idle_unload_secs=900,!0),r()}function Oe(N){const Pe=Number(N.currentTarget.value),Fe=Math.min(480,Math.max(1,Math.round(Pe)||15));t(t().tts.idle_unload_secs=Fe*60,!0),r()}const je=[{value:"vox_cpm_2",label:"VoxCPM2 (neural, voice cloning & design)"},{value:"breeze_tts_2",label:"Breeze-TTS-2 (neural, voice design)"},{value:"pocket_tts",label:"Pocket-TTS (neural, voice cloning)"},{value:"piper",label:"Piper (neural, high quality)"},{value:"inflect_micro",label:"Inflect Micro (neural, 38 MB)"},{value:"espeak",label:"eSpeak-NG (lightweight)"}];let Ke=T(!0),_e=T(!1),se=T(!1),ye=T(!1),et=T(null),te=T(!1),j=T(null);async function F(){try{l(Ke,await S("inflect_micro_available"),!0)}catch(N){console.error("inflect_micro_available:",N),l(Ke,!1)}}async function ae(){l(se,!0);try{l(_e,await S("check_inflect_micro_downloaded",{modelDir:t().tts.inflect_micro.model_dir}),!0)}catch(N){console.error("check_inflect_micro_downloaded:",N),l(_e,!1)}finally{l(se,!1)}}async function C(){if(!e(ye)){l(ye,!0),l(j,null);try{await S("download_inflect_micro",{modelDir:t().tts.inflect_micro.model_dir}),l(_e,!0)}catch(N){l(j,`${N}`)}finally{l(ye,!1)}}}async function X(){if(!e(te)){l(te,!0),l(et,null);try{const N=await S("inflect_micro_inspect",{modelDir:t().tts.inflect_micro.model_dir});l(et,JSON.stringify(N,null,2),!0)}catch(N){l(et,`${N}`)}finally{l(te,!1)}}}function de(){r()}let oe=T(!1),Ae=T(!1),$e=T(!1);async function tt(){l(Ae,!0);try{l(oe,await S("check_pocket_tts_ready",{voice:t().tts.pocket_tts.voice,voiceDir:t().tts.pocket_tts.voice_dir}),!0)}catch(N){console.error("check_pocket_tts_ready:",N),l(oe,!1)}finally{l(Ae,!1)}}async function st(){if(!e($e)){l($e,!0);try{await S("download_pocket_tts",{voice:t().tts.pocket_tts.voice,voiceDir:t().tts.pocket_tts.voice_dir,hfToken:t().tts.hf_token}),l(oe,!0)}catch(N){alert(`Failed to download Pocket-TTS assets: ${N}`)}finally{l($e,!1)}}}function U(){r(),l(oe,!1),tt()}let Q=T(!1),ne=T(!1),Re=T(!1);async function at(){l(ne,!0);try{l(Q,await S("check_vox_cpm_2_ready",{modelDir:t().tts.vox_cpm_2.model_dir}),!0)}catch(N){console.error("check_vox_cpm_2_ready:",N),l(Q,!1)}finally{l(ne,!1)}}async function lt(){if(!e(Re)){l(Re,!0);try{const N=t().tts.hf_token;await S("download_vox_cpm_2",{modelDir:t().tts.vox_cpm_2.model_dir,hfToken:N}),l(Q,!0)}catch(N){alert(`Failed to download VoxCPM2 assets: ${N}`)}finally{l(Re,!1)}}}let Ee=T(!1),Ge=T(!1),nt=T(!1);async function Ne(){l(Ge,!0);try{l(Ee,await S("check_breeze_tts_2_ready",{modelDir:t().tts.breeze_tts_2.model_dir}),!0)}catch(N){console.error("check_breeze_tts_2_ready:",N),l(Ee,!1)}finally{l(Ge,!1)}}async function it(){if(!e(nt)){l(nt,!0);try{const N=t().tts.hf_token;await S("download_breeze_tts_2",{modelDir:t().tts.breeze_tts_2.model_dir,hfToken:N}),l(Ee,!0)}catch(N){alert(`Failed to download Breeze-TTS-2 assets: ${N}`)}finally{l(nt,!1)}}}let dt=T(null);const ot=ue(()=>!!e(dt));async function Me(){r(),l(P,!0);try{t().tts.engine==="vox_cpm_2"?(t(t().tts.vox_cpm_2.voice_mode="clone",!0),l(Q,!1),await at(),await G()):t().tts.engine==="breeze_tts_2"?(t(t().tts.breeze_tts_2.voice_mode="clone",!0),l(Ee,!1),await Ne(),await G()):t().tts.engine==="pocket_tts"?(l(oe,!1),await G(),await tt()):t().tts.engine==="inflect_micro"?(l(_e,!1),await F(),await ae()):t().tts.engine==="piper"&&(t().tts.voice_dir?await V():await ie())}finally{setTimeout(()=>{l(P,!1)},400)}}Xt(async()=>{S("hf_token_env").then(N=>l(dt,N&&N.trim()?N.trim():null,!0)).catch(()=>l(dt,null)),t().tts.voice_dir?V():ie(),G(),t().tts.engine==="vox_cpm_2"&&at(),t().tts.engine==="breeze_tts_2"&&Ne(),t().tts.engine==="pocket_tts"&&tt(),t().tts.engine==="inflect_micro"&&(await F(),ae()),f=await ks("tts-playback-start",()=>{e(u)&&(clearInterval(v),l(o,e(d),!0),l(u,!1)),l(ce,!1),l(m,!0)}),_=await ks("tts-playback-end",()=>{l(m,!1),e(ce)&&(clearInterval(v),l(u,!1),l(ce,!1))}),b=await ks("tts-error",N=>{l(g,N.payload,!0),clearInterval(v),l(u,!1),l(o,null),l(ce,!1),l(m,!1)})}),br(()=>{v&&clearInterval(v),f&&f(),_&&_(),b&&b()});let Ye=T(!1),rt=T(kt([]));function Z(N,Pe){const Fe=Pe.toUpperCase();return N==="Control"?"KEY_LEFTCTRL":N==="Alt"?"KEY_LEFTALT":N==="Shift"?"KEY_LEFTSHIFT":N==="Meta"||N==="OS"||N==="Super"?"KEY_LEFTMETA":Fe==="SPACE"?"KEY_SPACE":Fe==="ENTER"?"KEY_ENTER":Fe==="ESCAPE"||Fe==="ESC"?"KEY_ESC":Fe==="TAB"?"KEY_TAB":Fe==="BACKSPACE"?"KEY_BACKSPACE":Fe==="DELETE"?"KEY_DELETE":Fe.startsWith("KEY")?Fe:Fe.startsWith("DIGIT")?`KEY_${Fe.replace("DIGIT","")}`:Fe.startsWith("ARROW")?`KEY_${Fe.replace("ARROW","")}`:Fe.startsWith("F")&&Fe.length>1?`KEY_${Fe}`:N.length===1?`KEY_${N.toUpperCase()}`:`KEY_${Fe}`}function K(N){if(!e(Ye))return;N.preventDefault(),N.stopPropagation();const Pe=Z(N.key,N.code);e(rt).includes(Pe)||l(rt,[...e(rt),Pe],!0),N.key==="Escape"&&(t(t().tts.stop_key=[...e(rt)],!0),r(),l(rt,[],!0),l(Ye,!1))}function pe(N){e(Ye)&&(N.preventDefault(),N.stopPropagation(),e(rt).length>0&&(t(t().tts.stop_key=[...e(rt)],!0),r()),l(rt,[],!0),l(Ye,!1))}function We(){e(rt).length>0&&(t(t().tts.stop_key=[...e(rt)],!0),r(),l(rt,[],!0)),l(Ye,!1)}let Ve=T(kt(Object.entries(t().tts.snippets||{}).map(([N,Pe])=>({key:N,val:Pe})))),gt=!1;gs(()=>{const N=e(Ve),Pe={};for(const{key:ss,val:vs}of N)ss.trim()&&(Pe[ss.trim()]=vs.trim());const Fe=t().tts.snippets||{},ct=Object.keys(Fe),yt=Object.keys(Pe);let Ut=ct.length!==yt.length;if(!Ut){for(const ss of yt)if(Fe[ss]!==Pe[ss]){Ut=!0;break}}Ut&&(t(t().tts.snippets=Pe,!0),gt&&r()),gt=!0});function as(){l(Ve,[...e(Ve),{key:"",val:""}],!0)}function Ht(N){l(Ve,e(Ve).filter((Pe,Fe)=>Fe!==N),!0)}var Kt=gf(),ft=i(n(Kt),2),Ft=i(n(ft),2),At=i(n(Ft),2),Et=i(Ft,2),ze=i(n(Et),2);cs(ze,{get options(){return je},onchange:Me,get value(){return t().tts.engine},set value(N){t(t().tts.engine=N,!0)}});var Je=i(Et,2);{var q=N=>{var Pe=Mp(),Fe=wt(Pe),ct=i(n(Fe),2);z("change",ct,r),is(ct,()=>t().tts.gpu,yt=>t(t().tts.gpu=yt,!0)),c(N,Pe)},h=N=>{var Pe=Pp(),Fe=wt(Pe),ct=i(n(Fe),2);z("change",ct,r),is(ct,()=>t().tts.pocket_tts.gpu,yt=>t(t().tts.pocket_tts.gpu=yt,!0)),c(N,Pe)},x=N=>{var Pe=Dp(),Fe=wt(Pe),ct=i(n(Fe),2);z("change",ct,r),is(ct,()=>t().tts.breeze_tts_2.gpu,yt=>t(t().tts.breeze_tts_2.gpu=yt,!0)),c(N,Pe)},we=N=>{var Pe=zp(),Fe=wt(Pe),ct=i(n(Fe),2);z("change",ct,r),is(ct,()=>t().tts.vox_cpm_2.gpu,yt=>t(t().tts.vox_cpm_2.gpu=yt,!0)),c(N,Pe)};k(Je,N=>{t().tts.engine==="piper"?N(q):t().tts.engine==="pocket_tts"?N(h,1):t().tts.engine==="breeze_tts_2"?N(x,2):t().tts.engine==="vox_cpm_2"&&N(we,3)})}var Be=i(Je,2),He=n(Be),Te=n(He),Ce=i(He,2),Ue=i(Be,2),Xe=n(Ue),Vt=n(Xe),Qt=i(Xe,2);{var ts=N=>{var Pe=Ip(),Fe=i(n(Pe),2);let ct;var yt=n(Fe);w(()=>{ct=Se(Fe,1,"run-speed-value svelte-1q9seip",null,ct,{counting:e(u)}),y(yt,e(u)?`${e(d)} ms`:`${e(o)} ms`)}),c(N,Pe)};k(Qt,N=>{(e(u)||e(o)!==null)&&N(ts)})}var Gt=i(Ue,2);{var Dt=N=>{var Pe=Op(),Fe=n(Pe);w(()=>{var ct;return y(Fe,`❌ ${(ct=e(g))!=null?ct:""}`)}),c(N,Pe)};k(Gt,N=>{e(g)&&N(Dt)})}var ps=i(Gt,2);{var es=N=>{var Pe=Rp(),Fe=n(Pe);w(ct=>y(Fe,`Test TTS unavailable: ${ct!=null?ct:""}`),[()=>he()]),c(N,Pe)},ys=ue(()=>!e(g)&&B()&&he());k(ps,N=>{e(ys)&&N(es)})}var Ps=i(ft,2);{var Js=N=>{var Pe=$p(),Fe=i(n(Pe),2),ct=i(n(Fe),2);cs(ct,{get options(){return e(re)},onchange:ke,get value(){return t().tts.voice},set value(rs){t(t().tts.voice=rs,!0)}});var yt=i(Fe,2),Ut=n(yt);{var ss=rs=>{var Pt=Lp();c(rs,Pt)},vs=rs=>{var Pt=Np(),Tt=n(Pt);w(()=>{var os;return y(Tt,`⏳ Downloading ${(os=t().tts.voice)!=null?os:""} (model + config)...`)}),c(rs,Pt)},Vs=rs=>{var Pt=Fp(),Tt=n(Pt),os=n(Tt),Ns=i(Tt,2),Qs=n(Ns);w(()=>{Se(Tt,1,qs(e(E)[t().tts.voice]?"status-downloaded":"status-missing"),"svelte-1q9seip"),y(os,e(E)[t().tts.voice]?"✔ Voice downloaded and ready":"❌ Voice files missing"),Ns.disabled=e(E)[t().tts.voice]||e(ve),y(Qs,e(E)[t().tts.voice]?"Downloaded":"📥 Download")}),z("click",Ns,()=>I(t().tts.voice)),c(rs,Pt)};k(Ut,rs=>{e(O)?rs(ss):e(ve)?rs(vs,1):rs(Vs,-1)})}var Ls=i(yt,2),_s=i(n(Ls),2);let $s;var Xs=i(_s,2);{var ya=rs=>{var Pt=Vp(),Tt=n(Pt);w(()=>y(Tt,e(me))),c(rs,Pt)};k(Xs,rs=>{e(me)&&rs(ya)})}w(()=>$s=Se(_s,1,"svelte-1q9seip",null,$s,{"field-input-error":!!e(me)})),z("change",_s,Y),Ra("blur",_s,V),z("keydown",_s,be),Ze(_s,()=>t().tts.voice_dir,rs=>t(t().tts.voice_dir=rs,!0)),c(N,Pe)};k(Ps,N=>{t().tts.engine==="piper"&&N(Js)})}var bt=i(Ps,2);{var Wt=N=>{var Pe=Up(),Fe=i(n(Pe),6),ct=i(n(Fe),2);cs(ct,{get options(){return e(W)},defaultToFirst:!0,onchange:r,get value(){return t().tts.vox_cpm_2.cloned_voice},set value(Bt){t(t().tts.vox_cpm_2.cloned_voice=Bt,!0)}});var yt=i(Fe,2),Ut=i(n(yt),2),ss=i(yt,4),vs=i(n(ss),2),Vs=i(ss,4),Ls=n(Vs);{var _s=Bt=>{var ra=Bp();c(Bt,ra)},$s=Bt=>{var ra=qp();c(Bt,ra)},Xs=Bt=>{var ra=jp(),ai=n(ra),xr=n(ai),qt=i(ai,2),Fs=n(qt);w(()=>{Se(ai,1,qs(e(Q)?"status-downloaded":"status-missing"),"svelte-1q9seip"),y(xr,e(Q)?"✔ Model weights downloaded and ready":"❌ Model files missing"),qt.disabled=e(Q)||e(Re),y(Fs,e(Q)?"Downloaded":"📥 Download")}),z("click",qt,lt),c(Bt,ra)};k(Ls,Bt=>{e(ne)?Bt(_s):e(Re)?Bt($s,1):Bt(Xs,-1)})}var ya=i(Vs,2),rs=i(n(ya),5);{var Pt=Bt=>{var ra=Wp();c(Bt,ra)};k(rs,Bt=>{e(ot)&&Bt(Pt)})}var Tt=i(ya,2),os=i(n(Tt),2),Ns=i(Tt,4),Qs=i(n(Ns),2);z("change",Ut,()=>{r(),J(t().tts.vox_cpm_2.voice_dir)}),Ze(Ut,()=>t().tts.vox_cpm_2.voice_dir,Bt=>t(t().tts.vox_cpm_2.voice_dir=Bt,!0)),z("change",vs,r),is(vs,()=>t().tts.vox_cpm_2.ultimate_cloning,Bt=>t(t().tts.vox_cpm_2.ultimate_cloning=Bt,!0)),z("change",os,r),Ze(os,()=>t().tts.vox_cpm_2.model_dir,Bt=>t(t().tts.vox_cpm_2.model_dir=Bt,!0)),z("change",Qs,r),is(Qs,()=>t().tts.vox_cpm_2.prewarm,Bt=>t(t().tts.vox_cpm_2.prewarm=Bt,!0)),c(N,Pe)};k(bt,N=>{t().tts.engine==="vox_cpm_2"&&N(Wt)})}var fs=i(bt,2);{var zt=N=>{var Pe=Yp(),Fe=i(n(Pe),6),ct=i(n(Fe),2);cs(ct,{get options(){return e(W)},defaultToFirst:!0,onchange:r,get value(){return t().tts.breeze_tts_2.cloned_voice},set value(Pt){t(t().tts.breeze_tts_2.cloned_voice=Pt,!0)}});var yt=i(Fe,2),Ut=i(n(yt),2),ss=i(yt,6),vs=n(ss);{var Vs=Pt=>{var Tt=Hp();c(Pt,Tt)},Ls=Pt=>{var Tt=Kp();c(Pt,Tt)},_s=Pt=>{var Tt=Gp(),os=n(Tt),Ns=n(os),Qs=i(os,2),Bt=n(Qs);w(()=>{Se(os,1,qs(e(Ee)?"status-downloaded":"status-missing"),"svelte-1q9seip"),y(Ns,e(Ee)?"✔ Model weights downloaded and ready":"❌ Model files missing"),Qs.disabled=e(Ee)||e(nt),y(Bt,e(Ee)?"Downloaded":"📥 Download")}),z("click",Qs,it),c(Pt,Tt)};k(vs,Pt=>{e(Ge)?Pt(Vs):e(nt)?Pt(Ls,1):Pt(_s,-1)})}var $s=i(ss,4),Xs=i(n($s),2),ya=i($s,4),rs=i(n(ya),2);z("change",Ut,()=>{r(),J(t().tts.breeze_tts_2.voice_dir)}),Ze(Ut,()=>t().tts.breeze_tts_2.voice_dir,Pt=>t(t().tts.breeze_tts_2.voice_dir=Pt,!0)),z("change",Xs,r),Ze(Xs,()=>t().tts.breeze_tts_2.model_dir,Pt=>t(t().tts.breeze_tts_2.model_dir=Pt,!0)),z("change",rs,r),is(rs,()=>t().tts.breeze_tts_2.prewarm,Pt=>t(t().tts.breeze_tts_2.prewarm=Pt,!0)),c(N,Pe)};k(fs,N=>{t().tts.engine==="breeze_tts_2"&&N(zt)})}var Yt=i(fs,2);{var Is=N=>{var Pe=ef(),Fe=i(n(Pe),2),ct=i(n(Fe),2);cs(ct,{get options(){return e(W)},defaultToFirst:!0,onchange:U,get value(){return t().tts.pocket_tts.voice},set value(Tt){t(t().tts.pocket_tts.voice=Tt,!0)}});var yt=i(Fe,2),Ut=n(yt);{var ss=Tt=>{var os=Jp();c(Tt,os)},vs=Tt=>{var os=Zp();c(Tt,os)},Vs=Tt=>{var os=Xp(),Ns=n(os),Qs=n(Ns),Bt=i(Ns,2),ra=n(Bt);w(()=>{Se(Ns,1,qs(e(oe)?"status-downloaded":"status-missing"),"svelte-1q9seip"),y(Qs,e(oe)?"✔ Model and voice clip downloaded and ready":"❌ Model files missing"),Bt.disabled=e(oe)||e($e),y(ra,e(oe)?"Downloaded":"📥 Download")}),z("click",Bt,st),c(Tt,os)};k(Ut,Tt=>{e(Ae)?Tt(ss):e($e)?Tt(vs,1):Tt(Vs,-1)})}var Ls=i(yt,4),_s=i(n(Ls),2);let $s;var Xs=i(_s,2);{var ya=Tt=>{var os=Qp(),Ns=n(os);w(()=>y(Ns,e(ge))),c(Tt,os)};k(Xs,Tt=>{e(ge)&&Tt(ya)})}var rs=i(Ls,4),Pt=i(n(rs),2);w(()=>$s=Se(_s,1,"svelte-1q9seip",null,$s,{"field-input-error":!!e(ge)})),z("change",_s,xe),Ra("blur",_s,J),z("keydown",_s,Ie),Ze(_s,()=>t().tts.pocket_tts.voice_dir,Tt=>t(t().tts.pocket_tts.voice_dir=Tt,!0)),z("change",Pt,r),is(Pt,()=>t().tts.pocket_tts.prewarm,Tt=>t(t().tts.pocket_tts.prewarm=Tt,!0)),c(N,Pe)};k(Yt,N=>{t().tts.engine==="pocket_tts"&&N(Is)})}var Os=i(Yt,2);{var Zs=N=>{var Pe=of(),Fe=i(n(Pe),4);{var ct=qt=>{var Fs=tf();c(qt,Fs)};k(Fe,qt=>{e(Ke)||qt(ct)})}var yt=i(Fe,2),Ut=n(yt);{var ss=qt=>{var Fs=sf();c(qt,Fs)},vs=qt=>{var Fs=af();c(qt,Fs)},Vs=qt=>{var Fs=nf(),dn=n(Fs),Bi=n(dn),Tr=i(dn,2),tc=n(Tr);w(()=>{Se(dn,1,qs(e(_e)?"status-downloaded":"status-missing"),"svelte-1q9seip"),y(Bi,e(_e)?"✔ Model downloaded and ready":"❌ Model files missing"),Tr.disabled=e(_e)||e(ye),y(tc,e(_e)?"Downloaded":"📥 Download")}),z("click",Tr,C),c(qt,Fs)};k(Ut,qt=>{e(se)?qt(ss):e(ye)?qt(vs,1):qt(Vs,-1)})}var Ls=i(yt,2);{var _s=qt=>{var Fs=rf(),dn=n(Fs);w(()=>{var Bi;return y(dn,`❌ ${(Bi=e(j))!=null?Bi:""}`)}),c(qt,Fs)};k(Ls,qt=>{e(j)&&qt(_s)})}var $s=i(Ls,2),Xs=i(n($s),2),ya=i($s,4),rs=i(n(ya),2),Pt=i(ya,4),Tt=i(n(Pt),2),os=i(Pt,4),Ns=i(n(os),2),Qs=i(os,4),Bt=i(n(Qs),2),ra=n(Bt),ai=i(Qs,4);{var xr=qt=>{var Fs=lf(),dn=n(Fs);w(()=>y(dn,e(et))),c(qt,Fs)};k(ai,qt=>{e(et)&&qt(xr)})}w(()=>{Bt.disabled=!e(_e)||e(te),y(ra,e(te)?"Inspecting...":"🔍 Inspect graphs")}),z("change",Xs,de),Ze(Xs,()=>t().tts.inflect_micro.seed,qt=>t(t().tts.inflect_micro.seed=qt,!0)),z("change",rs,de),Ze(rs,()=>t().tts.inflect_micro.noise_scale,qt=>t(t().tts.inflect_micro.noise_scale=qt,!0)),z("change",Tt,de),is(Tt,()=>t().tts.inflect_micro.prewarm,qt=>t(t().tts.inflect_micro.prewarm=qt,!0)),z("change",Ns,de),Ze(Ns,()=>t().tts.inflect_micro.model_dir,qt=>t(t().tts.inflect_micro.model_dir=qt,!0)),z("click",Bt,X),c(N,Pe)};k(Os,N=>{t().tts.engine==="inflect_micro"&&N(Zs)})}var ma=i(Os,2),ba=i(n(ma),2),ln=i(n(ba),2);cs(ln,{get options(){return le},onchange:ee,get value(){return t().tts.memory_mode},set value(N){t(t().tts.memory_mode=N,!0)}});var on=i(ba,2);{var cn=N=>{var Pe=cf(),Fe=wt(Pe),ct=i(n(Fe),2),yt=i(Fe,2),Ut=n(yt);w(()=>{var ss;yr(ct,e(R)),y(Ut,`The model is loaded the moment VoxCtrl knows it will be needed — as soon as you start - dictating to a target that speaks — and stays primed while you keep using it. The - countdown restarts on every use, so it only unloads after ${(ss=e(R))!=null?ss:""} - ${e(R)===1?"minute":"minutes"} of no speech. The first reply after an - unload takes a few seconds longer while the model loads again.`)}),z("change",ct,Oe),c(N,Pe)},xt=N=>{var Pe=df();c(N,Pe)};k(on,N=>{t().tts.memory_mode==="on_demand"?N(cn):N(xt,-1)})}var Mt=i(ma,2),Qe=i(n(Mt),2),pt=i(n(Qe),2),$t=i(Qe,2),Jt=i(n($t),4),Cs=n(Jt);{var ws=N=>{var Pe=vf(),Fe=i(n(Pe),2),ct=n(Fe);w(yt=>y(ct,yt),[()=>e(rt).length>0?e(rt).join(" + ").replace(/KEY_/g,""):"Press your physical shortcut combination now..."]),c(N,Pe)},Ws=N=>{var Pe=ff(),Fe=n(Pe);{var ct=Ut=>{var ss=pf(),vs=wt(ss);_t(vs,21,()=>t().tts.stop_key,ht,(Vs,Ls)=>{var _s=uf(),$s=n(_s);w(Xs=>y($s,Xs),[()=>e(Ls).replace("KEY_","")]),c(Vs,_s)}),c(Ut,ss)},yt=Ut=>{var ss=qe("⚠️ Click/Focus here to press a stop key!");c(Ut,ss)};k(Fe,Ut=>{t().tts.stop_key.length>0?Ut(ct):Ut(yt,-1)})}c(N,Pe)};k(Cs,N=>{e(Ye)?N(ws):N(Ws,-1)})}var Ts=i(Mt,2),Us=n(Ts),ia=i(n(Us),2),Ga=i(Us,2),Rs=n(Ga);_t(Rs,17,()=>e(Ve),ht,(N,Pe,Fe)=>{var ct=_f(),yt=n(ct),Ut=i(yt,4),ss=i(Ut,2);Ze(yt,()=>e(Ve)[Fe].key,vs=>e(Ve)[Fe].key=vs),Ze(Ut,()=>e(Ve)[Fe].val,vs=>e(Ve)[Fe].val=vs),z("click",ss,()=>Ht(Fe)),c(N,ct)});var ns=i(Rs,2);{var Ma=N=>{var Pe=hf();c(N,Pe)};k(ns,N=>{e(Ve).length===0&&N(Ma)})}w((N,Pe,Fe,ct)=>{y(Te,`Speed (${N!=null?N:""}×)`),Xe.disabled=Pe,St(Xe,"title",Fe),y(Vt,e(ce)?"Speaking...":e(m)?"⏹ Stop & Test":"Test TTS"),Se(Jt,1,ct,"svelte-1q9seip")},[()=>t().tts.speed.toFixed(2),()=>B(),()=>{var N;return(N=he())!=null?N:"Speak a test phrase"},()=>qs(["border-2 rounded-desktop p-6 text-center cursor-pointer outline-none transition-all duration-200 flex flex-col items-center justify-center min-h-[80px]",e(Ye)?"border-solid border-[#f43f5e] bg-[rgba(244,63,94,0.05)] animate-border-pulse":"border-dashed border-white/5 bg-black/25 hover:border-accent-blue hover:bg-black/35 focus:border-accent-blue focus:bg-black/35"].join(" "))]),z("change",At,r),is(At,()=>t().tts.enabled,N=>t(t().tts.enabled=N,!0)),z("change",Ce,r),Ze(Ce,()=>t().tts.speed,N=>t(t().tts.speed=N,!0)),z("click",Xe,D),z("change",pt,r),is(pt,()=>t().tts.response_overlay,N=>t(t().tts.response_overlay=N,!0)),z("click",Jt,()=>l(Ye,!0)),Ra("focus",Jt,()=>l(Ye,!0)),Ra("blur",Jt,We),z("keydown",Jt,K),z("keyup",Jt,pe),z("click",ia,as),c(a,Kt),Rt()}us(["change","click","keydown","keyup"]);var bf=p(''),yf=p(`⚠️ The model isn't available on this server. Post-processing will fail with a 404 — pick a model from the list above or pull it on the server.`),wf=p(" "),kf=p('Select the Custom preset to edit the system and user prompts.'),xf=p('⚠️ The user prompt must contain the placeholder.'),Tf=p('Use where your dictated speech should be inserted.'),Sf=p(`

          OpenAI API LLM Post-Processing

          Connect to any OpenAI-compatible API server — a local server or a hosted - provider. The URL defaults to a local server; point it anywhere you like and - supply an API key when the server requires one.

          Connection

          Default Prompts

          The system prompt tells the model how to transform your speech. The user - prompt is the message sent to the model — it must contain , which is replaced with whatever you dictate. - Built-in presets are read-only; choose Custom to edit the - prompts yourself.

          System Prompt
          User Prompt
          `);function Ef(a,s){Ot(s,!0);let t=Nt(s,"cfg",15);function r(){Lt.set(t()),Va.set(!0)}let o=T(!1),d=T(null),u=T(kt([])),v=ue(()=>[...e(u).map(_e=>({value:_e,label:_e})),...t().openai.model&&!e(u).includes(t().openai.model)?[{value:t().openai.model,label:`${t().openai.model} (not found)`}]:[]]);const f=[{value:"clean",label:"Clean (grammar fix)"},{value:"formal",label:"Formal"},{value:"casual",label:"Casual"},{value:"bullet",label:"Bullet points"},{value:"concise",label:"Concise (summarize)"},{value:"custom",label:"Custom (editable)"}],_={clean:"Fix grammar and punctuation only. Return only the corrected text, no commentary.",formal:"Rewrite the user's text in formal professional language. Return only the result.",casual:"Rewrite the user's text in casual conversational language. Return only the result.",bullet:"Convert the user's text to a bullet-point list. Return only the list.",concise:"Summarize the user's text concisely in 1-2 sentences. Return only the summary."};let b=ue(()=>t().openai.mode==="custom");function m(){const _e=_[t().openai.mode];_e!==void 0&&(t(t().openai.system_prompt=_e,!0),t(t().openai.user_prompt="{text}",!0)),r()}let g=ue(()=>t().openai.user_prompt.includes("{text}")),M=ue(()=>e(u).length>0&&!!t().openai.model&&!e(u).includes(t().openai.model));async function A(){l(o,!0),l(d,null);try{const _e=await S("test_openai",{endpoint:t().openai.endpoint,apiKey:t().openai.api_key,timeoutSecs:t().openai.timeout_secs});l(d,{success:_e.success,message:_e.message},!0),_e.success&&(l(u,_e.models,!0),!t().openai.model&&_e.models.length>0&&(t(t().openai.model=_e.models[0],!0),r()))}catch(_e){l(d,{success:!1,message:_e.toString()},!0)}finally{l(o,!1)}}Xt(()=>{A()});var H=Sf(),E=i(n(H),4),O=i(n(E),2),ve=i(n(O),2),ce=i(O,2),me=i(n(ce),2),ie=i(ce,2),I=i(n(ie),2);{var V=_e=>{cs(_e,{get options(){return e(v)},onchange:r,get value(){return t().openai.model},set value(se){t(t().openai.model=se,!0)}})},Y=_e=>{var se=bf();z("change",se,r),Ze(se,()=>t().openai.model,ye=>t(t().openai.model=ye,!0)),c(_e,se)};k(I,_e=>{e(u).length>0?_e(V):_e(Y,-1)})}var be=i(ie,2);{var ke=_e=>{var se=yf(),ye=i(n(se)),et=n(ye);w(()=>y(et,t().openai.model)),c(_e,se)};k(be,_e=>{e(M)&&_e(ke)})}var D=i(be,2),P=i(n(D),2),he=i(D,2),B=n(he),L=n(B),ge=i(B,2);{var De=_e=>{var se=wf(),ye=n(se);w(()=>{Se(se,1,`status-msg ${e(d).success?"success":"error"}`,"svelte-1bvctpo"),y(ye,e(d).message)}),c(_e,se)};k(ge,_e=>{e(d)&&_e(De)})}var fe=i(E,2),G=i(n(fe),2),J=i(n(G));J.textContent="{text}";var xe=i(G,2),Ie=i(n(xe),2);cs(Ie,{get options(){return f},onchange:m,get value(){return t().openai.mode},set value(_e){t(t().openai.mode=_e,!0)}});var re=i(xe,2),W=i(n(re),2),le=i(re,2),R=i(n(le),2);St(R,"placeholder","{text}");var ee=i(R,2);{var Oe=_e=>{var se=kf();c(_e,se)},je=_e=>{var se=xf(),ye=i(n(se));ye.textContent="{text}",c(_e,se)},Ke=_e=>{var se=Tf(),ye=i(n(se));ye.textContent="{text}",c(_e,se)};k(ee,_e=>{e(b)?e(g)?_e(Ke,-1):_e(je,1):_e(Oe)})}w(()=>{B.disabled=e(o),y(L,e(o)?"⏳ Testing...":"🔌 Test Connection"),W.readOnly=!e(b),Se(W,1,qs(e(b)?"":"locked"),"svelte-1bvctpo"),R.readOnly=!e(b),Se(R,1,qs(e(b)?e(g)?"":"invalid":"locked"),"svelte-1bvctpo")}),z("change",ve,r),Ze(ve,()=>t().openai.endpoint,_e=>t(t().openai.endpoint=_e,!0)),z("change",me,r),Ze(me,()=>t().openai.api_key,_e=>t(t().openai.api_key=_e,!0)),z("change",P,r),Ze(P,()=>t().openai.timeout_secs,_e=>t(t().openai.timeout_secs=_e,!0)),z("click",B,A),z("change",W,r),Ze(W,()=>t().openai.system_prompt,_e=>t(t().openai.system_prompt=_e,!0)),z("change",R,r),Ze(R,()=>t().openai.user_prompt,_e=>t(t().openai.user_prompt=_e,!0)),c(a,H),Rt()}us(["change","click"]);var Cf=p(' '),Af=p('⏳ Downloading'),Mf=p('Missing'),Pf=p('⏳ Checking S1-mini model files...'),Df=p('⏳ Downloading S1-mini model (s1-mini-q4_k_m.gguf & tokenizer.json)...'),zf=p(' '),If=p('
          ❌ Model files missing
          '),Of=p('
          ',1),Rf=p('

          These features are covered by S1-mini when enabled.

          '),Lf=p('
          →
          '),Nf=p('

          No snippets defined.

          '),Ff=p(`

          Post-Processing

          S1-mini Dictation Cleanup

          Note: S1-Mini is a ~480 MB download.

          Basic Text Cleanup

          Voice Commands

          Transcribes the first few seconds of each recording early, so a command like - “Hey Vox, say …” shows its overlay and starts loading the voice before you let go - of the hotkey. Where the text goes is still decided by the full transcript. Turn - this off to save the extra transcription work.

          Custom Dictionary

          Provide a comma-separated list of words (e.g. names or jargon like "Waylin, Rufer, Enola, Kenz") that are hard to spell. The transcription process will correct these in the final text.

          Snippets

          Type a trigger word → it expands to the replacement text.

          `);function Vf(a,s){Ot(s,!0);let t=Nt(s,"cfg",15);t().engine&&!t().engine.s1_mini&&t(t().engine.s1_mini={enabled:!1,styling:"semi-formal"},!0);function r(){Lt.set(t()),Va.set(!0)}let o=T(!1),d=T(!1),u=T(!1),v=T(null);const f={cuda:"CUDA (NVIDIA)",vulkan:"Vulkan (AMD/Intel/NVIDIA)",coreml:"CoreML (Apple)",webgpu:"WebGPU (AMD/Intel/NVIDIA)"},_=C=>{var X;return(X=f[C])!=null?X:C};function b(){t().engine.s1_mini||t(t().engine.s1_mini={enabled:!1,styling:"semi-formal"},!0)}async function m(){l(d,!0);try{l(o,await S("check_s1_mini_downloaded"),!0)}catch(C){console.error("Failed to check S1-mini download status",C),l(o,!1)}finally{l(d,!1)}}async function g(){if(!e(u)){l(u,!0);try{await S("download_s1_mini_model"),l(o,!0)}catch(C){alert(`Failed to download S1-mini model: ${C}`)}finally{l(u,!1)}}}async function M(){b(),r(),t().engine.s1_mini.enabled&&!e(o)&&await g()}let A=ue(()=>{var C;return!!((C=t().engine.s1_mini)!=null&&C.enabled)});Xt(async()=>{var C;b(),m();try{const X=await S("accelerator_support");l(v,(C=X.s1_mini_gpu)!=null?C:null,!0)}catch(X){console.error("Failed to query GPU support",X)}});let H=T(kt(Object.entries(t().features.snippets).map(([C,X])=>({key:C,val:X})))),E=!1;gs(()=>{const C=e(H),X={};for(const{key:tt,val:st}of C)tt.trim()&&(X[tt.trim()]=st.trim());const de=t().features.snippets||{},oe=Object.keys(de),Ae=Object.keys(X);let $e=oe.length!==Ae.length;if(!$e){for(const tt of Ae)if(de[tt]!==X[tt]){$e=!0;break}}$e&&(t(t().features.snippets=X,!0),E&&r()),E=!0});function O(){l(H,[...e(H),{key:"",val:""}],!0)}function ve(C){l(H,e(H).filter((X,de)=>de!==C),!0)}let ce=ue(()=>t().features.custom_vocabulary?t().features.custom_vocabulary.join(", "):"");function me(C){const X=C.target;t(t().features.custom_vocabulary=X.value.split(",").map(de=>de.trim()).filter(de=>de.length>0),!0),r()}function ie(C){function X(){C.style.height="auto",C.style.height=`${C.scrollHeight}px`}C.addEventListener("input",X);const de=setTimeout(X,0);return{update(){X()},destroy(){clearTimeout(de),C.removeEventListener("input",X)}}}var I=Ff(),V=i(n(I),2),Y=n(V),be=i(n(Y),2);{var ke=C=>{var X=Cf(),de=n(X);w(oe=>y(de,`✔ Ready ${oe!=null?oe:""}`),[()=>e(v)?`(${_(e(v))})`:"(CPU)"]),c(C,X)},D=C=>{var X=Af();c(C,X)},P=C=>{var X=Mf();c(C,X)};k(be,C=>{e(o)?C(ke):e(u)?C(D,1):e(A)&&C(P,2)})}var he=i(Y,2),B=i(n(he),2),L=i(he,4);{var ge=C=>{var X=Of(),de=wt(X),oe=n(de);{var Ae=ne=>{var Re=Pf();c(ne,Re)},$e=ne=>{var Re=Df();c(ne,Re)},tt=ne=>{var Re=zf(),at=n(Re);w(lt=>y(at,`✔ Model downloaded and ready ${lt!=null?lt:""}`),[()=>e(v)?`(${_(e(v))} GPU accelerated)`:"on CPU"]),c(ne,Re)},st=ne=>{var Re=If(),at=i(n(Re),2);z("click",at,g),c(ne,Re)};k(oe,ne=>{e(d)?ne(Ae):e(u)?ne($e,1):e(o)?ne(tt,2):ne(st,-1)})}var U=i(de,2),Q=i(n(U),2);cs(Q,{options:[{value:"semi-formal",label:"Semi-formal (Default)"},{value:"casual",label:"Casual"},{value:"formal",label:"Formal"},{value:"verbatim",label:"Verbatim"},{value:"concise",label:"Concise"}],onchange:r,get value(){return t().engine.s1_mini.styling},set value(ne){t(t().engine.s1_mini.styling=ne,!0)}}),c(C,X)};k(L,C=>{e(A)&&C(ge)})}var De=i(V,2);let fe;var G=i(n(De),2);{var J=C=>{var X=Rf();c(C,X)};k(G,C=>{e(A)&&C(J)})}var xe=i(G,2),Ie=i(n(xe),2),re=i(xe,2),W=i(n(re),2),le=i(re,2),R=i(n(le),2),ee=i(De,2),Oe=i(n(ee),2),je=i(n(Oe),2),Ke=i(ee,2),_e=i(n(Ke),4);en(_e,C=>ie==null?void 0:ie(C));var se=i(Ke,2),ye=n(se),et=i(n(ye),2),te=i(ye,2),j=n(te);_t(j,17,()=>e(H),ht,(C,X,de)=>{var oe=Lf(),Ae=n(oe),$e=i(Ae,4),tt=i($e,2);Ze(Ae,()=>e(H)[de].key,st=>e(H)[de].key=st),Ze($e,()=>e(H)[de].val,st=>e(H)[de].val=st),z("click",tt,()=>ve(de)),c(C,oe)});var F=i(j,2);{var ae=C=>{var X=Nf();c(C,X)};k(F,C=>{e(H).length===0&&C(ae)})}w(()=>{fe=Se(De,1,"field-group svelte-1s1a8xn",null,fe,{"disabled-section":e(A)}),Ie.disabled=e(A),W.disabled=e(A),R.disabled=e(A),yr(_e,e(ce))}),z("change",B,M),is(B,()=>t().engine.s1_mini.enabled,C=>t(t().engine.s1_mini.enabled=C,!0)),z("change",Ie,r),is(Ie,()=>t().features.remove_fillers,C=>t(t().features.remove_fillers=C,!0)),z("change",W,r),is(W,()=>t().features.spoken_punctuation,C=>t(t().features.spoken_punctuation=C,!0)),z("change",R,r),is(R,()=>t().features.auto_format_lists,C=>t(t().features.auto_format_lists=C,!0)),z("change",je,r),is(je,()=>t().features.early_command_detection,C=>t(t().features.early_command_detection=C,!0)),z("input",_e,me),z("click",et,O),c(a,I),Rt()}us(["change","click","input"]);async function Xo(a,s){await S("plugin:shell|open",{path:a,with:s})}async function $f(a={}){return typeof a=="object"&&Object.freeze(a),await S("plugin:dialog|save",{options:a})}var Bf=p(""),qf=p(""),jf=p('
          '),Wf=p('
          '),Uf=p(''),Hf=p('

          Building the report…

          '),Kf=p('
           
          '),Gf=p('

          Title: · Report ID

          ',1),Yf=p('

          Fill in the summary and description above and the finished report appears here.

          '),Jf=p(''),Zf=p(''),Xf=p(''),Qf=p(''),e_=p('
          '),t_=p('
          '),s_=p("Send report files it for you — no GitHub account needed.",1),a_=p("This build has no automatic submission set up, so the routes below are the ones to use. Submit bug report opens the pre-filled issue form on GitHub and copies the report to your clipboard so you can submit directly.",1),n_=p('
          Saved to
          '),i_=p(''),r_=p("
          "),l_=p(`

          Report a Bug

          VoxCtrl 0.5.0 added a Windows build, and a Windows GPU build is on its way. Neither has been - through anyone's hands but the developer's yet, so if something is broken, this page is the - fastest way to say so — and it is the only part of VoxCtrl that ever sends anything about - your machine anywhere.

          What gets sent

          ✓ Included
          • What you write below. This is the only text of yours that travels.
          • Version and build — which VoxCtrl, installed how, with which GPU features compiled in.
          • Operating system, kernel or Windows build, and CPU architecture.
          • Hardware — CPU model, core count, total memory, display adapter name.
          • Desktop and session (Linux), and your language, e.g. en.
          • Settings, with everything below stripped out first.
          • Output targets and hotkeys — how many, of which kinds, which keys. Not their names or contents.
          • The tail of VoxCtrl's log, up to 400 lines.
          ✕ Never included
          • Anything you have dictated. The log is written so transcribed text cannot reach it in the first place.
          • API keys and access tokens. Reported only as set or not set.
          • Your name, username, hostname, email or IP address.
          • File paths. A folder setting is reported as "default" or "custom", never as a path.
          • Custom vocabulary, snippets and prompts. Counted, never quoted.
          • Target names, shell commands, URLs and webhook secrets.
          • Audio. No recording, no sample, ever.

          Nothing here happens on its own. There is no telemetry, no background reporting, and nothing - is sent until you press a button on this page — and you can read the whole report first. - The rules are enforced in code and tested in CI; the log this quotes is at .

          What went wrong

          Write it as if to someone who cannot see your screen. Please do not paste logs or settings - here — they are attached already.

          The report

          Open on GitHub fills in the issue form in your browser and waits for you to - press Submit there. Save, Copy and Email put the report in your - hands to send however you like — attach the saved file to an email to .

          Limits and the ID that enforces them

          Report ID — a random value made on - this machine, used only to count reports. It is derived from nothing about you or your - computer, and resetting it starts a fresh count.
          `);function o_(a,s){Ot(s,!0);const t=["Recording / hotkeys","Transcription accuracy or speed","Audio input or devices","Text-to-speech","Output targets / routing","Settings window or overlay","Installing or updating","Crash or freeze","Something else"],r=[{value:"always",label:"Every time"},{value:"sometimes",label:"Sometimes"},{value:"once",label:"It happened once"}];let o=kt({summary:"",description:"",area:t[0],frequency:"always"}),d=T(null),u=T(null),v=T(!1),f=T(null),_=T(!1),b=T(!1),m=T(null),g=T(null),M=T(null),A=T(!1),H=T(!1);const E=ue(()=>o.description.trim().length),O=ue(()=>{var q,h;return(h=(q=e(d))==null?void 0:q.limits.min_description_chars)!=null?h:30}),ve=ue(()=>{var q,h;return(h=(q=e(d))==null?void 0:q.limits.max_description_chars)!=null?h:4e3}),ce=ue(()=>o.summary.trim().length>0&&e(E)>=e(O)&&e(E)<=e(ve));async function me(){try{l(d,await S("bug_report_context"),!0)}catch(q){console.error("Failed to read bug report context:",q)}}Xt(me);let ie;gs(()=>{const q={...o};if(!e(ce)){l(u,null);return}return ie&&clearTimeout(ie),ie=setTimeout(()=>I(q),400),()=>{ie&&clearTimeout(ie)}});async function I(q){l(v,!0),l(f,null);try{l(u,await S("preview_bug_report",{statement:q}),!0)}catch(h){l(f,String(h),!0),l(u,null)}finally{l(v,!1)}}async function V(){return e(u)||await I({...o}),e(u)}async function Y(){var h,x,we,Be,He,Te,Ce,Ue;if(!o.summary.trim()){l(g,{type:"error",message:"Please provide a one-line summary above before submitting."},!0);return}if(e(E)l(A,!1),2500)}catch(x){l(g,{type:"error",message:`Could not copy the report: ${x}`},!0)}}async function P(){var x,we;if(!o.summary.trim()||e(E)l(H,!1),3e3),e(d)&&l(d,{...e(d),install_id:q,submissions_last_day:0,submissions_last_month:0},!0)}catch(q){l(f,`Could not reset the report ID: ${q}`)}}var ge=l_(),De=i(n(ge),4),fe=i(n(De),4),G=i(n(fe)),J=n(G),xe=i(De,2),Ie=i(n(xe),2),re=i(n(Ie),2),W=i(Ie,2),le=n(W),R=i(n(le),2);_t(R,21,()=>t,ht,(q,h)=>{var x=Bf(),we=n(x),Be={};w(()=>{var He;y(we,e(h)),Be!==(Be=e(h))&&(x.value=(He=x.__value=e(h))!=null?He:"")}),c(q,x)});var ee=i(le,2),Oe=i(n(ee),2);_t(Oe,21,()=>r,ht,(q,h)=>{var x=qf(),we=n(x),Be={};w(()=>{var He;y(we,e(h).label),Be!==(Be=e(h).value)&&(x.value=(He=x.__value=e(h).value)!=null?He:"")}),c(q,x)});var je=i(W,2),Ke=i(n(je),2);St(Ke,"placeholder",`1. I pressed my dictation hotkey and spoke for ten seconds. -2. The overlay appeared but no text arrived. -3. I expected the text to be typed into my editor.`);var _e=i(Ke,2);let se;var ye=n(_e),et=i(ye);{var te=q=>{var h=qe();w(()=>{var x;return y(h,`— at least ${(x=e(O))!=null?x:""} please; steps to reproduce are worth more than anything else here`)}),c(q,h)};k(et,q=>{e(E){var h=jf(),x=n(h);w(()=>y(x,e(f))),c(q,h)};k(j,q=>{e(f)&&q(F)})}var ae=i(j,2);{var C=q=>{var h=Wf(),x=n(h);w(()=>y(x,e(u).blocked_reason)),c(q,h)};k(ae,q=>{var h;(h=e(u))!=null&&h.blocked_reason&&q(C)})}var X=i(ae,2),de=n(X),oe=i(n(de),2);{var Ae=q=>{var h=Uf(),x=n(h);w(()=>y(x,e(_)?"Hide":"Show me exactly what will be sent")),z("click",h,()=>l(_,!e(_))),c(q,h)};k(oe,q=>{e(u)&&q(Ae)})}var $e=i(de,2);{var tt=q=>{var h=Hf();c(q,h)},st=q=>{var h=Gf(),x=wt(h),we=i(n(x)),Be=n(we),He=i(we,2),Te=n(He),Ce=i(x,2);{var Ue=Xe=>{var Vt=Kf(),Qt=n(Vt);w(()=>y(Qt,e(u).markdown)),c(Xe,Vt)};k(Ce,Xe=>{e(_)&&Xe(Ue)})}w(Xe=>{y(Be,e(u).title),y(Te,Xe)},[()=>e(u).fingerprint.slice(0,12)]),c(q,h)},U=q=>{var h=Yf();c(q,h)};k($e,q=>{e(v)&&!e(u)?q(tt):e(u)?q(st,1):q(U,-1)})}var Q=i($e,2),ne=n(Q);{var Re=q=>{var h=Jf(),x=n(h);w(()=>{h.disabled=e(b)||e(u)&&!e(u).can_submit,y(x,e(b)?"Sending…":"Send report")}),z("click",h,Y),c(q,h)},at=q=>{var h=Zf(),x=n(h);w(()=>{h.disabled=e(b),y(x,e(b)?"Submitting…":"Submit bug report")}),z("click",h,Y),c(q,h)};k(ne,q=>{var h;(h=e(d))!=null&&h.relay_configured?q(Re):q(at,-1)})}var lt=i(ne,2),Ee=i(lt,2),Ge=i(Ee,2),nt=n(Ge),Ne=i(Ge,2),it=i(Q,2);{var dt=q=>{var h=t_(),x=n(h),we=n(x),Be=n(we),He=i(we,2);{var Te=Ce=>{var Ue=e_(),Xe=n(Ue);{var Vt=Gt=>{var Dt=Xf();z("click",Dt,()=>he(e(g).path)),c(Gt,Dt)};k(Xe,Gt=>{e(g).path&&Gt(Vt)})}var Qt=i(Xe,2);{var ts=Gt=>{var Dt=Qf();z("click",Dt,()=>B(e(g).url)),c(Gt,Dt)};k(Qt,Gt=>{e(g).url&&Gt(ts)})}c(Ce,Ue)};k(He,Ce=>{(e(g).path||e(g).url)&&Ce(Te)})}w(()=>{Se(h,1,qs(e(g).type==="ok"?"ok-alert":"warning-alert"),"svelte-7vrdzs"),y(Be,e(g).message)}),c(q,h)};k(it,q=>{e(g)&&q(dt)})}var ot=i(it,2),Me=n(ot);{var Ye=q=>{var h=s_();c(q,h)},rt=q=>{var h=a_();c(q,h)};k(Me,q=>{var h;(h=e(d))!=null&&h.relay_configured?q(Ye):q(rt,-1)})}var Z=i(Me,10),K=n(Z),pe=i(ot,2);{var We=q=>{var h=n_(),x=i(n(h)),we=n(x);w(()=>y(we,e(M))),c(q,h)};k(pe,q=>{e(M)&&!e(g)&&q(We)})}var Ve=i(pe,2);{var gt=q=>{var h=r_();let x;var we=n(h),Be=i(we);{var He=Te=>{var Ce=i_();z("click",Ce,()=>B(e(m).issue_url)),c(Te,Ce)};k(Be,Te=>{e(m).issue_url&&Te(He)})}w(()=>{var Te;x=Se(h,1,"svelte-7vrdzs",null,x,{"ok-alert":e(m).ok,"warning-alert":!e(m).ok}),y(we,`${(Te=e(m).message)!=null?Te:""} `)}),c(q,h)};k(Ve,q=>{e(m)&&q(gt)})}var as=i(X,2),Ht=i(n(as),2),Kt=n(Ht),ft=i(Ht,2),Ft=n(ft),At=i(n(Ft)),Et=n(At),ze=i(Ft,2),Je=n(ze);w((q,h)=>{var x,we,Be,He,Te,Ce,Ue,Xe,Vt,Qt,ts,Gt,Dt,ps,es,ys,Ps,Js;y(J,(we=(x=e(d))==null?void 0:x.log_path)!=null?we:"…"),St(Ke,"maxlength",e(ve)),se=Se(_e,1,"counter svelte-7vrdzs",null,se,{short:e(E)>0&&e(E){var q,h;return Math.round(((h=(q=e(d))==null?void 0:q.limits.cooldown_seconds)!=null?h:120)/60)},()=>{var q,h,x;return(x=(h=(q=e(d))==null?void 0:q.install_id)==null?void 0:h.slice(0,12))!=null?x:"…"}]),Ze(re,()=>o.summary,q=>o.summary=q),Fl(R,()=>o.area,q=>o.area=q),Fl(Oe,()=>o.frequency,q=>o.frequency=q),Ze(Ke,()=>o.description,q=>o.description=q),z("click",lt,be),z("click",Ee,ke),z("click",Ge,D),z("click",Ne,P),z("click",ze,L),c(a,ge),Rt()}us(["click"]);class fi extends Zd{constructor(s){super(s)}static async new(s,t,r){return S("plugin:image|new",{rgba:or(s),width:t,height:r}).then(o=>new fi(o))}static async fromBytes(s){return S("plugin:image|from_bytes",{bytes:or(s)}).then(t=>new fi(t))}static async fromPath(s){return S("plugin:image|from_path",{path:s}).then(t=>new fi(t))}async rgba(){return S("plugin:image|rgba",{rid:this.rid}).then(s=>new Uint8Array(s))}async size(){return S("plugin:image|size",{rid:this.rid})}}function or(a){return a==null?null:typeof a=="string"?a:a instanceof fi?a.rid:a}var Bl;(function(a){a.Nsis="nsis",a.Msi="msi",a.Deb="deb",a.Rpm="rpm",a.AppImage="appimage",a.App="app"})(Bl||(Bl={}));async function c_(){return S("plugin:app|version")}const d_="/assets/voxctrl-CDHFw5hI.gif";var v_=p('
          Custom overlays
          '),u_=p('
          Cloned TTS voices
          '),p_=p(`

          About VoxCtrl

          VoxCtrl

          Native, on-device voice-to-text for Linux and Windows. - Uses whisper.cpp, Moonshine, - and NVIDIA Parakeet for offline transcription and routes speech to any destination.

          System

          FrontendSvelte 5 + Tauri 2
          BackendRust (Tokio async)
          Inferencewhisper.cpp, Moonshine & Parakeet TDT
          Config~/.config/voxctrl/
          Models~/.local/share/voxctrl/models/
          MCP socket/tmp/voxctrl-mcp.sock

          Open Source Attributions

          This application is built possible by these outstanding open-source projects:

          Speech recognition

          whisper.cpp MIT License
          ONNX Runtime MIT / Apache 2.0

          Text-to-speech

          Piper TTS MIT License
          audio.cpp Apache 2.0
          ggml MIT License
          Inflect-Micro-v2 Apache 2.0
          Breeze-TTS-2 (BreezeBlue) Non-Commercial License

          Dictation cleanup

          Core framework & runtime

          Tauri Framework MIT / Apache 2.0
          Svelte & Vite MIT License
          whisper-rs Unlicense
          Rust, Tokio & CPAL MIT / Apache 2.0
          `);function f_(a,s){Ot(s,!0);let t=T("0.1.0"),r=T(""),o=T("");Xt(async()=>{try{l(t,await c_(),!0)}catch(E){console.error("Failed to fetch app version:",E)}try{l(r,await S("get_custom_overlays_dir"),!0)}catch(E){console.error("Failed to fetch custom overlays directory:",E)}try{l(o,await S("get_cloned_tts_voices_dir"),!0)}catch(E){console.error("Failed to fetch cloned TTS voices directory:",E)}});var d=p_(),u=i(n(d),2),v=n(u),f=i(v,2),_=i(n(f),2),b=n(_),m=i(u,2),g=i(n(m),12);{var M=E=>{var O=v_(),ve=i(n(O)),ce=n(ve),me=n(ce);w(()=>y(me,e(r))),c(E,O)};k(g,E=>{e(r)&&E(M)})}var A=i(g,2);{var H=E=>{var O=u_(),ve=i(n(O)),ce=n(ve),me=n(ce);w(()=>y(me,e(o))),c(E,O)};k(A,E=>{e(o)&&E(H)})}w(()=>{var E;St(v,"src",d_),y(b,`Version ${(E=e(t))!=null?E:""} — Rust + Tauri Edition`)}),c(a,d),Rt()}var __=p(''),h_=p(''),g_=p(' 🛑 Stop',1),m_=p('🎙️ Record'),b_=p('
          Unsaved changes detected
          '),y_=p('
          ');function w_(a,s){Ot(s,!0);const t=()=>ls(Lt,"$config",d),r=()=>ls(xs,"$status",d),o=()=>ls(Va,"$configDirty",d),[d,u]=Ms();let v=T("general");const f=[{id:"general",label:"General",icon:"⚙️"},{id:"audio",label:"Audio Input",icon:"🔊"},{id:"engine",label:"Engine",icon:"🧠"},{id:"features",label:"Post-Processing",icon:"✨"},{id:"hotkeys",label:"Hotkeys",icon:"⌨️"},{id:"commands",label:"Output Commands",icon:"🎯"},{id:"visual",label:"Visual Feedback",icon:"🎨"},{id:"tts",label:"TTS",icon:"🗣️"},{id:"openai",label:"OpenAI API",icon:"🤖"},{id:"bugreport",label:"Bug Report",icon:"🐞"},{id:"about",label:"About",icon:"ℹ️"}];async function _(){await bl(t())}async function b(){await S("toggle_recording")}let m="general",g=T(null);gs(()=>{var ye,et;const se=e(v);se!==m&&(m=se,e(g)&&(e(g).scrollTop=0),(et=(ye=t())==null?void 0:ye.audio)!=null&&et.dynamic_stream&&r().recording&&S("stop_recording").catch(te=>{console.error("Failed to stop recording on activeTab change:",te)}))}),Xt(()=>{const se=ks("focus-settings-tab",et=>{const te=et.payload;f.some(j=>j.id===te)&&l(v,te,!0)});let ye;return ye=lr.subscribe(et=>{if(et){const te=t();if(te&&te.engine&&te.engine.whisper_cpp){const j=te.engine.whisper_cpp.model_size;te.engine.backend==="whisper-cpp"&&S("check_model_downloaded",{modelSize:j,modelDir:te.engine.whisper_cpp.model_dir||""}).then(async F=>{var ae;if(!F&&(l(v,"engine"),(ae=te==null?void 0:te.ui)!=null&&ae.auto_show_settings))try{const{getCurrentWindow:C}=await Kd(async()=>{const{getCurrentWindow:de}=await Promise.resolve().then(()=>nh);return{getCurrentWindow:de}},void 0),X=C();await X.show(),await X.setFocus()}catch(C){console.error("Failed to programmatically show settings window on startup:",C)}}).catch(F=>{console.error("Failed to check model download status on startup:",F)})}ye?ye():setTimeout(()=>ye(),0)}}),()=>{se.then(et=>et()).catch(()=>{})}});var M=y_(),A=n(M),H=n(A),E=n(H),O=i(H,2);_t(O,21,()=>f,ht,(se,ye)=>{var et=h_();let te;var j=n(et),F=n(j),ae=i(j,2),C=n(ae),X=i(ae,2);{var de=oe=>{var Ae=__();c(oe,Ae)};k(X,oe=>{e(v)===e(ye).id&&oe(de)})}w(()=>{te=Se(et,1,"nav-btn svelte-myrvk6",null,te,{active:e(v)===e(ye).id}),y(F,e(ye).icon),y(C,e(ye).label)}),z("click",et,()=>l(v,e(ye).id,!0)),c(se,et)});var ve=i(O,2),ce=n(ve);let me;var ie=n(ce),I=n(ie),V=i(n(I),2),Y=n(V),be=i(I,2),ke=n(be),D=i(ie,2);let P;var he=n(D);{var B=se=>{var ye=g_();c(se,ye)},L=se=>{var ye=m_();c(se,ye)};k(he,se=>{r().recording?se(B):se(L,-1)})}var ge=i(A,2),De=n(ge),fe=n(De);{var G=se=>{pv(se,{get cfg(){return un(),t()},set cfg(ye){vn(Lt,ye)}})},J=se=>{Qv(se,{get cfg(){return un(),t()},set cfg(ye){vn(Lt,ye)}})},xe=se=>{Yv(se,{get cfg(){return un(),t()},set cfg(ye){vn(Lt,ye)}})},Ie=se=>{Vf(se,{get cfg(){return un(),t()},set cfg(ye){vn(Lt,ye)}})},re=se=>{fp(se,{})},W=se=>{Ap(se,{})},le=se=>{wv(se,{get cfg(){return un(),t()},set cfg(ye){vn(Lt,ye)}})},R=se=>{mf(se,{get cfg(){return un(),t()},set cfg(ye){vn(Lt,ye)}})},ee=se=>{Ef(se,{get cfg(){return un(),t()},set cfg(ye){vn(Lt,ye)}})},Oe=se=>{o_(se,{})},je=se=>{f_(se,{})};k(fe,se=>{e(v)==="general"?se(G):e(v)==="audio"?se(J,1):e(v)==="engine"?se(xe,2):e(v)==="features"?se(Ie,3):e(v)==="hotkeys"?se(re,4):e(v)==="commands"?se(W,5):e(v)==="visual"?se(le,6):e(v)==="tts"?se(R,7):e(v)==="openai"?se(ee,8):e(v)==="bugreport"?se(Oe,9):e(v)==="about"&&se(je,10)})}ml(De,se=>l(g,se),()=>e(g));var Ke=i(De,2);{var _e=se=>{var ye=b_(),et=i(n(ye),2);z("click",et,_),c(se,ye)};k(Ke,se=>{o()&&se(_e)})}w(()=>{var se;St(E,"src",wr),me=Se(ce,1,"status-panel svelte-myrvk6",null,me,{recording:r().recording,speaking:r().speaking}),y(Y,r().recording?"Recording":r().speaking?"Speaking":"Idle"),y(ke,`${(se=r().word_count)!=null?se:""} words`),P=Se(D,1,"btn-record svelte-myrvk6",null,P,{active:r().recording})}),z("click",D,b),c(a,M),Rt(),u()}us(["click"]);function rn(a){let s=0,t=0,r=!1,o=null;ks("audio-level",u=>{s=Math.min(1,u.payload*100)}).then(u=>{r?u():o=u});let d=requestAnimationFrame(function u(){t+=(s-t)*.35,s*=.86,a(t),d=requestAnimationFrame(u)});return()=>{r=!0,o==null||o(),cancelAnimationFrame(d)}}var k_=p(""),x_=p('
          '),T_=p('
          VOXCTRL VOICE CARD
          TARGET •••• VOX
          ');function S_(a,s){Ot(s,!0);const t=()=>ls(xs,"$status",r),[r,o]=Ms();let d=Nt(s,"recording",3,!1);Nt(s,"speaking",3,!1);let u=Nt(s,"active",3,!0);const v=20,f=6;let _=T(kt(Array(v).fill(0)));const b=ue(()=>t().audio_ready!==!1),m=ue(()=>t().active_target_label||"Focused Window");Xt(()=>{let D=0;const P=new Float32Array(v);return rn(he=>{D+=.016;for(let B=0;BP[B]?L:P[B]*.86}l(_,Array.from(P),!0)})});function g(D){return D===0?"red":D<=2?"amber":"green"}var M=T_();let A;var H=n(M);let E;var O=i(n(H),8),ve=i(n(O),2);{var ce=D=>{var P=qe("PROC");c(D,P)},me=D=>{var P=qe("INIT");c(D,P)},ie=D=>{var P=qe("REC");c(D,P)};k(ve,D=>{t().processing?D(ce):d()&&!e(b)?D(me,1):D(ie,-1)})}var I=i(O,2);_t(I,21,()=>e(_),ht,(D,P)=>{var he=x_();_t(he,21,()=>Array(f),ht,(B,L,ge)=>{var De=k_();let fe;w(G=>fe=Se(De,1,`dot ${G!=null?G:""}`,"svelte-1pt4ba2",fe,{lit:f-ge<=e(P)*f}),[()=>g(ge)]),c(B,De)}),c(D,he)});var V=i(I,4),Y=n(V);{var be=D=>{var P=qe("Reading the card…");c(D,P)},ke=D=>{var P=qe();w(()=>y(P,e(m))),c(D,P)};k(Y,D=>{t().processing?D(be):D(ke,-1)})}w(()=>{A=Se(M,1,"card-scene svelte-1pt4ba2",null,A,{on:u()}),E=Se(H,1,"card svelte-1pt4ba2",null,E,{processing:t().processing,initializing:d()&&!e(b)})}),c(a,M),Rt(),o()}var E_=p('
          '),C_=p('
          WAVEFORM // OSC-01 TGT ▸
          ');function A_(a,s){Ot(s,!0);const t=()=>ls(xs,"$status",r),[r,o]=Ms();let d=Nt(s,"recording",3,!1),u=Nt(s,"active",3,!0);const v=126,f=500,_=78;let b=T("");const m=ue(()=>t().audio_ready!==!1),g=ue(()=>t().active_target_label||"Focused Window");Xt(()=>{const B=new Float32Array(v);let L=0;return rn(ge=>{L+=.016;let De=0;if(t().processing)De=.55*Math.sin(L*9)*(.6+.4*Math.sin(L*1.7));else if(d()&&t().audio_ready===!1)De=.05*(Math.random()*2-1);else if(d()){const G=Math.random()*2-1;De=Math.min(1,ge*1.5)*(.45*Math.sin(L*24)+.55*G)}B.copyWithin(0,1),B[v-1]=De;let fe="";for(let G=0;G{var L=qe("· TRANSCRIBING");c(B,L)},me=B=>{var L=qe("· CALIBRATING");c(B,L)},ie=B=>{var L=qe("· LIVE TRACE");c(B,L)};k(ve,B=>{t().processing?B(ce):d()&&!e(m)?B(me,1):B(ie,-1)})}var I=i(O,4),V=i(n(I),2),Y=n(V),be=i(E,2),ke=i(n(be),6);_t(ke,16,()=>[1,2,3,4],ht,(B,L)=>{var ge=E_();w(()=>ds(ge,`left: ${L*20}%`)),c(B,ge)});var D=i(ke,2);St(D,"viewBox","0 0 500 78");var P=n(D),he=i(P);w(()=>{A=Se(M,1,"scope svelte-xjziu1",null,A,{on:u(),processing:t().processing,initializing:d()&&!e(m)}),y(Y,e(g)),St(P,"d",e(b)),St(he,"d",e(b))}),c(a,M),Rt(),o()}var M_=p('
          ⌖
          ');function P_(a,s){Ot(s,!0);const t=()=>ls(xs,"$status",r),[r,o]=Ms();let d=Nt(s,"recording",3,!1),u=Nt(s,"active",3,!0),v=T(0);const f=ue(()=>t().audio_ready!==!1),_=ue(()=>t().active_target_label||"Focused Window");Xt(()=>rn(Y=>l(v,Y,!0)));var b=M_();let m;var g=i(n(b),2),M=i(n(g),2),A=n(M),H=n(A);{var E=Y=>{var be=qe("PULSE // ANALYZING");c(Y,be)},O=Y=>{var be=qe("PULSE // ACQUIRING");c(Y,be)},ve=Y=>{var be=qe("PULSE // TARGET LOCK");c(Y,be)};k(H,Y=>{t().processing?Y(E):d()&&!e(f)?Y(O,1):Y(ve,-1)})}var ce=i(A,2),me=n(ce);{var ie=Y=>{var be=qe("Decoding transmission…");c(Y,be)},I=Y=>{var be=qe("Connecting mic…");c(Y,be)},V=Y=>{var be=qe();w(()=>y(be,e(_))),c(Y,be)};k(me,Y=>{t().processing?Y(ie):d()&&!e(f)?Y(I,1):Y(V,-1)})}w(()=>{var Y;m=Se(b,1,"radar svelte-13tl5wx",null,m,{on:u(),processing:t().processing,initializing:d()&&!e(f)}),ds(b,`--lvl: ${(Y=e(v))!=null?Y:""}`)}),c(a,b),Rt(),o()}var D_=p('
          '),z_=p('
          OCEAN WAVE
          ');function I_(a,s){Ot(s,!0);const t=()=>ls(xs,"$status",r),[r,o]=Ms();let d=Nt(s,"recording",3,!1);Nt(s,"speaking",3,!1);let u=Nt(s,"active",3,!0);const v=380,f=90;let _=T(""),b=T(""),m=T(""),g=T(60);const M=ue(()=>t().audio_ready!==!1),A=ue(()=>t().active_target_label||"Focused Window");function H(G,J,xe,Ie){let re=`M 0 ${f} L 0 ${Ie.toFixed(1)}`;for(let W=0;W<=v;W+=8){const le=Ie+Math.sin(W*J+xe)*G;re+=` L ${W} ${le.toFixed(1)}`}return re+` L ${v} ${f} Z`}Xt(()=>{let G=0;return rn(J=>{G+=.016;const xe=J,Ie=t().processing?4+2.5*Math.sin(G*1.6):0,re=64-xe*20-Ie,W=56-xe*24-Ie*1.2,le=47-xe*28-Ie*1.4,R=(t().processing?5:2.5)+xe*14,ee=(t().processing?6:2)+xe*18,Oe=(t().processing?7:1.5)+xe*22;l(_,H(R,.014,G*2.1,re),!0),l(b,H(ee,.022,-G*3,W),!0),l(m,H(Oe,.018,G*3.9,le),!0),l(g,38+le-21+Math.sin(G*2.2)*2.5)})});var E=z_();let O;var ve=i(n(E),4),ce=n(ve);{var me=G=>{var J=qe("deep current — processing");c(G,J)},ie=G=>{var J=qe("low tide — preparing");c(G,J)},I=G=>{var J=qe("high tide — listening");c(G,J)};k(ce,G=>{t().processing?G(me):d()&&!e(M)?G(ie,1):G(I,-1)})}var V=i(ve,2),Y=n(V);St(Y,"viewBox","0 0 380 90");var be=n(Y),ke=i(be),D=i(ke),P=i(V,2);_t(P,16,()=>[0,1,2],ht,(G,J)=>{var xe=D_();w(()=>ds(xe,`left: ${64+J*112}px; animation-delay: ${J*1.4}s;`)),c(G,xe)});var he=i(P,2),B=i(n(he),2),L=n(B);{var ge=G=>{var J=qe("Sounding the depths…");c(G,J)},De=G=>{var J=qe("Casting off…");c(G,J)},fe=G=>{var J=qe();w(()=>y(J,e(A))),c(G,J)};k(L,G=>{t().processing?G(ge):d()&&!e(M)?G(De,1):G(fe,-1)})}w(()=>{var G;O=Se(E,1,"ocean svelte-1orgnnz",null,O,{on:u(),processing:t().processing}),St(be,"d",e(_)),St(ke,"d",e(b)),St(D,"d",e(m)),ds(he,`top: ${(G=e(g))!=null?G:""}px;`)}),c(a,E),Rt(),o()}var O_=p("
          "),R_=p('
          ');function L_(a,s){Ot(s,!0);const t=()=>ls(xs,"$status",r),[r,o]=Ms();let d=Nt(s,"recording",3,!1),u=Nt(s,"active",3,!0);const v=5,f=8,_=52;let b=T(kt(Array(v).fill(f)));const m=ue(()=>t().audio_ready!==!1),g=ue(()=>t().active_target_label||"Focused Window");function M(D,P,he,B,L,ge,De,fe){const G=(P-1)/2,J=1-Math.abs(D-G)/(G+1)*.4;let xe;if(ge)xe=(Math.sin(B*4-D*.85)*.5+.5)*J;else if(L&&!De)xe=0;else if(L){const Ie=Math.sin(B*3-D*.8);xe=Math.min(1,Math.max(0,he*J*(.9+.1*Ie)*(.85+.3*fe)))}else xe=0;return f+(_-f)*xe}Xt(()=>{let D=0;return rn(P=>{D+=.016;const he=t().audio_ready!==!1,B=new Array(v);for(let L=0;L{var P=qe("PROCESSING");c(D,P)},I=D=>{var P=qe("STANDBY");c(D,P)},V=D=>{var P=qe("LISTENING");c(D,P)};k(me,D=>{t().processing?D(ie):d()&&!e(m)?D(I,1):D(V,-1)})}var Y=i(E,2);_t(Y,21,()=>e(b),ht,(D,P)=>{var he=O_();let B;w(()=>{var L;B=Se(he,1,"bar svelte-12wa5lj",null,B,{dim:d()&&!e(m),processing:t().processing}),ds(he,`height: ${(L=e(P))!=null?L:""}px`)}),c(D,he)});var be=i(Y,4),ke=n(be);w(()=>{H=Se(A,1,"mono svelte-12wa5lj",null,H,{on:u()}),ve=Se(O,1,"dot svelte-12wa5lj",null,ve,{lit:!t().processing&&!(d()&&!e(m)),processing:t().processing,standby:d()&&!e(m)}),y(ke,e(g))}),c(a,A),Rt(),o()}var N_=p('
          '),F_=p('
          SPECTRUM // EQ-16 OUT ▸
          ');function V_(a,s){Ot(s,!0);const t=()=>ls(xs,"$status",r),[r,o]=Ms();let d=Nt(s,"recording",3,!1),u=Nt(s,"active",3,!0);const v=16,f=6,_=96;let b=T(kt(Array(v).fill(f)));const m=ue(()=>t().audio_ready!==!1),g=ue(()=>t().active_target_label||"Focused Window");function M(P,he,B,L,ge,De,fe,G){const J=P/(he-1);let xe;if(De)xe=Math.pow(Math.sin(L*2.4-J*6)*.5+.5,1.5);else if(ge&&!fe)xe=G*.06;else if(ge){const Ie=2+J*9,re=P*.7,W=Math.sin(L*Ie+re)*.5+.5,le=1-J*.35;xe=Math.min(1,Math.max(0,B*le*(.35+.65*W)*(.7+.6*G)))}else xe=0;return f+(_-f)*xe}Xt(()=>{let P=0;return rn(he=>{P+=.016;const B=t().audio_ready!==!1,L=new Array(v);for(let ge=0;ge{var he=qe("· ANALYZING");c(P,he)},I=P=>{var he=qe("· WARMING UP");c(P,he)},V=P=>{var he=qe("· LIVE");c(P,he)};k(me,P=>{t().processing?P(ie):d()&&!e(m)?P(I,1):P(V,-1)})}var Y=i(ce,4),be=i(n(Y),2),ke=n(be),D=i(E,4);_t(D,21,()=>e(b),ht,(P,he)=>{var B=N_();w(()=>{var L;return ds(B,`height: ${(L=e(he))!=null?L:""}px; opacity: ${.45+.55*(e(he)/_)}`)}),c(P,B)}),w(()=>{H=Se(A,1,"spectrum svelte-194vixl",null,H,{on:u()}),ve=Se(O,1,"led svelte-194vixl",null,ve,{processing:t().processing,standby:d()&&!e(m)}),y(ke,e(g))}),c(a,A),Rt(),o()}var $_=p('
          VOXCTRL — /dev/mic0
          ');function B_(a,s){Ot(s,!0);const t=()=>ls(xs,"$status",r),[r,o]=Ms();let d=Nt(s,"recording",3,!1),u=Nt(s,"active",3,!0);const v=20;let f=T(kt("·".repeat(v))),_=T(!1);const b=ue(()=>t().audio_ready!==!1),m=ue(()=>t().active_target_label||"Focused Window");function g(L,ge,De,fe,G){const J=v;if(fe){const xe=2*J,Ie=Math.floor(ge*10)%xe,re=Iele===re?"█":"·").join("")}else{if(De&&!G)return Array.from({length:J},(xe,Ie)=>Ie%4===0?"·":" ").join("");if(De){const xe=Math.round(Math.min(1,Math.max(0,L))*J);return Array.from({length:J},(Ie,re)=>re{let L=0;return rn(ge=>{L+=.016;const De=t().audio_ready!==!1;l(f,g(ge,L,d(),t().processing,De),!0),l(_,Math.sin(L*5.5)>0)})});var M=$_();let A;var H=i(n(M),2),E=n(H),O=n(E),ve=i(E,2);let ce;var me=n(ve);{var ie=L=>{var ge=qe("[PROC]");c(L,ge)},I=L=>{var ge=qe("[INIT]");c(L,ge)},V=L=>{var ge=qe("[REC ]");c(L,ge)};k(me,L=>{t().processing?L(ie):d()&&!e(b)?L(I,1):L(V,-1)})}var Y=i(me),be=i(ve,2),ke=n(be);{var D=L=>{var ge=qe("transcribing audio stream");c(L,ge)},P=L=>{var ge=qe("connecting input device");c(L,ge)},he=L=>{var ge=qe("streaming to output");c(L,ge)};k(ke,L=>{t().processing?L(D):d()&&!e(b)?L(P,1):L(he,-1)})}var B=i(ke,1,!0);w(()=>{var L,ge;A=Se(M,1,"terminal svelte-pvtvge",null,A,{on:u()}),y(O,`$ voxctrl listen --target "${(L=e(m))!=null?L:""}"`),ce=Se(ve,1,"line2 svelte-pvtvge",null,ce,{processing:t().processing,standby:d()&&!e(b)}),y(Y,` ${(ge=e(f))!=null?ge:""}`),y(B,e(_)?"_":" ")}),c(a,M),Rt(),o()}var q_=p('
          VU
          -20
          0
          +3
          ');function j_(a,s){Ot(s,!0);const t=()=>ls(xs,"$status",r),[r,o]=Ms();let d=Nt(s,"recording",3,!1),u=Nt(s,"active",3,!0);const v=144,f=70,_=58,b=-.95,m=.95,g=.016;let M=T(kt(O(b)));const A=ue(()=>t().audio_ready!==!1),H=ue(()=>t().active_target_label||"Focused Window");function E(fe){return b+Math.min(1,Math.max(0,fe))*(m-b)}function O(fe){const G=v+Math.sin(fe)*_,J=f-Math.cos(fe)*_;return`M ${v} ${f} L ${G.toFixed(1)} ${J.toFixed(1)}`}function ve(fe,G,J){const re=256*(G-fe.x)-24.96*fe.v;fe.v+=re*J,fe.x+=fe.v*J,Math.abs(fe.x-G)<.001&&Math.abs(fe.v)<.02&&(fe.x=G,fe.v=0)}Xt(()=>{let fe=0;const G={x:b,v:0};return rn(J=>{fe+=g;const xe=t().audio_ready!==!1;let Ie;t().processing?Ie=E(.3+.25*Math.abs(Math.sin(fe*2))):d()&&xe?Ie=E(J):Ie=b,ve(G,Ie,g),l(M,O(G.x),!0)})});var ce=q_();let me;var ie=n(ce),I=i(n(ie),2),V=n(I);{var Y=fe=>{var G=qe("ANALOG // PROCESSING");c(fe,G)},be=fe=>{var G=qe("ANALOG // WARMING UP");c(fe,G)},ke=fe=>{var G=qe("ANALOG // INPUT LEVEL");c(fe,G)};k(V,fe=>{t().processing?fe(Y):d()&&!e(A)?fe(be,1):fe(ke,-1)})}var D=i(I,4);let P;var he=i(ie,2),B=i(n(he),20),L=n(B),ge=i(he,2),De=n(ge);w(()=>{me=Se(ce,1,"vinyl svelte-kq5b5i",null,me,{on:u()}),P=Se(D,1,"led svelte-kq5b5i",null,P,{processing:t().processing,standby:d()&&!e(A)}),St(L,"d",e(M)),y(De,e(H))}),c(a,ce),Rt(),o()}var W_=p("
          ",1),U_=p('
          '),H_=p('
          ⚡
          '),K_=p(''),G_=p('
          SYSTEM RESPONDING
          '),Y_=p('
          RECORDING
          '),J_=p('
          '),Z_=p('
          ');function X_(a,s){Ot(s,!0);const t=()=>ls(xs,"$status",v),r=()=>ls(sv,"$recording",v),o=()=>ls(Lt,"$config",v),d=()=>ls(av,"$speaking",v),u=()=>ls(nv,"$mcpRecording",v),[v,f]=Ms(),_=new Set(["waveform","pulse","blue_wave","mono_bars","spectrum","terminal","vinyl","voice_card","none"]);let b=T(!0),m=T(void 0);const g=ue(()=>t().active_target_label||"Focused Window"),M=ue(()=>t().active_target_label||"Focused Window");let A=T(!1),H=T(""),E=T(""),O=null,ve=null,ce=null,me=null,ie=ue(()=>r()&&o().ui.show_overlay||d()&&o().tts.enabled&&o().tts.response_overlay||u()&&o().mcp.visual_feedback||e(A)&&o().ui.show_command_overlay),I=ue(()=>d()&&o().tts.enabled&&o().tts.response_overlay&&!r()),V=T(!1),Y=T(!1);gs(()=>{!e(V)||e(I)?l(Y,!1):r()||t().processing?l(Y,!0):e(ie)&&l(Y,!1)});let be=ue(()=>o().ui.overlay_style!=="none"&&o().ui.show_overlay&&e(Y)),ke=T(!1),D,P;gs(()=>(e(ie)?(D&&clearTimeout(D),l(V,!0),P&&clearTimeout(P),P=setTimeout(()=>{l(ke,!0)},25),J(o().ui.overlay_style)):(l(ke,!1),D=setTimeout(()=>{l(V,!1)},450)),()=>{D&&clearTimeout(D),P&&clearTimeout(P)}));let he=ue(()=>e(m)?e(m).html.replace(/\{\{trigger\}\}/g,e(g)).replace(/\{\{target\}\}/g,e(M)):""),B=0,L=T(0),ge=null,De=null;function fe(){De===null&&(De=requestAnimationFrame(G))}function G(){if(l(L,e(L)+(B-e(L))*.42),B*=.82,B<5e-4&&(B=0),e(L)<5e-4&&l(L,0),e(m)&&window.dispatchEvent(new CustomEvent("voxctrl-status",{detail:{recording:r(),processing:t().processing,speaking:d(),audio_ready:t().audio_ready!==!1,active_target_label:t().active_target_label||"Focused Window",audio_level:e(L)}})),e(L)===0&&B===0&&!e(V)){De=null;return}De=requestAnimationFrame(G)}gs(()=>{e(V)&&fe()});function J(le){if(_.has(le)){l(m,void 0);return}S("get_custom_overlay",{name:le}).then(R=>{l(m,R!=null?R:void 0,!0)}).catch(R=>{console.error(`Failed to load custom overlay "${le}":`,R),l(m,void 0)})}gs(()=>{const le=o().ui.overlay_style;l(b,!1);const R=setTimeout(()=>{l(b,!0)},25);return J(le),()=>clearTimeout(R)}),gs(()=>{const le=document.documentElement;le.style.setProperty("--voxctrl-audio-level",String(e(L))),le.style.setProperty("--voxctrl-recording",r()?"1":"0"),le.style.setProperty("--voxctrl-processing",t().processing?"1":"0"),le.style.setProperty("--voxctrl-speaking",d()?"1":"0"),le.style.setProperty("--voxctrl-mcp-recording",u()?"1":"0"),le.style.setProperty("--voxctrl-audio-ready",t().audio_ready!==!1?"1":"0")}),Xt(()=>{document.documentElement.classList.add("overlay-window"),document.body.classList.add("overlay-window"),requestAnimationFrame(()=>{requestAnimationFrame(()=>{S("overlay_content_ready").catch(()=>{})})}),document.documentElement.style.setProperty("background","transparent","important"),document.body.style.setProperty("background","transparent","important");const le=document.getElementById("app");return le&&le.style.setProperty("background","transparent","important"),ks("overlay-style-selected",R=>{J(R.payload)}).then(R=>{me=R}),ks("audio-level",R=>{B=Math.min(1,R.payload*100),fe(),window.dispatchEvent(new CustomEvent("voxctrl-audio-level",{detail:R.payload}))}).then(R=>{ge=R}),ks("command-executed",R=>{if(!o().ui.show_command_overlay)return;l(H,R.payload.command,!0),l(E,R.payload.summary,!0),l(A,!0),O&&clearTimeout(O);const ee=(R.payload.duration_secs||o().ui.command_overlay_duration_secs||3)*1e3;O=setTimeout(()=>{l(A,!1)},ee)}).then(R=>{ve=R}),ks("command-withdrawn",()=>{O&&clearTimeout(O),l(A,!1)}).then(R=>{ce=R}),()=>{document.documentElement.classList.remove("overlay-window"),document.body.classList.remove("overlay-window"),ge&&ge(),ve&&ve(),ce&&ce(),me&&me(),O&&clearTimeout(O),De!==null&&cancelAnimationFrame(De)}});function xe(le){return le.querySelectorAll("script").forEach(ee=>{const Oe=document.createElement("script");Array.from(ee.attributes).forEach(je=>{Oe.setAttribute(je.name,je.value)}),Oe.appendChild(document.createTextNode(ee.innerHTML)),ee.parentNode&&ee.parentNode.replaceChild(Oe,ee)}),{destroy(){window.dispatchEvent(new CustomEvent("voxctrl-cleanup"))}}}var Ie=Z_(),re=n(Ie);{var W=le=>{var R=J_(),ee=n(R);{var Oe=te=>{var j=U_(),F=n(j);{var ae=U=>{A_(U,{get recording(){return r()},get active(){return e(ke)}})},C=U=>{P_(U,{get recording(){return r()},get active(){return e(ke)}})},X=U=>{I_(U,{get recording(){return r()},get speaking(){return d()},get active(){return e(ke)}})},de=U=>{L_(U,{get recording(){return r()},get active(){return e(ke)}})},oe=U=>{V_(U,{get recording(){return r()},get active(){return e(ke)}})},Ae=U=>{B_(U,{get recording(){return r()},get active(){return e(ke)}})},$e=U=>{j_(U,{get recording(){return r()},get active(){return e(ke)}})},tt=U=>{var Q=W_(),ne=wt(Q);Rl(ne,()=>``);var Re=i(ne,2);let at;Rl(Re,()=>e(he),!0),en(Re,lt=>xe==null?void 0:xe(lt)),w(()=>at=Se(Re,1,"custom-overlay-content svelte-rmqsd6",null,at,{active:e(ke)})),c(U,Q)},st=U=>{S_(U,{get recording(){return r()},get speaking(){return d()},get active(){return e(ke)}})};k(F,U=>{o().ui.overlay_style==="waveform"?U(ae):o().ui.overlay_style==="pulse"?U(C,1):o().ui.overlay_style==="blue_wave"?U(X,2):o().ui.overlay_style==="mono_bars"?U(de,3):o().ui.overlay_style==="spectrum"?U(oe,4):o().ui.overlay_style==="terminal"?U(Ae,5):o().ui.overlay_style==="vinyl"?U($e,6):e(m)?U(tt,7):o().ui.overlay_style!=="none"&&U(st,8)})}c(te,j)};k(ee,te=>{e(be)&&te(Oe)})}var je=i(ee,2);{var Ke=te=>{var j=H_();let F;var ae=i(n(j),2),C=n(ae),X=n(C),de=i(C,2),oe=n(de);w(Ae=>{var $e;F=Se(j,1,"system-response-box command svelte-rmqsd6",null,F,{on:e(ke)}),y(X,Ae),y(oe,`▸ ${($e=e(E))!=null?$e:""}`)},[()=>e(H).toUpperCase()]),c(te,j)};k(je,te=>{e(A)&&o().ui.show_command_overlay&&!e(I)&&te(Ke)})}var _e=i(je,2);{var se=te=>{var j=G_();let F;var ae=n(j);_t(ae,20,()=>[0,1,2,3,4],ht,(oe,Ae)=>{var $e=K_();w(()=>ds($e,`animation-delay: ${Ae*.13}s`)),c(oe,$e)});var C=i(ae,2),X=i(n(C),2),de=n(X);w(()=>{var oe;F=Se(j,1,"system-response-box speaking svelte-rmqsd6",null,F,{on:e(ke)}),y(de,`▸ ${(oe=e(M))!=null?oe:""}`)}),c(te,j)};k(_e,te=>{e(I)&&te(se)})}var ye=i(_e,2);{var et=te=>{var j=Y_();let F;var ae=i(n(j),2),C=i(n(ae),2),X=n(C);w(()=>{var de;F=Se(j,1,"system-response-box mcp svelte-rmqsd6",null,F,{on:e(ke)}),y(X,`▸ ${(de=e(M))!=null?de:""}`)}),c(te,j)};k(ye,te=>{u()&&o().mcp.visual_feedback&&te(et)})}c(le,R)};k(re,le=>{e(V)&&e(b)&&le(W)})}w(()=>{St(Ie,"data-recording",r()),St(Ie,"data-speaking",d()),St(Ie,"data-processing",t().processing)}),c(a,Ie),Rt(),f()}class yl{constructor(...s){this.type="Logical",s.length===1?"Logical"in s[0]?(this.width=s[0].Logical.width,this.height=s[0].Logical.height):(this.width=s[0].width,this.height=s[0].height):(this.width=s[0],this.height=s[1])}toPhysical(s){return new an(this.width*s,this.height*s)}[ga](){return{width:this.width,height:this.height}}toJSON(){return this[ga]()}}class an{constructor(...s){this.type="Physical",s.length===1?"Physical"in s[0]?(this.width=s[0].Physical.width,this.height=s[0].Physical.height):(this.width=s[0].width,this.height=s[0].height):(this.width=s[0],this.height=s[1])}toLogical(s){return new yl(this.width/s,this.height/s)}[ga](){return{width:this.width,height:this.height}}toJSON(){return this[ga]()}}class In{constructor(s){this.size=s}toLogical(s){return this.size instanceof yl?this.size:this.size.toLogical(s)}toPhysical(s){return this.size instanceof an?this.size:this.size.toPhysical(s)}[ga](){return{[`${this.size.type}`]:{width:this.size.width,height:this.size.height}}}toJSON(){return this[ga]()}}class wl{constructor(...s){this.type="Logical",s.length===1?"Logical"in s[0]?(this.x=s[0].Logical.x,this.y=s[0].Logical.y):(this.x=s[0].x,this.y=s[0].y):(this.x=s[0],this.y=s[1])}toPhysical(s){return new ua(this.x*s,this.y*s)}[ga](){return{x:this.x,y:this.y}}toJSON(){return this[ga]()}}class ua{constructor(...s){this.type="Physical",s.length===1?"Physical"in s[0]?(this.x=s[0].Physical.x,this.y=s[0].Physical.y):(this.x=s[0].x,this.y=s[0].y):(this.x=s[0],this.y=s[1])}toLogical(s){return new wl(this.x/s,this.y/s)}[ga](){return{x:this.x,y:this.y}}toJSON(){return this[ga]()}}class Wi{constructor(s){this.position=s}toLogical(s){return this.position instanceof wl?this.position:this.position.toLogical(s)}toPhysical(s){return this.position instanceof ua?this.position:this.position.toPhysical(s)}[ga](){return{[`${this.position.type}`]:{x:this.position.x,y:this.position.y}}}toJSON(){return this[ga]()}}var cr;(function(a){a[a.Critical=1]="Critical",a[a.Informational=2]="Informational"})(cr||(cr={}));class Qo{constructor(s){this._preventDefault=!1,this.event=s.event,this.id=s.id}preventDefault(){this._preventDefault=!0}isPreventDefault(){return this._preventDefault}}var el;(function(a){a.None="none",a.Normal="normal",a.Indeterminate="indeterminate",a.Paused="paused",a.Error="error"})(el||(el={}));function kl(){return new xl(window.__TAURI_INTERNALS__.metadata.currentWindow.label,{skip:!0})}async function tr(){return S("plugin:window|get_all_windows").then(a=>a.map(s=>new xl(s,{skip:!0})))}const Rr=["tauri://created","tauri://error"];class xl{constructor(s,t={}){var r;this.label=s,this.listeners=Object.create(null),t!=null&&t.skip||S("plugin:window|create",{options:{...t,parent:typeof t.parent=="string"?t.parent:(r=t.parent)===null||r===void 0?void 0:r.label,label:s}}).then(async()=>this.emit("tauri://created")).catch(async o=>this.emit("tauri://error",o))}static async getByLabel(s){var t;return(t=(await tr()).find(r=>r.label===s))!==null&&t!==void 0?t:null}static getCurrent(){return kl()}static async getAll(){return tr()}static async getFocusedWindow(){for(const s of await tr())if(await s.isFocused())return s;return null}async listen(s,t){return this._handleTauriEvent(s,t)?()=>{const r=this.listeners[s];r.splice(r.indexOf(t),1)}:ks(s,t,{target:{kind:"Window",label:this.label}})}async once(s,t){return this._handleTauriEvent(s,t)?()=>{const r=this.listeners[s];r.splice(r.indexOf(t),1)}:Xd(s,t,{target:{kind:"Window",label:this.label}})}async emit(s,t){if(Rr.includes(s)){for(const r of this.listeners[s]||[])r({event:s,id:-1,payload:t});return}return Yo(s,t)}async emitTo(s,t,r){if(Rr.includes(t)){for(const o of this.listeners[t]||[])o({event:t,id:-1,payload:r});return}return Qd(s,t,r)}_handleTauriEvent(s,t){return Rr.includes(s)?(s in this.listeners?this.listeners[s].push(t):this.listeners[s]=[t],!0):!1}async scaleFactor(){return S("plugin:window|scale_factor",{label:this.label})}async innerPosition(){return S("plugin:window|inner_position",{label:this.label}).then(s=>new ua(s))}async outerPosition(){return S("plugin:window|outer_position",{label:this.label}).then(s=>new ua(s))}async innerSize(){return S("plugin:window|inner_size",{label:this.label}).then(s=>new an(s))}async outerSize(){return S("plugin:window|outer_size",{label:this.label}).then(s=>new an(s))}async isFullscreen(){return S("plugin:window|is_fullscreen",{label:this.label})}async isMinimized(){return S("plugin:window|is_minimized",{label:this.label})}async isMaximized(){return S("plugin:window|is_maximized",{label:this.label})}async isFocused(){return S("plugin:window|is_focused",{label:this.label})}async isDecorated(){return S("plugin:window|is_decorated",{label:this.label})}async isResizable(){return S("plugin:window|is_resizable",{label:this.label})}async isMaximizable(){return S("plugin:window|is_maximizable",{label:this.label})}async isMinimizable(){return S("plugin:window|is_minimizable",{label:this.label})}async isClosable(){return S("plugin:window|is_closable",{label:this.label})}async isVisible(){return S("plugin:window|is_visible",{label:this.label})}async title(){return S("plugin:window|title",{label:this.label})}async theme(){return S("plugin:window|theme",{label:this.label})}async isAlwaysOnTop(){return S("plugin:window|is_always_on_top",{label:this.label})}async activityName(){return S("plugin:window|activity_name",{label:this.label})}async sceneIdentifier(){return S("plugin:window|scene_identifier",{label:this.label})}async center(){return S("plugin:window|center",{label:this.label})}async requestUserAttention(s){let t=null;return s&&(s===cr.Critical?t={type:"Critical"}:t={type:"Informational"}),S("plugin:window|request_user_attention",{label:this.label,value:t})}async setResizable(s){return S("plugin:window|set_resizable",{label:this.label,value:s})}async setEnabled(s){return S("plugin:window|set_enabled",{label:this.label,value:s})}async isEnabled(){return S("plugin:window|is_enabled",{label:this.label})}async setMaximizable(s){return S("plugin:window|set_maximizable",{label:this.label,value:s})}async setMinimizable(s){return S("plugin:window|set_minimizable",{label:this.label,value:s})}async setClosable(s){return S("plugin:window|set_closable",{label:this.label,value:s})}async setTitle(s){return S("plugin:window|set_title",{label:this.label,value:s})}async maximize(){return S("plugin:window|maximize",{label:this.label})}async unmaximize(){return S("plugin:window|unmaximize",{label:this.label})}async toggleMaximize(){return S("plugin:window|toggle_maximize",{label:this.label})}async minimize(){return S("plugin:window|minimize",{label:this.label})}async unminimize(){return S("plugin:window|unminimize",{label:this.label})}async show(){return S("plugin:window|show",{label:this.label})}async hide(){return S("plugin:window|hide",{label:this.label})}async close(){return S("plugin:window|close",{label:this.label})}async destroy(){return S("plugin:window|destroy",{label:this.label})}async setDecorations(s){return S("plugin:window|set_decorations",{label:this.label,value:s})}async setShadow(s){return S("plugin:window|set_shadow",{label:this.label,value:s})}async setEffects(s){return S("plugin:window|set_effects",{label:this.label,value:s})}async clearEffects(){return S("plugin:window|set_effects",{label:this.label,value:null})}async setAlwaysOnTop(s){return S("plugin:window|set_always_on_top",{label:this.label,value:s})}async setAlwaysOnBottom(s){return S("plugin:window|set_always_on_bottom",{label:this.label,value:s})}async setContentProtected(s){return S("plugin:window|set_content_protected",{label:this.label,value:s})}async setSize(s){return S("plugin:window|set_size",{label:this.label,value:s instanceof In?s:new In(s)})}async setMinSize(s){return S("plugin:window|set_min_size",{label:this.label,value:s instanceof In?s:s?new In(s):null})}async setMaxSize(s){return S("plugin:window|set_max_size",{label:this.label,value:s instanceof In?s:s?new In(s):null})}async setSizeConstraints(s){function t(r){return r?{Logical:r}:null}return S("plugin:window|set_size_constraints",{label:this.label,value:{minWidth:t(s==null?void 0:s.minWidth),minHeight:t(s==null?void 0:s.minHeight),maxWidth:t(s==null?void 0:s.maxWidth),maxHeight:t(s==null?void 0:s.maxHeight)}})}async setPosition(s){return S("plugin:window|set_position",{label:this.label,value:s instanceof Wi?s:new Wi(s)})}async setFullscreen(s){return S("plugin:window|set_fullscreen",{label:this.label,value:s})}async setSimpleFullscreen(s){return S("plugin:window|set_simple_fullscreen",{label:this.label,value:s})}async setFocus(){return S("plugin:window|set_focus",{label:this.label})}async setFocusable(s){return S("plugin:window|set_focusable",{label:this.label,value:s})}async setIcon(s){return S("plugin:window|set_icon",{label:this.label,value:or(s)})}async setSkipTaskbar(s){return S("plugin:window|set_skip_taskbar",{label:this.label,value:s})}async setCursorGrab(s){return S("plugin:window|set_cursor_grab",{label:this.label,value:s})}async setCursorVisible(s){return S("plugin:window|set_cursor_visible",{label:this.label,value:s})}async setCursorIcon(s){return S("plugin:window|set_cursor_icon",{label:this.label,value:s})}async setBackgroundColor(s){return S("plugin:window|set_background_color",{color:s})}async setCursorPosition(s){return S("plugin:window|set_cursor_position",{label:this.label,value:s instanceof Wi?s:new Wi(s)})}async setIgnoreCursorEvents(s){return S("plugin:window|set_ignore_cursor_events",{label:this.label,value:s})}async startDragging(){return S("plugin:window|start_dragging",{label:this.label})}async startResizeDragging(s){return S("plugin:window|start_resize_dragging",{label:this.label,value:s})}async setBadgeCount(s){return S("plugin:window|set_badge_count",{label:this.label,value:s})}async setBadgeLabel(s){return S("plugin:window|set_badge_label",{label:this.label,value:s})}async setOverlayIcon(s){return S("plugin:window|set_overlay_icon",{label:this.label,value:s?or(s):void 0})}async setProgressBar(s){return S("plugin:window|set_progress_bar",{label:this.label,value:s})}async setVisibleOnAllWorkspaces(s){return S("plugin:window|set_visible_on_all_workspaces",{label:this.label,value:s})}async setTitleBarStyle(s){return S("plugin:window|set_title_bar_style",{label:this.label,value:s})}async setTheme(s){return S("plugin:window|set_theme",{label:this.label,value:s})}async onResized(s){return this.listen(ta.WINDOW_RESIZED,t=>{t.payload=new an(t.payload),s(t)})}async onMoved(s){return this.listen(ta.WINDOW_MOVED,t=>{t.payload=new ua(t.payload),s(t)})}async onCloseRequested(s){return this.listen(ta.WINDOW_CLOSE_REQUESTED,async t=>{const r=new Qo(t);await s(r),r.isPreventDefault()||await this.destroy()})}async onDragDropEvent(s){const t=await this.listen(ta.DRAG_ENTER,u=>{s({...u,payload:{type:"enter",paths:u.payload.paths,position:new ua(u.payload.position)}})}),r=await this.listen(ta.DRAG_OVER,u=>{s({...u,payload:{type:"over",position:new ua(u.payload.position)}})}),o=await this.listen(ta.DRAG_DROP,u=>{s({...u,payload:{type:"drop",paths:u.payload.paths,position:new ua(u.payload.position)}})}),d=await this.listen(ta.DRAG_LEAVE,u=>{s({...u,payload:{type:"leave"}})});return()=>{t(),o(),r(),d()}}async onFocusChanged(s){const t=await this.listen(ta.WINDOW_FOCUS,o=>{s({...o,payload:!0})}),r=await this.listen(ta.WINDOW_BLUR,o=>{s({...o,payload:!1})});return()=>{t(),r()}}async onScaleChanged(s){return this.listen(ta.WINDOW_SCALE_FACTOR_CHANGED,s)}async onThemeChanged(s){return this.listen(ta.WINDOW_THEME_CHANGED,s)}}var ql;(function(a){a.Disabled="disabled",a.Throttle="throttle",a.Suspend="suspend"})(ql||(ql={}));var jl;(function(a){a.Default="default",a.FluentOverlay="fluentOverlay"})(jl||(jl={}));var tl;(function(a){a.AppearanceBased="appearanceBased",a.Light="light",a.Dark="dark",a.MediumLight="mediumLight",a.UltraDark="ultraDark",a.Titlebar="titlebar",a.Selection="selection",a.Menu="menu",a.Popover="popover",a.Sidebar="sidebar",a.HeaderView="headerView",a.Sheet="sheet",a.WindowBackground="windowBackground",a.HudWindow="hudWindow",a.FullScreenUI="fullScreenUI",a.Tooltip="tooltip",a.ContentBackground="contentBackground",a.UnderWindowBackground="underWindowBackground",a.UnderPageBackground="underPageBackground",a.Mica="mica",a.Blur="blur",a.Acrylic="acrylic",a.Tabbed="tabbed",a.TabbedDark="tabbedDark",a.TabbedLight="tabbedLight"})(tl||(tl={}));var sl;(function(a){a.FollowsWindowActiveState="followsWindowActiveState",a.Active="active",a.Inactive="inactive"})(sl||(sl={}));function kr(a){return a===null?null:{name:a.name,scaleFactor:a.scaleFactor,position:new ua(a.position),size:new an(a.size),workArea:{position:new ua(a.workArea.position),size:new an(a.workArea.size)}}}async function Q_(){return S("plugin:window|current_monitor").then(kr)}async function eh(){return S("plugin:window|primary_monitor").then(kr)}async function th(a,s){return S("plugin:window|monitor_from_point",{x:a,y:s}).then(kr)}async function sh(){return S("plugin:window|available_monitors").then(a=>a.map(kr))}async function ah(){return S("plugin:window|cursor_position").then(a=>new ua(a))}const nh=Object.freeze(Object.defineProperty({__proto__:null,CloseRequestedEvent:Qo,get Effect(){return tl},get EffectState(){return sl},LogicalPosition:wl,LogicalSize:yl,PhysicalPosition:ua,PhysicalSize:an,get ProgressBarStatus(){return el},get UserAttentionType(){return cr},Window:xl,availableMonitors:sh,currentMonitor:Q_,cursorPosition:ah,getAllWindows:tr,getCurrentWindow:kl,monitorFromPoint:th,primaryMonitor:eh},Symbol.toStringTag,{value:"Module"}));var ih=p('
          Installing the helper packages…

          You may be prompted for your administrator password.

          '),rh=p('
          Checking VoxCtrl setup…
          '),lh=p('

          '),oh=p('

          ',1),ch=p(`

          🔒 VoxCtrl asked your desktop to register its shortcuts and is told nothing - else. It does not read your keyboard, cannot see what you type in other - applications, and needed no special permissions to set up.

          `),dh=p(' '),vh=p('not accepted by your desktop'),uh=p("
        • "),ph=p('
            '),fh=p(`

            Your desktop does not offer the global-shortcuts portal, so VoxCtrl is - reading key events from the X server instead. This needed no permissions - and no setup, and every gesture style works — but in this mode every - keystroke passes through VoxCtrl. Nothing is stored or sent anywhere; a - desktop with portal support (KDE Plasma, GNOME 48+, Hyprland) avoids it - entirely.

            `),_h=p(`

            Your desktop is holding VoxCtrl's shortcuts itself, which is why VoxCtrl - cannot read your keyboard here. It also means the desktop only reports the - key going down, never coming back up: hold and double-tap styles cannot - work on this route, and the Hotkeys tab offers only tap-to-start, - tap-to-stop.

            `),hh=p(`

            Your desktop does not offer the global-shortcuts portal, so VoxCtrl is - falling back to reading input devices — access this machine already had, - which VoxCtrl neither requested nor configured. Shortcuts work, but in this - mode every keystroke passes through VoxCtrl. Nothing is stored or sent - anywhere; if you would rather it did not happen at all, a desktop with - portal support (KDE Plasma, GNOME 48+, Hyprland) avoids it entirely.

            `),gh=p('

            '),mh=p(`

            Global shortcuts require approval from your system. If you closed or cancelled - the desktop keybind prompt without approving, click below to show the prompt again.

            `,1),bh=p('

            '),yh=p('

            Global shortcuts require approval or registration from your system. VoxCtrl will not grant itself keyboard access to work around this.

            ',1),wh=p(' '),kh=p(' '),xh=p(` is missing, so transcriptions cannot be - typed into the focused window.`,1),Th=p(''),Sh=p(''),Eh=p('
             
            '),Ch=p('
            ',1),Ah=p(' is downloaded and ready.',1),Mh=p('Downloading in the background — no action needed.',1),Ph=p(' is not downloaded yet, so dictation produces no text.',1),Dh=p('
            '),zh=p('
            ❌
            '),Ih=p(''),Oh=p('
            ');function Rh(a,s){Ot(s,!0);let t=T(null),r=T(!1),o=T(!1),d=T(null),u=T(!1),v=T(!1),f=T(!1),_=T(null),b=T(!1),m=T(null),g;async function M(){try{l(t,await S("get_setup_status"),!0)}catch(B){console.error("Failed to read setup status:",B)}}Xt(()=>{M(),g=setInterval(M,2e3)}),br(()=>{g&&clearInterval(g)});async function A(){try{await kl().close()}catch(B){console.error("Failed to close window natively:",B)}}async function H(){var B;l(r,!0),l(d,null);try{await S("install_system_integration"),await M()}catch(L){l(d,(B=L==null?void 0:L.toString())!=null?B:"Install failed",!0),l(u,!0)}finally{l(r,!1)}}async function E(){var B;l(o,!0),l(d,null);try{await S("download_configured_model"),await M()}catch(L){l(d,(B=L==null?void 0:L.toString())!=null?B:"Download failed",!0)}finally{l(o,!1)}}async function O(){try{await S("open_settings_tab",{tab:"engine"})}catch(B){console.error("Failed to open the Engine settings tab:",B)}}async function ve(){var B;l(f,!0),l(_,null);try{await S("open_shortcut_settings")}catch(L){l(_,(B=L==null?void 0:L.toString())!=null?B:"Could not open shortcut settings.",!0)}finally{l(f,!1)}}async function ce(){var B;l(b,!0),l(m,null);try{await S("approve_shortcuts"),await M()}catch(L){l(m,(B=L==null?void 0:L.toString())!=null?B:"Failed to configure shortcuts for your desktop.",!0),await M()}finally{l(b,!1)}}async function me(){if(e(t))try{await navigator.clipboard.writeText(e(t).manual_package_commands),l(v,!0),setTimeout(()=>l(v,!1),2e3)}catch(B){console.error("Clipboard write failed:",B)}}const ie=ue(()=>e(t)?e(t).hotkeys.backend==="starting"?"busy":e(t).hotkeys_active?"ok":"todo":"busy"),I=ue(()=>e(t)?e(t).missing_injection_tool?"todo":"ok":"busy"),V=ue(()=>e(t)?e(t).model_ready?"ok":e(t).model_auto_downloads?"busy":"todo":"busy"),Y=B=>B==="ok"?"✅":B==="busy"?"⏳":"⚠️";var be=Oh(),ke=n(be);{var D=B=>{var L=ih();c(B,L)},P=B=>{var L=rh();c(B,L)},he=B=>{var L=Ih(),ge=n(L),De=n(ge),fe=n(De),G=i(De,2),J=n(G),xe=n(J),Ie=i(J,2),re=n(Ie),W=i(ge,2),le=n(W);let R;var ee=n(le),Oe=n(ee),je=i(ee,2),Ke=i(n(je),2),_e=n(Ke),se=i(Ke,2);{var ye=ze=>{var Je=oh(),q=wt(Je),h=n(q),x=i(q,2),we=n(x),Be=n(we),He=i(x,2);{var Te=Ce=>{var Ue=lh(),Xe=n(Ue);w(()=>y(Xe,e(_))),c(Ce,Ue)};k(He,Ce=>{e(_)&&Ce(Te)})}w(()=>{var Ce;y(h,`🔧 One more step on KDE: ${(Ce=e(t).hotkeys.manual_enable_hint)!=null?Ce:""}`),we.disabled=e(f),y(Be,e(f)?"Opening…":"Open Shortcut Settings")}),z("click",we,ve),c(ze,Je)};k(se,ze=>{e(t).hotkeys.needs_manual_enable&&ze(ye)})}var et=i(se,2);{var te=ze=>{var Je=ch();c(ze,Je)};k(et,ze=>{(e(t).hotkeys.backend==="portal"||e(t).hotkeys.backend==="mint_dbus")&&ze(te)})}var j=i(et,2);{var F=ze=>{var Je=ph();_t(Je,21,()=>e(t).hotkeys.shortcuts,ht,(q,h)=>{var x=uh();let we;var Be=n(x);{var He=Ce=>{var Ue=dh(),Xe=n(Ue);w(()=>y(Xe,e(h).trigger_description||e(h).requested||"chosen in your desktop settings")),c(Ce,Ue)},Te=Ce=>{var Ue=vh();c(Ce,Ue)};k(Be,Ce=>{e(h).bound?Ce(He):Ce(Te,-1)})}w(()=>we=Se(x,1,"svelte-45v8pc",null,we,{unbound:!e(h).bound})),c(q,x)}),c(ze,Je)};k(j,ze=>{e(t).hotkeys_active&&e(t).hotkeys.shortcuts.length>0&&ze(F)})}var ae=i(j,2);{var C=ze=>{var Je=fh();c(ze,Je)},X=ze=>{var Je=_h();c(ze,Je)},de=ze=>{var Je=hh();c(ze,Je)},oe=ze=>{var Je=mh(),q=i(wt(Je),2),h=n(q),x=n(h),we=i(q,2);{var Be=He=>{var Te=gh(),Ce=n(Te);w(()=>y(Ce,e(m))),c(He,Te)};k(we,He=>{e(m)&&He(Be)})}w(()=>{h.disabled=e(b),y(x,e(b)?"Configuring…":"Approve Keybinds")}),z("click",h,ce),c(ze,Je)},Ae=ze=>{var Je=yh(),q=i(wt(Je),2),h=n(q),x=n(h),we=i(q,2);{var Be=He=>{var Te=bh(),Ce=n(Te);w(()=>y(Ce,e(m))),c(He,Te)};k(we,He=>{e(m)&&He(Be)})}w(()=>{h.disabled=e(b),y(x,e(b)?"Configuring…":"Approve Shortcuts")}),z("click",h,ce),c(ze,Je)};k(ae,ze=>{e(t).hotkeys.backend==="x11"?ze(C):e(t).hotkeys.backend==="mint_dbus"?ze(X,1):e(t).hotkeys.backend==="evdev"?ze(de,2):e(t).hotkeys.portal_refused?ze(oe,3):e(t).hotkeys.backend!=="starting"&&ze(Ae,4)})}var $e=i(ae,2);{var tt=ze=>{var Je=wh(),q=n(Je);w(()=>{var h;return y(q,`Portal reported: ${(h=e(t).hotkeys.portal_error)!=null?h:""}`)}),c(ze,Je)};k($e,ze=>{e(t).hotkeys.portal_error&&e(t).hotkeys.backend!=="portal"&&e(t).hotkeys.backend!=="evdev"&&ze(tt)})}var st=i($e,2);{var U=ze=>{var Je=kh(),q=n(Je);w(()=>{var h;return y(q,`X11 shortcuts: ${(h=e(t).hotkeys.x11_error)!=null?h:""}`)}),c(ze,Je)};k(st,ze=>{e(t).hotkeys.x11_error&&e(t).hotkeys.backend!=="x11"&&e(t).hotkeys.backend!=="portal"&&ze(U)})}var Q=i(le,2);let ne;var Re=n(Q),at=n(Re),lt=i(Re,2),Ee=i(n(lt),2),Ge=n(Ee);{var nt=ze=>{var Je=xh(),q=wt(Je),h=n(q);w(()=>y(h,e(t).missing_injection_tool)),c(ze,Je)},Ne=ze=>{var Je=qe("Ready — transcriptions can be typed straight into the focused window.");c(ze,Je)};k(Ge,ze=>{e(t).missing_injection_tool?ze(nt):ze(Ne,-1)})}var it=i(Ee,2);{var dt=ze=>{var Je=Ch(),q=wt(Je),h=n(q);{var x=Ce=>{var Ue=Th();z("click",Ue,H),c(Ce,Ue)};k(h,Ce=>{e(t).pkexec_available&&e(t).manual_package_commands&&Ce(x)})}var we=i(h,2);{var Be=Ce=>{var Ue=Sh(),Xe=n(Ue);w(()=>y(Xe,e(u)?"Hide manual commands":"Install it manually")),z("click",Ue,()=>l(u,!e(u))),c(Ce,Ue)};k(we,Ce=>{e(t).manual_package_commands&&Ce(Be)})}var He=i(q,2);{var Te=Ce=>{var Ue=Eh(),Xe=n(Ue),Vt=n(Xe),Qt=i(Xe,2),ts=n(Qt);w(()=>{y(Vt,e(t).manual_package_commands),y(ts,e(v)?"Copied":"Copy commands")}),z("click",Qt,me),c(Ce,Ue)};k(He,Ce=>{e(u)&&Ce(Te)})}c(ze,Je)};k(it,ze=>{e(t).missing_injection_tool&&ze(dt)})}var ot=i(Q,2);let Me;var Ye=n(ot),rt=n(Ye),Z=i(Ye,2),K=i(n(Z),2),pe=n(K);{var We=ze=>{var Je=Ah(),q=wt(Je),h=n(q);w(()=>y(h,e(t).model_size)),c(ze,Je)},Ve=ze=>{var Je=Mh(),q=i(wt(Je)),h=n(q);w(()=>y(h,e(t).model_size)),c(ze,Je)},gt=ze=>{var Je=Ph(),q=wt(Je),h=n(q);w(()=>y(h,e(t).model_size)),c(ze,Je)};k(pe,ze=>{e(t).model_ready?ze(We):e(t).model_auto_downloads?ze(Ve,1):ze(gt,-1)})}var as=i(K,2);{var Ht=ze=>{var Je=Dh(),q=n(Je),h=n(q),x=i(q,2);w(()=>{q.disabled=e(o),y(h,e(o)?"Downloading…":`Download ${e(t).model_size}`)}),z("click",q,E),z("click",x,O),c(ze,Je)};k(as,ze=>{!e(t).model_ready&&!e(t).model_auto_downloads&&ze(Ht)})}var Kt=i(W,2);{var ft=ze=>{var Je=zh(),q=i(n(Je),2),h=n(q);w(()=>y(h,e(d))),c(ze,Je)};k(Kt,ze=>{e(d)&&ze(ft)})}var Ft=i(Kt,2),At=n(Ft),Et=n(At);w((ze,Je,q)=>{y(fe,e(t).is_complete?"✅":"🛠️"),y(xe,e(t).is_complete?"VoxCtrl is ready":"Finish setting up VoxCtrl"),y(re,e(t).is_complete?"Press your shortcut anywhere to dictate.":"Dictation is not ready yet — the steps below say why."),R=Se(le,1,"step svelte-45v8pc",null,R,{done:e(ie)==="ok"}),y(Oe,ze),y(_e,e(t).hotkeys.detail),ne=Se(Q,1,"step svelte-45v8pc",null,ne,{done:e(I)==="ok"}),y(at,Je),Me=Se(ot,1,"step svelte-45v8pc",null,Me,{done:e(V)==="ok"}),y(rt,q),y(Et,e(t).is_complete?"Close":"Continue anyway")},[()=>Y(e(ie)),()=>Y(e(I)),()=>Y(e(V))]),z("click",At,A),c(B,L)};k(ke,B=>{e(r)?B(D):e(t)?B(he,-1):B(P,1)})}c(a,be),Rt()}us(["click"]);const Lh=[{id:"tiny",mb:75,speed:.96,accuracy:.58},{id:"base",mb:142,speed:.88,accuracy:.68},{id:"small",mb:466,speed:.68,accuracy:.8},{id:"medium",mb:1500,speed:.42,accuracy:.9},{id:"large-v3",mb:3100,speed:.22,accuracy:.97}],Nh=[{id:"tiny",mb:100,speed:.98,accuracy:.64},{id:"base",mb:250,speed:.92,accuracy:.77}],Fh=[{id:"tdt-0.6b-v3",mb:665,speed:.95,accuracy:.94}],Vh=[{id:"remote",mb:0,speed:.95,accuracy:.95}],Ui=[{id:"whisper-cpp",name:"whisper.cpp",glyph:"∇",tagline:"Reference-grade accuracy in quiet spaces. Five model sizes from 75 MB to 3.1 GB. CUDA, Vulkan or CPU.",models:Lh,gpu:!0,noiseRetention:.64},{id:"moonshine",name:"Moonshine",glyph:"↯",tagline:"Streaming ONNX model tuned for real rooms — fans, keyboards, traffic. Fast on any CPU, tiny download.",models:Nh,gpu:!1,noiseRetention:.93},{id:"parakeet",name:"Parakeet TDT",glyph:"⚡",tagline:"NVIDIA FastConformer TDT 0.6B. Ultra-fast non-autoregressive transcription, SOTA accuracy, no repetition loops.",models:Fh,gpu:!0,noiseRetention:.88},{id:"remote-openai",name:"Remote Speech Engine",glyph:"🌐",tagline:"Connect to an OpenAI-compatible speech-to-text server on your network or cloud (Faster-Whisper, vLLM, etc.).",models:Vh,gpu:!1,noiseRetention:.92}],$n=[{id:"toggle",name:"Tap to talk",verb:"tap",desc:"Press once to start, press again to stop. Hands stay free while you speak.",key:[[1,1],[8,0],[1,1],[3,0]],mic:[[1,0],[9,1],[4,0]]},{id:"double_tap",name:"Double-tap to talk",verb:"double-tap",desc:"Two quick presses start dictation; one press stops. Hard to trigger by accident.",key:[[1,1],[.7,0],[1,1],[7,0],[1,1],[3,0]],mic:[[2.7,0],[7.3,1],[4,0]]},{id:"hold",name:"Hold to talk",verb:"hold",desc:"Hold the keys down while speaking, release to stop. Like a walkie-talkie.",key:[[1,0],[9,1],[4,0]],mic:[[1,0],[9,1],[4,0]]},{id:"double_tap_hold",name:"Double-tap & hold",verb:"double-tap and hold",desc:"Tap once, then press and hold. Release to stop. Never collides with a plain shortcut.",key:[[1,1],[.7,0],[8.3,1],[4,0]],mic:[[2.7,0],[6.3,1],[4,0]]}],Rn=[{id:"blue_wave",name:"Ocean Wave",meta:"default · tide-pool waves",glyph:"⊟"},{id:"voice_card",name:"Voice Card",meta:"20×6 LED VU matrix",glyph:"⊟"},{id:"waveform",name:"Waveform",meta:"scrolling oscilloscope",glyph:"⌇"},{id:"pulse",name:"Pulse Ring",meta:"sonar sweep · target lock",glyph:"◌"},{id:"mono_bars",name:"Mono Bars",meta:"black & white 5-bar meter",glyph:"▥"},{id:"spectrum",name:"Neon Spectrum",meta:"16-band equalizer",glyph:"▦"},{id:"terminal",name:"Retro Terminal",meta:"DOS-blue ASCII meter",glyph:"▸"},{id:"vinyl",name:"Analog VU",meta:"vintage needle meter",glyph:"◔"}],$h=[{id:"top",label:"Top",glyph:"⤒"},{id:"center",label:"Center",glyph:"⊡"},{id:"bottom",label:"Bottom",glyph:"⤓"}],ka=[{id:"vox_cpm_2",name:"VoxCPM2",kind:"neural · 2B autoregressive",quality:.98,speed:.25,mb:2950,note:"2B autoregressive diffusion. SOTA voice realism & cloning. Runs via audio.cpp, best on a Vulkan GPU."},{id:"breeze_tts_2",name:"Breeze-TTS-2",kind:"neural · expressive",quality:.96,speed:.32,mb:5080,note:"Most natural prosody. Runs via audio.cpp, best on a Vulkan GPU or fast CPU.",nonCommercial:!0,licenceUrl:"huggingface.co/BreezeBlue/Breeze-TTS-2"},{id:"pocket_tts",name:"Pocket TTS",kind:"neural · voice cloning",quality:.86,speed:.55,mb:130,note:"Cloned voices, downloaded in-app. Runs via audio.cpp with optional Vulkan acceleration."},{id:"piper",name:"Piper TTS",kind:"onnx · ~11 voices",quality:.72,speed:.8,mb:60,note:"The sweet spot for most machines. Per-voice ~60 MB."},{id:"inflect_micro",name:"Inflect Micro",kind:"compact neural",quality:.55,speed:.92,mb:38,note:"Tiny footprint, still human-ish. Good for laptops."},{id:"espeak",name:"eSpeak-NG",kind:"formant synth",quality:.3,speed:.99,mb:0,note:"Instant, robotic, runs anywhere. Zero download."}],xa=["Welcome","Engine","Hotkey","Overlay","Test","Voice","Done"];function Bn(a){return a<=0?"none":a>=1e3?`${(a/1e3).toFixed(1)} GB`:`${Math.round(a)} MB`}function Bh(a,s=ka){const t=Math.max(0,...s.map(r=>r.mb));return t<=0||a<=0?0:Math.min(100,a/t*100)}function sr(a){return`${Math.round(a*100)}%`}function qh(a){return a>.85?"instant":a>.6?"< 1 s":a>.35?"1–3 s":"3–8 s"}function jh(a){return a>.9?"instant":a>.7?"< 0.5 s":a>.5?"~1 s":"2–4 s"}function Hi(a,s){return Array.from({length:a},(t,r)=>{const o=(r+1)/a;return{h:Math.max(8,Math.round(100*s*(.55+.45*Math.sin(r*1.7+s*5)))),o:o<=s?1:.18}})}function ec(a){return Array.from({length:a},(s,t)=>({d:(.6+t*7%5*.12).toFixed(2),dl:(t*.07).toFixed(2)}))}function Wh(a,s){const t=s.toUpperCase();return a==="Control"?"KEY_LEFTCTRL":a==="Alt"?"KEY_LEFTALT":a==="Shift"?"KEY_LEFTSHIFT":a==="Meta"||a==="OS"||a==="Super"?"KEY_LEFTMETA":t==="SPACE"?"KEY_SPACE":t==="ENTER"?"KEY_ENTER":t==="ESCAPE"||t==="ESC"?"KEY_ESC":t==="TAB"?"KEY_TAB":t==="BACKSPACE"?"KEY_BACKSPACE":t==="DELETE"?"KEY_DELETE":/^KEY[A-Z]$/.test(t)?`KEY_${t.slice(3)}`:t.startsWith("KEY")?t:t.startsWith("DIGIT")?`KEY_${t.replace("DIGIT","")}`:t.startsWith("ARROW")?`KEY_${t.replace("ARROW","")}`:t.startsWith("F")&&t.length>1?`KEY_${t}`:a.length===1?`KEY_${a.toUpperCase()}`:`KEY_${t}`}const Uh={KEY_LEFTCTRL:"Ctrl",KEY_RIGHTCTRL:"Ctrl",KEY_LEFTALT:"Alt",KEY_RIGHTALT:"Alt",KEY_LEFTSHIFT:"Shift",KEY_RIGHTSHIFT:"Shift",KEY_LEFTMETA:"Super",KEY_RIGHTMETA:"Super",KEY_SPACE:"Space",KEY_ESC:"Esc",KEY_ENTER:"Enter",KEY_TAB:"Tab",KEY_BACKSPACE:"Backspace",KEY_DELETE:"Delete"};function Tl(a){var s;return(s=Uh[a])!=null?s:a.replace(/^KEY_/,"")}const Hh=new Set(["KEY_LEFTCTRL","KEY_RIGHTCTRL","KEY_LEFTALT","KEY_RIGHTALT","KEY_LEFTSHIFT","KEY_RIGHTSHIFT","KEY_LEFTMETA","KEY_RIGHTMETA"]);function Kh(a){return a.length>0&&a.every(s=>Hh.has(s))}const Lr="default_hold",ci="command",Gh="Command";function Yh(a){return{...a,id:ci,label:Gh,delivery:"command",command:null}}var Ti,Si,Ei,Ci,Ai,Mi,Pi,Di,zi,Ii,Oi;class Jh{constructor(){vt(this,Ti,T(0));vt(this,Si,T(0));vt(this,Ei,T(!1));vt(this,Ci,T("hold"));vt(this,Ai,T(null));vt(this,Mi,T(!1));vt(this,Pi,T(kt([])));vt(this,Di,T(null));vt(this,zi,T(kt([])));vt(this,Ii,T(!1));vt(this,Oi,T(!1))}get step(){return e($(this,Ti))}set step(s){l($(this,Ti),s,!0)}get visited(){return e($(this,Si))}set visited(s){l($(this,Si),s,!0)}get leaving(){return e($(this,Ei))}set leaving(s){l($(this,Ei),s,!0)}get gesture(){return e($(this,Ci))}set gesture(s){l($(this,Ci),s,!0)}get combo(){return e($(this,Ai))}set combo(s){l($(this,Ai),s,!0)}get recording(){return e($(this,Mi))}set recording(s){l($(this,Mi),s,!0)}get held(){return e($(this,Pi))}set held(s){l($(this,Pi),s,!0)}get captureHint(){return e($(this,Di))}set captureHint(s){l($(this,Di),s,!0)}get issues(){return e($(this,zi))}set issues(s){l($(this,zi),s,!0)}get engineChosen(){return e($(this,Ii))}set engineChosen(s){l($(this,Ii),s,!0)}get modelChosen(){return e($(this,Oi))}set modelChosen(s){l($(this,Oi),s,!0)}get gestureInfo(){var s;return(s=$n.find(t=>t.id===this.gesture))!=null?s:$n[2]}get displayKeys(){var s;return this.recording?this.held:(s=this.combo)!=null?s:[]}recordIssue(s){this.issues=[...this.issues.filter(t=>t.id!==s.id),s]}clearIssue(s){this.issues=this.issues.filter(t=>t.id!==s)}goTo(s){s===this.step||this.leaving||s<0||s>=xa.length||(this.leaving=!0,this.recording=!1,setTimeout(()=>{this.step=s,this.visited=Math.max(this.visited,s),this.leaving=!1},200))}async ensureCommandTarget(){var o;const s=await S("get_targets");if(s.some(d=>d.id===ci&&d.delivery==="command"))return ci;const t=(o=s.find(d=>d.delivery==="inject"))!=null?o:s[0];if(!t)return"default";const r=[...s.filter(d=>d.id!==ci),Yh(t)];return await S("save_targets",{targets:r}),ci}async saveBinding(){if(!this.combo||this.combo.length===0)return;const s=await this.ensureCommandTarget(),t=await S("get_bindings").catch(()=>[]),r=this.gestureInfo,o={id:Lr,label:`Dictate (${r.name})`,keys:[...this.combo],gesture:this.gesture,target_id:s,target_ids:[s],tap_ms:300,hold_threshold_ms:200,disabled:!1,openai_enabled:!1,openai_model:"",openai_mode:"custom",openai_prompt:"",openai_system_prompt:""},d=t.filter(u=>u.id!==Lr&&u.id!=="default_toggle"&&u.id!=="__tts_stop__");await S("save_bindings",{bindings:[o,...d]})}async loadBinding(){var s;try{const t=await S("get_bindings"),r=(s=t.find(o=>o.id===Lr))!=null?s:t.find(o=>o.id!=="__tts_stop__");r&&r.keys.length>0&&(this.combo=[...r.keys],$n.some(o=>o.id===r.gesture)&&(this.gesture=r.gesture))}catch(t){console.error("Wizard: failed to read existing bindings:",t)}}reset(){this.step=0,this.visited=0,this.leaving=!1,this.gesture="hold",this.combo=null,this.recording=!1,this.held=[],this.captureHint=null,this.issues=[],this.engineChosen=!1,this.modelChosen=!1}}Ti=new WeakMap,Si=new WeakMap,Ei=new WeakMap,Ci=new WeakMap,Ai=new WeakMap,Mi=new WeakMap,Pi=new WeakMap,Di=new WeakMap,zi=new WeakMap,Ii=new WeakMap,Oi=new WeakMap;const Le=new Jh;function Ca(a){const s={...Ln(Lt)};a(s),Lt.set(s)}var Zh=p('
            '),Xh=p(`
            VoxCtrl
            // welcome

            Speak to anything on your machine.

            A few minutes of setup. Pick a transcription engine, bind a hotkey, choose how VoxCtrl shows - itself, and test it end to end. Everything runs on this device — nothing leaves it.

            ↺ Nothing is permanent — every choice can be changed later in Settings.
            `);function Qh(a){const s=[{glyph:"∇",n:"01",title:"Transcription engine",desc:"whisper.cpp or Moonshine, sized to your hardware."},{glyph:"⌁",n:"02",title:"Hotkey",desc:"A gesture and a key combo to start talking."},{glyph:"⌬",n:"03",title:"Overlay",desc:"A visual signal while the mic is live — or none."},{glyph:"◉",n:"04",title:"Live test",desc:"Dictate into a box and watch it land."},{glyph:"⊕",n:"05",title:"Voice output",desc:"Optional: let agents talk back through your speakers."}];var t=Xh(),r=n(t),o=n(r),d=i(n(o),4),u=i(r,2);_t(u,5,()=>s,ht,(v,f)=>{var _=Zh(),b=n(_),m=n(b),g=n(m),M=i(m,2),A=n(M),H=i(b,2),E=n(H),O=i(H,2),ve=n(O);w(()=>{y(g,e(f).glyph),y(A,e(f).n),y(E,e(f).title),y(ve,e(f).desc)}),c(v,_)}),w(()=>St(d,"src",wr)),c(a,t)}var eg=p(''),tg=p('
            Discovered models from server:
            '),sg=p("
            "),ag=p('✔ Tested & verified successfully'),ng=p('⚠️ Test connection required to proceed'),ig=p(``);function rg(a,s){Ot(s,!0);const t=()=>ls(Lt,"$config",r),[r,o]=Ms();let d=Nt(s,"isOpen",15,!1),u=T(""),v=T(""),f=T("whisper-1"),_=T(""),b=T(30),m=T(!1),g=T(null),M=T(kt([])),A=T(!1),H=!1;gs(()=>{d()&&!H&&Fa(()=>{var Y;const V=t().engine.remote_openai;l(u,(V==null?void 0:V.endpoint)||"http://localhost:8000/v1",!0),l(v,(V==null?void 0:V.api_key)||"",!0),l(f,(V==null?void 0:V.model)||"whisper-1",!0),l(_,(V==null?void 0:V.language)||"",!0),l(b,(Y=V==null?void 0:V.timeout_secs)!=null?Y:30,!0),l(g,null)}),H=d()});function E(){Ca(V=>{V.engine.remote_openai?(V.engine.remote_openai.endpoint=e(u).trim()||"http://localhost:8000/v1",V.engine.remote_openai.api_key=e(v).trim()?e(v).trim():null,V.engine.remote_openai.model=e(f).trim()||"whisper-1",V.engine.remote_openai.language=e(_).trim(),V.engine.remote_openai.timeout_secs=Number(e(b))||30):V.engine.remote_openai={endpoint:e(u).trim()||"http://localhost:8000/v1",api_key:e(v).trim()?e(v).trim():null,model:e(f).trim()||"whisper-1",language:e(_).trim(),timeout_secs:Number(e(b))||30}})}async function O(){var V;if(!e(m)){E(),l(m,!0),l(g,null);try{const Y=await S("test_remote_stt",{endpoint:e(u).trim()||"http://localhost:8000/v1",apiKey:e(v).trim()?e(v).trim():null,model:e(f).trim()||"whisper-1",timeoutSecs:Number(e(b))||30});l(g,{success:Y.success,message:Y.message},!0),Y.models&&Y.models.length>0&&(l(M,Y.models,!0),e(f)||(l(f,Y.models[0],!0),E())),Y.success&&(l(A,!0),E(),(V=s.onSuccess)==null||V.call(s))}catch(Y){l(g,{success:!1,message:Y.toString()},!0)}finally{l(m,!1)}}}function ve(){E(),d(!1)}function ce(V){V.key==="Escape"&&ve()}var me=$i();Ra("keydown",Jr,ce);var ie=wt(me);{var I=V=>{var Y=ig(),be=n(Y),ke=n(be),D=i(n(ke),2),P=i(ke,2),he=i(n(P),2),B=n(he),L=i(n(B),2),ge=i(B,4),De=i(n(ge),2),fe=i(ge,4),G=i(n(fe),2),J=i(fe,2);{var xe=oe=>{var Ae=tg(),$e=i(n(Ae),2);_t($e,21,()=>e(M),ht,(tt,st)=>{var U=eg();let Q;var ne=n(U);w(()=>{Q=Se(U,1,"tag-btn svelte-1c9i6zy",null,Q,{active:e(f)===e(st)}),y(ne,e(st))}),z("click",U,()=>{l(f,e(st),!0),E()}),c(tt,U)}),c(oe,Ae)};k(J,oe=>{e(M).length>0&&oe(xe)})}var Ie=i(J,2),re=i(n(Ie),2),W=i(Ie,4),le=i(n(W),2),R=i(W,2),ee=n(R),Oe=n(ee);{var je=oe=>{var Ae=qe("⏳ Testing Connection...");c(oe,Ae)},Ke=oe=>{var Ae=qe("🧪 Test Connection");c(oe,Ae)};k(Oe,oe=>{e(m)?oe(je):oe(Ke,-1)})}var _e=i(ee,2);{var se=oe=>{var Ae=sg();let $e;var tt=n(Ae);{var st=Q=>{var ne=qe();w(()=>{var Re;return y(ne,`✔ ${(Re=e(g).message)!=null?Re:""}`)}),c(Q,ne)},U=Q=>{var ne=qe();w(()=>{var Re;return y(ne,`⚠️ ${(Re=e(g).message)!=null?Re:""}`)}),c(Q,ne)};k(tt,Q=>{e(g).success?Q(st):Q(U,-1)})}w(()=>$e=Se(Ae,1,"status-pill svelte-1c9i6zy",null,$e,{success:e(g).success,error:!e(g).success})),c(oe,Ae)};k(_e,oe=>{e(g)&&oe(se)})}var ye=i(P,2),et=n(ye),te=n(et);{var j=oe=>{var Ae=ag();c(oe,Ae)},F=oe=>{var Ae=ng();c(oe,Ae)};k(te,oe=>{e(A)?oe(j):oe(F,-1)})}var ae=i(et,2),C=n(ae),X=i(C,2),de=n(X);w(()=>{ee.disabled=e(m),y(de,e(A)?"Done":"Save & Close")}),z("click",Y,oe=>{oe.target===oe.currentTarget&&ve()}),z("keydown",Y,oe=>{oe.key==="Escape"&&ve()}),z("click",D,ve),z("change",L,E),Ze(L,()=>e(u),oe=>l(u,oe)),z("change",De,E),Ze(De,()=>e(v),oe=>l(v,oe)),z("change",G,E),Ze(G,()=>e(f),oe=>l(f,oe)),z("change",re,E),Ze(re,()=>e(_),oe=>l(_,oe)),z("change",le,E),Ze(le,()=>e(b),oe=>l(b,oe)),z("click",ee,O),z("click",C,ve),z("click",X,ve),c(V,Y)};k(ie,V=>{d()&&V(I)})}c(a,me),Rt(),o()}us(["click","keydown","change"]);var lg=p(`
            This build was compiled without the Moonshine backend — choosing it runs whisper.cpp - with the model above instead.
            `),og=p(`
            This build was compiled without the Parakeet backend — choosing it runs whisper.cpp - with the model above instead.
            `),cg=p('
            '),dg=p('
            server configuration
            URL
            Model
            Status
            ',1),vg=p(''),ug=p('
            '),pg=p('
            model size
            ',1),fg=p('
            '),_g=p('
            '),hg=p('
            ✓
            ◌ quiet room
            ≋ noisy room
            '),gg=p(' '),mg=p(' '),bg=p(' Checking local models…'),yg=p(' '),wg=p('⚠️ Test connection required before continuing'),kg=p(' '),xg=p('◇ Pick an engine and a model size — they download before the next step'),Tg=p(' '),Sg=p(`
            // 01 · transcription engine

            Which ears should VoxCtrl use?

            Choose between on-device engines (whisper.cpp, Moonshine, Parakeet TDT) or connect to a Remote Speech Engine over your network. - Pick a model size inside each card or configure your remote endpoint to get started.

            `);function Eg(a,s){Ot(s,!0);const t=()=>ls(Lt,"$config",r),[r,o]=Ms(),d=1;let u=T(!0),v=T(!0),f=T(null),_=T(kt({})),b=T(kt({})),m=T(kt({})),g=T(null),M=T(null),A=T(!1),H=T(!1),E=T(!1);const O=ue(()=>t().engine.backend==="remote-openai"?"remote-openai":t().engine.backend==="parakeet"?"parakeet":t().engine.backend==="moonshine"?"moonshine":"whisper-cpp"),ve={cuda:"CUDA",vulkan:"Vulkan",coreml:"CoreML"},ce=ue(()=>!!e(f)&&t().engine.whisper_cpp.device!=="cpu"),me=ue(()=>{var U;return e(f)?(U=ve[e(f)])!=null?U:e(f):""}),ie=ue(()=>{var U;return e(O)==="remote-openai"?((U=t().engine.remote_openai)==null?void 0:U.model)||"whisper-1":e(O)==="parakeet"&&e(v)?t().engine.parakeet.model_size:e(O)==="moonshine"&&e(u)?t().engine.moonshine.model_size:t().engine.whisper_cpp.model_size}),I=ue(()=>e(O)==="remote-openai"?e(E):e(O)==="parakeet"&&e(v)?!!e(m)[e(ie)]:e(O)==="moonshine"&&e(u)?!!e(b)[e(ie)]:!!e(_)[e(ie)]);function V(U,Q){var ne;return U!==e(O)?!1:Q.id===(U==="remote-openai"?((ne=t().engine.remote_openai)==null?void 0:ne.model)||"whisper-1":U==="parakeet"?t().engine.parakeet.model_size:U==="moonshine"?t().engine.moonshine.model_size:t().engine.whisper_cpp.model_size)}function Y(U,Q){return U==="remote-openai"?e(E):U==="parakeet"?!!e(m)[Q.id]:U==="moonshine"?!!e(b)[Q.id]:!!e(_)[Q.id]}function be(U){Ca(Q=>{Q.engine.backend=U,U==="remote-openai"&&!Q.engine.remote_openai&&(Q.engine.remote_openai={endpoint:"http://localhost:8000/v1",api_key:null,model:"whisper-1",language:"",timeout_secs:30})}),Le.engineChosen=!0,U==="remote-openai"&&(Le.modelChosen=!0,l(H,!0))}function ke(U,Q){Ca(ne=>{ne.engine.backend=U,U==="parakeet"?ne.engine.parakeet.model_size=Q.id:U==="moonshine"?ne.engine.moonshine.model_size=Q.id:U==="remote-openai"?ne.engine.remote_openai?ne.engine.remote_openai.model=Q.id:ne.engine.remote_openai={endpoint:"http://localhost:8000/v1",api_key:null,model:Q.id,language:"",timeout_secs:30}:ne.engine.whisper_cpp.model_size=Q.id}),l(M,null),Le.engineChosen=!0,Le.modelChosen=!0}function D(){e(f)&&Ca(U=>{U.engine.whisper_cpp.device=e(ce)?"cpu":"auto"})}async function P(){const U=t().engine.whisper_cpp.model_dir,Q={};for(const ne of Ui[0].models)try{Q[ne.id]=await S("check_model_downloaded",{modelSize:ne.id,modelDir:U})}catch(Re){console.error("Wizard: whisper model check failed for",ne.id,Re),Q[ne.id]=!1}l(_,Q,!0)}async function he(){const U={},Q=Ui.find(ne=>ne.id==="moonshine");if(Q)for(const ne of Q.models)try{U[ne.id]=await S("check_moonshine_downloaded",{modelSize:ne.id})}catch(Re){console.error("Wizard: moonshine model check failed for",ne.id,Re),U[ne.id]=!1}l(b,U,!0)}async function B(){const U={},Q=Ui.find(ne=>ne.id==="parakeet");if(Q)for(const ne of Q.models)try{U[ne.id]=await S("check_parakeet_downloaded",{modelSize:ne.id})}catch(Re){console.error("Wizard: parakeet model check failed for",ne.id,Re),U[ne.id]=!1}l(m,U,!0)}async function L(){if(e(O)==="remote-openai")return e(E)?!0:(s.setBlocker(d,"Test the remote connection successfully to continue."),l(H,!0),!1);if(e(I))return!0;const U=e(O),Q=e(ie);l(g,Q,!0),l(M,null);try{return U==="parakeet"&&e(v)?(await S("download_parakeet_model",{modelSize:Q}),l(m,{...e(m),[Q]:!0},!0)):U==="moonshine"&&e(u)?(await S("download_moonshine_model",{modelSize:Q}),l(b,{...e(b),[Q]:!0},!0)):(await S("download_model",{modelSize:Q,modelDir:t().engine.whisper_cpp.model_dir}),l(_,{...e(_),[Q]:!0},!0)),Le.clearIssue("model-download"),!0}catch(ne){return l(M,`${ne}`),Le.recordIssue({id:"model-download",step:d,title:`Speech model "${Q}" could not be downloaded — dictation will produce no text.`,detail:`engine=${U} model=${Q} model_dir=${t().engine.whisper_cpp.model_dir||"(default)"} -${ne}`}),!1}finally{l(g,null)}}gs(()=>{e(g)?s.setBlocker(d,`Downloading ${e(g)}…`):e(A)?e(O)==="remote-openai"&&!e(E)?s.setBlocker(d,"Test the remote connection successfully to continue."):e(I)?s.setBlocker(d,null):Le.engineChosen?Le.modelChosen?s.setBlocker(d,null):s.setBlocker(d,"Choose a model size to continue."):s.setBlocker(d,"Choose a transcription engine to continue."):s.setBlocker(d,"Checking which models are already on disk…")});async function ge(){l(A,!1),await Promise.all([P(),he(),B()]),l(A,!0)}Xt(()=>(s.registerGate(d,L),S("moonshine_available").then(U=>l(u,U,!0)).catch(()=>l(u,!1)),S("parakeet_available").then(U=>l(v,U,!0)).catch(()=>l(v,!1)),S("accelerator_support").then(U=>{var Q;return l(f,(Q=U==null?void 0:U.whisper_gpu)!=null?Q:null,!0)}).catch(()=>l(f,null)),ge(),()=>{s.registerGate(d,null),s.setBlocker(d,null)}));function De(U){var Ge,nt;if(U.id==="remote-openai")return{model:{id:((Ge=t().engine.remote_openai)==null?void 0:Ge.model)||"whisper-1",mb:0,speed:.95,accuracy:.95},rows:[{label:"speed",pct:95,value:"network",color:"var(--vx-cyan-0)",dim:!1},{label:"accuracy",pct:95,value:"server",color:"var(--vx-cyan-2)",dim:!1},{label:"RAM",pct:2,value:"offloaded",color:"var(--vx-gold-1)",dim:!1},{label:"VRAM",pct:0,value:"0 MB",color:"var(--vx-gold-0)",dim:!0}],quiet:Hi(12,.95),noisy:Hi(12,.92),quietPct:"server",noisyPct:"server"};const Q=U.id==="parakeet"?t().engine.parakeet.model_size:U.id==="moonshine"?t().engine.moonshine.model_size:t().engine.whisper_cpp.model_size,ne=(nt=U.models.find(Ne=>Ne.id===Q))!=null?nt:U.models[0],Re=U.gpu&&e(ce),at=Math.min(1,ne.speed+(Re?.3:0)),lt=Re?ne.mb*.3:ne.mb,Ee=Re?ne.mb*1.1:0;return{model:ne,rows:[{label:"speed",pct:Math.round(at*100),value:qh(at),color:"var(--vx-cyan-0)",dim:!1},{label:"accuracy",pct:Math.round(ne.accuracy*100),value:sr(ne.accuracy),color:"var(--vx-cyan-2)",dim:!1},{label:"RAM",pct:Math.max(2,Math.min(100,Math.round(lt/3400*100))),value:Bn(lt),color:"var(--vx-gold-1)",dim:!1},{label:"VRAM",pct:Ee?Math.max(2,Math.min(100,Math.round(Ee/3400*100))):0,value:Ee?Bn(Ee):U.gpu?"off":"cpu only",color:"var(--vx-gold-0)",dim:!Ee}],quiet:Hi(12,ne.accuracy),noisy:Hi(12,ne.accuracy*U.noiseRetention),quietPct:sr(ne.accuracy),noisyPct:sr(ne.accuracy*U.noiseRetention)}}var fe=Sg(),G=n(fe),J=i(n(G),2);let xe;var Ie=n(J);let re;var W=i(Ie,2),le=n(W),R=i(n(le),2);let ee;var Oe=n(R);{var je=U=>{var Q=qe("UNAVAILABLE · CPU BUILD");c(U,Q)},Ke=U=>{var Q=qe();w(()=>{var ne;return y(Q,`ON · ${(ne=e(me))!=null?ne:""}`)}),c(U,Q)},_e=U=>{var Q=qe("OFF · CPU");c(U,Q)};k(Oe,U=>{e(f)?e(ce)?U(Ke,1):U(_e,-1):U(je)})}var se=i(le,2),ye=n(se);{var et=U=>{var Q=qe(`Moves whisper.cpp weights from RAM to your GPU: faster, less RAM, uses VRAM. Moonshine is - CPU-native and unaffected.`);c(U,Q)},te=U=>{var Q=qe(`This build has no GPU backend compiled in, so both engines run on the CPU. The Vulkan - download accelerates whisper.cpp; Moonshine is CPU-native either way.`);c(U,Q)};k(ye,U=>{e(f)?U(et):U(te,-1)})}var j=i(G,2);_t(j,21,()=>Ui,ht,(U,Q)=>{const ne=ue(()=>De(e(Q))),Re=ue(()=>e(O)===e(Q).id);var at=hg();let lt;var Ee=i(n(at),2),Ge=n(Ee),nt=n(Ge),Ne=n(nt),it=i(nt,2),dt=n(it),ot=i(Ge,2),Me=n(ot),Ye=i(ot,2);{var rt=h=>{var x=lg();c(h,x)},Z=h=>{var x=og();c(h,x)};k(Ye,h=>{e(Q).id==="moonshine"&&!e(u)?h(rt):e(Q).id==="parakeet"&&!e(v)&&h(Z,1)})}var K=i(Ee,2),pe=n(K);{var We=h=>{var x=dg(),we=i(wt(x),2),Be=n(we),He=i(n(Be),2),Te=n(He),Ce=i(Be,2),Ue=i(n(Ce),2),Xe=n(Ue),Vt=i(Ce,2),Qt=i(n(Vt),2);let ts;var Gt=n(Qt);{var Dt=zt=>{var Yt=qe("✔ Verified");c(zt,Yt)},ps=zt=>{var Yt=qe("⚠️ Untested");c(zt,Yt)};k(Gt,zt=>{e(E)?zt(Dt):zt(ps,-1)})}var es=i(we,2),ys=n(es);let Ps;var Js=n(ys);{var bt=zt=>{var Yt=qe("⚙ Configure Server");c(zt,Yt)},Wt=zt=>{var Yt=qe("⚡ Setup & Test");c(zt,Yt)};k(Js,zt=>{e(E)?zt(bt):zt(Wt,-1)})}var fs=i(es,2);_t(fs,21,()=>e(ne).rows,ht,(zt,Yt)=>{var Is=cg();let Os;var Zs=n(Is),ma=n(Zs),ba=n(ma),ln=i(ma),on=n(ln),cn=i(Zs,2),xt=n(cn);let Mt;w(()=>{var Qe;Os=Se(Is,1,"metric svelte-xv54mf",null,Os,{dim:e(Yt).dim}),y(ba,e(Yt).label),y(on,e(Yt).value),Mt=ds(xt,"",Mt,{width:`${(Qe=e(Yt).pct)!=null?Qe:""}%`,background:e(Yt).color})}),c(zt,Is)}),w(()=>{var zt,Yt,Is;St(He,"title",((zt=t().engine.remote_openai)==null?void 0:zt.endpoint)||"http://localhost:8000/v1"),y(Te,((Yt=t().engine.remote_openai)==null?void 0:Yt.endpoint)||"http://localhost:8000/v1"),y(Xe,((Is=t().engine.remote_openai)==null?void 0:Is.model)||"whisper-1"),ts=Se(Qt,1,"remote-v svelte-xv54mf",null,ts,{"remote-v-ok":e(E),"remote-v-warn":!e(E)}),Ps=Se(ys,1,"vx-btn vx-btn-sm remote-cfg-btn svelte-xv54mf",null,Ps,{"vx-primary":!e(E)})}),z("click",ys,zt=>{zt.stopPropagation(),be("remote-openai"),l(H,!0)}),c(h,x)},Ve=h=>{var x=pg(),we=i(wt(x),2);_t(we,21,()=>e(Q).models,ht,(He,Te)=>{var Ce=vg();let Ue;var Xe=n(Ce),Vt=n(Xe),Qt=i(Xe,2),ts=n(Qt);w((Gt,Dt,ps)=>{Ue=Se(Ce,1,"size svelte-xv54mf",null,Ue,Gt),y(Vt,e(Te).id),y(ts,`${Dt!=null?Dt:""}${ps!=null?ps:""}`)},[()=>({on:V(e(Q).id,e(Te))}),()=>Bn(e(Te).mb),()=>Y(e(Q).id,e(Te))?" ✔":""]),z("click",Ce,Gt=>{Gt.stopPropagation(),ke(e(Q).id,e(Te))}),c(He,Ce)});var Be=i(we,2);_t(Be,21,()=>e(ne).rows,ht,(He,Te)=>{var Ce=ug();let Ue;var Xe=n(Ce),Vt=n(Xe),Qt=n(Vt),ts=i(Vt),Gt=n(ts),Dt=i(Xe,2),ps=n(Dt);let es;w(()=>{var ys;Ue=Se(Ce,1,"metric svelte-xv54mf",null,Ue,{dim:e(Te).dim}),y(Qt,e(Te).label),y(Gt,e(Te).value),es=ds(ps,"",es,{width:`${(ys=e(Te).pct)!=null?ys:""}%`,background:e(Te).color})}),c(He,Ce)}),c(h,x)};k(pe,h=>{e(Q).id==="remote-openai"?h(We):h(Ve,-1)})}var gt=i(K,2),as=n(gt),Ht=n(as),Kt=i(n(Ht)),ft=n(Kt),Ft=i(Ht,2);_t(Ft,21,()=>e(ne).quiet,ht,(h,x)=>{var we=fg();let Be;w(()=>{var He;return Be=ds(we,"",Be,{height:`${(He=e(x).h)!=null?He:""}%`,opacity:e(x).o})}),c(h,we)});var At=i(as,2),Et=n(At),ze=i(n(Et)),Je=n(ze),q=i(Et,2);_t(q,21,()=>e(ne).noisy,ht,(h,x)=>{var we=_g();let Be;w(()=>{var He;return Be=ds(we,"",Be,{height:`${(He=e(x).h)!=null?He:""}%`,opacity:e(x).o})}),c(h,we)}),w(()=>{lt=Se(at,1,"vx-card engine-card svelte-xv54mf",null,lt,{"vx-on":e(Re)}),St(at,"aria-checked",e(Re)),y(Ne,e(Q).glyph),y(dt,e(Q).name),y(Me,e(Q).tagline),y(ft,e(ne).quietPct),y(Je,e(ne).noisyPct)}),z("click",at,()=>{be(e(Q).id),e(Q).id==="remote-openai"&&l(H,!0)}),z("keydown",at,h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),be(e(Q).id),e(Q).id==="remote-openai"&&l(H,!0))}),c(U,at)});var F=i(j,2),ae=n(F);{var C=U=>{var Q=gg(),ne=i(n(Q));w(()=>{var Re;return y(ne,` Downloading ${(Re=e(g))!=null?Re:""} — this can take a few minutes`)}),c(U,Q)},X=U=>{var Q=mg(),ne=n(Q);w(()=>{var Re;return y(ne,`✕ Download failed: ${(Re=e(M))!=null?Re:""}`)}),c(U,Q)},de=U=>{var Q=bg();c(U,Q)},oe=U=>{var Q=$i(),ne=wt(Q);{var Re=lt=>{var Ee=yg(),Ge=n(Ee);w(()=>{var nt;return y(Ge,`✓ Remote engine connected (${(nt=e(ie))!=null?nt:""})`)}),c(lt,Ee)},at=lt=>{var Ee=wg();c(lt,Ee)};k(ne,lt=>{e(E)?lt(Re):lt(at,-1)})}c(U,Q)},Ae=U=>{var Q=kg(),ne=n(Q);w(()=>{var Re;return y(ne,`✓ ${(Re=e(ie))!=null?Re:""} is on disk and ready`)}),c(U,Q)},$e=U=>{var Q=xg();c(U,Q)},tt=U=>{var Q=Tg(),ne=n(Q);w(()=>{var Re;return y(ne,`↓ ${(Re=e(ie))!=null?Re:""} will download when you continue`)}),c(U,Q)};k(ae,U=>{e(g)?U(C):e(M)?U(X,1):e(A)?e(O)==="remote-openai"?U(oe,3):e(I)?U(Ae,4):!Le.engineChosen||!Le.modelChosen?U($e,5):U(tt,-1):U(de,2)})}var st=i(F,2);rg(st,{onSuccess:()=>{l(E,!0)},get isOpen(){return e(H)},set isOpen(U){l(H,U,!0)}}),w(()=>{xe=Se(J,1,"vx-card gpu-toggle svelte-xv54mf",null,xe,{"vx-on":e(ce)}),J.disabled=!e(f),re=Se(Ie,1,"switch svelte-xv54mf",null,re,{on:e(ce)}),ee=Se(R,1,"state svelte-xv54mf",null,ee,{on:e(ce)})}),z("click",J,D),c(a,fe),Rt(),o()}us(["click","keydown"]);var Cg=p("
            "),Ag=p("
            "),Mg=p(''),Pg=p('
            '),Dg=p('
            '),zg=p('+'),Ig=p("
            ",1),Og=p('
            '),Rg=p(' Asking…',1),Lg=p('
            '),Ng=p('
            '),Fg=p(`
            // 02 · first key binding

            How do you want to start talking?

            Pick a gesture, then record the keys. Taps keep your hands free while speaking; holds can't be - left running by accident. Double-taps avoid clashes with shortcuts you already use.

            `);function Vg(a,s){Ot(s,!0);const t=2;let r=T(null),o=T(!1),d=T(null);const u=ue(()=>{var W,le;return(le=(W=e(r))==null?void 0:W.supported_gestures)!=null&&le.length?$n.filter(R=>e(r).supported_gestures.includes(R.id)):$n}),v=ue(()=>$n.length-e(u).length),f=ue(()=>{var W;return((W=e(r))==null?void 0:W.is_active)===!0}),_=ue(()=>!!Le.combo&&Le.combo.length>0&&e(r)!==null&&!e(r).is_active),b=ue(()=>Le.recording&&Kh(Le.held)?"Keep holding and add a regular key — modifiers alone cannot be a shortcut.":null);async function m(){try{l(r,await S("check_hotkey_status"),!0),e(r).is_active&&Le.clearIssue("shortcut-register")}catch(W){console.error("Wizard: failed to read hotkey status:",W)}}function g(){Le.recording=!0,Le.held=[],Le.captureHint=null,S("set_hotkeys_inhibited",{inhibited:!0}).catch(()=>{})}function M(){Le.recording=!1,Le.held=[],S("set_hotkeys_inhibited",{inhibited:!1}).catch(()=>{})}async function A(W){var R;if(W.length===0)return;let le;try{le=await S("check_hotkey_keys",{keys:W})}catch(ee){console.error("Wizard: hotkey validation failed:",ee),Le.combo=[...W];return}le.accepted?(Le.combo=[...W],Le.captureHint=null,await O()):Le.captureHint=(R=le.message)!=null?R:"This key combination cannot be used as a shortcut. Try another."}function H(W){if(!Le.recording)return;W.preventDefault(),W.stopPropagation();const le=Wh(W.key,W.code);if(W.key==="Escape"&&Le.held.length===0){M();return}Le.held.includes(le)||(Le.held=[...Le.held,le])}function E(W){if(!Le.recording)return;W.preventDefault(),W.stopPropagation();const le=[...Le.held];M(),A(le)}async function O(){var W;try{await Le.saveBinding()}catch(le){console.error("Wizard: failed to save binding:",le),l(d,`Could not save the binding: ${le}`),Le.recordIssue({id:"binding-save",step:t,title:"The hotkey binding could not be written — no shortcut will start dictation.",detail:`keys=${((W=Le.combo)!=null?W:[]).join("+")} gesture=${Le.gesture} -${le}`});return}Le.clearIssue("binding-save"),await m()}async function ve(){var W,le,R,ee,Oe,je;l(o,!0),l(d,null);try{l(r,await S("approve_shortcuts"),!0)}catch(Ke){l(d,`${Ke}`),Le.recordIssue({id:"shortcut-register",step:t,title:"Your desktop refused to register the global shortcut.",detail:`backend=${(le=(W=e(r))==null?void 0:W.backend)!=null?le:"unknown"} portal_refused=${(ee=(R=e(r))==null?void 0:R.portal_refused)!=null?ee:"?"} -portal_error=${(je=(Oe=e(r))==null?void 0:Oe.portal_error)!=null?je:"(none)"} -${Ke}`}),await m()}finally{l(o,!1)}}async function ce(){try{await S("open_shortcut_settings")}catch(W){l(d,`${W}`)}}gs(()=>{let W=null;Le.recording?W="Press the keys you want to use.":!Le.combo||Le.combo.length===0?W="Record a key combination first.":e(_)&&(W="Register the shortcut with your desktop to continue."),s.setBlocker(t,W)}),gs(()=>{const W=e(u);W.length>0&&!W.some(le=>le.id===Le.gesture)&&(Le.gesture=W[0].id)}),Xt(()=>{s.registerGate(t,async()=>{var R;return await O(),((R=e(r))==null?void 0:R.is_active)!==!1}),Le.loadBinding(),m();const W=ks("setup-status-changed",()=>void m()),le=setInterval(()=>{Le.recording||m()},3e3);return window.addEventListener("keydown",H,!0),window.addEventListener("keyup",E,!0),()=>{clearInterval(le),W.then(R=>R()).catch(()=>{}),window.removeEventListener("keydown",H,!0),window.removeEventListener("keyup",E,!0),Le.recording&&M(),s.registerGate(t,null),s.setBlocker(t,null)}});const me=ue(()=>{var W,le,R,ee;return Le.recording?{label:"listening for keys",hint:(le=(W=Le.captureHint)!=null?W:e(b))!=null?le:"Hold one or more modifiers, then press a key. Esc to cancel.",tone:"rec"}:Le.combo&&Le.combo.length>0?{label:"binding captured",hint:(R=Le.captureHint)!=null?R:"Click anywhere in this area to record a different combination.",tone:"done"}:{label:"click to record",hint:(ee=Le.captureHint)!=null?ee:"Needs at least one modifier (Ctrl, Alt, Shift or Super) plus a regular key — e.g. Super + Space.",tone:"idle"}});var ie=Fg(),I=i(n(ie),2),V=n(I),Y=n(V);_t(Y,17,()=>e(u),ht,(W,le)=>{const R=ue(()=>Le.gesture===e(le).id);var ee=Mg();let Oe;var je=n(ee),Ke=n(je),_e=n(Ke),se=i(Ke,2),ye=n(se),et=i(je,2),te=n(et),j=i(n(te),2);_t(j,21,()=>e(le).key,ht,(C,X)=>{var de=ue(()=>Cl(e(X),2));let oe=()=>e(de)[0],Ae=()=>e(de)[1];var $e=Cg();let tt,st;w(()=>{tt=Se($e,1,"svelte-1fbfhk3",null,tt,{on:Ae()&&e(R),lit:Ae()}),st=ds($e,"",st,{flex:oe()})}),c(C,$e)});var F=i(te,2),ae=i(n(F),2);_t(ae,21,()=>e(le).mic,ht,(C,X)=>{var de=ue(()=>Cl(e(X),2));let oe=()=>e(de)[0],Ae=()=>e(de)[1];var $e=Ag();let tt,st;w(()=>{tt=Se($e,1,"svelte-1fbfhk3",null,tt,{on:Ae()&&e(R),lit:Ae()}),st=ds($e,"",st,{flex:oe()})}),c(C,$e)}),w(()=>{Oe=Se(ee,1,"vx-card gesture svelte-1fbfhk3",null,Oe,{"vx-on":e(R)}),y(_e,e(le).name),y(ye,e(le).desc)}),z("click",ee,()=>Le.gesture=e(le).id),c(W,ee)});var be=i(Y,2);{var ke=W=>{var le=Pg(),R=n(le);w(()=>{var ee;return y(R,`${(ee=e(v))!=null?ee:""} gesture${e(v)===1?"":"s"} hidden — this desktop's shortcut - backend only tells VoxCtrl that a shortcut fired, so it cannot time a hold.`)}),c(W,le)};k(be,W=>{e(v)>0&&W(ke)})}var D=i(V,2),P=n(D);let he;var B=n(P);{var L=W=>{var le=Dg();c(W,le)};k(B,W=>{Le.recording&&W(L)})}var ge=i(B,2),De=i(n(ge),1,!0),fe=i(ge,2);_t(fe,21,()=>Le.displayKeys,ht,(W,le,R)=>{var ee=Ig(),Oe=wt(ee);let je;var Ke=n(Oe),_e=i(Oe,2);{var se=ye=>{var et=zg();c(ye,et)};k(_e,ye=>{R{je=Se(Oe,1,"vx-keycap",null,je,{"vx-hot":Le.recording||e(me).tone==="done"}),y(Ke,ye)},[()=>Tl(e(le))]),c(W,ee)});var G=i(fe,2);let J;var xe=n(G),Ie=i(P,2);{var re=W=>{var le=Ng();let R;var ee=n(le),Oe=n(ee),je=i(ee,2),Ke=n(je),_e=n(Ke),se=i(Ke,2),ye=n(se);{var et=de=>{var oe=qe("The binding is registered system-wide. Continue to choose an overlay.");c(de,oe)},te=de=>{var oe=qe();w(()=>y(oe,e(r).portal_error)),c(de,oe)},j=de=>{var oe=qe(`Wayland desktops ask you to confirm global shortcuts. Click below and approve the - dialog your desktop shows — you come straight back here.`);c(de,oe)};k(ye,de=>{var oe;e(f)?de(et):(oe=e(r))!=null&&oe.portal_error?de(te,1):de(j,-1)})}var F=i(se,2);{var ae=de=>{var oe=Og(),Ae=n(oe);w(()=>y(Ae,e(d))),c(de,oe)};k(F,de=>{e(d)&&de(ae)})}var C=i(je,2);{var X=de=>{var oe=Lg(),Ae=n(oe),$e=i(Ae,2),tt=n($e);{var st=Q=>{var ne=Rg();c(Q,ne)},U=Q=>{var ne=qe("Register →");c(Q,ne)};k(tt,Q=>{e(o)?Q(st):Q(U,-1)})}w(()=>$e.disabled=e(o)),z("click",Ae,ce),z("click",$e,ve),c(de,oe)};k(C,de=>{e(f)||de(X)})}w(()=>{var de,oe;R=Se(le,1,"sys svelte-1fbfhk3",null,R,{ok:e(f)}),y(Oe,e(f)?"✓":"⌬"),y(_e,e(f)?`Shortcuts are live (${(oe=(de=e(r))==null?void 0:de.backend)!=null?oe:"ready"})`:"Your desktop still needs to approve the shortcut")}),c(W,le)};k(Ie,W=>{Le.combo&&Le.combo.length>0&&W(re)})}w(()=>{he=Se(P,1,"recorder svelte-1fbfhk3",null,he,{rec:e(me).tone==="rec",done:e(me).tone==="done"}),y(De,e(me).label),J=Se(G,1,"rec-hint svelte-1fbfhk3",null,J,{bad:!!Le.captureHint}),y(xe,e(me).hint)}),z("click",P,()=>Le.recording?M():g()),c(a,ie),Rt()}us(["click"]);const $g="/assets/blue_wave-DGfyQFFo.webm",Bg="/assets/mono_bars-1wA0h3Fz.webm",qg="/assets/pulse-Cdnh-rAb.webm",jg="/assets/spectrum-CLEHMZrI.webm",Wg="/assets/terminal-CvV88uWw.webm",Ug="/assets/vinyl-BG1f8NO1.webm",Hg="/assets/voice_card-BZZeHAB9.webm",Kg="/assets/waveform-DUI2x_EP.webm",Gg="/assets/blue_wave-OqjJ-fxD.webp",Yg="/assets/mono_bars-CPLx02Ku.webp",Jg="/assets/pulse-ESYJH4j2.webp",Zg="/assets/spectrum-DV9agKUG.webp",Xg="/assets/terminal-DhrByqCl.webp",Qg="/assets/vinyl-BfHn3C6g.webp",em="/assets/voice_card-QnCU8RiM.webp",tm="/assets/waveform-B5-owbWT.webp";var sm=p('
            '),am=p('
            '),nm=Uo(''),im=p('
            '),rm=p('
            '),lm=p('
            '),om=p('
            > listening
            '),cm=p(''),dm=p('',2),vm=p("
            ",1);function Wl(a,s){Ot(s,!0);let t=Nt(s,"seed",3,1),r=Nt(s,"showClip",3,!0);const o=Object.assign({"../../assets/overlays/blue_wave.webm":$g,"../../assets/overlays/mono_bars.webm":Bg,"../../assets/overlays/pulse.webm":qg,"../../assets/overlays/spectrum.webm":jg,"../../assets/overlays/terminal.webm":Wg,"../../assets/overlays/vinyl.webm":Ug,"../../assets/overlays/voice_card.webm":Hg,"../../assets/overlays/waveform.webm":Kg}),d=Object.assign({"../../assets/overlays/blue_wave.webp":Gg,"../../assets/overlays/mono_bars.webp":Yg,"../../assets/overlays/pulse.webp":Jg,"../../assets/overlays/spectrum.webp":Zg,"../../assets/overlays/terminal.webp":Xg,"../../assets/overlays/vinyl.webp":Qg,"../../assets/overlays/voice_card.webp":em,"../../assets/overlays/waveform.webp":tm});function u(D,P){var B;const he=Object.entries(D).find(([L])=>L.endsWith(`/${P}`));return(B=he==null?void 0:he[1])!=null?B:null}const v=(()=>{if(typeof document>"u")return!0;const D=document.createElement("video");return D.canPlayType('video/webm; codecs="av01.0.05M.08"')!==""||D.canPlayType("video/webm")!==""})(),f=ue(()=>r()&&v?u(o,`${s.styleId}.webm`):null),_=ue(()=>u(d,`${s.styleId}.webp`));let b=T(!1);gs(()=>{e(f),l(b,!1)});const m=ue(()=>Array.from({length:14},(D,P)=>{const he=.3+.7*Math.abs(Math.sin(t()*2.3+P*1.3));return{h:Math.round(he*100),delay:((P*.11+t()*.07)%1.1).toFixed(2),dur:(.9+P*5%4*.15).toFixed(2)}})),g=ue(()=>s.styleId==="pulse"?"ring":s.styleId==="vinyl"?"needle":s.styleId==="terminal"?"terminal":s.styleId==="waveform"||s.styleId==="blue_wave"?"wave":"bars"),M=ue(()=>s.styleId==="mono_bars");var A=vm(),H=wt(A);let E;var O=n(H);{var ve=D=>{var P=am();_t(P,21,()=>e(m).slice(0,s.styleId==="mono_bars"?5:14),ht,(he,B)=>{var L=sm();let ge;w(()=>{var De,fe,G;return ge=ds(L,"",ge,{height:`${(De=e(B).h)!=null?De:""}%`,"animation-delay":`${(fe=e(B).delay)!=null?fe:""}s`,"animation-duration":`${(G=e(B).dur)!=null?G:""}s`})}),c(he,L)}),c(D,P)},ce=D=>{var P=nm();c(D,P)},me=D=>{var P=im();c(D,P)},ie=D=>{var P=rm();c(D,P)},I=D=>{var P=om(),he=i(n(P),2);_t(he,21,()=>e(m).slice(0,10),ht,(B,L)=>{var ge=lm();let De;w(()=>{var fe;return De=ds(ge,"",De,{"animation-delay":`${(fe=e(L).delay)!=null?fe:""}s`})}),c(B,ge)}),c(D,P)};k(O,D=>{e(g)==="bars"?D(ve):e(g)==="wave"?D(ce,1):e(g)==="ring"?D(me,2):e(g)==="needle"?D(ie,3):D(I,-1)})}var V=i(H,2);{var Y=D=>{var P=cm();w(()=>St(P,"src",e(_))),c(D,P)};k(V,D=>{e(_)&&D(Y)})}var be=i(V,2);{var ke=D=>{var P=dm();let he;P.muted=!0,w(()=>{var B;he=Se(P,1,"clip svelte-y6l73v",null,he,{ready:e(b)}),St(P,"src",e(f)),St(P,"poster",(B=e(_))!=null?B:void 0)}),Ra("playing",P,()=>l(b,!0)),Ra("error",P,()=>l(b,!1)),c(D,P)};k(be,D=>{e(f)&&D(ke)})}w(()=>E=Se(H,1,"preview svelte-y6l73v",null,E,{mono:e(M)})),c(a,A),Rt()}var um=p(''),pm=p(''),fm=p(`
            // 03 · on-screen overlay

            Show a signal while listening?

            The overlay appears the moment your hotkey fires and shows live mic level plus the active - target — so you know VoxCtrl is hearing you, and where the words are going. Turn it off for - a silent setup.

            `);function _m(a,s){Ot(s,!0);const t=()=>ls(Lt,"$config",r),[r,o]=Ms(),d=ue(()=>t().ui.show_overlay),u=ue(()=>t().ui.overlay_style),v=ue(()=>t().ui.overlay_position),f=ue(()=>{var fe;return(fe=Rn.find(G=>G.id===e(u)))!=null?fe:Rn[0]}),_=ue(()=>{var fe;return(fe={top:16,center:46,bottom:76}[e(v)])!=null?fe:46});function b(fe){Ca(G=>{G.ui.show_overlay=fe})}function m(fe){Ca(G=>{G.ui.overlay_style=fe,G.ui.show_overlay=!0})}function g(fe){Ca(G=>{G.ui.overlay_position=fe})}var M=fm(),A=n(M),H=i(n(A),2),E=n(H);let O;var ve=i(E,2);let ce;var me=i(A,2);let ie;var I=n(me),V=n(I),Y=n(V),be=i(V,2);_t(be,21,()=>Rn,ht,(fe,G,J)=>{var xe=um();let Ie;var re=n(xe),W=n(re);{let et=ue(()=>e(G).id===e(u));Wl(W,{seed:J+1,get styleId(){return e(G).id},get showClip(){return e(et)}})}var le=i(re,2),R=n(le),ee=n(R),Oe=n(ee),je=i(ee,2),Ke=n(je),_e=i(R,2);let se;var ye=n(_e);w(()=>{Ie=Se(xe,1,"vx-card style-card svelte-ek86vh",null,Ie,{"vx-on":e(G).id===e(u)}),y(Oe,e(G).name),y(Ke,e(G).meta),se=Se(_e,1,"style-glyph svelte-ek86vh",null,se,{on:e(G).id===e(u)}),y(ye,e(G).glyph)}),z("click",xe,()=>m(e(G).id)),c(fe,xe)});var ke=i(I,2),D=n(ke),P=n(D),he=i(D,2),B=i(n(he),4);let L;var ge=n(B);{let fe=ue(()=>Rn.indexOf(e(f))+1);Wl(ge,{get seed(){return e(fe)},get styleId(){return e(f).id},showClip:!0})}var De=i(he,2);_t(De,21,()=>$h,ht,(fe,G)=>{var J=pm();let xe;var Ie=n(J),re=n(Ie),W=i(Ie,1,!0);w(()=>{xe=Se(J,1,"pos svelte-ek86vh",null,xe,{on:e(G).id===e(v)}),y(re,e(G).glyph),y(W,e(G).label)}),z("click",J,()=>g(e(G).id)),c(fe,J)}),w(()=>{var fe,G,J;O=Se(E,1,"vx-card mode svelte-ek86vh",null,O,{"vx-on":e(d)}),ce=Se(ve,1,"vx-card mode svelte-ek86vh",null,ce,{"off-on":!e(d)}),ie=Se(me,1,"body svelte-ek86vh",null,ie,{muted:!e(d)}),y(Y,`style · ${(fe=Rn.length)!=null?fe:""} built in`),y(P,`position · ${(G=e(v))!=null?G:""}`),L=ds(B,"",L,{top:`${(J=e(_))!=null?J:""}%`})}),z("click",E,()=>b(!0)),z("click",ve,()=>b(!1)),c(a,M),Rt(),o()}us(["click"]);var hm=p('+'),gm=p('
            ',1),mm=p('
            '),bm=p('
            '),ym=p('
            ✓
            It works.
            '),wm=p(`
            // 04 · live test

            Say something.

            Click into the box, then your binding and speak. Your words land where - the cursor is.

            ▸ test.txt
            Nothing happening? The overlay and tray icon show whether VoxCtrl heard the key. You can - continue and come back to this from Settings → Hotkeys at any time.
            `);function km(a,s){Ot(s,!0);const t=()=>ls(Lt,"$config",o),r=()=>ls(xs,"$status",o),[o,d]=Ms();let u=T(null),v=T(""),f=T(0),_=T("idle"),b=0,m=0;const g=ec(28),M=ue(()=>Le.gestureInfo),A=ue(()=>{var ee;return(ee=Le.combo)!=null?ee:[]}),H=ue(()=>{var ee;return t().engine.backend==="remote-openai"?`Remote Speech Engine · ${((ee=t().engine.remote_openai)==null?void 0:ee.model)||"whisper-1"}`:t().engine.backend==="parakeet"?`Parakeet TDT · ${t().engine.parakeet.model_size}`:t().engine.backend==="moonshine"?`Moonshine · ${t().engine.moonshine.model_size}`:`whisper.cpp · ${t().engine.whisper_cpp.model_size} · ${t().engine.whisper_cpp.device==="cpu"?"cpu":"gpu/auto"}`}),E=ue(()=>({idle:"waiting for hotkey",recording:"recording",transcribing:"transcribing",success:"delivered"})[e(_)]);let O=!1;gs(()=>{const ee=r();ee.recording&&!O?(l(_,"recording"),b=performance.now(),m=e(v).length):!ee.recording&&ee.processing&&e(_)==="recording"&&l(_,"transcribing"),O=ee.recording});function ve(){if(!e(u))return;const ee=e(u).value,Oe=ee.length>m&&ee.trim().length>0;l(v,ee,!0),Oe&&(e(_)==="recording"||e(_)==="transcribing")&&(l(f,Math.max(1,Math.round(performance.now()-b)),!0),l(_,"success"))}function ce(){l(_,"idle"),l(v,""),m=0,e(u)&&(e(u).value="",e(u).focus())}Xt(()=>{setTimeout(()=>{var ee;return(ee=e(u))==null?void 0:ee.focus()},60)});var me=wm(),ie=n(me),I=n(ie),V=i(n(I),4),Y=i(n(V)),be=n(Y),ke=i(I,2),D=n(ke);_t(D,17,()=>e(A),ht,(ee,Oe,je)=>{var Ke=gm(),_e=wt(Ke),se=n(_e),ye=i(_e,2);{var et=te=>{var j=hm();c(te,j)};k(ye,te=>{jey(se,te),[()=>Tl(e(Oe))]),c(ee,Ke)});var P=i(D,2),he=n(P),B=i(ie,2);let L;var ge=n(B),De=i(n(ge),2),fe=i(n(De),1,!0),G=i(ge,2);ml(G,ee=>l(u,ee),()=>e(u));var J=i(G,2);{var xe=ee=>{var Oe=bm();_t(Oe,21,()=>g,ht,(je,Ke)=>{var _e=mm();let se;w(()=>{var ye,et;return se=ds(_e,"",se,{"animation-duration":`${(ye=e(Ke).d)!=null?ye:""}s`,"animation-delay":`${(et=e(Ke).dl)!=null?et:""}s`})}),c(je,_e)}),c(ee,Oe)};k(J,ee=>{(e(_)==="recording"||e(_)==="transcribing")&&ee(xe)})}var Ie=i(J,2);{var re=ee=>{var Oe=ym(),je=n(Oe),Ke=i(n(je),4),_e=n(Ke),se=i(Ke,2);w(()=>{var ye;return y(_e,`Transcribed${t().engine.backend==="remote-openai"?" via Remote Speech Engine":" on-device"} in ${(ye=e(f))!=null?ye:""} ms · delivered via inject`)}),z("click",se,ce),c(ee,Oe)};k(Ie,ee=>{e(_)==="success"&&ee(re)})}var W=i(B,2),le=i(n(W),2),R=n(le);w(()=>{var ee;y(be,e(M).verb),y(he,e(M).name),L=Se(B,1,"box svelte-oqvphh",null,L,{live:e(_)==="recording"||e(_)==="transcribing",won:e(_)==="success"}),Se(De,1,`state ${(ee=e(_))!=null?ee:""}`,"svelte-oqvphh"),y(fe,e(E)),y(R,e(H))}),z("input",G,ve),c(a,me),Rt(),d()}us(["input","click"]);var xm=p('
            '),Tm=p('■ Stop ',1),Sm=p('▶ play sample',1),Em=p('Speaking sample aloud…'),Cm=p('Downloading voice…'),Am=p('Locked (token required)'),Mm=p('Ready for playback'),Pm=p('Download voice first'),Dm=p('
            ⚠ Non-commercial license:
            '),zm=p(''),Im=p('
            bundled · zero download
            '),Om=p(''),Rm=p('
            '),Lm=p(''),Nm=p('
            '),Fm=p('Needs a HuggingFace access token — enter one above to unlock this voice.'),Vm=p(' '),$m=p(`Already downloaded — the token is only needed to fetch the weights, so this voice - works without one.`),Bm=p('This build was compiled without the `inflect-micro` feature, so this engine cannot\n synthesize.'),qm=p('
            '),jm=p('
            '),Wm=p(`
            // 05 · text to speech · optional

            Should VoxCtrl talk back?

            Agents can stream replies back through a response pipe and VoxCtrl speaks them aloud. Richer - voices need bigger models and more time per sentence; lighter engines answer instantly.

            HuggingFace access token optional — speeds up downloads if you have one
            `);function Um(a,s){Ot(s,!0);const t=()=>ls(Lt,"$config",r),[r,o]=Ms(),d=5,u=ue(()=>t().tts.enabled),v=ue(()=>t().tts.engine),f=ue(()=>{var h;return(h=ka.find(x=>x.id===e(v)))!=null?h:ka[0]});let _=T(kt({espeak:!0})),b=T(kt({})),m=T(null),g=T(kt({})),M=T(!0),A=T(null);const H=ue(()=>!!e(A)),E=ue(()=>{var h,x;return(x=e(A))!=null?x:((h=t().tts.hf_token)!=null?h:"").trim()}),O=ue(()=>e(E).length>0),ve=ka.filter(h=>h.needsHfToken);function ce(h){e(H)||(l(ie,!1),Ca(x=>{x.tts.hf_token=h.trim()?h.trim():null}))}function me(h){const x=ka.find(we=>we.id===h);return!!(x!=null&&x.needsHfToken)&&!e(O)&&!e(_)[h]}let ie=T(!1);const I="hf-token-rejected";function V(h){return`${h}`.toLowerCase().includes(I)}let Y=T(null),be=T(null);const ke=ec(12);let D=null,P=null,he=0,B=!1;const L=300,ge=1500,De=3e4;function fe(){D&&(clearTimeout(D),D=null),P&&(clearInterval(P),P=null)}function G(){l(Y,null),fe()}async function J(){if(!e(Y))return;let h;try{h=await S("get_status")}catch(x){console.error("Wizard: status poll failed:",x);return}if(h&&xs.set(h),h!=null&&h.speaking){B=!0;return}(B||Date.now()-he>ge)&&G()}function xe(h,x){const we={...e(g)};x?we[h]=x:delete we[h],l(g,we,!0)}async function Ie(h){var we,Be,He,Te,Ce,Ue;const x=Ln(Lt);try{switch(h){case"espeak":return!0;case"piper":return await S("check_voice_downloaded",{voiceName:x.tts.voice,voiceDir:x.tts.voice_dir});case"pocket_tts":return await S("check_pocket_tts_ready",{voice:x.tts.pocket_tts.voice,voiceDir:x.tts.pocket_tts.voice_dir});case"inflect_micro":return await S("check_inflect_micro_downloaded",{modelDir:(Be=(we=x.tts.inflect_micro)==null?void 0:we.model_dir)!=null?Be:""});case"breeze_tts_2":return await S("check_breeze_tts_2_ready",{modelDir:(Te=(He=x.tts.breeze_tts_2)==null?void 0:He.model_dir)!=null?Te:""});case"vox_cpm_2":return await S("check_vox_cpm_2_ready",{modelDir:(Ue=(Ce=x.tts.vox_cpm_2)==null?void 0:Ce.model_dir)!=null?Ue:""})}}catch(Xe){return console.error("Wizard: TTS readiness check failed for",h,Xe),!1}}async function re(){await Promise.all(ka.map(async h=>{l(b,{...e(b),[h.id]:!0},!0);const x=await Ie(h.id);l(_,{...e(_),[h.id]:x},!0),l(b,{...e(b),[h.id]:!1},!0)}))}async function W(h){var we,Be,He,Te,Ce,Ue,Xe,Vt,Qt,ts,Gt,Dt;if(e(m))return;l(m,h,!0),xe(h,null);const x=Ln(Lt);try{switch(h){case"piper":await S("download_voice",{voiceName:x.tts.voice,voiceDir:x.tts.voice_dir});break;case"pocket_tts":await S("download_pocket_tts",{voice:(we=x.tts.pocket_tts)==null?void 0:we.voice,voiceDir:(Be=x.tts.pocket_tts)==null?void 0:Be.voice_dir,hfToken:x.tts.hf_token});break;case"inflect_micro":await S("download_inflect_micro",{modelDir:(Te=(He=x.tts.inflect_micro)==null?void 0:He.model_dir)!=null?Te:""});break;case"breeze_tts_2":await S("download_breeze_tts_2",{modelDir:(Ue=(Ce=x.tts.breeze_tts_2)==null?void 0:Ce.model_dir)!=null?Ue:"",hfToken:x.tts.hf_token});break;case"vox_cpm_2":await S("download_vox_cpm_2",{modelDir:(Vt=(Xe=x.tts.vox_cpm_2)==null?void 0:Xe.model_dir)!=null?Vt:"",hfToken:x.tts.hf_token});break;case"espeak":break}l(ie,!1),l(_,{...e(_),[h]:!0},!0),Le.clearIssue(`tts-download-${h}`)}catch(ps){const es=ka.find(Ps=>Ps.id===h),ys=V(ps);ys&&l(ie,!0),xe(h,ys?`HuggingFace did not accept that access token, so ${(Qt=es==null?void 0:es.name)!=null?Qt:h} could not be downloaded. Check the token is a valid read token, and that the same account has accepted the licence at ${(ts=es==null?void 0:es.licenceUrl)!=null?ts:"huggingface.co"}.`:`${ps}`),Le.recordIssue({id:`tts-download-${h}`,step:d,title:ys?`${(Gt=es==null?void 0:es.name)!=null?Gt:h} could not be downloaded — HuggingFace did not accept the access token.`:`${(Dt=es==null?void 0:es.name)!=null?Dt:h} could not be downloaded — speech output will stay silent.`,detail:`engine=${h} -${ps}`})}finally{l(m,null)}}const le=["pocket_tts","breeze_tts_2","vox_cpm_2"],R=ue(()=>le.includes(e(v))),ee=ue(()=>e(v)==="pocket_tts"?t().tts.pocket_tts.gpu:e(v)==="breeze_tts_2"?t().tts.breeze_tts_2.gpu:e(v)==="vox_cpm_2"?t().tts.vox_cpm_2.gpu:!1);function Oe(h){Ca(x=>{e(v)==="pocket_tts"?x.tts.pocket_tts.gpu=h:e(v)==="breeze_tts_2"?x.tts.breeze_tts_2.gpu=h:e(v)==="vox_cpm_2"&&(x.tts.vox_cpm_2.gpu=h)})}function je(h){me(h)||Ca(x=>{x.tts.enabled=!0,x.tts.engine=h})}function Ke(h){Ca(x=>{x.tts.enabled=h})}async function _e(h){if(e(Y)){G(),S("stop_tts").catch(()=>{});return}je(h),l(be,null),l(Y,h,!0),he=Date.now(),B=!1,fe(),P=setInterval(()=>void J(),L),D=setTimeout(()=>{G(),l(be,"The sample never finished playing. The engine may have failed silently — check Settings → TTS, or try another voice.")},De);const x=Ln(Lt),we=ka.find(He=>He.id===h),Be=h==="piper"?x.tts.voice:h==="pocket_tts"?x.tts.pocket_tts.voice:null;try{await S("save_config",{newConfig:x}),await S("speak_text",{text:`Hi this is ${we.name} speaking from VoxCtrl`,voice:Be})}catch(He){l(be,`${He}`),G(),Le.recordIssue({id:`tts-speak-${h}`,step:d,title:`${we.name} failed to speak the sample.`,detail:`engine=${h} voice=${Be!=null?Be:"(fixed)"} -${He}`})}}gs(()=>{var h;if(!e(u)){s.setBlocker(d,null);return}if(e(m)){s.setBlocker(d,`Downloading ${(h=ka.find(x=>x.id===e(m)))==null?void 0:h.name}…`);return}if(me(e(v))){s.setBlocker(d,"Enter a HuggingFace access token, or pick a voice that does not need one.");return}if(e(v)==="inflect_micro"&&!e(M)){s.setBlocker(d,"This build has no Inflect Micro engine — pick another voice or skip.");return}s.setBlocker(d,e(_)[e(v)]?null:"Download the voice you picked, or turn speech output off to continue.")}),Xt(()=>{re(),S("hf_token_env").then(x=>l(A,x&&x.trim()?x.trim():null,!0)).catch(()=>l(A,null)),S("inflect_micro_available").then(x=>l(M,x,!0)).catch(()=>l(M,!1));const h=[ks("tts-playback-end",()=>G()),ks("tts-error",x=>{l(be,x.payload,!0),G(),Le.recordIssue({id:"tts-runtime",step:d,title:"The text-to-speech engine reported an error while speaking.",detail:`engine=${Ln(Lt).tts.engine} -${x.payload}`})})];return()=>{s.setBlocker(d,null),fe();for(const x of h)x.then(we=>we()).catch(()=>{});S("stop_tts").catch(()=>{})}});const se=ue(()=>!!e(_)[e(v)]),ye=ue(()=>me(e(v))),et=ue(()=>e(v)==="inflect_micro"&&!e(M)),te=ue(()=>e(se)&&!e(et)&&!e(ye)&&!e(m));var j=Wm(),F=n(j),ae=i(n(F),2),C=n(ae);let X;var de=i(C,2);let oe;var Ae=i(F,2),$e=n(Ae),tt=n($e);let st;var U=n(tt);{var Q=h=>{var x=Tm(),we=i(wt(x),4);_t(we,21,()=>ke,ht,(Be,He)=>{var Te=xm();let Ce;w(()=>{var Ue,Xe;return Ce=ds(Te,"",Ce,{"animation-duration":`${(Ue=e(He).d)!=null?Ue:""}s`,"animation-delay":`${(Xe=e(He).dl)!=null?Xe:""}s`})}),c(Be,Te)}),c(h,x)},ne=h=>{var x=Sm();c(h,x)};k(U,h=>{e(Y)?h(Q):h(ne,-1)})}var Re=i(tt,2),at=n(Re),lt=n(at),Ee=i(at,2),Ge=n(Ee);{var nt=h=>{var x=Em();c(h,x)},Ne=h=>{var x=Cm();c(h,x)},it=h=>{var x=Am();c(h,x)},dt=h=>{var x=Mm();c(h,x)},ot=h=>{var x=Pm();c(h,x)};k(Ge,h=>{e(Y)?h(nt):e(m)?h(Ne,1):e(ye)?h(it,2):e(se)?h(dt,3):h(ot,-1)})}var Me=i($e,2);let Ye;var rt=i(n(Me),2),Z=n(rt),K=i(Z,2);let pe;var We=n(K);{var Ve=h=>{var x=qe("did not accept this token");c(h,x)},gt=h=>{var x=qe("HF_TOKEN environment variable");c(h,x)},as=h=>{var x=qe("✓ token saved");c(h,x)},Ht=h=>{var x=qe("token required for gated voices");c(h,x)};k(We,h=>{e(ie)?h(Ve):e(H)?h(gt,1):e(O)?h(as,2):h(Ht,-1)})}var Kt=i(Ae,2);{var ft=h=>{var x=Dm(),we=i(n(x));w(()=>{var Be;return y(we,` ${(Be=e(f).name)!=null?Be:""} weights are released under a research/non-commercial license. Commercial - use requires a separate license from the model's publisher.`)}),c(h,x)};k(Kt,h=>{e(u)&&e(f).nonCommercial&&!e(_)[e(v)]&&h(ft)})}var Ft=i(Kt,2);{var At=h=>{var x=zm(),we=n(x),Be=i(we,2),He=n(Be);w(()=>{var Te;jd(we,e(ee)),y(He,`Vulkan GPU acceleration for ${(Te=e(f).name)!=null?Te:""}`)}),z("change",we,Te=>Oe(Te.currentTarget.checked)),c(h,x)};k(Ft,h=>{e(u)&&e(R)&&h(At)})}var Et=i(Ft,2);let ze;_t(Et,21,()=>ka,ht,(h,x)=>{const we=ue(()=>e(u)&&e(v)===e(x).id),Be=ue(()=>!!e(_)[e(x).id]),He=ue(()=>e(m)===e(x).id),Te=ue(()=>e(x).id==="inflect_micro"&&!e(M)),Ce=ue(()=>me(e(x).id));var Ue=qm();let Xe;var Vt=n(Ue),Qt=n(Vt),ts=n(Qt),Gt=n(ts),Dt=i(ts,2),ps=n(Dt),es=i(Qt,2),ys=n(es),Ps=n(ys),Js=i(Vt,2),bt=n(Js);{var Wt=xt=>{var Mt=Im();c(xt,Mt)},fs=xt=>{var Mt=Om();c(xt,Mt)},zt=xt=>{var Mt=Rm(),Qe=n(Mt);w(pt=>y(Qe,`✓ Downloaded (${pt!=null?pt:""})`),[()=>Bn(e(x).mb)]),c(xt,Mt)},Yt=xt=>{var Mt=Lm(),Qe=n(Mt);w(pt=>{Mt.disabled=!!e(m)||e(Te)||e(Ce),y(Qe,`↓ Download ${pt!=null?pt:""}`)},[()=>Bn(e(x).mb)]),z("click",Mt,pt=>{pt.stopPropagation(),W(e(x).id)}),c(xt,Mt)};k(bt,xt=>{e(x).mb===0?xt(Wt):e(He)?xt(fs,1):e(Be)?xt(zt,2):xt(Yt,-1)})}var Is=i(Js,2);_t(Is,21,()=>[{label:"quality",pct:Math.round(e(x).quality*100),value:sr(e(x).quality),color:"var(--vx-cyan-0)"},{label:"speed",pct:Math.round(e(x).speed*100),value:jh(e(x).speed),color:"var(--vx-cyan-2)"},{label:"model size",pct:Bh(e(x).mb),value:Bn(e(x).mb),color:"var(--vx-gold-1)"}],ht,(xt,Mt)=>{var Qe=Nm(),pt=n(Qe),$t=n(pt),Jt=n($t),Cs=i($t),ws=n(Cs),Ws=i(pt,2),Ts=n(Ws);let Us;w(()=>{var ia;y(Jt,e(Mt).label),y(ws,e(Mt).value),Us=ds(Ts,"",Us,{width:`${(ia=e(Mt).pct)!=null?ia:""}%`,background:e(Mt).color})}),c(xt,Qe)});var Os=i(Is,2),Zs=n(Os);{var ma=xt=>{var Mt=Fm();c(xt,Mt)},ba=xt=>{var Mt=Vm(),Qe=n(Mt);w(()=>y(Qe,e(g)[e(x).id])),c(xt,Mt)},ln=xt=>{var Mt=$m();c(xt,Mt)},on=xt=>{var Mt=Bm();c(xt,Mt)},cn=xt=>{var Mt=qe();w(()=>y(Mt,e(x).note)),c(xt,Mt)};k(Zs,xt=>{e(Ce)?xt(ma):e(g)[e(x).id]?xt(ba,1):e(x).needsHfToken&&!e(O)&&e(Be)?xt(ln,2):e(Te)?xt(on,3):xt(cn,-1)})}w(()=>{Xe=Se(Ue,1,"vx-card card svelte-1yghr3b",null,Xe,{"vx-on":e(we),locked:e(Ce)}),St(Ue,"aria-disabled",e(Ce)),St(Ue,"aria-checked",e(we)),y(Gt,e(x).name),y(ps,e(x).kind),y(Ps,e(we)?"✓":"")}),z("click",Ue,()=>je(e(x).id)),z("keydown",Ue,xt=>{(xt.key==="Enter"||xt.key===" ")&&(xt.preventDefault(),je(e(x).id))}),c(h,Ue)});var Je=i(Et,2);{var q=h=>{var x=jm(),we=n(x);w(()=>{var Be;return y(we,`⚠ ${(Be=e(be))!=null?Be:""}`)}),c(h,x)};k(Je,h=>{e(be)&&h(q)})}w(h=>{var x;X=Se(C,1,"vx-card mode svelte-1yghr3b",null,X,{"vx-on":e(u)}),oe=Se(de,1,"vx-card mode svelte-1yghr3b",null,oe,{"off-on":!e(u)}),st=Se(tt,1,"vx-btn audition-btn svelte-1yghr3b",null,st,{playing:!!e(Y)}),tt.disabled=!e(te)&&!e(Y),St(tt,"title",e(Y)?"Stop":e(se)?"Play a sample":e(ye)?"Needs a HuggingFace access token":"Download this voice first"),y(lt,`Audition: ${(x=e(f).name)!=null?x:""}`),Ye=Se(Me,1,"hf-bar svelte-1yghr3b",null,Ye,h),Z.readOnly=e(H),St(Z,"title",e(H)?"Set by the HF_TOKEN environment variable":"Enter a HuggingFace read token for gated models"),yr(Z,e(E)),pe=Se(K,1,"hf-state svelte-1yghr3b",null,pe,{ok:e(O)&&!e(ie),bad:e(ie)}),ze=Se(Et,1,"grid svelte-1yghr3b",null,ze,{muted:!e(u)})},[()=>({needed:e(u)&&(e(ie)||ve.some(h=>me(h.id)))})]),z("click",C,()=>Ke(!0)),z("click",de,()=>Ke(!1)),z("click",tt,()=>{e(Y)?(G(),S("stop_tts").catch(()=>{})):_e(e(v))}),z("input",Z,h=>ce(h.currentTarget.value)),c(a,j),Rt(),o()}us(["click","input","change","keydown"]);const Hm="/assets/record_off-DqBdWxcg.png";var Km=p('VoxCtrl is ready.',1),Gm=p('Setup is incomplete.',1),Ym=p('
            '),Jm=Uo(''),Zm=p('
            '),Xm=p('
            click me ↓
            '),Qm=p(`
            where everything lives
            Every choice is editable
            Nothing you picked here is locked in. Settings holds the same options plus the ones the - wizard skipped — output targets, per-binding LLM cleanup, audio devices and the MCP server.
            • ⌁ Hotkeys gestures & bindings
            • ∇ Engine model & device
            • ⌬ Visual overlay style & position
            • ⊕ TTS voice output
            • ⊳ Output Commands where text goes
            `),eb=p(''),tb=p('
             
            '),sb=p(''),ab=p('
            '),nb=p('
            What still needs fixing
            '),ib=p('

            system tray
            Find VoxCtrl in the tray
            Click the icon to open Settings, diagnostics, or toggle TTS memory. Try it:
            📶 🔊 ᛒ
            ⌃
            ');function rb(a,s){Ot(s,!0);const t=()=>ls(Lt,"$config",r),[r,o]=Ms();let d=T(!1),u=T(!1),v=T(!0),f=T(!1),_=T(null),b=T(null),m=T(!1);async function g(){l(m,!0);try{l(b,await S("get_setup_status"),!0)}catch(F){console.error("Wizard: could not read setup status:",F),l(b,null)}finally{l(m,!1)}}const M=ue(()=>{var ae;if(!e(b))return[];const F=[];return e(b).hotkeys_active||F.push({id:"sys-hotkeys",step:2,title:"No global shortcut is active — pressing your hotkey will do nothing.",detail:`backend=${e(b).hotkeys.backend} portal_refused=${e(b).hotkeys.portal_refused} -portal_error=${(ae=e(b).hotkeys.portal_error)!=null?ae:"(none)"}`}),!e(b).model_ready&&!e(b).model_auto_downloads&&F.push({id:"sys-model",step:1,title:`Speech model "${e(b).model_size}" is not on disk — dictation will record but produce no text.`,detail:`model_size=${e(b).model_size} model_ready=false auto_downloads=${e(b).model_auto_downloads}`}),e(b).missing_injection_tool&&F.push({id:"sys-inject",step:4,title:`"${e(b).missing_injection_tool}" is not installed — VoxCtrl cannot type text into other windows.`,detail:`missing_injection_tool=${e(b).missing_injection_tool} -install with: ${e(b).manual_package_commands||"(unknown package manager)"}`}),F}),A=ue(()=>{const F=new Set(Le.issues.map(ae=>ae.id));return[...Le.issues,...e(M).filter(ae=>!F.has(ae.id))]}),H=ue(()=>e(A).length===0),E=ue(()=>{var F;return((F=Le.combo)!=null?F:[]).map(Tl).join(" + ")||"not set"}),O=ue(()=>{var F,ae,C,X,de;return[{k:"engine",v:t().engine.backend==="remote-openai"?`Remote Speech Engine · ${((F=t().engine.remote_openai)==null?void 0:F.model)||"whisper-1"}`:t().engine.backend==="parakeet"?`Parakeet TDT · ${t().engine.parakeet.model_size}`:t().engine.backend==="moonshine"?`Moonshine · ${t().engine.moonshine.model_size}`:`whisper.cpp · ${t().engine.whisper_cpp.model_size}`},{k:"hotkey",v:`${e(E)} · ${Le.gestureInfo.name}`},{k:"overlay",v:t().ui.show_overlay?`${(C=(ae=Rn.find(oe=>oe.id===t().ui.overlay_style))==null?void 0:ae.name)!=null?C:t().ui.overlay_style} · ${t().ui.overlay_position}`:"off"},{k:"voice output",v:t().tts.enabled?(de=(X=ka.find(oe=>oe.id===t().tts.engine))==null?void 0:X.name)!=null?de:t().tts.engine:"off"}]}),ve=ue(()=>{var F,ae,C;return["VoxCtrl setup report",`engine: ${t().engine.backend} / ${t().engine.backend==="remote-openai"?((F=t().engine.remote_openai)==null?void 0:F.model)||"whisper-1":t().engine.backend==="parakeet"?t().engine.parakeet.model_size:t().engine.backend==="moonshine"?t().engine.moonshine.model_size:t().engine.whisper_cpp.model_size}`,`device: ${t().engine.whisper_cpp.device}`,`hotkey: ${e(E)} (${Le.gesture})`,`overlay: ${t().ui.show_overlay?`${t().ui.overlay_style} / ${t().ui.overlay_position}`:"off"}`,`tts: ${t().tts.enabled?t().tts.engine:"off"}`,`shortcut backend: ${(C=(ae=e(b))==null?void 0:ae.hotkeys.backend)!=null?C:"unknown"}`,"",...e(A).map(X=>{var de;return`[${(de=xa[X.step])!=null?de:"setup"}] ${X.title} -${X.detail} -`})].join(` -`)});async function ce(){try{await navigator.clipboard.writeText(e(ve)),l(u,!0),setTimeout(()=>l(u,!1),2e3)}catch(F){console.error("Wizard: clipboard write failed:",F)}}async function me(){l(f,!0),l(_,null);try{const F=await S("wizard_failure_log");try{await navigator.clipboard.writeText(F)}catch(de){console.error("Wizard: clipboard write failed:",de)}const ae=encodeURIComponent("VoxCtrl Bug Report"),C=encodeURIComponent(`Paste the log contents below and I will get back to you with a fix ASAP. - -`),X=`mailto:jrufer@gmail.com?subject=${ae}&body=${C}`;await S("send_bug_report_email",{mailtoUrl:X,attachmentPath:null}),l(_,"Log copied to your clipboard — paste it into the email that just opened.")}catch(F){l(_,`Could not open your email app: ${F}`)}finally{l(f,!1)}}async function ie(){try{await S("open_settings_tab",{tab:"general"})}catch(F){console.error("Wizard: could not open Settings:",F)}}Xt(()=>{var F;g(),((F=t().tts)==null?void 0:F.memory_mode)!==void 0&&l(v,t().tts.memory_mode==="on_demand")});function I(){l(v,!e(v)),Lt.update(F=>(F.tts&&(F.tts.memory_mode=e(v)?"on_demand":"always_loaded"),F))}var V=ib(),Y=n(V),be=n(Y);let ke;var D=n(be),P=i(be,2),he=n(P),B=i(P,2),L=n(B);{var ge=F=>{var ae=Km();c(F,ae)},De=F=>{var ae=Gm();c(F,ae)};k(L,F=>{e(H)?F(ge):F(De,-1)})}var fe=i(B,2),G=n(fe);{var J=F=>{var ae=qe(`This window can close. VoxCtrl keeps running quietly in your system tray and listens for - your hotkey in any app.`);c(F,ae)},xe=F=>{var ae=qe();w(()=>{var C;return y(ae,`Sorry about that — ${(C=e(A).length)!=null?C:""} problem${e(A).length===1?"":"s"} came up during setup - and will stop VoxCtrl working end to end. Your choices are still saved. The details are on - the right — fix them here or in Settings, or send us the log and we'll take it from there.`)}),c(F,ae)};k(G,F=>{e(H)?F(J):F(xe,-1)})}var Ie=i(fe,2);_t(Ie,21,()=>e(O),ht,(F,ae)=>{var C=Ym(),X=n(C),de=n(X),oe=i(X,2),Ae=n(oe);w(()=>{y(de,e(ae).k),y(Ae,e(ae).v)}),c(F,C)});var re=i(Y,2),W=i(n(re),6),le=n(W);{var R=F=>{var ae=Zm(),C=n(ae),X=i(C,2),de=i(X,2),oe=n(de),Ae=n(oe);let $e;var tt=n(Ae);{var st=Q=>{var ne=Jm();c(Q,ne)};k(tt,Q=>{e(v)&&Q(st)})}var U=i(de,4);w(()=>$e=Se(Ae,1,"chk svelte-ujy0nl",null,$e,{on:e(v)})),z("click",C,ie),z("click",X,()=>{l(d,!1),g()}),z("click",de,I),z("click",U,()=>l(d,!1)),c(F,ae)};k(le,F=>{e(d)&&F(R)})}var ee=i(le,2),Oe=i(n(ee),6),je=n(Oe);let Ke;var _e=n(je),se=i(je,2);{var ye=F=>{var ae=Xm();c(F,ae)};k(se,F=>{e(d)||F(ye)})}var et=i(re,2);{var te=F=>{var ae=Qm(),C=i(n(ae),8);z("click",C,ie),c(F,ae)},j=F=>{var ae=nb(),C=n(ae),X=n(C),de=n(X),oe=n(de),Ae=i(X,2),$e=n(Ae);{var tt=Ne=>{var it=eb();c(Ne,it)};k($e,Ne=>{e(m)&&Ne(tt)})}var st=i(C,2);_t(st,21,()=>e(A),Ne=>Ne.id,(Ne,it)=>{var dt=tb(),ot=n(dt),Me=n(ot),Ye=n(Me),rt=i(Me,2),Z=n(rt),K=i(ot,2),pe=n(K);w(()=>{var We;y(Ye,(We=xa[e(it).step])!=null?We:"setup"),y(Z,e(it).title),y(pe,e(it).detail)}),c(Ne,dt)});var U=i(st,2),Q=n(U),ne=n(Q),Re=i(Q,2),at=i(Re,2),lt=n(at);{var Ee=Ne=>{var it=sb();c(Ne,it)};k(lt,Ne=>{e(f)&&Ne(Ee)})}var Ge=i(U,2);{var nt=Ne=>{var it=ab(),dt=n(it);w(()=>y(dt,e(_))),c(Ne,it)};k(Ge,Ne=>{e(_)&&Ne(nt)})}w(()=>{var Ne;y(oe,`problems · ${(Ne=e(A).length)!=null?Ne:""}`),Ae.disabled=e(m),y(ne,e(u)?"✓ Copied":"Copy diagnostics"),at.disabled=e(f)}),z("click",Ae,g),z("click",Q,ce),z("click",Re,ie),z("click",at,me),c(F,ae)};k(et,F=>{e(H)?F(te):F(j,-1)})}w(()=>{ke=Se(be,1,"tick svelte-ujy0nl",null,ke,{warn:!e(H)}),y(D,e(H)?"✓":"!"),y(he,e(H)?"// configured":"// finished with problems"),Ke=Se(je,1,"tray-btn svelte-ujy0nl",null,Ke,{on:e(d)}),St(_e,"src",Hm)}),z("click",je,()=>l(d,!e(d))),c(a,V),Rt(),o()}us(["click"]);var lb=p('
            Loading your settings…
            '),ob=p(''),cb=p(''),db=p('
            '),vb=p('
            '),ub=p(' '),pb=p(' Working…',1),fb=p('
            '),_b=p('
            voxctrl // setup
            ');function hb(a,s){Ot(s,!0);const t=()=>ls(Lt,"$config",o),r=()=>ls(lr,"$configLoaded",o),[o,d]=Ms();let u={};function v(j,F){F?u[j]=F:delete u[j]}let f=T(kt({}));function _(j,F){var ae;((ae=e(f)[j])!=null?ae:null)!==F&&l(f,{...e(f),[j]:F},!0)}let b=T(!1),m=T(null);const g=ue(()=>Le.step),M=ue(()=>{var j;return(j=e(f)[e(g)])!=null?j:null}),A=ue(()=>e(g)===0?"Get started →":e(g)===5&&!t().tts.enabled?"Skip →":e(g)===xa.length-1?Le.issues.length>0?"Finish anyway":"Finish":"Continue →");async function H(){if(e(b))return;if(l(m,null),e(g)===xa.length-1){await ve();return}const j=u[e(g)];if(j){l(b,!0);try{if(!await j())return}catch(F){l(m,`${F}`);return}finally{l(b,!1)}}Le.goTo(e(g)+1)}function E(){e(b)||(l(m,null),Le.goTo(e(g)-1))}let O=T(!1);async function ve(){if(!e(O)){l(O,!0);try{await S("save_config",{newConfig:t()}),await S("finish_setup_wizard",{openSettings:!1})}catch(j){l(m,`Could not finish setup: ${j}`),l(O,!1)}}}async function ce(){await ve()}function me(j){Le.recordIssue({id:`uncaught-${Le.issues.filter(F=>F.id.startsWith("uncaught-")).length}`,step:Le.step,title:"Something went wrong during setup that the wizard did not expect.",detail:j})}Xt(()=>{const j=ae=>{var C;me(((C=ae.error)==null?void 0:C.stack)||ae.message||String(ae))},F=ae=>{var C,X;me(((C=ae.reason)==null?void 0:C.stack)||((X=ae.reason)==null?void 0:X.message)||String(ae.reason))};return window.addEventListener("error",j),window.addEventListener("unhandledrejection",F),S("wizard_error_test_active").then(ae=>{ae&&(Le.recordIssue({id:"simulated-test-failure",step:4,title:"Simulated failure (--simulate-wizard-error) — the live test did not detect any transcribed audio.",detail:"This is a test fixture, not a real failure: it exists so the wizard's error screen (apology, log capture, copy-to-clipboard, email-us) can be verified without needing a genuinely broken hotkey or microphone."}),Le.visited=xa.length-1,Le.step=xa.length-1)}).catch(ae=>console.error("Wizard: could not check for the error-test flag:",ae)),()=>{window.removeEventListener("error",j),window.removeEventListener("unhandledrejection",F)}});var ie=_b(),I=n(ie),V=n(I),Y=i(V,8),be=n(Y),ke=i(I,2);let D;var P=n(ke);{var he=j=>{var F=lb();c(j,F)},B=j=>{Qh(j)},L=j=>{Eg(j,{registerGate:v,setBlocker:_})},ge=j=>{Vg(j,{registerGate:v,setBlocker:_})},De=j=>{_m(j,{})},fe=j=>{km(j,{})},G=j=>{Um(j,{setBlocker:_})},J=j=>{rb(j,{})};k(P,j=>{r()?e(g)===0?j(B,1):e(g)===1?j(L,2):e(g)===2?j(ge,3):e(g)===3?j(De,4):e(g)===4?j(fe,5):e(g)===5?j(G,6):j(J,-1):j(he)})}var xe=i(ke,2),Ie=n(xe),re=n(Ie);{var W=j=>{var F=ob();w(()=>F.disabled=e(b)),z("click",F,E),c(j,F)},le=j=>{var F=cb();w(()=>F.disabled=e(O)),z("click",F,ce),c(j,F)};k(re,j=>{e(g)>0?j(W):j(le,-1)})}var R=i(Ie,2);_t(R,21,()=>xa,ht,(j,F,ae)=>{var C=vb();let X;var de=n(C);let oe;var Ae=n(de),$e=n(Ae),tt=i(Ae,2),st=n(tt),U=i(de,2);{var Q=ne=>{var Re=db(),at=n(Re);let lt;w(()=>lt=ds(at,"",lt,{width:ae{ae{X=ds(C,"",X,{flex:aeLe.visited||e(b),y($e,ne),y(st,e(F))},[()=>aeLe.goTo(ae)),c(j,C)});var ee=i(R,2),Oe=n(ee);{var je=j=>{var F=ub(),ae=n(F);w(()=>{St(F,"title",e(M)),y(ae,e(M))}),c(j,F)};k(Oe,j=>{e(M)&&!e(b)&&j(je)})}var Ke=i(Oe,2),_e=n(Ke);{var se=j=>{var F=pb();c(j,F)},ye=j=>{var F=qe();w(()=>y(F,e(A))),c(j,F)};k(_e,j=>{e(b)||e(O)?j(se):j(ye,-1)})}var et=i(xe,2);{var te=j=>{var F=fb(),ae=n(F),C=n(ae),X=i(ae,2);w(()=>{var de;return y(C,`⚠ ${(de=e(m))!=null?de:""}`)}),z("click",X,()=>l(m,null)),c(j,F)};k(et,j=>{e(m)&&j(te)})}w(()=>{var j;St(V,"src",wr),y(be,`step ${e(g)+1} / ${(j=xa.length)!=null?j:""} · every choice editable later in Settings`),D=Se(ke,1,"vx-screen svelte-18pn5kx",null,D,{"vx-leaving":Le.leaving}),Ke.disabled=e(b)||e(O)||!!e(M)}),z("click",Ke,H),c(a,ie),Rt(),d()}us(["click"]);function Ul(a){if(!a||a<0)return"";if(a<1024)return`${a} B`;const s=["KB","MB","GB"];let t=a/1024,r=0;for(;t>=1024&&r

            '),bb=p('

            '),yb=p('

            Asking GitHub for the latest release…

            '),wb=p('

            Nothing to install. Check again any time from Settings → General.

            '),kb=p(`

            What's new

             
            `),xb=p('

            '),Tb=p('

            VoxCtrl keeps running until the download is verified. Nothing is replaced before then.

            '),Sb=p('

            The new version is installed. VoxCtrl is closing and will start again in a moment.

            '),Eb=p('

            '),Cb=p('

            Your current version is untouched and still working.

            ',1),Ab=p(" ",1),Mb=p('

            '),Pb=p(''),Db=p(''),zb=p(''),Ib=p(''),Ob=p('
            ',1),Rb=p(''),Lb=p('

            ');function Nb(a,s){Ot(s,!0);let t=T("checking"),r=T(null),o=T(""),d=T(null),u=T(null),v=[];const f=ue(()=>gb(e(d)));Xt(async()=>{v.push(await ks("update-progress",re=>{l(d,re.payload,!0)})),v.push(await ks("update-installed",()=>{l(t,"installed")})),v.push(await ks("update-failed",re=>{l(t,"failed"),l(u,re.payload,!0)})),await _()}),br(()=>{v.forEach(re=>re())});async function _(){try{let re=await S("get_pending_update");re.update||(re=await S("check_for_update")),l(o,re.current_version,!0),l(r,re.update,!0),l(t,re.update?"available":"up-to-date",!0)}catch(re){l(t,"failed"),l(u,`${re}`)}}async function b(){var re;if((re=e(r))!=null&&re.can_self_update){l(t,"installing"),l(u,null),l(d,{downloaded:0,total:e(r).download_size},!0);try{await S("install_update")}catch(W){l(t,"failed"),l(u,`${W}`)}}}async function m(){await S("dismiss_update")}async function g(){var re,W;try{await Xo((W=(re=e(r))==null?void 0:re.release_url)!=null?W:"https://github.com/JRufer/VoxCtrl/releases/latest")}catch(le){console.error("Could not open the release page:",le)}}var M=Lb(),A=n(M),H=n(A),E=n(H),O=i(E,2),ve=n(O),ce=n(ve);{var me=re=>{var W=qe("VoxCtrl is up to date");c(re,W)},ie=re=>{var W=qe();w(()=>{var le,R;return y(W,`Restarting into ${(R=(le=e(r))==null?void 0:le.version)!=null?R:""}`)}),c(re,W)},I=re=>{var W=qe();w(()=>{var le,R;return y(W,`Updating to ${(R=(le=e(r))==null?void 0:le.version)!=null?R:""}`)}),c(re,W)},V=re=>{var W=qe();w(()=>{var le;return y(W,`VoxCtrl ${(le=e(r).version)!=null?le:""} is available`)}),c(re,W)},Y=re=>{var W=qe("Checking for updates…");c(re,W)};k(ce,re=>{e(t)==="up-to-date"?re(me):e(t)==="installed"?re(ie,1):e(t)==="installing"?re(I,2):e(r)?re(V,3):re(Y,-1)})}var be=i(ve,2);{var ke=re=>{var W=mb(),le=n(W);w(()=>{var R,ee;return y(le,`You have ${(R=e(r).current_version)!=null?R:""} — ${(ee=e(r).version)!=null?ee:""} is the latest release.`)}),c(re,W)},D=re=>{var W=bb(),le=n(W);w(()=>{var R;return y(le,`Version ${(R=e(o))!=null?R:""} is the latest release.`)}),c(re,W)};k(be,re=>{e(r)&&e(t)!=="up-to-date"?re(ke):e(t)==="up-to-date"&&re(D,1)})}var P=i(H,2);{var he=re=>{var W=yb();c(re,W)},B=re=>{var W=wb();c(re,W)},L=re=>{var W=Ab(),le=wt(W);{var R=te=>{var j=kb(),F=i(n(j),2),ae=n(F);w(()=>y(ae,e(r).notes)),c(te,j)};k(le,te=>{e(r).notes&&te(R)})}var ee=i(le,2);{var Oe=te=>{var j=xb(),F=n(j);w(()=>y(F,e(r).unsupported_reason)),c(te,j)};k(ee,te=>{!e(r).can_self_update&&e(r).unsupported_reason&&te(Oe)})}var je=i(ee,2);{var Ke=te=>{var j=Tb(),F=n(j);let ae;var C=n(F),X=i(F,2),de=n(X);{var oe=$e=>{var tt=qe();w(()=>{var st,U;return y(tt,`Downloading ${(U=(st=e(r).asset_name)!=null?st:"the update")!=null?U:""}…`)}),c($e,tt)},Ae=$e=>{var tt=qe();w(st=>{var U;return y(tt,`Downloading — ${(U=e(f))!=null?U:""}% of ${st!=null?st:""}`)},[()=>{var st,U;return Ul((U=(st=e(d))==null?void 0:st.total)!=null?U:e(r).download_size)}]),c($e,tt)};k(de,$e=>{e(f)===null?$e(oe):$e(Ae,-1)})}w(()=>{ae=Se(F,1,"bar svelte-15mrihi",null,ae,{indeterminate:e(f)===null}),ds(C,e(f)===null?"":`width: ${e(f)}%`)}),c(te,j)},_e=te=>{var j=Sb();c(te,j)},se=te=>{var j=Eb(),F=n(j);w(ae=>y(F,`VoxCtrl will download ${ae!=null?ae:""}, verify it against the checksum - GitHub published, replace itself and restart. Your settings, models and voices are not - touched.`),[()=>Ul(e(r).download_size)]),c(te,j)};k(je,te=>{e(t)==="installing"?te(Ke):e(t)==="installed"?te(_e,1):e(r).can_self_update&&te(se,2)})}var ye=i(je,2);{var et=te=>{var j=Cb(),F=wt(j),ae=n(F);w(()=>y(ae,e(u))),c(te,j)};k(ye,te=>{e(t)==="failed"&&e(u)&&te(et)})}c(re,W)},ge=re=>{var W=Mb(),le=n(W);w(()=>y(le,e(u))),c(re,W)};k(P,re=>{e(t)==="checking"?re(he):e(t)==="up-to-date"?re(B,1):e(r)?re(L,2):e(t)==="failed"&&e(u)&&re(ge,3)})}var De=i(P,2),fe=n(De);{var G=re=>{var W=Pb();w(()=>W.disabled=e(t)==="installing"),z("click",W,m),c(re,W)},J=re=>{var W=Db();z("click",W,m),c(re,W)},xe=re=>{var W=Ob(),le=wt(W),R=n(le),ee=i(le,2),Oe=n(ee),je=i(Oe,2);{var Ke=se=>{var ye=zb();z("click",ye,b),c(se,ye)},_e=se=>{var ye=Ib();z("click",ye,g),c(se,ye)};k(je,se=>{e(r).can_self_update?se(Ke):se(_e,-1)})}z("click",R,g),z("click",Oe,m),c(re,W)},Ie=re=>{var W=Rb();z("click",W,m),c(re,W)};k(fe,re=>{e(t)==="installing"||e(t)==="installed"?re(G):e(t)==="up-to-date"?re(J,1):e(r)?re(xe,2):re(Ie,-1)})}w(()=>St(E,"src",wr)),c(a,M),Rt()}us(["click"]);function Fb(a){const s=window.location.pathname;function t(){return s.startsWith("/overlay")?"overlay":s.startsWith("/udev-warning")?"udev-warning":s.startsWith("/wizard")?"wizard":s.startsWith("/update")?"update":"settings"}const r=t();r==="overlay"&&(document.documentElement.classList.add("overlay-window"),document.body.classList.add("overlay-window"));var o=$i(),d=wt(o);{var u=m=>{X_(m,{})},v=m=>{Rh(m,{})},f=m=>{hb(m,{})},_=m=>{Nb(m,{})},b=m=>{w_(m,{})};k(d,m=>{r==="overlay"?m(u):r==="udev-warning"?m(v,1):r==="wizard"?m(f,2):r==="update"?m(_,3):m(b,-1)})}c(a,o)}Ad(Fb,{target:document.getElementById("app")}); diff --git a/dist/assets/index-bVHMrVES.css b/dist/assets/index-bVHMrVES.css deleted file mode 100644 index 9f1148e7..00000000 --- a/dist/assets/index-bVHMrVES.css +++ /dev/null @@ -1 +0,0 @@ -@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial}}}.btn-action.svelte-da8msw{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-da8msw:hover{border-color:var(--text-muted);background-color:var(--border)}.hint.error.svelte-da8msw{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.svelte-da8msw:disabled{cursor:default;opacity:.6}.link.svelte-da8msw{cursor:pointer;border-style:var(--tw-border-style);padding:calc(var(--spacing,.25rem) * 0);color:inherit;text-underline-offset:2px;background-color:#0000;border-width:0;text-decoration-line:underline}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}.custom-select-wrapper.svelte-1heock4{flex:2;width:100%;min-width:190px;position:relative}.custom-select-trigger.svelte-1heock4{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-right:calc(var(--spacing,.25rem) * 9);text-align:left;--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text);--tw-shadow:0 4px 12px var(--tw-shadow-color,#00000026);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));-webkit-user-select:none;user-select:none;background:var(--surface2) url("data:image/svg+xml;utf8,") no-repeat right 12px center;background-size:10px}.custom-select-trigger.svelte-1heock4:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.custom-select-trigger.svelte-1heock4:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 12%,transparent)}}.custom-select-trigger.svelte-1heock4:hover{background-color:var(--color-obsidian-700)}.custom-select-trigger.svelte-1heock4:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-select-trigger.svelte-1heock4:disabled{cursor:not-allowed;opacity:.5;--tw-translate-y:calc(var(--spacing,.25rem) * 0)!important;translate:var(--tw-translate-x) var(--tw-translate-y)!important}.custom-dropdown-menu.svelte-1heock4{z-index:2000;gap:calc(var(--spacing,.25rem) * .5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 1);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex;overflow-y:auto}.custom-dropdown-item.svelte-1heock4{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);text-align:left;color:var(--text);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;background-color:#0000;border-style:none;font-size:13px;transition-duration:.15s}.custom-dropdown-item.svelte-1heock4:hover{background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.svelte-1heock4:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 4%,transparent)}}.custom-dropdown-item.selected.svelte-1heock4{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.selected.svelte-1heock4{background-color:color-mix(in oklab,var(--accent2) 10%,transparent)}}.custom-dropdown-item.selected.svelte-1heock4{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--accent2)}.custom-dropdown-item.svelte-1heock4:disabled{cursor:not-allowed;opacity:.4}.custom-dropdown-item.svelte-1heock4:disabled:hover{background-color:#0000}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-duration:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-leading:initial}}}.model-status-container.svelte-nfi4ak{margin-bottom:calc(var(--spacing,.25rem) * 3);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);min-height:42px;padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);align-items:center;font-size:13px;display:flex}.status-downloaded.svelte-nfi4ak{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-downloading.svelte-nfi4ak{color:var(--accent2)}.status-checking.svelte-nfi4ak{color:var(--text-muted)}.status-missing-wrapper.svelte-nfi4ak{justify-content:space-between;align-items:center;width:100%;display:flex}.status-missing.svelte-nfi4ak{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-download.svelte-nfi4ak{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}.btn-download.svelte-nfi4ak:hover{background-color:var(--accent2)}.field-input-error.svelte-nfi4ak{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.field-input-error.svelte-nfi4ak:focus{border-color:var(--color-red-500,oklch(63.7% .237 25.331));--tw-shadow:0 0 0 2px var(--tw-shadow-color,#ef444426), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field-error-msg.svelte-nfi4ak{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5);color:var(--color-red-400,oklch(70.4% .191 22.216))}.test-row.svelte-nfi4ak{margin-top:calc(var(--spacing,.25rem) * 4);align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-wrap:wrap;display:flex}.btn-test.svelte-nfi4ak{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding-inline:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}@media (hover:hover){.btn-test.svelte-nfi4ak:hover{background-color:var(--accent2)}}.btn-test.svelte-nfi4ak:disabled{cursor:not-allowed;opacity:.5}.status-pill.svelte-nfi4ak{border-radius:var(--radius);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500)}.status-pill.success.svelte-nfi4ak{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-nfi4ak{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 30%,transparent)}}.status-pill.success.svelte-nfi4ak{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-nfi4ak{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.status-pill.success.svelte-nfi4ak{color:var(--color-emerald-300,oklch(84.5% .143 164.978))}.status-pill.error.svelte-nfi4ak{border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-nfi4ak{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 30%,transparent)}}.status-pill.error.svelte-nfi4ak{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-nfi4ak{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 15%,transparent)}}.status-pill.error.svelte-nfi4ak{color:var(--color-red-300,oklch(80.8% .114 19.571))}.discovered-models.svelte-nfi4ak{margin-bottom:calc(var(--spacing,.25rem) * 3);align-items:center;gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}.model-tags.svelte-nfi4ak{align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);flex-wrap:wrap;display:flex}.tag-btn.svelte-nfi4ak{cursor:pointer;border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));border-radius:.25rem}@media (hover:hover){.tag-btn.svelte-nfi4ak:hover{background-color:var(--border);color:var(--color-white,#fff)}}.tag-btn.active.svelte-nfi4ak{border-color:var(--accent);background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.tag-btn.active.svelte-nfi4ak{background-color:color-mix(in oklab,var(--accent) 10%,transparent)}}.tag-btn.active.svelte-nfi4ak{color:var(--accent)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-tracking:initial;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}.val.svelte-1msnq7i{text-align:right;min-width:36px;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.vu-meter-container.svelte-1msnq7i{margin-block:calc(var(--spacing,.25rem) * 1);margin-bottom:calc(var(--spacing,.25rem) * 3);gap:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 1);flex-direction:column;display:flex}.vu-meter-info.svelte-1msnq7i{align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em);text-transform:uppercase;font-size:10px;display:flex}.vu-label.svelte-1msnq7i{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text-muted)}.vu-status-dot.svelte-1msnq7i{height:calc(var(--spacing,.25rem) * 1.5);width:calc(var(--spacing,.25rem) * 1.5);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));background-color:#444}.vu-status-dot.active.svelte-1msnq7i{--tw-shadow:0 0 8px var(--tw-shadow-color,#39ff14);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#39ff14}.vu-status-text.svelte-1msnq7i{color:var(--text);opacity:.7;margin-left:auto}.vu-meter-bar-wrapper.svelte-1msnq7i{box-sizing:border-box;height:calc(var(--spacing,.25rem) * 3.5);background-color:#0006;width:100%;position:relative}@supports (color:color-mix(in lab,red,red)){.vu-meter-bar-wrapper.svelte-1msnq7i{background-color:color-mix(in oklab,var(--color-black,#000) 40%,transparent)}}.vu-meter-bar-wrapper.svelte-1msnq7i{padding:3px}.vu-meter-bar.svelte-1msnq7i{gap:2px;width:100%;height:100%;display:flex;position:relative}.vu-segment.svelte-1msnq7i{background-color:#ffffff0d;flex:1;height:100%}@supports (color:color-mix(in lab,red,red)){.vu-segment.svelte-1msnq7i{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.vu-segment.svelte-1msnq7i{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:50ms;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:50ms;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.vu-segment.active.svelte-1msnq7i{--tw-shadow:0 0 4px var(--tw-shadow-color,#39ff144d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#39ff14}.vu-segment.active.orange.svelte-1msnq7i{--tw-shadow:0 0 4px var(--tw-shadow-color,#ff6d0080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#ff6d00}.vu-peak-marker.svelte-1msnq7i{pointer-events:none;top:calc(var(--spacing,.25rem) * -.5);bottom:calc(var(--spacing,.25rem) * -.5);--tw-shadow:0 0 6px var(--tw-shadow-color,#ffab00);width:2px;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:left;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:50ms;--tw-ease:linear;background-color:#ffab00;transition-duration:50ms;transition-timing-function:linear;position:absolute}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-leading:initial;--tw-tracking:initial}}}.modal-backdrop.svelte-oc07pw{inset:calc(var(--spacing,.25rem) * 0);z-index:1000;background-color:#0009;justify-content:center;align-items:center;display:flex;position:fixed}@supports (color:color-mix(in lab,red,red)){.modal-backdrop.svelte-oc07pw{background-color:color-mix(in oklab,var(--color-black,#000) 60%,transparent)}}.modal-backdrop.svelte-oc07pw{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.target-modal-backdrop.svelte-oc07pw{z-index:1100!important}.modal.svelte-oc07pw{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);width:90%;max-width:500px;max-height:85vh;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex}.modal-header.svelte-oc07pw{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);justify-content:space-between;align-items:center;display:flex}.modal-header.svelte-oc07pw h3:where(.svelte-oc07pw){margin:calc(var(--spacing,.25rem) * 0);--tw-font-weight:var(--font-weight-bold,700);font-size:15px;font-weight:var(--font-weight-bold,700)}.close-btn.svelte-oc07pw{cursor:pointer;--tw-border-style:none;font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));color:var(--text-muted);background-color:#0000;border-style:none}.close-btn.svelte-oc07pw:hover{color:var(--text)}.modal-body.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 3.5);padding:calc(var(--spacing,.25rem) * 5);flex-direction:column;display:flex;overflow-y:auto}.modal-footer.svelte-oc07pw{justify-content:flex-end;gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);display:flex}.morph-section.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 2.5);border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:1px;border-color:var(--border);background-color:#ffffff05;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.morph-section.svelte-oc07pw{background-color:color-mix(in oklab,var(--color-white,#fff) 2%,transparent)}}.morph-section.svelte-oc07pw{padding:calc(var(--spacing,.25rem) * 3)}.morph-section.svelte-oc07pw h5:where(.svelte-oc07pw),.processing-toggles.svelte-oc07pw h5:where(.svelte-oc07pw){margin:calc(var(--spacing,.25rem) * 0);margin-bottom:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);text-transform:uppercase}.processing-toggles.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding-top:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}.checkbox-field.svelte-oc07pw{cursor:pointer;align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted);display:flex}.checkbox-field.svelte-oc07pw input[type=checkbox]:where(.svelte-oc07pw){cursor:pointer}.checkbox-field.svelte-oc07pw:hover{color:var(--text)}.btn-action.svelte-oc07pw{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-oc07pw:hover{border-color:var(--text-muted);background-color:var(--border)}.btn-action.small.svelte-oc07pw{padding:calc(var(--spacing,.25rem) * 1);padding-inline:calc(var(--spacing,.25rem) * 2);font-size:10px}.btn-action.svelte-oc07pw:disabled{cursor:not-allowed;opacity:.5}.chat-actions.svelte-oc07pw{align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.chat-status.svelte-oc07pw{margin-top:calc(var(--spacing,.25rem) * 1.5);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);display:block}.chat-status.ok.svelte-oc07pw{color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.chat-status.bad.svelte-oc07pw{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.primary.svelte-oc07pw{--tw-border-style:none;background-color:var(--accent);color:var(--color-white,#fff);border-style:none}.btn-action.primary.svelte-oc07pw:hover{opacity:.9}.full-width-input.svelte-oc07pw{width:100%!important}textarea.svelte-oc07pw{resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--text);--tw-shadow:inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}textarea.svelte-oc07pw:hover{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){textarea.svelte-oc07pw:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 15%,transparent)}}textarea.svelte-oc07pw:hover{background-color:var(--color-obsidian-900)}textarea.svelte-oc07pw:focus{border-color:var(--accent2);background-color:var(--color-obsidian-950);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field.col.svelte-oc07pw{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;width:100%}.mcp-container.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 1.5);flex-direction:column;display:flex}.field-label-row.svelte-oc07pw{margin-bottom:calc(var(--spacing,.25rem) * .5);justify-content:space-between;align-items:center;width:100%;display:flex}.field-title.svelte-oc07pw{--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text)}.field-tag.svelte-oc07pw{border-style:var(--tw-border-style);border-width:1px;border-color:var(--accent2);border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-oc07pw{border-color:color-mix(in oklab,var(--accent2) 25%,transparent)}}.field-tag.svelte-oc07pw{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-oc07pw{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.field-tag.svelte-oc07pw{padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-leading:1;--tw-font-weight:var(--font-weight-bold,700);font-size:9px;line-height:1;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em);color:var(--accent2);text-transform:uppercase}p.hint.svelte-oc07pw{margin:calc(var(--spacing,.25rem) * 0);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}p.hint.svelte-oc07pw code:where(.svelte-oc07pw){border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);border-radius:.25rem;font-size:10px}.validation-error-msg.svelte-oc07pw{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-red-400,oklch(70.4% .191 22.216));display:block}.longer-display-label.svelte-oc07pw{min-width:255px!important}.animate-fade-in.svelte-oc07pw{animation:.2s cubic-bezier(.16,1,.3,1) fade-in}@keyframes svelte-oc07pw-fade-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-duration:initial;--tw-leading:initial;--tw-font-weight:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-tracking:initial}}}.backend-banner.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 1);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.backend-banner.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.backend-banner.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;transition-duration:.15s}.backend-banner.private.svelte-w4d8v7{border-color:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.backend-banner.private.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 25%,transparent)}}.backend-banner.private.svelte-w4d8v7{background-color:#00bb7f0f}@supports (color:color-mix(in lab,red,red)){.backend-banner.private.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 6%,transparent)}}.backend-banner.warn.svelte-w4d8v7{border-color:#f99c0040}@supports (color:color-mix(in lab,red,red)){.backend-banner.warn.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.backend-banner.warn.svelte-w4d8v7{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.backend-banner.warn.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.backend-banner.broken.svelte-w4d8v7{border-color:#fb2c3640}@supports (color:color-mix(in lab,red,red)){.backend-banner.broken.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 25%,transparent)}}.backend-banner.broken.svelte-w4d8v7{background-color:#fb2c360f}@supports (color:color-mix(in lab,red,red)){.backend-banner.broken.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 6%,transparent)}}.manual-enable-banner.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 1);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0040;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.manual-enable-banner.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.manual-enable-banner.svelte-w4d8v7{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.manual-enable-banner.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.manual-enable-banner.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;transition-duration:.15s}.banner-toggle.svelte-w4d8v7{cursor:pointer;align-items:center;gap:calc(var(--spacing,.25rem) * 2.5);--tw-border-style:none;width:100%;padding:calc(var(--spacing,.25rem) * 0);text-align:left;color:var(--text);-webkit-user-select:none;user-select:none;background-color:#0000;border-style:none;display:flex}.banner-title.svelte-w4d8v7{--tw-leading:var(--leading-normal,1.5);font-size:12.5px;line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);flex:1}.banner-chevron.svelte-w4d8v7{height:calc(var(--spacing,.25rem) * 4);width:calc(var(--spacing,.25rem) * 4);color:var(--text-muted);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));flex-shrink:0}.banner-chevron.expanded.svelte-w4d8v7{color:var(--text);rotate:180deg}.banner-content.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 2);width:100%;min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);border-top-style:var(--tw-border-style);border-color:#ffffff0d;border-top-width:1px;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.banner-content.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.banner-content.svelte-w4d8v7{padding-top:calc(var(--spacing,.25rem) * 2);padding-left:calc(var(--spacing,.25rem) * 6.5);font-size:12.5px}.backend-icon.svelte-w4d8v7{font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));--tw-leading:1;flex-shrink:0;line-height:1}.backend-detail.svelte-w4d8v7{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.backend-detail.error.svelte-w4d8v7{color:var(--color-red-400,oklch(70.4% .191 22.216))}.manual-enable-actions.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1)}.keys-rejected.svelte-w4d8v7{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3640;display:flex}@supports (color:color-mix(in lab,red,red)){.keys-rejected.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 25%,transparent)}}.keys-rejected.svelte-w4d8v7{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.keys-rejected.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.keys-rejected.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:var(--color-red-300,oklch(80.8% .114 19.571))}.keys-fragile.svelte-w4d8v7{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0040;display:flex}@supports (color:color-mix(in lab,red,red)){.keys-fragile.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.keys-fragile.svelte-w4d8v7{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.keys-fragile.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.keys-fragile.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:var(--color-amber-200,oklch(92.4% .12 95.746))}.keys-accepted.svelte-w4d8v7{color:#5ee9b5e6;font-size:11.5px}@supports (color:color-mix(in lab,red,red)){.keys-accepted.svelte-w4d8v7{color:color-mix(in oklab,var(--color-emerald-300,oklch(84.5% .143 164.978)) 90%,transparent)}}.keys-accepted.svelte-w4d8v7 code:where(.svelte-w4d8v7){background-color:#ffffff0d;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.keys-accepted.svelte-w4d8v7 code:where(.svelte-w4d8v7){background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.keys-accepted.svelte-w4d8v7 code:where(.svelte-w4d8v7){padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace)}.hotkeys-section.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 5);padding-bottom:calc(var(--spacing,.25rem) * 10);flex-direction:column;display:flex}.section-header.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 2);justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 5);display:flex}.description.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.bindings-list.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.binding-item.svelte-w4d8v7{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));background-color:#1a1f2e66;display:flex}.binding-item.svelte-w4d8v7:hover{border-color:var(--accent2);--tw-shadow:0 4px 20px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.binding-item.disabled.svelte-w4d8v7{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.binding-item.disabled.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.binding-item.disabled.svelte-w4d8v7{opacity:.55;background-image:repeating-linear-gradient(-45deg,#0000,#0000 10px,#00000040 10px 20px)}.binding-content.svelte-w4d8v7{min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex}.binding-header-row.svelte-w4d8v7{justify-content:space-between;align-items:center;width:100%;display:flex}.binding-title.svelte-w4d8v7{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.binding-row2.svelte-w4d8v7{justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.binding-targets.svelte-w4d8v7{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.binding-actions.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);justify-content:flex-end;align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);border-top-style:var(--tw-border-style);border-color:#ffffff0d;border-top-width:1px;display:flex}@supports (color:color-mix(in lab,red,red)){.binding-actions.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.binding-actions.svelte-w4d8v7{padding-top:calc(var(--spacing,.25rem) * 2)}.confirm-label.svelte-w4d8v7{color:var(--text-muted);font-size:11px}kbd.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);--tw-shadow:0 1px 0 var(--tw-shadow-color,#0006);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:.25rem}.empty-state.svelte-w4d8v7{border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:2px;border-color:var(--border);background-color:#00000026;flex-direction:column;grid-column:1/-1;justify-content:center;align-items:center;display:flex}@supports (color:color-mix(in lab,red,red)){.empty-state.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-black,#000) 15%,transparent)}}.empty-state.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 10);text-align:center}.empty-icon.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 2);font-size:32px}.empty-state.svelte-w4d8v7 p:where(.svelte-w4d8v7){margin:calc(var(--spacing,.25rem) * 0);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.btn-action.svelte-w4d8v7{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-w4d8v7:hover{border-color:var(--text-muted);background-color:var(--border)}.btn-action.primary.svelte-w4d8v7{--tw-border-style:none;background-color:var(--accent);color:var(--color-white,#fff);border-style:none}.btn-action.primary.svelte-w4d8v7:hover{opacity:.9}.btn-action.small.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 1);padding-inline:calc(var(--spacing,.25rem) * 2);font-size:11px}.btn-action.danger.svelte-w4d8v7{border-color:#ff656833}@supports (color:color-mix(in lab,red,red)){.btn-action.danger.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 20%,transparent)}}.btn-action.danger.svelte-w4d8v7{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.danger.svelte-w4d8v7:hover{border-color:var(--color-red-400,oklch(70.4% .191 22.216));background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.btn-action.danger.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 10%,transparent)}}.btn-add-wide.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 4);cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent2);width:100%;padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-style:none;display:flex}.btn-add-wide.svelte-w4d8v7:hover{--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-add-wide.svelte-w4d8v7:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.badge.svelte-w4d8v7{border-radius:var(--radius-xl,.75rem);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-semibold,600);font-size:10px;font-weight:var(--font-weight-semibold,600);text-transform:uppercase}.warn-note.svelte-w4d8v7{color:var(--accent-amber,#f0b429);font-size:11px;line-height:1.45}.badge.gesture.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.badge.gesture.svelte-w4d8v7{border-color:color-mix(in oklab,var(--accent2) 30%,transparent)}}.badge.gesture.svelte-w4d8v7{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.badge.gesture.svelte-w4d8v7{background-color:color-mix(in oklab,var(--accent2) 15%,transparent)}}.badge.gesture.svelte-w4d8v7{color:var(--accent2)}.badge.openai.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.badge.openai.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 30%,transparent)}}.badge.openai.svelte-w4d8v7{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.badge.openai.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.badge.openai.svelte-w4d8v7{color:var(--color-emerald-200,oklch(90.5% .093 164.15))}.badge.s1-mini.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.badge.s1-mini.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 30%,transparent)}}.badge.s1-mini.svelte-w4d8v7{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.badge.s1-mini.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.badge.s1-mini.svelte-w4d8v7{color:var(--color-cyan-200,oklch(91.7% .08 205.041))}.modal-backdrop.svelte-w4d8v7{inset:calc(var(--spacing,.25rem) * 0);z-index:1000;background-color:#0009;justify-content:center;align-items:center;display:flex;position:fixed}@supports (color:color-mix(in lab,red,red)){.modal-backdrop.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-black,#000) 60%,transparent)}}.modal-backdrop.svelte-w4d8v7{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.modal.svelte-w4d8v7{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);width:90%;max-width:500px;max-height:85vh;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex}.modal-header.svelte-w4d8v7{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);justify-content:space-between;align-items:center;display:flex}.modal-header.svelte-w4d8v7 h3:where(.svelte-w4d8v7){margin:calc(var(--spacing,.25rem) * 0);--tw-font-weight:var(--font-weight-bold,700);font-size:15px;font-weight:var(--font-weight-bold,700)}.close-btn.svelte-w4d8v7{cursor:pointer;--tw-border-style:none;font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));color:var(--text-muted);background-color:#0000;border-style:none}.close-btn.svelte-w4d8v7:hover{color:var(--text)}.modal-body.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 3.5);padding:calc(var(--spacing,.25rem) * 5);flex-direction:column;display:flex;overflow-y:auto}.modal-footer.svelte-w4d8v7{justify-content:flex-end;gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);display:flex}.morph-section.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 2.5);border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:1px;border-color:var(--border);background-color:#ffffff05;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.morph-section.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-white,#fff) 2%,transparent)}}.morph-section.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 3)}.processing-toggles.svelte-w4d8v7 h5:where(.svelte-w4d8v7){margin:calc(var(--spacing,.25rem) * 0);margin-bottom:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);text-transform:uppercase}.processing-toggles.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding-top:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}.checkbox-field.svelte-w4d8v7{cursor:pointer;align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted);display:flex}.checkbox-field.svelte-w4d8v7 input[type=checkbox]:where(.svelte-w4d8v7){cursor:pointer}.checkbox-field.svelte-w4d8v7:hover{color:var(--text)}.btn-add-inline.svelte-w4d8v7{cursor:pointer;--tw-border-style:none;padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));background-color:#0000;border-style:none;border-radius:.25rem}.btn-add-inline.svelte-w4d8v7:hover{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.btn-add-inline.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.btn-add-inline.svelte-w4d8v7:hover{color:var(--color-white,#fff)}.target-selects-list.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;width:100%;display:flex}.target-select-row.svelte-w4d8v7{align-items:center;gap:calc(var(--spacing,.25rem) * 2);width:100%;display:flex}.btn-remove-inline.svelte-w4d8v7{box-sizing:border-box;cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3633;justify-content:center;align-items:center;height:34px;display:flex}@supports (color:color-mix(in lab,red,red)){.btn-remove-inline.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.btn-remove-inline.svelte-w4d8v7{background-color:#fb2c3614}@supports (color:color-mix(in lab,red,red)){.btn-remove-inline.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 8%,transparent)}}.btn-remove-inline.svelte-w4d8v7{padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-red-400,oklch(70.4% .191 22.216));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-remove-inline.svelte-w4d8v7:hover{border-color:var(--color-red-500,oklch(63.7% .237 25.331));background-color:var(--color-red-500,oklch(63.7% .237 25.331));color:var(--color-white,#fff);--tw-shadow:0 2px 8px var(--tw-shadow-color,#ef444440);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.longer-display-label.svelte-w4d8v7{min-width:255px!important}.openai-target-settings.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 2.5);margin-bottom:calc(var(--spacing,.25rem) * 3.5);margin-left:calc(var(--spacing,.25rem) * 2.5);gap:calc(var(--spacing,.25rem) * 2);border-left-style:var(--tw-border-style);border-left-width:2px;border-color:var(--accent);padding-left:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}textarea.svelte-w4d8v7{resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--text);--tw-shadow:inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}textarea.svelte-w4d8v7:hover{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){textarea.svelte-w4d8v7:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 15%,transparent)}}textarea.svelte-w4d8v7:hover{background-color:var(--color-obsidian-900)}textarea.svelte-w4d8v7:focus{border-color:var(--accent2);background-color:var(--color-obsidian-950);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field.col.svelte-w4d8v7{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;width:100%}.field-label-row.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * .5);justify-content:space-between;align-items:center;width:100%;display:flex}.field-title.svelte-w4d8v7{--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text)}.field-tag.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:var(--accent2);border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-w4d8v7{border-color:color-mix(in oklab,var(--accent2) 25%,transparent)}}.field-tag.svelte-w4d8v7{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-w4d8v7{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.field-tag.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-leading:1;--tw-font-weight:var(--font-weight-bold,700);font-size:9px;line-height:1;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em);color:var(--accent2);text-transform:uppercase}p.hint.svelte-w4d8v7{margin:calc(var(--spacing,.25rem) * 0);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}p.hint.svelte-w4d8v7 code:where(.svelte-w4d8v7){border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);border-radius:.25rem;font-size:10px}.validation-error-msg.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-red-400,oklch(70.4% .191 22.216));display:block}.binding-item.has-conflict.svelte-w4d8v7{border-color:#f99c0073!important}@supports (color:color-mix(in lab,red,red)){.binding-item.has-conflict.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 45%,transparent)!important}}.binding-item.active-conflict.svelte-w4d8v7{background-color:#f99c000f;position:relative}@supports (color:color-mix(in lab,red,red)){.binding-item.active-conflict.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.binding-item.active-conflict.svelte-w4d8v7:hover{border-color:#f99c00b3!important}@supports (color:color-mix(in lab,red,red)){.binding-item.active-conflict.svelte-w4d8v7:hover{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 70%,transparent)!important}}.binding-item.active-conflict.svelte-w4d8v7:hover{--tw-shadow:0 4px 20px var(--tw-shadow-color,#fbbf2426);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.binding-title.has-conflict.svelte-w4d8v7{padding-right:75px}.conflict-marker.svelte-w4d8v7{top:calc(var(--spacing,.25rem) * 2.5);right:calc(var(--spacing,.25rem) * 3.5);background-color:var(--color-amber-400,oklch(82.8% .189 84.429));padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-extrabold,800);font-size:9px;font-weight:var(--font-weight-extrabold,800);color:var(--color-neutral-900,oklch(20.5% 0 0));--tw-shadow:0 2px 6px var(--tw-shadow-color,#fbbf2440);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:.25rem;position:absolute}.conflict-alert-banner.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 3);align-items:center;gap:calc(var(--spacing,.25rem) * 2.5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0040;display:flex}@supports (color:color-mix(in lab,red,red)){.conflict-alert-banner.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.conflict-alert-banner.svelte-w4d8v7{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.conflict-alert-banner.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.conflict-alert-banner.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);color:var(--color-amber-400,oklch(82.8% .189 84.429))}.warning-icon.svelte-w4d8v7{font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));flex-shrink:0}.animate-fade-in.svelte-w4d8v7{animation:.2s cubic-bezier(.16,1,.3,1) fade-in}@keyframes svelte-w4d8v7-fade-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}.custom-select-wrapper.svelte-w4d8v7{flex:1;min-width:190px;position:relative}.custom-select-trigger.svelte-w4d8v7{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-right:calc(var(--spacing,.25rem) * 9);text-align:left;--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text);--tw-shadow:0 4px 12px var(--tw-shadow-color,#00000026);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));-webkit-user-select:none;user-select:none;background:var(--surface2) url("data:image/svg+xml;utf8,") no-repeat right 12px center;background-size:10px}.custom-select-trigger.svelte-w4d8v7:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.custom-select-trigger.svelte-w4d8v7:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 12%,transparent)}}.custom-select-trigger.svelte-w4d8v7:hover{background-color:var(--color-obsidian-700)}.custom-select-trigger.svelte-w4d8v7:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-select-backdrop.svelte-w4d8v7{inset:calc(var(--spacing,.25rem) * 0);z-index:199;position:fixed}.custom-dropdown-menu.svelte-w4d8v7{right:calc(var(--spacing,.25rem) * 0);left:calc(var(--spacing,.25rem) * 0);z-index:200;margin-top:calc(var(--spacing,.25rem) * 1);max-height:calc(var(--spacing,.25rem) * 60);gap:calc(var(--spacing,.25rem) * .5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 1);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex;position:absolute;overflow-y:auto}.custom-dropdown-item.svelte-w4d8v7{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);text-align:left;color:var(--text);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;background-color:#0000;border-style:none;font-size:13px;transition-duration:.15s}.custom-dropdown-item.svelte-w4d8v7:hover{background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 4%,transparent)}}.custom-dropdown-item.svelte-w4d8v7:disabled{cursor:not-allowed;opacity:.4}.custom-dropdown-item.svelte-w4d8v7:disabled:hover{background-color:#0000}.custom-dropdown-item.create-new.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f40;margin-top:calc(var(--spacing,.25rem) * 1)!important}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.create-new.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 25%,transparent)}}.custom-dropdown-item.create-new.svelte-w4d8v7{background-color:#002c22cc}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.create-new.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-emerald-950,oklch(26.2% .051 172.552)) 80%,transparent)}}.custom-dropdown-item.create-new.svelte-w4d8v7{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.custom-dropdown-item.create-new.svelte-w4d8v7:hover{background-color:#004e3be6!important}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.create-new.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--color-emerald-900,oklch(37.8% .077 168.94)) 90%,transparent)!important}}.custom-dropdown-item.create-new.svelte-w4d8v7 .plus-icon:where(.svelte-w4d8v7){margin-right:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800);color:var(--color-emerald-300,oklch(84.5% .143 164.978))}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.targets-section.svelte-134kctg{gap:calc(var(--spacing,.25rem) * 5);padding-bottom:calc(var(--spacing,.25rem) * 10);flex-direction:column;display:flex}.section-header.svelte-134kctg{margin-bottom:calc(var(--spacing,.25rem) * 2);justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 5);display:flex}.description.svelte-134kctg{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.usage-note.svelte-134kctg{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.usage-note.svelte-134kctg{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.usage-note.svelte-134kctg{padding:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.usage-note.svelte-134kctg strong:where(.svelte-134kctg){--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.usage-note.svelte-134kctg em:where(.svelte-134kctg){font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);font-style:normal}.bindings-list.svelte-134kctg{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.binding-item.svelte-134kctg{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));background-color:#1a1f2e66;display:flex}.binding-item.svelte-134kctg:hover{border-color:var(--accent2);--tw-shadow:0 4px 20px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.binding-content.svelte-134kctg{min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex}.binding-row2.svelte-134kctg{justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.binding-title.svelte-134kctg{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.badge.svelte-134kctg{border-radius:var(--radius-xl,.75rem);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-semibold,600);font-size:10px;font-weight:var(--font-weight-semibold,600);text-transform:uppercase}.badge.delivery.svelte-134kctg{border-style:var(--tw-border-style);border-width:1px;border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.badge.delivery.svelte-134kctg{border-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 30%,transparent)}}.badge.delivery.svelte-134kctg{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.badge.delivery.svelte-134kctg{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.badge.delivery.svelte-134kctg{color:var(--color-cyan-300,oklch(86.5% .127 207.078))}.binding-targets.svelte-134kctg{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.binding-actions.svelte-134kctg{margin-top:calc(var(--spacing,.25rem) * 1);justify-content:flex-end;align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);border-top-style:var(--tw-border-style);border-color:#ffffff0d;border-top-width:1px;display:flex}@supports (color:color-mix(in lab,red,red)){.binding-actions.svelte-134kctg{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.binding-actions.svelte-134kctg{padding-top:calc(var(--spacing,.25rem) * 2)}.confirm-label.svelte-134kctg{color:var(--text-muted);font-size:11px}.btn-action.svelte-134kctg{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-134kctg:hover{border-color:var(--text-muted);background-color:var(--border)}.btn-action.small.svelte-134kctg{padding:calc(var(--spacing,.25rem) * 1);padding-inline:calc(var(--spacing,.25rem) * 2);font-size:11px}.btn-action.danger.svelte-134kctg{border-color:#ff656833}@supports (color:color-mix(in lab,red,red)){.btn-action.danger.svelte-134kctg{border-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 20%,transparent)}}.btn-action.danger.svelte-134kctg{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.danger.svelte-134kctg:hover{border-color:var(--color-red-400,oklch(70.4% .191 22.216));background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.btn-action.danger.svelte-134kctg:hover{background-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 10%,transparent)}}.btn-add-wide.svelte-134kctg{margin-bottom:calc(var(--spacing,.25rem) * 4);cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent2);width:100%;padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-style:none;display:flex}.btn-add-wide.svelte-134kctg:hover{--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-add-wide.svelte-134kctg:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.empty-state.svelte-134kctg{border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:2px;border-color:var(--border);background-color:#00000026;flex-direction:column;grid-column:1/-1;justify-content:center;align-items:center;display:flex}@supports (color:color-mix(in lab,red,red)){.empty-state.svelte-134kctg{background-color:color-mix(in oklab,var(--color-black,#000) 15%,transparent)}}.empty-state.svelte-134kctg{padding:calc(var(--spacing,.25rem) * 10);text-align:center}.empty-icon.svelte-134kctg{margin-bottom:calc(var(--spacing,.25rem) * 2);font-size:32px}.empty-state.svelte-134kctg p:where(.svelte-134kctg){margin:calc(var(--spacing,.25rem) * 0);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-leading:initial}}}.row.svelte-1q9seip{margin-top:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 2);display:flex}.btn-preview.svelte-1q9seip{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-preview.svelte-1q9seip:hover:not(:disabled){background-color:var(--border);color:var(--accent)}.btn-preview.svelte-1q9seip:disabled{cursor:not-allowed;opacity:.4}.idle-minutes-input.svelte-1q9seip{width:calc(var(--spacing,.25rem) * 20);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 2.5);text-align:right;color:var(--text);font-size:13px}.voice-status-container.svelte-1q9seip{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);min-height:42px;padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);align-items:center;font-size:13px;display:flex}.status-downloaded.svelte-1q9seip{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-downloading.svelte-1q9seip{color:var(--accent2)}.status-checking.svelte-1q9seip{color:var(--text-muted)}.status-missing-wrapper.svelte-1q9seip{justify-content:space-between;align-items:center;width:100%;display:flex}.status-missing.svelte-1q9seip{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-download.svelte-1q9seip{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}.btn-download.svelte-1q9seip:hover:not(:disabled){background-color:var(--accent2)}.btn-download.svelte-1q9seip:disabled{cursor:not-allowed;border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);color:var(--text-muted);opacity:.5}.field-input-error.svelte-1q9seip{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.field-input-error.svelte-1q9seip:focus{border-color:var(--color-red-500,oklch(63.7% .237 25.331));--tw-shadow:0 0 0 2px var(--tw-shadow-color,#ef444426), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field-error-msg.svelte-1q9seip{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5);color:var(--color-red-400,oklch(70.4% .191 22.216))}.range-input.svelte-1q9seip{width:100%;accent-color:var(--accent)}.number-input.svelte-1q9seip{width:calc(var(--spacing,.25rem) * 20)}.tts-test-row.svelte-1q9seip{justify-content:space-between;align-items:center;width:100%;display:flex}.tts-error-msg.svelte-1q9seip{overflow-wrap:break-word;width:100%}.run-speed-container.svelte-1q9seip{border:1px solid var(--border);border-radius:var(--radius);background:#ffffff05;align-items:center;gap:8px;padding:6px 12px;font-size:12px;font-weight:500;display:flex}.run-speed-label.svelte-1q9seip{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;font-size:10px}.run-speed-value.svelte-1q9seip{color:var(--accent);font-family:JetBrains Mono,monospace;font-weight:600}.run-speed-value.counting.svelte-1q9seip{color:var(--accent2);text-shadow:0 0 8px #38bdf84d}.non-commercial-warning.svelte-1q9seip{margin-bottom:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 1.5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0066;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.non-commercial-warning.svelte-1q9seip{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 40%,transparent)}}.non-commercial-warning.svelte-1q9seip{background-color:#4619014d}@supports (color:color-mix(in lab,red,red)){.non-commercial-warning.svelte-1q9seip{background-color:color-mix(in oklab,var(--color-amber-950,oklch(27.9% .077 45.635)) 30%,transparent)}}.non-commercial-warning.svelte-1q9seip{padding:calc(var(--spacing,.25rem) * 3)}.warning-header.svelte-1q9seip{align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-amber-400,oklch(82.8% .189 84.429));display:flex}.warning-icon.svelte-1q9seip{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)))}.warning-text.svelte-1q9seip{margin:calc(var(--spacing,.25rem) * 0);--tw-leading:var(--leading-relaxed,1.625);max-width:none;font-size:12px;line-height:var(--leading-relaxed,1.625);color:#fee685cc}@supports (color:color-mix(in lab,red,red)){.warning-text.svelte-1q9seip{color:color-mix(in oklab,var(--color-amber-200,oklch(92.4% .12 95.746)) 80%,transparent)}}.field-input-textarea.svelte-1q9seip{margin-top:calc(var(--spacing,.25rem) * 1);box-sizing:border-box;resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}.field-input-textarea.svelte-1q9seip:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#4fc3f733);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.engine-radio-group.svelte-1q9seip{margin-top:calc(var(--spacing,.25rem) * 1.5);gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;width:100%;display:flex}.engine-radio-option.svelte-1q9seip{cursor:pointer;gap:calc(var(--spacing,.25rem) * 1);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);padding:calc(var(--spacing,.25rem) * 3);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));flex-direction:column;display:flex}.engine-radio-option.svelte-1q9seip:hover{border-color:var(--accent2);background-color:var(--surface2)}.engine-radio-option.selected.svelte-1q9seip{border-color:var(--accent);background-color:var(--surface2)}.engine-radio-header.svelte-1q9seip{align-items:center;gap:calc(var(--spacing,.25rem) * 2.5);display:flex}.engine-radio-name.svelte-1q9seip{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--text)}.engine-radio-desc.svelte-1q9seip{margin-left:calc(var(--spacing,.25rem) * 6);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);color:var(--text-muted)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.hint.svelte-1bvctpo{margin-bottom:calc(var(--spacing,.25rem) * 4);max-width:520px;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-300)}.field.col.svelte-1bvctpo{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1.5);flex-direction:column}textarea.svelte-1bvctpo{resize:vertical;border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;padding:calc(var(--spacing,.25rem) * 2);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--text);border-radius:.25rem;font-size:13px}textarea.invalid.svelte-1bvctpo{border-color:var(--color-red-500,oklch(63.7% .237 25.331));--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){textarea.invalid.svelte-1bvctpo{--tw-ring-color:color-mix(in oklab, var(--color-red-500,oklch(63.7% .237 25.331)) 20%, transparent)}}textarea.locked.svelte-1bvctpo{cursor:not-allowed;background-color:#0003}@supports (color:color-mix(in lab,red,red)){textarea.locked.svelte-1bvctpo{background-color:color-mix(in oklab,var(--color-black,#000) 20%,transparent)}}textarea.locked.svelte-1bvctpo{opacity:.6}.validation-error.svelte-1bvctpo{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-red-400,oklch(70.4% .191 22.216))}.field-hint.svelte-1bvctpo{color:var(--color-obsidian-300);font-size:11px}code.svelte-1bvctpo{background-color:#ffffff0d;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){code.svelte-1bvctpo{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}code.svelte-1bvctpo{padding-inline:calc(var(--spacing,.25rem) * 1);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue)}.action-row.svelte-1bvctpo{margin-top:calc(var(--spacing,.25rem) * 3.5);align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding-top:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}.btn-test.svelte-1bvctpo{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);width:100%;padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-style:none}.btn-test.svelte-1bvctpo:hover:not(:disabled){--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-test.svelte-1bvctpo:active:not(:disabled){--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.btn-test.svelte-1bvctpo:disabled{cursor:not-allowed;opacity:.6}.status-msg.svelte-1bvctpo{text-align:center;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600)}.status-msg.success.svelte-1bvctpo{color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-msg.error.svelte-1bvctpo{color:var(--color-red-400,oklch(70.4% .191 22.216))}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-leading:initial}}}.custom-vocab-input.svelte-1s1a8xn{margin-top:calc(var(--spacing,.25rem) * 2);box-sizing:border-box;resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;min-height:80px;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}.custom-vocab-input.svelte-1s1a8xn:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#4fc3f733);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-vocab-input.svelte-1s1a8xn::placeholder{color:var(--text-muted);opacity:.5}.model-status-container.svelte-1s1a8xn{margin-bottom:calc(var(--spacing,.25rem) * 3);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);min-height:42px;padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);align-items:center;font-size:13px;display:flex}.status-downloaded.svelte-1s1a8xn{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-downloading.svelte-1s1a8xn{color:var(--accent2)}.status-checking.svelte-1s1a8xn{color:var(--text-muted)}.status-missing-wrapper.svelte-1s1a8xn{justify-content:space-between;align-items:center;width:100%;display:flex}.status-missing.svelte-1s1a8xn{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-download.svelte-1s1a8xn{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}.btn-download.svelte-1s1a8xn:hover{background-color:var(--accent2)}.status-pill.svelte-1s1a8xn{border-radius:var(--radius);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500)}.status-pill.success.svelte-1s1a8xn{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-1s1a8xn{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 30%,transparent)}}.status-pill.success.svelte-1s1a8xn{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-1s1a8xn{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.status-pill.success.svelte-1s1a8xn{color:var(--color-emerald-300,oklch(84.5% .143 164.978))}.status-pill.error.svelte-1s1a8xn{border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-1s1a8xn{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 30%,transparent)}}.status-pill.error.svelte-1s1a8xn{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-1s1a8xn{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 15%,transparent)}}.status-pill.error.svelte-1s1a8xn{color:var(--color-red-300,oklch(80.8% .114 19.571))}.status-pill.downloading.svelte-1s1a8xn{border-style:var(--tw-border-style);border-width:1px;border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.status-pill.downloading.svelte-1s1a8xn{border-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 30%,transparent)}}.status-pill.downloading.svelte-1s1a8xn{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.status-pill.downloading.svelte-1s1a8xn{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.status-pill.downloading.svelte-1s1a8xn{color:var(--color-cyan-300,oklch(86.5% .127 207.078))}.field-title-col.svelte-1s1a8xn{margin-right:calc(var(--spacing,.25rem) * 4);flex-direction:column;flex:1;display:flex}.field-title-col.svelte-1s1a8xn span:where(.svelte-1s1a8xn){--tw-font-weight:var(--font-weight-medium,500);font-size:13px;font-weight:var(--font-weight-medium,500);color:var(--color-obsidian-100)}.field-title-col.svelte-1s1a8xn .hint:where(.svelte-1s1a8xn){margin-top:calc(var(--spacing,.25rem) * .5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.s1-mini-note.svelte-1s1a8xn{margin-top:calc(var(--spacing,.25rem) * -1);--tw-font-weight:var(--font-weight-medium,500);font-size:11.5px;font-weight:var(--font-weight-medium,500);color:var(--color-accent-blue);opacity:.9}.disabled-section.svelte-1s1a8xn{pointer-events:none;opacity:.5}.disabled-note.svelte-1s1a8xn{color:var(--color-accent-blue);opacity:.9}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.lede.svelte-7vrdzs{--tw-leading:var(--leading-relaxed,1.625);font-size:13px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.disclosure.svelte-7vrdzs{border-color:#38bdf840}@supports (color:color-mix(in lab,red,red)){.disclosure.svelte-7vrdzs{border-color:color-mix(in oklab,var(--color-accent-blue) 25%,transparent)}}.disclosure.svelte-7vrdzs{background-color:#38bdf80a}.ledger.svelte-7vrdzs{gap:calc(var(--spacing,.25rem) * 4);grid-template-columns:repeat(auto-fit,minmax(240px,1fr));display:grid}.ledger-col.svelte-7vrdzs ul:where(.svelte-7vrdzs){margin-top:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 1.5);--tw-leading:var(--leading-relaxed,1.625);font-size:11.5px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted);flex-direction:column;display:flex}.ledger-col.svelte-7vrdzs li:where(.svelte-7vrdzs){border-left-style:var(--tw-border-style);padding-left:calc(var(--spacing,.25rem) * 3);border-left-width:1px}.ledger-head.svelte-7vrdzs{--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em);text-transform:uppercase}.included.svelte-7vrdzs .ledger-head:where(.svelte-7vrdzs){color:var(--color-accent-green)}.included.svelte-7vrdzs li:where(.svelte-7vrdzs){border-color:#10b9814d}.excluded.svelte-7vrdzs .ledger-head:where(.svelte-7vrdzs){color:#f87171}.excluded.svelte-7vrdzs li:where(.svelte-7vrdzs){border-color:#f871714d}.ledger-col.svelte-7vrdzs strong{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.field-caption.svelte-7vrdzs{--tw-font-weight:var(--font-weight-medium,500);font-size:13px;font-weight:var(--font-weight-medium,500);color:var(--text)}.two-up.svelte-7vrdzs{gap:calc(var(--spacing,.25rem) * 4);grid-template-columns:repeat(auto-fit,minmax(200px,1fr));display:grid}.text-input.svelte-7vrdzs{box-sizing:border-box;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}.text-input.svelte-7vrdzs:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#4fc3f733);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.description.svelte-7vrdzs{resize:vertical;--tw-leading:var(--leading-relaxed,1.625);min-height:150px;line-height:var(--leading-relaxed,1.625)}.counter.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--text-muted);font-size:11px}.counter.short.svelte-7vrdzs{color:#f59e0b}.preview.svelte-7vrdzs{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);width:100%;max-height:340px;padding:calc(var(--spacing,.25rem) * 3);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word;white-space:pre-wrap;color:var(--text-muted);overflow:auto}.actions.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}.btn-primary.svelte-7vrdzs{border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 10px var(--tw-shadow-color,#38bdf840);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-primary.svelte-7vrdzs:hover:not(:disabled){--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 14px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-primary.svelte-7vrdzs:disabled{cursor:not-allowed;opacity:.4;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.btn-secondary.svelte-7vrdzs{border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;flex-shrink:0}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-7vrdzs{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.btn-secondary.svelte-7vrdzs{padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-secondary.svelte-7vrdzs:hover{border-color:#38bdf866}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-7vrdzs:hover{border-color:color-mix(in oklab,var(--color-accent-blue) 40%,transparent)}}.btn-secondary.svelte-7vrdzs:hover{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-7vrdzs:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 8%,transparent)}}.link-button.svelte-7vrdzs{margin-left:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);text-decoration-line:underline}.alert-body.svelte-7vrdzs{gap:calc(var(--spacing,.25rem) * 1.5);flex-direction:column;width:100%;display:flex}.alert-msg.svelte-7vrdzs{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625)}.alert-actions.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-wrap:wrap;display:flex}.ok-alert.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:#10b981;border-radius:var(--radius);background-color:#10b9811a;border:1px solid #10b98140;padding:10px 14px;display:flex}code.svelte-7vrdzs{background-color:var(--color-obsidian-950);color:var(--color-accent-blue);border:1px solid var(--border);border-radius:4px;padding:2px 6px;font-family:monospace;font-size:10px}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-font-weight:initial;--tw-leading:initial;--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial}}}.about-card.svelte-4mufsx{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 5);flex-direction:row!important}.logo.svelte-4mufsx{height:calc(var(--spacing,.25rem) * 16);width:calc(var(--spacing,.25rem) * 16);border-radius:var(--radius-xl,.75rem);object-fit:contain;--tw-drop-shadow-size:drop-shadow(0 4px 24px var(--tw-drop-shadow-color,#38bdf859));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.app-name.svelte-4mufsx{margin-bottom:calc(var(--spacing,.25rem) * 1);font-size:var(--text-2xl,1.5rem);line-height:var(--tw-leading,var(--text-2xl--line-height,calc(2 / 1.5)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700)}.app-version.svelte-4mufsx{margin-bottom:calc(var(--spacing,.25rem) * 2.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}p.svelte-4mufsx{--tw-leading:var(--leading-relaxed,1.625);max-width:400px;font-size:13px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}a.svelte-4mufsx{color:var(--accent2);font-size:13px;text-decoration-line:none}a.svelte-4mufsx:hover{text-decoration-line:underline}.kv.svelte-4mufsx{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding-block:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));justify-content:space-between;display:flex}.kv.svelte-4mufsx span:where(.svelte-4mufsx):first-child{color:var(--text-muted)}.credits-hint.svelte-4mufsx{margin-bottom:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.credits-list.svelte-4mufsx{margin-top:calc(var(--spacing,.25rem) * 1);gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.credit-item.svelte-4mufsx{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding-block:calc(var(--spacing,.25rem) * 1.5);justify-content:space-between;align-items:center;display:flex}.credit-item.svelte-4mufsx:last-child{--tw-border-style:none;border-style:none}.credit-name-link.svelte-4mufsx{--tw-font-weight:var(--font-weight-normal,400);font-size:13px;font-weight:var(--font-weight-normal,400);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));text-decoration-line:none}.credit-name-link.svelte-4mufsx:hover{color:var(--color-accent-blue);text-decoration-line:underline}.credit-license.svelte-4mufsx{border-style:var(--tw-border-style);border-width:1px;border-color:#38bdf826;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.credit-license.svelte-4mufsx{border-color:color-mix(in oklab,var(--color-accent-blue) 15%,transparent)}}.credit-license.svelte-4mufsx{background-color:#38bdf814}@supports (color:color-mix(in lab,red,red)){.credit-license.svelte-4mufsx{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.credit-license.svelte-4mufsx{padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-normal,400);font-size:10px;font-weight:var(--font-weight-normal,400);color:var(--color-accent-blue)}.credit-license.non-commercial.svelte-4mufsx{border-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.credit-license.non-commercial.svelte-4mufsx{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 30%,transparent)}}.credit-license.non-commercial.svelte-4mufsx{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.credit-license.non-commercial.svelte-4mufsx{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.credit-license.non-commercial.svelte-4mufsx{color:var(--color-amber-400,oklch(82.8% .189 84.429))}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}.settings-root.svelte-myrvk6{background-color:var(--bg);width:100vw;height:100vh;color:var(--text);display:flex;overflow:hidden}.sidebar.svelte-myrvk6{z-index:10;border-right-style:var(--tw-border-style);border-right-width:1px;border-color:var(--border);background-color:var(--color-obsidian-900);width:fit-content;min-width:135px;padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * 5);--tw-shadow:4px 0 24px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);flex-direction:column;flex-shrink:0;display:flex}.brand.svelte-myrvk6{margin-bottom:calc(var(--spacing,.25rem) * 4);align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-bottom-style:var(--tw-border-style);border-color:#ffffff08;border-bottom-width:1px;display:flex}@supports (color:color-mix(in lab,red,red)){.brand.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.brand.svelte-myrvk6{padding-inline:calc(var(--spacing,.25rem) * 1);padding-block:calc(var(--spacing,.25rem) * 1.5);padding-bottom:calc(var(--spacing,.25rem) * 4);white-space:nowrap}.brand-logo.svelte-myrvk6{height:calc(var(--spacing,.25rem) * 5);width:calc(var(--spacing,.25rem) * 5);object-fit:contain;--tw-drop-shadow-size:drop-shadow(0 2px 8px var(--tw-drop-shadow-color,#38bdf84d));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);flex-shrink:0;animation:4s ease-in-out infinite floating}@keyframes svelte-myrvk6-floating{0%,to{transform:translateY(0)rotate(0)}50%{transform:translateY(-3px)rotate(3deg)}}.brand-text.svelte-myrvk6{white-space:nowrap;flex-direction:column;display:flex;overflow:hidden}.brand-name.svelte-myrvk6{--tw-leading:1.1;--tw-font-weight:850;--tw-tracking:-.5px;letter-spacing:-.5px;white-space:nowrap;color:var(--color-white,#fff);font-size:15px;font-weight:850;line-height:1.1}.brand-tag.svelte-myrvk6{margin-top:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-bold,700);font-size:7px;font-weight:var(--font-weight-bold,700);--tw-tracking:.12em;letter-spacing:.12em;white-space:nowrap;color:var(--color-accent-blue)}.sidebar-nav.svelte-myrvk6{gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex;overflow-y:auto}.nav-btn.svelte-myrvk6{align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 2);text-align:left;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);white-space:nowrap;color:var(--color-obsidian-300);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));display:flex;position:relative}.nav-btn.svelte-myrvk6:hover{--tw-translate-x:2px;translate:var(--tw-translate-x) var(--tw-translate-y);background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.nav-btn.svelte-myrvk6:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.nav-btn.svelte-myrvk6:hover{color:var(--color-white,#fff)}.nav-btn.active.svelte-myrvk6{--tw-translate-x:2px;translate:var(--tw-translate-x) var(--tw-translate-y);background-color:#38bdf814;scale:1.01}@supports (color:color-mix(in lab,red,red)){.nav-btn.active.svelte-myrvk6{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.nav-btn.active.svelte-myrvk6{color:var(--color-accent-blue)}.nav-btn.svelte-myrvk6:active{--tw-translate-x:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y);scale:.97}.nav-icon.svelte-myrvk6{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.nav-btn.svelte-myrvk6:hover .nav-icon:where(.svelte-myrvk6){rotate:5deg;scale:1.18}.nav-active-pill.svelte-myrvk6{top:15%;right:calc(var(--spacing,.25rem) * 0);background-color:var(--color-accent-blue);--tw-shadow:-2px 0 8px var(--tw-shadow-color,var(--color-accent-blue));width:3px;height:70%;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:99px 0 0 99px;position:absolute}.sidebar-footer.svelte-myrvk6{border-top-style:var(--tw-border-style);border-color:#ffffff08;border-top-width:1px}@supports (color:color-mix(in lab,red,red)){.sidebar-footer.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.sidebar-footer.svelte-myrvk6{padding-top:calc(var(--spacing,.25rem) * 4)}.status-panel.svelte-myrvk6{gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-shadow:inset 0 2px 6px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.25s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.25s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));flex-direction:column;display:flex}.status-panel.recording.svelte-myrvk6{border-color:#38bdf840}@supports (color:color-mix(in lab,red,red)){.status-panel.recording.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-accent-blue) 25%,transparent)}}.status-panel.recording.svelte-myrvk6{--tw-shadow:0 4px 20px var(--tw-shadow-color,#38bdf81a), inset 0 2px 6px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.status-header.svelte-myrvk6{align-items:flex-start;gap:calc(var(--spacing,.25rem) * .5);white-space:nowrap;flex-direction:column;display:flex}.status-indicator.svelte-myrvk6{align-items:center;gap:calc(var(--spacing,.25rem) * 1);white-space:nowrap;display:flex}.status-dot.svelte-myrvk6{background-color:var(--color-obsidian-300);width:5px;height:5px;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-radius:3.40282e38px}.status-panel.recording.svelte-myrvk6 .status-dot:where(.svelte-myrvk6){background-color:var(--color-accent-blue);--tw-shadow:0 0 8px var(--tw-shadow-color,var(--color-accent-blue));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);animation:1.2s infinite heartBeat}.status-panel.speaking.svelte-myrvk6 .status-dot:where(.svelte-myrvk6){background-color:var(--color-accent-green);--tw-shadow:0 0 8px var(--tw-shadow-color,var(--color-accent-green));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@keyframes svelte-myrvk6-heartBeat{0%,to{transform:scale(1)}50%{transform:scale(1.4)}}.status-label.svelte-myrvk6{--tw-font-weight:var(--font-weight-bold,700);font-size:10px;font-weight:var(--font-weight-bold,700);white-space:nowrap;color:var(--color-obsidian-300)}.status-panel.recording.svelte-myrvk6 .status-label:where(.svelte-myrvk6){color:var(--color-accent-blue)}.word-count.svelte-myrvk6{--tw-font-weight:var(--font-weight-semibold,600);font-size:9px;font-weight:var(--font-weight-semibold,600);white-space:nowrap;color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.word-count.svelte-myrvk6{color:color-mix(in oklab,var(--color-white,#fff) 30%,transparent)}}.btn-record.svelte-myrvk6{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#38bdf833;width:100%;position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.btn-record.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-accent-blue) 20%,transparent)}}.btn-record.svelte-myrvk6{background-color:#38bdf814}@supports (color:color-mix(in lab,red,red)){.btn-record.svelte-myrvk6{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.btn-record.svelte-myrvk6{padding-inline:calc(var(--spacing,.25rem) * 1);padding-block:calc(var(--spacing,.25rem) * 1.5);text-align:center;--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);white-space:nowrap;color:var(--color-accent-blue);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf80d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-record.svelte-myrvk6:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);border-color:var(--color-accent-blue);background-color:var(--color-accent-blue);color:var(--color-white,#fff);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf840);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.btn-record.svelte-myrvk6:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y);scale:.97}.btn-record.active.svelte-myrvk6{border-color:var(--color-accent-blue);background-color:var(--color-accent-blue);color:var(--color-white,#fff);--tw-shadow:0 4px 16px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pulse-ring.svelte-myrvk6{pointer-events:none;top:calc(var(--spacing,.25rem) * 0);left:calc(var(--spacing,.25rem) * 0);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-accent-blue);opacity:0;width:100%;height:100%;animation:1.6s ease-out infinite ripple;position:absolute}@keyframes svelte-myrvk6-ripple{0%{opacity:.5;transform:scale(1)}to{opacity:0;transform:scale(1.15,1.3)}}.btn-text.svelte-myrvk6{z-index:2;position:relative}.content-container.svelte-myrvk6{z-index:1;background-color:var(--bg);flex-direction:column;flex:1;display:flex;position:relative;overflow:hidden}.content-container.svelte-myrvk6:has(.modal-backdrop){z-index:100}.tab-content.svelte-myrvk6{z-index:1;flex:1;padding:30px;overflow-y:auto}.floating-save-container.svelte-myrvk6{right:calc(var(--spacing,.25rem) * 6);bottom:calc(var(--spacing,.25rem) * 6);z-index:100;align-items:center;gap:calc(var(--spacing,.25rem) * 3.5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-accent-blue);background-color:var(--color-obsidian-900);padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 4);--tw-shadow:0 10px 30px var(--tw-shadow-color,#0006), 0 0 12px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);animation:.3s cubic-bezier(.175,.885,.32,1.275) forwards popUp;display:flex;position:absolute}@keyframes svelte-myrvk6-popUp{0%{opacity:0;transform:translateY(20px)scale(.9)}to{opacity:1;transform:translateY(0)scale(1)}}.save-hint.svelte-myrvk6{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-300)}.btn-save.svelte-myrvk6{border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 10px var(--tw-shadow-color,#38bdf840);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-save.svelte-myrvk6:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 14px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);scale:1.02}.btn-save.svelte-myrvk6:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y);scale:.97}.card-scene.svelte-1pt4ba2{perspective:900px;pointer-events:none;-webkit-user-select:none;user-select:none}.card.svelte-1pt4ba2{position:relative;width:340px;height:152px;border-radius:16px;overflow:hidden;background:linear-gradient(135deg,#181b24,#0b0d12 55%,#141925);border:1px solid rgba(255,255,255,.12);box-shadow:0 18px 44px #0009;font-family:Outfit,Inter,sans-serif;transform:rotateY(88deg);opacity:0;transition:transform .38s cubic-bezier(.175,.885,.32,1.2),opacity .3s ease,border-color .3s ease}.on.svelte-1pt4ba2 .card:where(.svelte-1pt4ba2){transform:rotateY(0);opacity:1}.card.processing.svelte-1pt4ba2{border-color:#38bdf866}.sheen.svelte-1pt4ba2{position:absolute;top:-20px;bottom:-20px;width:64px;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.06) 50%,transparent 100%);animation:svelte-1pt4ba2-sheen-drift 6.5s linear infinite}@keyframes svelte-1pt4ba2-sheen-drift{0%{left:-70px}to{left:410px}}.chip.svelte-1pt4ba2{position:absolute;left:20px;top:18px;width:38px;height:28px;border-radius:6px;background:linear-gradient(160deg,#f6d27a,#d9a946 55%,#b9842b)}.chip-line.svelte-1pt4ba2{position:absolute;background:#462d0073}.chip-line.h1.svelte-1pt4ba2{left:0;right:0;top:9px;height:1.5px}.chip-line.h2.svelte-1pt4ba2{left:0;right:0;top:18px;height:1.5px}.chip-line.v.svelte-1pt4ba2{top:0;bottom:0;left:18px;width:1.5px}.brand.svelte-1pt4ba2{position:absolute;left:68px;top:16px;color:#f3f4f6;font-size:14px;font-weight:850;letter-spacing:.08em}.brand-sub.svelte-1pt4ba2{position:absolute;left:68px;top:34px;color:#ffffff61;font-size:7.5px;font-weight:800;letter-spacing:.4em}.stamp.svelte-1pt4ba2{position:absolute;right:20px;top:18px;display:inline-flex;align-items:center;gap:5px;height:20px;padding:0 9px;border-radius:5px;border:1px solid rgba(244,63,94,.5);background:#f43f5e14;color:#f43f5e;font-size:8.5px;font-weight:850;letter-spacing:.18em}.initializing.svelte-1pt4ba2 .stamp:where(.svelte-1pt4ba2){border-color:#f59e0b80;background:#f59e0b14;color:#f59e0b}.processing.svelte-1pt4ba2 .stamp:where(.svelte-1pt4ba2){border-color:#38bdf880;background:#38bdf814;color:#38bdf8}.stamp-dot.svelte-1pt4ba2{width:6px;height:6px;border-radius:50%;background:currentColor;animation:svelte-1pt4ba2-stamp-blink 1.15s ease-in-out infinite}@keyframes svelte-1pt4ba2-stamp-blink{0%,to{opacity:.35}50%{opacity:1}}.matrix.svelte-1pt4ba2{position:absolute;left:22px;top:56px;width:296px;height:51px;display:flex;gap:4px}.col.svelte-1pt4ba2{display:flex;flex-direction:column;gap:3px}.dot.svelte-1pt4ba2{width:11px;height:6px;border-radius:2px;opacity:.1;transition:opacity .05s linear}.dot.lit.svelte-1pt4ba2{opacity:.95}.dot.red.svelte-1pt4ba2{background:#f43f5e}.dot.amber.svelte-1pt4ba2{background:#fbbf24}.dot.green.svelte-1pt4ba2{background:#34d399}.processing.svelte-1pt4ba2 .dot:where(.svelte-1pt4ba2){background:#22d3ee}.field-label.svelte-1pt4ba2{position:absolute;left:22px;top:118px;color:#ffffff4d;font-size:7px;font-weight:800;letter-spacing:.36em}.field-value.svelte-1pt4ba2{position:absolute;left:22px;top:128px;max-width:200px;color:#e5e7eb;font-size:11.5px;font-weight:750;letter-spacing:.04em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.card-number.svelte-1pt4ba2{position:absolute;right:22px;top:128px;color:#ffffff38;font-size:11px;font-weight:700;letter-spacing:.18em}.scope.svelte-xjziu1{width:540px;height:124px;background:linear-gradient(180deg,#07140c,#030a07);border:1px solid rgba(74,222,128,.25);border-radius:10px;box-shadow:0 10px 36px #0009,0 0 18px #22c55e24;overflow:hidden;pointer-events:none;-webkit-user-select:none;user-select:none;transform:scaleY(.04);opacity:0;transition:transform .32s cubic-bezier(.175,.885,.32,1.2),opacity .28s ease}.scope.on.svelte-xjziu1{transform:scaleY(1);opacity:1}.scope-inner.svelte-xjziu1{width:100%;height:100%;padding:10px 20px 12px;display:flex;flex-direction:column;gap:8px}.header.svelte-xjziu1{display:flex;align-items:center;gap:8px;height:18px;font-family:Outfit,Inter,sans-serif}.led.svelte-xjziu1{width:7px;height:7px;border-radius:50%;background:#4ade80;box-shadow:0 0 7px #4ade80;animation:svelte-xjziu1-led-blink 1.1s ease-in-out infinite;flex-shrink:0}.initializing.svelte-xjziu1 .led:where(.svelte-xjziu1){background:#f59e0b;box-shadow:0 0 7px #f59e0b}.processing.svelte-xjziu1 .led:where(.svelte-xjziu1){background:#38bdf8;box-shadow:0 0 7px #38bdf8}@keyframes svelte-xjziu1-led-blink{0%,to{opacity:.4}50%{opacity:1}}.title.svelte-xjziu1{color:#bbf7d0;font-size:10px;font-weight:800;letter-spacing:.12em}.subtitle.svelte-xjziu1{color:#bbf7d059;font-size:9px;font-weight:500;letter-spacing:.1em}.spacer.svelte-xjziu1{flex:1}.target-chip.svelte-xjziu1{display:inline-flex;align-items:center;gap:5px;background:#4ade800f;border:1px solid rgba(74,222,128,.3);border-radius:4px;padding:2px 8px}.tgt.svelte-xjziu1{color:#4ade80;font-size:8.5px;font-weight:800;letter-spacing:.1em}.tgt-label.svelte-xjziu1{color:#d1fae5;font-size:8.5px;font-weight:700;letter-spacing:.06em;max-width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stage.svelte-xjziu1{position:relative;flex:1}.grid-h.svelte-xjziu1{position:absolute;left:0;right:0;height:1px;background:#4ade8012}.g1.svelte-xjziu1{top:25%}.g2.svelte-xjziu1{top:50%;background:#4ade8024}.g3.svelte-xjziu1{top:75%}.grid-v.svelte-xjziu1{position:absolute;top:0;bottom:0;width:1px;background:#4ade800d}svg.svelte-xjziu1{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.trace.svelte-xjziu1{fill:none;stroke:#a7f3d0;stroke-width:1.8;vector-effect:non-scaling-stroke}.glow.svelte-xjziu1{fill:none;stroke:#4ade80;stroke-width:6;opacity:.16;vector-effect:non-scaling-stroke}.initializing.svelte-xjziu1 .trace:where(.svelte-xjziu1){stroke:#fcd34d}.initializing.svelte-xjziu1 .glow:where(.svelte-xjziu1){stroke:#f59e0b}.processing.svelte-xjziu1 .trace:where(.svelte-xjziu1){stroke:#7dd3fc}.processing.svelte-xjziu1 .glow:where(.svelte-xjziu1){stroke:#38bdf8}.radar.svelte-13tl5wx{--tone: #ff6b35;--tone-soft: rgba(255, 107, 53, .4);display:flex;align-items:center;gap:24px;pointer-events:none;-webkit-user-select:none;user-select:none}.radar.initializing.svelte-13tl5wx{--tone: #f59e0b;--tone-soft: rgba(245, 158, 11, .4)}.radar.processing.svelte-13tl5wx{--tone: #38bdf8;--tone-soft: rgba(56, 189, 248, .4)}.dial.svelte-13tl5wx{position:relative;width:124px;height:124px;border-radius:50%;background:radial-gradient(circle,#10181c,#06090b 85%,#04070a);border:1.2px solid var(--tone-soft);box-shadow:0 12px 34px #0000008c,0 0 22px color-mix(in srgb,var(--tone) 20%,transparent);overflow:hidden;transform:translateY(30px) scale(.85);opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.25),opacity .28s ease}.on.svelte-13tl5wx .dial:where(.svelte-13tl5wx){transform:translateY(0) scale(1);opacity:1}.range-ring.svelte-13tl5wx{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);border-radius:50%;border:1px solid rgba(255,255,255,.1)}.r1.svelte-13tl5wx{width:92px;height:92px}.r2.svelte-13tl5wx{width:56px;height:56px;border-color:#ffffff24}.axis.svelte-13tl5wx{position:absolute;background:#ffffff12}.axis.h.svelte-13tl5wx{left:0;right:0;top:50%;height:1px}.axis.v.svelte-13tl5wx{top:0;bottom:0;left:50%;width:1px}.sweep.svelte-13tl5wx{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;background:conic-gradient(from 0deg,transparent 0deg,transparent 300deg,color-mix(in srgb,var(--tone) 35%,transparent) 350deg,var(--tone) 360deg);animation:svelte-13tl5wx-sweep-rotate 1.5s linear infinite;opacity:.7}@keyframes svelte-13tl5wx-sweep-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.pulse-ring.svelte-13tl5wx{position:absolute;top:50%;left:50%;width:118px;height:118px;margin:-59px 0 0 -59px;border-radius:50%;border:1.5px solid var(--tone);opacity:0;animation:svelte-13tl5wx-ring-expand 1.4s cubic-bezier(.1,.7,.3,1) infinite}.p2.svelte-13tl5wx{animation-delay:.7s}@keyframes svelte-13tl5wx-ring-expand{0%{transform:scale(.18);opacity:calc(.25 + var(--lvl) * .65)}to{transform:scale(1);opacity:0}}.blip.svelte-13tl5wx{position:absolute;border-radius:50%;background:color-mix(in srgb,var(--tone) 60%,#ffffff);animation:svelte-13tl5wx-blip-flash 1.5s linear infinite}.b1.svelte-13tl5wx{left:88px;top:42px;width:5px;height:5px}.b2.svelte-13tl5wx{left:36px;top:86px;width:4px;height:4px;animation-delay:.55s}@keyframes svelte-13tl5wx-blip-flash{0%{opacity:1}55%{opacity:.05}to{opacity:.05}}.core.svelte-13tl5wx{position:absolute;top:50%;left:50%;width:12px;height:12px;margin:-6px 0 0 -6px;border-radius:50%;background:var(--tone);box-shadow:0 0 14px var(--tone);transform:scale(calc(1 + var(--lvl) * 1.6));transition:transform .05s linear}.plate.svelte-13tl5wx{display:flex;align-items:center;gap:10px;width:200px;height:52px;padding:0 12px;background:#0a0c10f0;border:1px solid rgba(255,255,255,.08);border-radius:10px;position:relative;transform:translate(-22px);opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.25) .06s,opacity .28s ease .06s}.on.svelte-13tl5wx .plate:where(.svelte-13tl5wx){transform:translate(0);opacity:1}.plate.svelte-13tl5wx:after{content:"";position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;border-radius:10px;border:1px solid var(--tone);animation:svelte-13tl5wx-lock-pulse 1.15s ease-in-out infinite;pointer-events:none}@keyframes svelte-13tl5wx-lock-pulse{0%,to{opacity:.25}50%{opacity:.85}}.reticle.svelte-13tl5wx{color:var(--tone);font-size:22px;line-height:1;animation:svelte-13tl5wx-lock-pulse 1.15s ease-in-out infinite}.plate-text.svelte-13tl5wx{display:flex;flex-direction:column;gap:2px;min-width:0;font-family:Outfit,Inter,sans-serif}.caption.svelte-13tl5wx{color:#ffffff59;font-size:7.5px;font-weight:800;letter-spacing:.18em}.label.svelte-13tl5wx{color:#e5e7eb;font-size:12px;font-weight:750;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ocean.svelte-1orgnnz{position:relative;width:380px;height:128px;border-radius:24px;overflow:hidden;background:linear-gradient(180deg,#081220f5,#030912f7);border:1.2px solid rgba(34,211,238,.25);box-shadow:0 14px 40px #0009,0 0 24px #0891b238;pointer-events:none;-webkit-user-select:none;user-select:none;font-family:Outfit,Inter,sans-serif;opacity:0;transform:translateY(16px);transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .3s ease}.ocean.on.svelte-1orgnnz{opacity:1;transform:translateY(0)}.ocean.processing.svelte-1orgnnz{border-color:#38bdf859}.moon.svelte-1orgnnz{position:absolute;top:10px;right:62px;width:22px;height:22px;border-radius:50%;background:#e0f2fed9;box-shadow:0 0 16px #bae6fd99;animation:svelte-1orgnnz-moon-glow 2.4s ease-in-out infinite}@keyframes svelte-1orgnnz-moon-glow{0%,to{opacity:.55}50%{opacity:.8}}.title.svelte-1orgnnz{position:absolute;left:18px;top:12px;color:#bae6fd8c;font-size:9.5px;font-weight:800;letter-spacing:.22em}.subtitle.svelte-1orgnnz{position:absolute;left:18px;top:25px;color:#7dd3fc59;font-size:8px;font-weight:500;letter-spacing:.08em}.water.svelte-1orgnnz{position:absolute;left:0;right:0;top:38px;height:90px;transform:translateY(92px);transition:transform .45s cubic-bezier(.22,1,.36,1)}.on.svelte-1orgnnz .water:where(.svelte-1orgnnz){transform:translateY(0)}svg.svelte-1orgnnz{display:block;width:100%;height:100%}.w1.svelte-1orgnnz{fill:#0284c759;stroke:#0284c733;stroke-width:1}.w2.svelte-1orgnnz{fill:#06b6d473;stroke:#06b6d440;stroke-width:1}.w3.svelte-1orgnnz{fill:#22d3ee99;stroke:#a5f3fc8c;stroke-width:1.5}.processing.svelte-1orgnnz .w1:where(.svelte-1orgnnz){fill:#1e40af66}.processing.svelte-1orgnnz .w2:where(.svelte-1orgnnz){fill:#3b82f673}.processing.svelte-1orgnnz .w3:where(.svelte-1orgnnz){fill:#60a5fa8c;stroke:#93c5fd99}.bubble.svelte-1orgnnz{position:absolute;bottom:-8px;width:5px;height:5px;border-radius:50%;border:1px solid rgba(165,243,252,.7);background:#a5f3fc1f;animation:svelte-1orgnnz-bubble-rise 4.2s linear infinite;opacity:0}@keyframes svelte-1orgnnz-bubble-rise{0%{transform:translateY(0);opacity:0}12%{opacity:.55}85%{opacity:.25}to{transform:translateY(-78px);opacity:0}}.buoy.svelte-1orgnnz{position:absolute;left:50%;transform:translate(-50%);display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 12px 0 10px;border-radius:12px;background:#082f49eb;border:1px solid rgba(125,211,252,.5);opacity:0;transition:opacity .3s ease .2s}.on.svelte-1orgnnz .buoy:where(.svelte-1orgnnz){opacity:1}.buoy-dot.svelte-1orgnnz{width:7px;height:7px;border-radius:50%;background:#22d3ee;animation:svelte-1orgnnz-moon-glow 1.15s ease-in-out infinite;flex-shrink:0}.processing.svelte-1orgnnz .buoy-dot:where(.svelte-1orgnnz){background:#60a5fa}.buoy-label.svelte-1orgnnz{color:#e0f2fe;font-size:10px;font-weight:700;max-width:130px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mono.svelte-12wa5lj{width:190px;height:112px;background:#000;border:1px solid rgba(255,255,255,.16);border-radius:6px;position:relative;font-family:Outfit,Inter,sans-serif;pointer-events:none;-webkit-user-select:none;user-select:none;opacity:0;transition:opacity .28s ease}.mono.on.svelte-12wa5lj{opacity:1}.status.svelte-12wa5lj{position:absolute;left:18px;top:14px;display:flex;align-items:center;gap:6px}.dot.svelte-12wa5lj{width:6px;height:6px;border-radius:3px;border:1px solid rgba(245,245,245,.7);background:transparent}.dot.lit.svelte-12wa5lj{background:#f5f5f5;animation:svelte-12wa5lj-mono-blink 1.2s ease-in-out infinite}.dot.processing.svelte-12wa5lj{animation:svelte-12wa5lj-mono-blink-dim 1.2s ease-in-out infinite}.dot.standby.svelte-12wa5lj{opacity:.35}@keyframes svelte-12wa5lj-mono-blink{0%,to{opacity:.5}50%{opacity:1}}@keyframes svelte-12wa5lj-mono-blink-dim{0%,to{opacity:.3}50%{opacity:1}}.status-text.svelte-12wa5lj{color:#ffffff8c;font-size:8px;font-weight:700;letter-spacing:.25em}.bars.svelte-12wa5lj{position:absolute;left:18px;bottom:28px;width:154px;height:52px;display:flex;align-items:flex-end;justify-content:center;gap:14px}.bar.svelte-12wa5lj{width:12px;background:#f5f5f5;border-radius:6px;opacity:1;transition:height .05s linear,opacity .2s ease}.bar.dim.svelte-12wa5lj{opacity:.3}.bar.processing.svelte-12wa5lj{opacity:.55}.baseline.svelte-12wa5lj{position:absolute;left:18px;bottom:28px;width:154px;height:1px;background:#ffffff1f}.target.svelte-12wa5lj{position:absolute;left:18px;bottom:6px;width:154px;text-align:center;color:#fff6;font-size:8.5px;font-weight:600;letter-spacing:.03em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.spectrum.svelte-194vixl{width:440px;height:132px;background:linear-gradient(160deg,#1b0c2e,#0a0614);border:1px solid rgba(232,121,249,.25);border-radius:16px;box-shadow:0 0 26px #c084fc38;position:relative;overflow:hidden;pointer-events:none;-webkit-user-select:none;user-select:none;transform:scaleY(.04);transform-origin:bottom center;opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .16s ease}.spectrum.on.svelte-194vixl{transform:scaleY(1);opacity:1}.header.svelte-194vixl{position:absolute;left:20px;top:12px;right:20px;height:16px;display:flex;align-items:center;gap:8px;font-family:Outfit,Inter,sans-serif}.led.svelte-194vixl{width:7px;height:7px;border-radius:50%;background:#e879f9;box-shadow:0 0 6px #e879f9;animation:svelte-194vixl-spectrum-blink 1.2s ease-in-out infinite;flex-shrink:0}.led.standby.svelte-194vixl{background:#f59e0b;box-shadow:0 0 6px #f59e0b}.led.processing.svelte-194vixl{background:#38bdf8;box-shadow:0 0 6px #38bdf8}@keyframes svelte-194vixl-spectrum-blink{0%,to{opacity:.4}50%{opacity:1}}.title.svelte-194vixl{color:#f5d0fe;font-size:10px;font-weight:800;letter-spacing:.15em}.subtitle.svelte-194vixl{color:#f5d0fe59;font-size:9px;font-weight:500;letter-spacing:.1em}.spacer.svelte-194vixl{flex:1}.chip.svelte-194vixl{display:inline-flex;align-items:center;gap:5px;background:#e879f914;border:1px solid rgba(232,121,249,.3);border-radius:4px;padding:2px 8px}.tgt.svelte-194vixl{color:#e879f9;font-size:8.5px;font-weight:800;letter-spacing:.1em}.tgt-label.svelte-194vixl{color:#fae8ff;font-size:8.5px;font-weight:700;letter-spacing:.06em;max-width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bars.svelte-194vixl{position:absolute;left:20px;right:20px;bottom:16px;display:flex;gap:6.5px;align-items:flex-end;height:96px}.bar.svelte-194vixl{width:19px;border-radius:3px;background:linear-gradient(180deg,#f0abfc,#c084fc 45%,#38bdf8);transition:height .05s linear}.floor.svelte-194vixl{position:absolute;left:20px;right:20px;bottom:16px;height:1px;background:#e879f926}.terminal.svelte-pvtvge{width:380px;height:130px;background:#0d1b4c;border:1.5px solid rgba(125,211,252,.35);border-radius:8px;box-shadow:0 0 20px #080f3099;overflow:hidden;pointer-events:none;-webkit-user-select:none;user-select:none;transform:scaleY(.04);transform-origin:top center;opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .16s ease}.terminal.on.svelte-pvtvge{transform:scaleY(1);opacity:1}.titlebar.svelte-pvtvge{height:24px;background:#ffffff0f;display:flex;align-items:center;gap:6px;padding:0 12px;font-family:Outfit,Inter,sans-serif}.dot.svelte-pvtvge{width:8px;height:8px;border-radius:50%;background:#ffffff38}.titletext.svelte-pvtvge{color:#e0f2fe8c;font-size:9px;font-weight:700;letter-spacing:.1em}.body.svelte-pvtvge{padding:12px 16px;display:flex;flex-direction:column;gap:8px}.line1.svelte-pvtvge{color:#bae6fdb3;font-size:10px;font-weight:600;font-family:SF Mono,Menlo,Consolas,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.line2.svelte-pvtvge{color:#fff;font-size:11px;font-weight:700;letter-spacing:.05em;font-family:SF Mono,Menlo,Consolas,monospace}.line2.standby.svelte-pvtvge{color:#fcd34d}.line2.processing.svelte-pvtvge{color:#7dd3fc}.line3.svelte-pvtvge{color:#bae6fd73;font-size:9.5px;font-weight:500;font-family:SF Mono,Menlo,Consolas,monospace}.vinyl.svelte-kq5b5i{width:320px;height:132px;background:linear-gradient(180deg,#f7ecd9,#e7d6b8);border:1.5px solid rgba(120,89,53,.35);border-radius:14px;box-shadow:0 0 22px #00000059;position:relative;pointer-events:none;-webkit-user-select:none;user-select:none;transform:translateY(16px);opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .28s ease}.vinyl.on.svelte-kq5b5i{transform:translateY(0);opacity:1}.header.svelte-kq5b5i{position:absolute;left:16px;top:12px;right:16px;height:14px;display:flex;align-items:center;gap:8px;font-family:Outfit,Inter,sans-serif}.vu-label.svelte-kq5b5i{color:#5b4530;font-size:12px;font-weight:900;letter-spacing:.17em}.subtitle.svelte-kq5b5i{color:#5b45308c;font-size:8px;font-weight:700;letter-spacing:.19em}.spacer.svelte-kq5b5i{flex:1}.led.svelte-kq5b5i{width:8px;height:8px;border-radius:50%;background:#dc2626;box-shadow:0 0 6px #dc2626;animation:svelte-kq5b5i-vinyl-blink 1.2s ease-in-out infinite;flex-shrink:0}.led.standby.svelte-kq5b5i{background:#f59e0b;box-shadow:0 0 6px #f59e0b}.led.processing.svelte-kq5b5i{background:#38bdf8;box-shadow:0 0 6px #38bdf8}@keyframes svelte-kq5b5i-vinyl-blink{0%,to{opacity:.4}50%{opacity:1}}.face.svelte-kq5b5i{position:absolute;left:16px;top:30px;width:288px;height:72px;background:#fffcf48c;border:1px solid rgba(120,89,53,.25);border-radius:8px}.tick.svelte-kq5b5i{position:absolute;top:14px;width:1.5px;height:22px;background:#5b453066}.tick.red.svelte-kq5b5i{background:#dc2626;height:30px}.scale-label.svelte-kq5b5i{position:absolute;color:#5b453080;font-size:7px;font-family:Outfit,Inter,sans-serif}.scale-label.red.svelte-kq5b5i{color:#dc2626;font-weight:800}.needle-svg.svelte-kq5b5i{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.needle.svelte-kq5b5i{fill:none;stroke:#292524;stroke-width:2px;vector-effect:non-scaling-stroke}.pivot.svelte-kq5b5i{position:absolute;left:138px;top:64px;width:12px;height:12px;border-radius:50%;background:#292524}.target.svelte-kq5b5i{position:absolute;left:16px;bottom:12px;width:288px;color:#5b4530a6;font-size:9.5px;font-weight:700;font-family:Outfit,Inter,sans-serif;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}html,body,#app{background:transparent!important;background-color:transparent!important;box-shadow:none!important;border:none!important;outline:none!important;overflow:hidden!important;will-change:transform,opacity;backface-visibility:hidden}*:focus{outline:none!important;box-shadow:none!important}.overlay-root.svelte-rmqsd6{width:100%;height:100%;background:transparent!important;display:flex;align-items:center;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;overflow:hidden!important}.overlay-stack.svelte-rmqsd6{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;max-width:100%;max-height:100%;pointer-events:none}.visualizer-container.svelte-rmqsd6{display:flex;align-items:center;justify-content:center;pointer-events:none;min-height:0;flex-shrink:1;overflow:hidden}.system-response-box.svelte-rmqsd6{position:relative;z-index:10;display:flex;align-items:center;gap:10px;height:46px;padding:0 20px;border-radius:23px;font-family:Outfit,Inter,system-ui,sans-serif;opacity:0;transform:translateY(10px);transition:transform .34s cubic-bezier(.175,.885,.32,1.25),opacity .28s ease;pointer-events:none;flex-shrink:0}.system-response-box.on.svelte-rmqsd6{opacity:1;transform:translateY(0)}.system-response-box.speaking.svelte-rmqsd6{background:#042f24f0;border:1.2px solid rgba(16,185,129,.55);box-shadow:0 10px 28px #00000080,0 0 18px #10b98140;color:#a7f3d0}.system-response-box.command.svelte-rmqsd6{background:#1e103cf0;border:1.2px solid rgba(168,85,247,.65);box-shadow:0 10px 28px #00000080,0 0 18px #a855f74d;color:#e9d5ff}.system-response-box.mcp.svelte-rmqsd6{background:#4c0519f0;border:1.2px solid rgba(244,63,94,.55);box-shadow:0 10px 28px #00000080,0 0 18px #f43f5e40;color:#fecdd3}.cmd-icon.svelte-rmqsd6{font-size:16px;line-height:1;color:#c084fc;animation:svelte-rmqsd6-flash 1.5s infinite ease-in-out}.mini-eq.svelte-rmqsd6{display:flex;align-items:center;gap:2.5px;height:22px}.eq-bar.svelte-rmqsd6{width:3px;height:8px;border-radius:1.5px;background:#34d399;animation:svelte-rmqsd6-eq-bounce .8s ease-in-out infinite alternate}@keyframes svelte-rmqsd6-eq-bounce{0%{height:7px}to{height:21px}}.pill-text.svelte-rmqsd6{display:flex;flex-direction:column;gap:1px;min-width:0}.pill-title.svelte-rmqsd6{font-size:10px;font-weight:850;letter-spacing:.15em}.pill-target.svelte-rmqsd6{font-size:8.5px;font-weight:600;opacity:.55;max-width:180px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pulse-dot.svelte-rmqsd6{width:10px;height:10px;background-color:#f43f5e;border-radius:50%;animation:svelte-rmqsd6-flash 1.2s infinite ease-in-out}@keyframes svelte-rmqsd6-flash{0%,to{opacity:.3;transform:scale(.9)}50%{opacity:1;transform:scale(1.15)}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.diagnostic-window.svelte-45v8pc{background-color:var(--color-obsidian-950);width:100vw;height:100vh;padding:calc(var(--spacing,.25rem) * 5);color:var(--text);justify-content:center;align-items:flex-start;display:flex;overflow-y:auto}.modal-card.svelte-45v8pc{width:100%;max-width:520px;animation:.3s cubic-bezier(.175,.885,.32,1.2) forwards scaleUp}.head.svelte-45v8pc{margin-bottom:calc(var(--spacing,.25rem) * 5);align-items:flex-start;gap:calc(var(--spacing,.25rem) * 3);display:flex}.head-icon.svelte-45v8pc{--tw-leading:1;flex-shrink:0;font-size:32px;line-height:1}.title.svelte-45v8pc{font-size:var(--text-xl,1.25rem);line-height:var(--tw-leading,var(--text-xl--line-height,calc(1.75 / 1.25)));--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800);--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em);color:var(--color-white,#fff)}.subtitle.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--color-obsidian-400);font-size:12.5px}.steps.svelte-45v8pc{margin:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 2.5);padding:calc(var(--spacing,.25rem) * 0);flex-direction:column;list-style-type:none;display:flex}.step.svelte-45v8pc{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 3);border-radius:var(--radius-lg,.5rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;display:flex}@supports (color:color-mix(in lab,red,red)){.step.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.step.svelte-45v8pc{padding:calc(var(--spacing,.25rem) * 3)}.step.done.svelte-45v8pc{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.step.done.svelte-45v8pc{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.step.done.svelte-45v8pc{background-color:#0000}.step-icon.svelte-45v8pc{--tw-leading:calc(var(--spacing,.25rem) * 6);font-size:16px;line-height:calc(var(--spacing,.25rem) * 6);flex-shrink:0}.step-body.svelte-45v8pc{min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex}.step-title.svelte-45v8pc{--tw-font-weight:var(--font-weight-bold,700);font-size:13.5px;font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff)}.step-detail.svelte-45v8pc{--tw-leading:var(--leading-relaxed,1.625);font-size:12.5px;line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-300)}.step-detail.svelte-45v8pc code:where(.svelte-45v8pc){background-color:#ffffff0d;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.step-detail.svelte-45v8pc code:where(.svelte-45v8pc){background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.step-detail.svelte-45v8pc code:where(.svelte-45v8pc){padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue)}.warn-note.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.warn-note.svelte-45v8pc{color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.privacy-note.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:#5ee9b5e6}@supports (color:color-mix(in lab,red,red)){.privacy-note.svelte-45v8pc{color:color-mix(in oklab,var(--color-emerald-300,oklch(84.5% .143 164.978)) 90%,transparent)}}.muted.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--color-obsidian-400);font-size:11px}.shortcut-list.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 1.5);padding:calc(var(--spacing,.25rem) * 0);flex-wrap:wrap;list-style-type:none;display:flex}.shortcut-keys.svelte-45v8pc{background-color:#ffffff0d;border-radius:.25rem;display:inline-block}@supports (color:color-mix(in lab,red,red)){.shortcut-keys.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.shortcut-keys.svelte-45v8pc{padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);font-size:11px}.shortcut-list.svelte-45v8pc li.unbound:where(.svelte-45v8pc) .shortcut-keys:where(.svelte-45v8pc){color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.shortcut-list.svelte-45v8pc li.unbound:where(.svelte-45v8pc) .shortcut-keys:where(.svelte-45v8pc){color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.step-actions.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 2);align-items:center;gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}.manual.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#0006}@supports (color:color-mix(in lab,red,red)){.manual.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-black,#000) 40%,transparent)}}.manual.svelte-45v8pc{padding:calc(var(--spacing,.25rem) * 2.5)}.manual.svelte-45v8pc pre:where(.svelte-45v8pc){margin:calc(var(--spacing,.25rem) * 0);max-height:180px;font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);word-break:break-all;white-space:pre-wrap;color:var(--color-obsidian-200);overflow-y:auto}.error-container.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 4);align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3633;border-radius:.25rem;width:100%;display:flex}@supports (color:color-mix(in lab,red,red)){.error-container.svelte-45v8pc{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.error-container.svelte-45v8pc{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.error-container.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.error-container.svelte-45v8pc{padding:calc(var(--spacing,.25rem) * 3);text-align:left;color:var(--color-red-400,oklch(70.4% .191 22.216));font-size:12px}.error-icon.svelte-45v8pc{flex-shrink:0}.error-msg.svelte-45v8pc{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word}.modal-actions.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 5);justify-content:flex-end;display:flex}.btn-primary.svelte-45v8pc{cursor:pointer;border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-bold,700);font-size:12.5px;font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 14px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-primary.svelte-45v8pc:hover:not(:disabled){--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 18px var(--tw-shadow-color,#38bdf873);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-primary.svelte-45v8pc:disabled{cursor:default;opacity:.6;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.btn-secondary.svelte-45v8pc{cursor:pointer;border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-800);padding-inline:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-semibold,600);font-size:12.5px;font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-300);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-secondary.svelte-45v8pc:hover{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-45v8pc:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 10%,transparent)}}.btn-secondary.svelte-45v8pc:hover{background-color:var(--color-obsidian-700);color:var(--color-white,#fff)}.btn-link.svelte-45v8pc{cursor:pointer;border-style:var(--tw-border-style);padding:calc(var(--spacing,.25rem) * 0);--tw-font-weight:var(--font-weight-semibold,600);font-size:12px;font-weight:var(--font-weight-semibold,600);color:var(--color-accent-blue);text-underline-offset:2px;background-color:#0000;border-width:0;text-decoration-line:underline}.loading-container.svelte-45v8pc{justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-direction:column;width:100%;height:100%;display:flex}.loading-label.svelte-45v8pc{text-align:center;--tw-font-weight:var(--font-weight-semibold,600);font-size:13.5px;font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-200)}.hint.svelte-45v8pc{text-align:center;max-width:280px;color:var(--color-obsidian-400);font-size:11.5px}.spinner.svelte-45v8pc{height:calc(var(--spacing,.25rem) * 7);width:calc(var(--spacing,.25rem) * 7);animation:var(--animate-spin,spin 1s linear infinite);border-style:var(--tw-border-style);border-width:2.5px;border-color:#ffffff0d;border-radius:3.40282e38px}@supports (color:color-mix(in lab,red,red)){.spinner.svelte-45v8pc{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.spinner.svelte-45v8pc{border-top-color:var(--color-accent-blue)}@keyframes svelte-45v8pc-scaleUp{0%{opacity:0;transform:scale(.98)}to{opacity:1;transform:none}}.vx-wizard{--vx-bg-0: #0e1116;--vx-bg-1: #14181f;--vx-bg-2: #1a1f28;--vx-bg-3: #232a35;--vx-bg-4: #2d3540;--vx-line: #2a313c;--vx-line-2: #3a4350;--vx-txt-0: #e8edf3;--vx-txt-1: #b6bfcb;--vx-txt-2: #7e8896;--vx-txt-3: #555f6c;--vx-cyan-0: #22d4ef;--vx-cyan-1: #7ae8f8;--vx-cyan-2: #5cc4d8;--vx-cyan-d: #0d8ea3;--vx-cyan-b: rgba(34, 212, 239, .45);--vx-gold-0: #e8a019;--vx-gold-1: #f5c842;--vx-gold-glow: rgba(232, 160, 25, .3);--vx-good: #6ad48a;--vx-warn: #ffb454;--vx-bad: #f4636e;--vx-mono: ui-monospace, "JetBrains Mono", SFMono-Regular, Consolas, monospace;--vx-ease: cubic-bezier(.21, .6, .35, 1);--vx-sel-bg: linear-gradient(180deg, rgba(34, 212, 239, .07), rgba(34, 212, 239, .01)), var(--vx-bg-1);--vx-sel-shadow: 0 18px 40px -20px rgba(34, 212, 239, .35), 0 0 0 1px rgba(34, 212, 239, .15);--vx-panel-shadow: 0 12px 36px rgba(0, 0, 0, .5), 0 0 0 1px var(--vx-line);--vx-btn-shadow: 0 6px 24px rgba(34, 212, 239, .25), 0 0 0 1px rgba(34, 212, 239, .4) inset;color:var(--vx-txt-0);background:var(--vx-bg-0)}.vx-wizard .vx-eyebrow{font-family:var(--vx-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--vx-cyan-2)}.vx-wizard .vx-label{font-family:var(--vx-mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--vx-txt-3)}.vx-wizard h2.vx-title{margin:8px 0 6px;font-size:30px;letter-spacing:-.03em;line-height:1.05;font-weight:600}.vx-wizard p.vx-lede{margin:0;font-size:14px;line-height:1.5;color:var(--vx-txt-1)}.vx-wizard p.vx-lede b{color:var(--vx-txt-0);font-weight:600}.vx-wizard .vx-card{border:1px solid var(--vx-line);border-radius:14px;background:var(--vx-bg-1);cursor:pointer;text-align:left;color:inherit;font:inherit;transition:border-color .28s var(--vx-ease),background .28s var(--vx-ease),box-shadow .28s var(--vx-ease)}.vx-wizard .vx-card:hover:not(.vx-on){border-color:var(--vx-line-2)}.vx-wizard .vx-card.vx-on{border-color:var(--vx-cyan-b);background:var(--vx-sel-bg);box-shadow:var(--vx-sel-shadow)}.vx-wizard .vx-check{width:24px;height:24px;flex:none;border-radius:50%;border:1px solid var(--vx-line-2);background:transparent;display:grid;place-items:center;font-family:var(--vx-mono);font-size:12px;color:#00222a;transition:all .25s}.vx-wizard .vx-card.vx-on .vx-check{border-color:var(--vx-cyan-0);background:var(--vx-cyan-0)}.vx-wizard .vx-check>span{opacity:0;transition:opacity .2s}.vx-wizard .vx-card.vx-on .vx-check>span{opacity:1}.vx-wizard .vx-btn{height:44px;padding:0 18px;border-radius:10px;border:1px solid var(--vx-line);background:#ffffff08;color:var(--vx-txt-0);font:inherit;font-size:13.5px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:8px;transition:all .2s}.vx-wizard .vx-btn:hover:not(:disabled){border-color:var(--vx-line-2);background:#ffffff0f}.vx-wizard .vx-btn.vx-primary{border-color:#fff3;background:linear-gradient(180deg,var(--vx-cyan-0),var(--vx-cyan-d));color:#00222a;box-shadow:var(--vx-btn-shadow)}.vx-wizard .vx-btn.vx-primary:hover:not(:disabled){background:linear-gradient(180deg,var(--vx-cyan-1),var(--vx-cyan-0))}.vx-wizard .vx-btn.vx-ghost{border-color:transparent;background:transparent;color:var(--vx-txt-1)}.vx-wizard .vx-btn.vx-ghost:hover:not(:disabled){background:#ffffff0a;color:var(--vx-txt-0)}.vx-wizard .vx-btn:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}.vx-wizard .vx-meter{height:8px;border-radius:999px;background:var(--vx-bg-4);overflow:hidden}.vx-wizard .vx-meter>div{height:100%;border-radius:999px;transition:width .6s var(--vx-ease),background .4s}.vx-wizard .vx-keycap{min-width:56px;height:56px;padding:0 16px;border-radius:12px;display:grid;place-items:center;font-family:var(--vx-mono);font-size:16px;font-weight:500;background:linear-gradient(180deg,var(--vx-bg-3),var(--vx-bg-2));color:var(--vx-txt-0);border:1px solid var(--vx-line-2);box-shadow:0 4px 0 var(--vx-bg-0),inset 0 1px #ffffff14;transition:all .25s}.vx-wizard .vx-keycap.vx-hot{background:linear-gradient(180deg,#22d4ef40,#22d4ef14);color:var(--vx-cyan-1);border-color:var(--vx-cyan-b);box-shadow:0 4px #0d8ea399,inset 0 1px #ffffff14}.vx-wizard .vx-plus{font-family:var(--vx-mono);color:var(--vx-txt-3);font-size:18px}.vx-wizard .vx-pill{display:inline-flex;align-items:center;gap:8px;padding:7px 13px;border-radius:999px;border:1px solid var(--vx-line);background:#ffffff05;font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-txt-2)}.vx-wizard .vx-pill.vx-ok{border-color:#6ad48a66;color:var(--vx-good)}.vx-wizard .vx-pill.vx-busy{border-color:var(--vx-cyan-b);color:var(--vx-cyan-1)}.vx-wizard .vx-pill.vx-err{border-color:#f4636e73;color:var(--vx-bad)}@keyframes vxPulse{0%,to{opacity:1}50%{opacity:.35}}@keyframes vxPop{0%{opacity:0;transform:translateY(6px) scale(.98)}to{opacity:1;transform:none}}@keyframes vxRing{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:none}}@keyframes vxScan{0%{transform:translate(-100%)}to{transform:translate(100%)}}@keyframes vxBar{0%,to{transform:scaleY(.35)}50%{transform:scaleY(1)}}@keyframes vxSpin{to{transform:rotate(360deg)}}.vx-wizard .vx-spinner{width:13px;height:13px;border-radius:50%;border:2px solid rgba(34,212,239,.25);border-top-color:var(--vx-cyan-0);animation:vxSpin .7s linear infinite;flex:none}.welcome.svelte-1gicu21{flex:1;min-height:0;display:grid;grid-template-columns:1.1fr 1fr;gap:48px;align-items:center}.halo.svelte-1gicu21{position:relative;width:96px;height:96px;display:grid;place-items:center;margin-bottom:22px}.ring.svelte-1gicu21{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;border:1px solid rgba(34,212,239,.25);animation:vxPulse 2.4s infinite}.ring.inner.svelte-1gicu21{top:12px;right:12px;bottom:12px;left:12px;border-color:#22d4ef26;animation-delay:.6s}.halo.svelte-1gicu21 img:where(.svelte-1gicu21){width:52px;height:52px;border-radius:12px;box-shadow:0 0 16px #22d4ef66}h1.svelte-1gicu21{margin:12px 0 14px;font-size:clamp(30px,4vw,50px);line-height:1.02;letter-spacing:-.035em;font-weight:600}h1.svelte-1gicu21 span:where(.svelte-1gicu21){color:var(--vx-gold-1)}.intro.svelte-1gicu21 p:where(.svelte-1gicu21){margin:0;max-width:560px;font-size:15px;line-height:1.55;color:var(--vx-txt-1)}.reassure.svelte-1gicu21{margin-top:22px;display:inline-flex;align-items:center;gap:10px;padding:9px 14px;border:1px solid rgba(34,212,239,.25);border-radius:999px;background:#22d4ef0a;font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-cyan-2)}.reassure.svelte-1gicu21 span:where(.svelte-1gicu21){color:var(--vx-gold-1)}.cards.svelte-1gicu21{display:grid;grid-template-columns:1fr 1fr;gap:12px}.step-card.svelte-1gicu21{padding:16px 18px;background:linear-gradient(180deg,#ffffff05,#fff0);cursor:default}.head.svelte-1gicu21{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.glyph.svelte-1gicu21{font-family:var(--vx-mono);font-size:20px;color:var(--vx-cyan-1)}.num.svelte-1gicu21{font-family:var(--vx-mono);font-size:11px;color:var(--vx-txt-3)}.title.svelte-1gicu21{font-weight:600;font-size:14.5px;margin-bottom:4px}.desc.svelte-1gicu21{font-size:12.5px;line-height:1.45;color:var(--vx-txt-2)}@media (max-width: 1000px){.welcome.svelte-1gicu21{grid-template-columns:1fr;gap:24px;align-content:start}}.modal-backdrop.svelte-1c9i6zy{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b8;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);display:flex;align-items:center;justify-content:center;z-index:1200;padding:20px;animation:svelte-1c9i6zy-fadeIn .2s ease-out}@keyframes svelte-1c9i6zy-fadeIn{0%{opacity:0}to{opacity:1}}.modal-card.svelte-1c9i6zy{width:100%;max-width:580px;max-height:90vh;background:var(--vx-bg-1);border:1px solid var(--vx-line-2);border-radius:18px;box-shadow:0 24px 60px #000000b3,0 0 0 1px #22d4ef33;display:flex;flex-direction:column;overflow:hidden;color:var(--vx-txt-0)}.modal-header.svelte-1c9i6zy{display:flex;align-items:center;justify-content:space-between;padding:16px 22px;border-bottom:1px solid var(--vx-line);background:var(--vx-bg-2)}.modal-title-row.svelte-1c9i6zy{display:flex;align-items:center;gap:10px}.modal-glyph.svelte-1c9i6zy{font-size:20px}.modal-header.svelte-1c9i6zy h3:where(.svelte-1c9i6zy){margin:0;font-size:16px;font-weight:600;letter-spacing:-.01em;color:var(--vx-txt-0)}.close-btn.svelte-1c9i6zy{background:transparent;border:none;color:var(--vx-txt-2);font-size:16px;cursor:pointer;padding:6px;border-radius:8px;transition:all .2s;line-height:1}.close-btn.svelte-1c9i6zy:hover{color:var(--vx-txt-0);background:#ffffff14}.modal-body.svelte-1c9i6zy{padding:20px 22px;overflow-y:auto;display:flex;flex-direction:column;gap:16px}.modal-hint.svelte-1c9i6zy{margin:0;font-size:12.5px;line-height:1.5;color:var(--vx-txt-2)}.modal-hint.svelte-1c9i6zy code:where(.svelte-1c9i6zy),.field-hint.svelte-1c9i6zy code:where(.svelte-1c9i6zy){background:var(--vx-bg-4);color:var(--vx-cyan-1);padding:2px 5px;border-radius:4px;font-family:var(--vx-mono);font-size:11px;border:1px solid var(--vx-line)}.field-group.svelte-1c9i6zy{display:flex;flex-direction:column;gap:12px;background:#ffffff05;border:1px solid var(--vx-line);border-radius:14px;padding:16px 18px}.field.svelte-1c9i6zy{display:flex;flex-direction:column;gap:6px}.field-title.svelte-1c9i6zy{font-size:12.5px;font-weight:500;color:var(--vx-txt-1)}.vx-input.svelte-1c9i6zy{width:100%;height:38px;padding:0 12px;background:var(--vx-bg-0);border:1px solid var(--vx-line-2);border-radius:8px;color:var(--vx-txt-0);font-family:inherit;font-size:13px;outline:none;transition:border-color .2s,box-shadow .2s;box-sizing:border-box}.vx-input.svelte-1c9i6zy:focus{border-color:var(--vx-cyan-0);box-shadow:0 0 0 2px var(--vx-cyan-b)}.vx-input.svelte-1c9i6zy::placeholder{color:var(--vx-txt-3)}.field-hint.svelte-1c9i6zy{margin:-4px 0 4px;font-size:11px;line-height:1.45;color:var(--vx-txt-3)}.discovered-models.svelte-1c9i6zy{display:flex;flex-direction:column;gap:6px;margin-top:-4px}.model-tags.svelte-1c9i6zy{display:flex;flex-wrap:wrap;gap:6px}.tag-btn.svelte-1c9i6zy{font-size:11.5px;padding:3px 9px;border-radius:6px;background:var(--vx-bg-3);border:1px solid var(--vx-line-2);color:var(--vx-txt-2);cursor:pointer;transition:all .2s}.tag-btn.svelte-1c9i6zy:hover{color:var(--vx-txt-0);border-color:var(--vx-cyan-0)}.tag-btn.active.svelte-1c9i6zy{background:#22d4ef26;border-color:var(--vx-cyan-0);color:var(--vx-cyan-1);font-weight:600}.test-row.svelte-1c9i6zy{display:flex;align-items:center;gap:12px;margin-top:8px;flex-wrap:wrap}.btn-test.svelte-1c9i6zy{height:36px;padding:0 16px;border-radius:8px;background:var(--vx-bg-4);border:1px solid var(--vx-line-2);color:var(--vx-txt-0);font-size:12.5px;font-weight:600;cursor:pointer;transition:all .2s;display:inline-flex;align-items:center;gap:6px}.btn-test.svelte-1c9i6zy:hover:not(:disabled){background:var(--vx-line-2);border-color:var(--vx-cyan-0)}.btn-test.svelte-1c9i6zy:disabled{opacity:.5;cursor:not-allowed}.status-pill.svelte-1c9i6zy{padding:6px 12px;border-radius:8px;font-size:11.5px;font-weight:500;line-height:1.35;word-break:break-word;max-width:100%}.status-pill.success.svelte-1c9i6zy{background:#6ad48a26;color:var(--vx-good);border:1px solid rgba(106,212,138,.3)}.status-pill.error.svelte-1c9i6zy{background:#f4636e26;color:var(--vx-bad);border:1px solid rgba(244,99,110,.3)}.modal-footer.svelte-1c9i6zy{padding:14px 22px;border-top:1px solid var(--vx-line);background:var(--vx-bg-2);display:flex;align-items:center;justify-content:space-between;gap:12px}.footer-status.svelte-1c9i6zy{font-size:12px}.status-msg.ok.svelte-1c9i6zy{color:var(--vx-good);font-weight:500}.status-msg.warn.svelte-1c9i6zy{color:var(--vx-warn)}.footer-actions.svelte-1c9i6zy{display:flex;gap:10px}.engine-step.svelte-xv54mf{flex:1;min-height:0;display:flex;flex-direction:column;gap:10px}.head.svelte-xv54mf{display:flex;gap:20px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-xv54mf{max-width:760px;min-width:0}.copy.svelte-xv54mf .vx-title:where(.svelte-xv54mf){margin:4px 0 3px;font-size:26px}.copy.svelte-xv54mf .vx-lede:where(.svelte-xv54mf){margin:2px 0 0;font-size:13px;line-height:1.4}.gpu-toggle.svelte-xv54mf{flex:none;width:380px;display:flex;align-items:center;gap:12px;padding:8px 14px}.gpu-toggle.svelte-xv54mf:disabled{opacity:.55;cursor:default}.switch.svelte-xv54mf{width:44px;height:26px;border-radius:999px;position:relative;flex:none;background:var(--vx-bg-4);border:1px solid var(--vx-line-2);transition:background .3s}.switch.on.svelte-xv54mf{background:var(--vx-cyan-0)}.knob.svelte-xv54mf{position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 2px 6px #0006;transition:left .28s var(--vx-ease)}.switch.on.svelte-xv54mf .knob:where(.svelte-xv54mf){left:20px}.gpu-copy.svelte-xv54mf{display:block}.gpu-title.svelte-xv54mf{display:flex;align-items:center;gap:6px;font-weight:600;font-size:13px}.gpu-title.svelte-xv54mf .glyph:where(.svelte-xv54mf){font-family:var(--vx-mono);color:var(--vx-cyan-1)}.state.svelte-xv54mf{font-family:var(--vx-mono);font-size:10px;letter-spacing:.1em;color:var(--vx-txt-3);transition:color .3s}.state.on.svelte-xv54mf{color:var(--vx-cyan-1)}.gpu-desc.svelte-xv54mf{display:block;font-size:11px;color:var(--vx-txt-2);margin-top:2px;line-height:1.35}.engines.svelte-xv54mf{flex:1;min-height:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.engine-card.svelte-xv54mf{position:relative;padding:14px 18px;border-radius:14px;display:grid;grid-template-columns:1fr 144px;gap:10px 14px;align-content:start}.left-col.svelte-xv54mf{min-width:0}.corner.svelte-xv54mf{position:absolute;top:12px;right:12px;width:22px;height:22px}.engine-head.svelte-xv54mf{grid-column:1 / -1}.name-row.svelte-xv54mf{display:flex;align-items:center;gap:8px;margin-bottom:2px}.engine-glyph.svelte-xv54mf{font-family:var(--vx-mono);font-size:20px;color:var(--vx-cyan-1);line-height:1}.engine-name.svelte-xv54mf{font-size:17px;font-weight:600;letter-spacing:-.02em;line-height:1.1}.tagline.svelte-xv54mf{font-size:12px;color:var(--vx-txt-2);line-height:1.35;max-width:92%}.warn.svelte-xv54mf{margin-top:6px;padding:6px 9px;border-radius:8px;border:1px solid rgba(255,180,84,.3);background:#ffb4540f;color:var(--vx-warn);font-size:11px;line-height:1.35}.sizes.svelte-xv54mf{display:flex;gap:4px;margin-top:5px;flex-wrap:wrap;min-width:0}.size.svelte-xv54mf{height:40px;flex:1 1 0;max-width:96px;min-width:0;padding:0 4px;border-radius:8px;border:1px solid var(--vx-line);background:#ffffff05;color:var(--vx-txt-1);font-family:var(--vx-mono);cursor:pointer;transition:all .22s;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:2px;white-space:nowrap}.size.svelte-xv54mf:hover{border-color:var(--vx-line-2)}.size.on.svelte-xv54mf{border-color:var(--vx-cyan-b);background:#22d4ef1f;color:var(--vx-cyan-1)}.size-id.svelte-xv54mf{font-size:11.5px;font-weight:600;line-height:1.1;white-space:nowrap}.size-mb.svelte-xv54mf{font-size:9.5px;line-height:1.1;opacity:.75;white-space:nowrap}.remote-summary-box.svelte-xv54mf{margin-top:5px;padding:7px 10px;background:#00000040;border:1px solid var(--vx-line);border-radius:8px;display:flex;flex-direction:column;gap:4px}.remote-row.svelte-xv54mf{display:flex;justify-content:space-between;align-items:center;gap:8px;font-family:var(--vx-mono);font-size:10.5px}.remote-k.svelte-xv54mf{color:var(--vx-txt-2);flex:none}.remote-v.svelte-xv54mf{color:var(--vx-txt-0);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:240px;text-align:right}.remote-v-ok.svelte-xv54mf{color:var(--vx-good);font-weight:600}.remote-v-warn.svelte-xv54mf{color:var(--vx-warn);font-weight:600}.remote-btn-row.svelte-xv54mf{margin-top:6px}.remote-cfg-btn.svelte-xv54mf{width:100%;height:32px;font-size:11.5px}.metrics.svelte-xv54mf{margin-top:14px;display:flex;flex-direction:column;gap:7px}.metric.svelte-xv54mf{display:flex;flex-direction:column;transition:opacity .3s}.metric.dim.svelte-xv54mf{opacity:.45}.metric-head.svelte-xv54mf{display:flex;justify-content:space-between;font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-2);margin-bottom:3px;line-height:1.2}.metric-head.svelte-xv54mf span:where(.svelte-xv54mf):last-child{color:var(--vx-txt-1)}.right-col.svelte-xv54mf{width:144px;display:flex;flex-direction:column;gap:8px}.spark.svelte-xv54mf{width:144px;height:80px;box-sizing:border-box;padding:7px 9px;border-radius:10px;border:1px solid var(--vx-line);background:#00000040;display:flex;flex-direction:column}.spark-head.svelte-xv54mf{display:flex;justify-content:space-between;font-family:var(--vx-mono);font-size:10px;color:var(--vx-txt-2);margin-bottom:5px;flex:none;line-height:1.2}.spark-head.svelte-xv54mf span:where(.svelte-xv54mf):last-child{color:var(--vx-txt-0)}.spark-bars.svelte-xv54mf{display:flex;align-items:flex-end;gap:3px;flex:1;min-height:0}.spark-bars.svelte-xv54mf>div:where(.svelte-xv54mf){flex:1;border-radius:2px;background:var(--vx-cyan-0);transition:height .6s var(--vx-ease),opacity .4s}.status-row.svelte-xv54mf{flex:none;display:flex;justify-content:flex-end}@media (max-width: 1100px){.head.svelte-xv54mf{flex-direction:column;align-items:stretch;gap:10px}.gpu-toggle.svelte-xv54mf{width:100%}.engines.svelte-xv54mf{grid-template-columns:1fr}}.hotkey-step.svelte-1fbfhk3{flex:1;min-height:0;display:flex;flex-direction:column;gap:14px}.copy.svelte-1fbfhk3{max-width:820px;min-width:0}.body.svelte-1fbfhk3{flex:1;min-height:0;display:grid;grid-template-columns:minmax(300px,1fr) 1.6fr;gap:14px}.gestures.svelte-1fbfhk3{display:grid;grid-auto-rows:min-content;gap:10px;align-content:start}.gesture.svelte-1fbfhk3{padding:12px 16px;display:grid;grid-template-columns:1fr 130px;gap:14px;align-items:center}.g-name.svelte-1fbfhk3{font-weight:600;font-size:14.5px;margin-bottom:3px}.g-desc.svelte-1fbfhk3{font-size:12px;color:var(--vx-txt-2);line-height:1.4}.tracks.svelte-1fbfhk3{display:grid;gap:5px}.track-row.svelte-1fbfhk3{display:grid;grid-template-columns:24px 1fr;gap:6px;align-items:center}.track-label.svelte-1fbfhk3{font-family:var(--vx-mono);font-size:9.5px;color:var(--vx-txt-3);letter-spacing:.1em}.track.svelte-1fbfhk3{display:flex;gap:2px;height:9px}.track.svelte-1fbfhk3>div:where(.svelte-1fbfhk3){border-radius:2px;background:var(--vx-bg-3);transition:background .3s}.track.svelte-1fbfhk3>div.lit:where(.svelte-1fbfhk3){background:var(--vx-txt-2)}.track.svelte-1fbfhk3>div.on:where(.svelte-1fbfhk3){background:var(--vx-cyan-0)}.hidden-note.svelte-1fbfhk3{padding:10px 12px;border-radius:10px;border:1px dashed var(--vx-line-2);font-size:12px;line-height:1.45;color:var(--vx-txt-2)}.right.svelte-1fbfhk3{display:flex;flex-direction:column;gap:12px;min-height:0}.recorder.svelte-1fbfhk3{position:relative;overflow:hidden;flex:1;min-height:220px;border-radius:18px;border:1px dashed var(--vx-line-2);background:#ffffff04;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;cursor:pointer;font:inherit;color:inherit;transition:all .3s var(--vx-ease)}.recorder.rec.svelte-1fbfhk3{border-color:var(--vx-cyan-b);background:#22d4ef0d;box-shadow:0 0 0 1px #22d4ef26,0 0 40px #22d4ef1f}.recorder.done.svelte-1fbfhk3{border-color:var(--vx-cyan-b);background:var(--vx-bg-1);box-shadow:0 0 0 1px #22d4ef1a}.scan.svelte-1fbfhk3{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,transparent,rgba(34,212,239,.08),transparent);animation:vxScan 1.6s linear infinite;pointer-events:none}.rec-label.svelte-1fbfhk3{font-family:var(--vx-mono);font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--vx-txt-2);display:flex;align-items:center;gap:8px;transition:color .3s}.recorder.rec.svelte-1fbfhk3 .rec-label:where(.svelte-1fbfhk3){color:var(--vx-cyan-1)}.recorder.done.svelte-1fbfhk3 .rec-label:where(.svelte-1fbfhk3){color:var(--vx-good)}.dot.svelte-1fbfhk3{width:8px;height:8px;border-radius:50%;background:currentColor;box-shadow:0 0 10px currentColor;animation:vxPulse 1.4s infinite}.keycaps.svelte-1fbfhk3{display:flex;gap:10px;align-items:center;min-height:64px}.rec-hint.svelte-1fbfhk3{font-size:13px;color:var(--vx-txt-2);text-align:center;max-width:520px;line-height:1.5;padding:0 20px}.rec-hint.bad.svelte-1fbfhk3{color:var(--vx-warn)}.sys.svelte-1fbfhk3{flex:none;padding:14px 18px;border-radius:14px;border:1px solid var(--vx-line);background:var(--vx-bg-1);display:flex;gap:16px;align-items:center;animation:vxPop .3s var(--vx-ease)}.sys.ok.svelte-1fbfhk3{border-color:#6ad48a66}.sys-glyph.svelte-1fbfhk3{font-family:var(--vx-mono);font-size:26px;color:var(--vx-gold-1)}.sys.ok.svelte-1fbfhk3 .sys-glyph:where(.svelte-1fbfhk3){color:var(--vx-good)}.sys-copy.svelte-1fbfhk3{flex:1;min-width:0}.sys-title.svelte-1fbfhk3{font-weight:600;font-size:14px}.sys-desc.svelte-1fbfhk3{font-size:12.5px;color:var(--vx-txt-2);line-height:1.45;margin-top:2px}.sys-err.svelte-1fbfhk3{margin-top:6px;font-size:12px;color:var(--vx-bad);line-height:1.4}.sys-actions.svelte-1fbfhk3{display:flex;gap:8px;flex:none}@media (max-width: 1100px){.body.svelte-1fbfhk3{grid-template-columns:1fr}}.preview.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;color:var(--vx-cyan-0);background:radial-gradient(120% 120% at 50% 120%,rgba(34,212,239,.1),transparent 70%)}.preview.mono.svelte-y6l73v{color:#dfe6ee;background:none}.still.svelte-y6l73v,.clip.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover;display:block;pointer-events:none}.clip.svelte-y6l73v{opacity:0;transition:opacity .35s ease}.clip.ready.svelte-y6l73v{opacity:1}.bars.svelte-y6l73v{display:flex;align-items:flex-end;justify-content:center;gap:3px;width:64%;height:56%}.bars.svelte-y6l73v>div:where(.svelte-y6l73v){flex:1;min-height:10%;border-radius:2px;background:currentColor;transform-origin:bottom;animation-name:vxBar;animation-iteration-count:infinite;animation-timing-function:ease-in-out;opacity:.9}.wave.svelte-y6l73v{width:76%;height:46%;color:inherit;animation:svelte-y6l73v-waveShift 2.6s linear infinite}@keyframes svelte-y6l73v-waveShift{0%{transform:translate(0)}to{transform:translate(-16%)}}.ring-wrap.svelte-y6l73v{position:relative;width:46%;aspect-ratio:1;display:grid;place-items:center}.ring.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;border:1.5px solid currentColor;opacity:.4;animation:vxPulse 1.8s ease-in-out infinite}.ring.r2.svelte-y6l73v{top:22%;right:22%;bottom:22%;left:22%;animation-delay:.5s}.ring-core.svelte-y6l73v{width:26%;aspect-ratio:1;border-radius:50%;background:currentColor;animation:vxPulse 1.8s ease-in-out infinite;animation-delay:.25s}.dial.svelte-y6l73v{position:relative;width:62%;aspect-ratio:2 / 1;display:grid;place-items:end center}.dial-arc.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:999px 999px 0 0;border:1.5px solid currentColor;border-bottom:0;opacity:.35}.needle.svelte-y6l73v{position:absolute;bottom:0;left:50%;width:2px;height:82%;background:var(--vx-gold-1);transform-origin:bottom center;animation:svelte-y6l73v-needleSwing 2.2s ease-in-out infinite}@keyframes svelte-y6l73v-needleSwing{0%,to{transform:rotate(-38deg)}50%{transform:rotate(34deg)}}.terminal.svelte-y6l73v{width:76%;font-family:var(--vx-mono);font-size:9px;color:#7ab8ff;display:grid;gap:5px}.blocks.svelte-y6l73v{display:flex;gap:2px;height:10px}.blocks.svelte-y6l73v>div:where(.svelte-y6l73v){flex:1;background:#7ab8ff;transform-origin:bottom;animation:vxBar 1.1s ease-in-out infinite}.overlay-step.svelte-ek86vh{flex:1;min-height:0;display:flex;flex-direction:column;gap:14px}.head.svelte-ek86vh{display:flex;gap:24px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-ek86vh{max-width:720px;min-width:0}.choice.svelte-ek86vh{display:grid;grid-template-columns:1fr 1fr;gap:10px;flex:none;width:520px}.mode.svelte-ek86vh{height:66px;padding:0 16px;display:flex;align-items:center;gap:12px}.mode.off-on.svelte-ek86vh{border-color:var(--vx-line-2);background:var(--vx-bg-3);box-shadow:0 0 0 1px var(--vx-line-2)}.mode-glyph.svelte-ek86vh{font-family:var(--vx-mono);font-size:22px;color:var(--vx-txt-2)}.mode-glyph.on.svelte-ek86vh{color:var(--vx-cyan-1)}.mode-title.svelte-ek86vh{display:block;font-weight:600;font-size:14px}.mode-desc.svelte-ek86vh{display:block;font-size:12px;color:var(--vx-txt-2)}.body.svelte-ek86vh{flex:1;min-height:0;display:grid;grid-template-columns:1.7fr 1fr;gap:16px;transition:opacity .4s,filter .4s}.body.muted.svelte-ek86vh{opacity:.18;filter:grayscale(1) blur(1px);pointer-events:none}.styles.svelte-ek86vh,.position.svelte-ek86vh{display:flex;flex-direction:column;min-height:0}.style-grid.svelte-ek86vh{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:8px}.style-card.svelte-ek86vh{overflow:hidden;padding:0;display:flex;flex-direction:column;min-height:0}.thumb.svelte-ek86vh{position:relative;aspect-ratio:16 / 9;background:#05070a;overflow:hidden}.style-meta.svelte-ek86vh{flex:none;display:flex;align-items:center;justify-content:space-between;padding:8px 12px}.style-name.svelte-ek86vh{font-weight:600;font-size:13px}.style-sub.svelte-ek86vh{font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-2)}.style-glyph.svelte-ek86vh{font-family:var(--vx-mono);font-size:14px;color:var(--vx-txt-3);transition:color .3s}.style-glyph.on.svelte-ek86vh{color:var(--vx-cyan-1)}.screen.svelte-ek86vh{position:relative;aspect-ratio:16 / 10;border-radius:12px;border:1px solid var(--vx-line-2);background:linear-gradient(180deg,var(--vx-bg-2),var(--vx-bg-0));overflow:hidden;box-shadow:var(--vx-panel-shadow);margin-top:8px}.grid-lines.svelte-ek86vh{position:absolute;top:0;right:0;bottom:0;left:0;background-image:linear-gradient(to right,rgba(255,255,255,.03) 1px,transparent 1px),linear-gradient(to bottom,rgba(255,255,255,.03) 1px,transparent 1px);background-size:28px 28px}.taskbar.svelte-ek86vh{position:absolute;left:0;right:0;bottom:0;height:7%;background:#00000080;border-top:1px solid var(--vx-line)}.floating.svelte-ek86vh{position:absolute;left:50%;transform:translate(-50%,-50%);width:44%;aspect-ratio:16 / 9;border-radius:8px;overflow:hidden;border:1px solid rgba(34,212,239,.4);box-shadow:0 0 24px #22d4ef40;background:#05070a;transition:top .5s var(--vx-ease)}.pos-buttons.svelte-ek86vh{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:10px}.pos.svelte-ek86vh{height:46px;border-radius:10px;border:1px solid var(--vx-line);background:#ffffff05;color:var(--vx-txt-1);font:inherit;font-size:13px;font-weight:600;cursor:pointer;transition:all .25s;display:flex;align-items:center;justify-content:center;gap:8px}.pos.svelte-ek86vh:hover{border-color:var(--vx-line-2)}.pos.on.svelte-ek86vh{border-color:var(--vx-cyan-b);background:#22d4ef1f;color:var(--vx-cyan-1)}.pos-glyph.svelte-ek86vh{font-family:var(--vx-mono)}@media (max-width: 1100px){.head.svelte-ek86vh{flex-direction:column;align-items:stretch}.choice.svelte-ek86vh{width:100%}.body.svelte-ek86vh{grid-template-columns:1fr}.style-grid.svelte-ek86vh{grid-template-columns:repeat(2,1fr)}}.test-step.svelte-oqvphh{flex:1;min-height:0;display:flex;flex-direction:column;gap:14px}.head.svelte-oqvphh{display:flex;gap:24px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-oqvphh{max-width:640px;min-width:0}.combo.svelte-oqvphh{display:flex;gap:10px;align-items:center;flex:none}.gesture-pill.svelte-oqvphh{margin-left:10px;font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-txt-2);padding:6px 12px;border:1px solid var(--vx-line);border-radius:999px}.box.svelte-oqvphh{position:relative;flex:1;min-height:0;border-radius:18px;border:1px solid var(--vx-line);background:var(--vx-bg-1);transition:all .4s var(--vx-ease);overflow:hidden;display:flex;flex-direction:column}.box.live.svelte-oqvphh{border-color:var(--vx-cyan-b);box-shadow:0 0 40px #22d4ef26}.box.won.svelte-oqvphh{border-color:#6ad48a80;box-shadow:0 0 40px #6ad48a26}.box-head.svelte-oqvphh{flex:none;display:flex;align-items:center;justify-content:space-between;padding:10px 18px;border-bottom:1px solid var(--vx-line)}.file.svelte-oqvphh{font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-txt-2)}.state.svelte-oqvphh{font-family:var(--vx-mono);font-size:11px;letter-spacing:.1em;display:flex;align-items:center;gap:8px;color:var(--vx-txt-3);transition:color .3s}.state.recording.svelte-oqvphh{color:var(--vx-cyan-0)}.state.transcribing.svelte-oqvphh{color:var(--vx-gold-1)}.state.success.svelte-oqvphh{color:var(--vx-good)}.dot.svelte-oqvphh{width:7px;height:7px;border-radius:50%;background:currentColor;box-shadow:0 0 8px currentColor;animation:vxPulse 1.4s infinite}textarea.svelte-oqvphh{display:block;flex:1;min-height:180px;width:100%;padding:22px;border:0;background:transparent;color:var(--vx-txt-0);font-family:inherit;font-size:19px;line-height:1.6;resize:none;caret-color:var(--vx-cyan-0);outline:none}.wave.svelte-oqvphh{position:absolute;left:0;right:0;bottom:0;height:64px;display:flex;align-items:center;justify-content:center;gap:4px;background:linear-gradient(180deg,transparent,rgba(34,212,239,.1));pointer-events:none}.wave.svelte-oqvphh>div:where(.svelte-oqvphh){width:4px;height:30px;border-radius:2px;background:var(--vx-cyan-0);transform-origin:center;animation-name:vxBar;animation-iteration-count:infinite;animation-timing-function:ease-in-out}.won-overlay.svelte-oqvphh{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;text-align:center;background:#0e1116db;animation:vxPop .35s var(--vx-ease)}.tick.svelte-oqvphh{width:84px;height:84px;margin:0 auto 16px;border-radius:50%;border:2px solid var(--vx-good);display:grid;place-items:center;color:var(--vx-good);font-family:var(--vx-mono);font-size:36px;box-shadow:0 0 30px #6ad48a59;animation:vxRing .5s var(--vx-ease)}.won-title.svelte-oqvphh{font-size:26px;font-weight:600;letter-spacing:-.02em}.won-sub.svelte-oqvphh{font-size:14px;color:var(--vx-txt-2);margin:6px 0 18px}.foot.svelte-oqvphh{flex:none;display:flex;justify-content:space-between;align-items:center;gap:20px;font-size:12.5px;color:var(--vx-txt-2)}.engine.svelte-oqvphh{font-family:var(--vx-mono);font-size:11px;white-space:nowrap}@media (max-width: 1000px){.head.svelte-oqvphh{flex-direction:column;align-items:stretch;gap:12px}}.voice-step.svelte-1yghr3b{flex:1;min-height:0;display:flex;flex-direction:column;gap:12px}.head.svelte-1yghr3b{display:flex;gap:20px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-1yghr3b{max-width:680px;min-width:0}.copy.svelte-1yghr3b .vx-lede:where(.svelte-1yghr3b){margin:4px 0 0;font-size:13px;line-height:1.45}.choice.svelte-1yghr3b{display:grid;grid-template-columns:1fr 1fr;gap:10px;flex:none;width:480px}.mode.svelte-1yghr3b{height:58px;padding:0 14px;display:flex;align-items:center;gap:10px}.mode.off-on.svelte-1yghr3b{border-color:var(--vx-line-2);background:var(--vx-bg-3);box-shadow:0 0 0 1px var(--vx-line-2)}.mode-glyph.svelte-1yghr3b{font-family:var(--vx-mono);font-size:20px;color:var(--vx-txt-2)}.mode-glyph.on.svelte-1yghr3b{color:var(--vx-cyan-1)}.mode-title.svelte-1yghr3b{display:block;font-weight:600;font-size:13.5px}.mode-desc.svelte-1yghr3b{display:block;font-size:11.5px;color:var(--vx-txt-2)}.toolbar.svelte-1yghr3b{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:8px 14px;border:1px solid var(--vx-line);border-radius:10px;background:#ffffff05;flex:none;transition:opacity .4s,filter .4s}.audition-panel.svelte-1yghr3b{display:flex;align-items:center;gap:14px;min-width:0}.audition-btn.svelte-1yghr3b{height:38px;padding:0 16px;display:inline-flex;align-items:center;gap:8px;font-size:13px;font-weight:600;border-radius:8px;background:#22d4ef17;border:1px solid var(--vx-cyan-0);color:var(--vx-cyan-0);cursor:pointer;transition:all .2s}.audition-btn.svelte-1yghr3b:hover:not(:disabled){background:#22d4ef2e;box-shadow:0 0 12px #22d4ef40}.audition-btn.svelte-1yghr3b:disabled{opacity:.4;cursor:not-allowed;border-color:var(--vx-line-2);color:var(--vx-txt-3);background:#ffffff08}.audition-btn.playing.svelte-1yghr3b{border-color:var(--vx-gold-1);color:var(--vx-gold-1);background:#eab3081f}.tri.svelte-1yghr3b{font-family:var(--vx-mono);font-size:14px;color:inherit}.stop-icon.svelte-1yghr3b{font-size:14px;color:inherit}.btn-text.svelte-1yghr3b{font-family:var(--vx-mono);font-size:12px;letter-spacing:.02em}.play-bars.svelte-1yghr3b{display:flex;align-items:center;gap:2.5px;height:18px;margin-left:4px}.play-bars.svelte-1yghr3b>div:where(.svelte-1yghr3b){width:3px;height:18px;border-radius:1.5px;background:currentColor;transform-origin:center;animation-name:vxBar;animation-iteration-count:infinite;animation-timing-function:ease-in-out}.audition-meta.svelte-1yghr3b{display:flex;flex-direction:column;gap:2px}.audition-label.svelte-1yghr3b{font-size:12px;color:var(--vx-cyan-0);font-weight:600}.audition-hint.svelte-1yghr3b{font-size:11px;font-family:var(--vx-mono)}.audition-hint.svelte-1yghr3b .ready:where(.svelte-1yghr3b){color:var(--vx-good)}.audition-hint.svelte-1yghr3b .good:where(.svelte-1yghr3b){color:var(--vx-cyan-0)}.audition-hint.svelte-1yghr3b .warn:where(.svelte-1yghr3b){color:var(--vx-gold-1)}.audition-hint.svelte-1yghr3b .bad:where(.svelte-1yghr3b){color:var(--vx-bad)}.audition-hint.svelte-1yghr3b .dim:where(.svelte-1yghr3b){color:var(--vx-txt-3)}.hf-bar.svelte-1yghr3b{display:flex;align-items:center;gap:12px;padding:4px 10px;border-radius:8px;border:1px solid transparent;background:#0003}.hf-bar.needed.svelte-1yghr3b{border-color:color-mix(in srgb,var(--vx-gold-1) 45%,transparent);background:color-mix(in srgb,var(--vx-gold-1) 6%,transparent)}.hf-header.svelte-1yghr3b{display:flex;flex-direction:column;gap:1px;text-align:right}.hf-title.svelte-1yghr3b{font-size:11.5px;font-weight:600}.hf-sub.svelte-1yghr3b{font-size:10px;color:var(--vx-txt-3)}.hf-control.svelte-1yghr3b{display:flex;flex-direction:column;gap:2px}.hf-input.svelte-1yghr3b{width:170px;padding:5px 8px;font-size:11.5px;font-family:inherit;color:inherit;background:#00000073;border:1px solid var(--vx-line);border-radius:6px;outline:none;transition:border-color .2s}.hf-input.svelte-1yghr3b:focus{border-color:var(--vx-cyan-0)}.hf-input[readonly].svelte-1yghr3b{color:var(--vx-txt-2);cursor:not-allowed}.hf-state.svelte-1yghr3b{font-size:9.5px;font-family:var(--vx-mono);color:var(--vx-txt-3);white-space:nowrap}.hf-state.ok.svelte-1yghr3b{color:var(--vx-good)}.hf-state.bad.svelte-1yghr3b{color:var(--vx-bad)}.non-commercial-notice.svelte-1yghr3b{flex:none;padding:8px 12px;border-radius:8px;border:1px solid color-mix(in srgb,var(--vx-gold-1) 45%,transparent);background:color-mix(in srgb,var(--vx-gold-1) 6%,transparent);font-size:12px;line-height:1.4}.gpu-toggle-row.svelte-1yghr3b{flex:none;display:flex;align-items:center;gap:8px;font-size:12.5px;padding:2px}.gpu-toggle-hint.svelte-1yghr3b{color:var(--vx-txt-3);font-size:11px}.grid.svelte-1yghr3b{flex:1;min-height:0;display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(2,minmax(0,1fr));gap:10px;transition:opacity .4s,filter .4s}.grid.muted.svelte-1yghr3b{opacity:.18;filter:grayscale(1) blur(1px);pointer-events:none}.card.svelte-1yghr3b{padding:12px 14px;display:flex;flex-direction:column;gap:8px;min-height:0;cursor:pointer;transition:all .2s}.card.locked.svelte-1yghr3b{opacity:.55}.card.locked.svelte-1yghr3b .name:where(.svelte-1yghr3b){color:var(--vx-txt-2)}.card-head.svelte-1yghr3b{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}.card-title-group.svelte-1yghr3b{display:flex;align-items:baseline;gap:8px;min-width:0}.name.svelte-1yghr3b{font-weight:600;font-size:14.5px;letter-spacing:-.01em;white-space:nowrap}.kind.svelte-1yghr3b{font-family:var(--vx-mono);font-size:10px;color:var(--vx-txt-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions.svelte-1yghr3b{display:grid}.dl.svelte-1yghr3b{height:30px;width:100%;font-size:11.5px;padding:0 10px}.bundled.svelte-1yghr3b{height:30px;display:flex;align-items:center;justify-content:center;border-radius:8px;border:1px dashed var(--vx-line);font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-3);text-align:center}.bundled.ok.svelte-1yghr3b{border-style:solid;border-color:#6ad48a59;color:var(--vx-good)}.metrics.svelte-1yghr3b{display:flex;flex-direction:column;gap:8px}.metric-head.svelte-1yghr3b{display:flex;justify-content:space-between;font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-2);margin-bottom:4px}.metric-head.svelte-1yghr3b span:where(.svelte-1yghr3b):last-child{color:var(--vx-txt-1)}.note.svelte-1yghr3b{font-size:11px;color:var(--vx-txt-2);line-height:1.35;margin-top:auto;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical}.bad.svelte-1yghr3b{color:var(--vx-bad);word-break:break-word}.note.svelte-1yghr3b .ok:where(.svelte-1yghr3b){color:var(--vx-good)}.play-error.svelte-1yghr3b{flex:none;font-size:12px;color:var(--vx-bad)}@media (max-width: 1100px){.grid.svelte-1yghr3b{grid-template-columns:repeat(2,1fr);grid-template-rows:repeat(3,minmax(0,1fr))}.head.svelte-1yghr3b{flex-direction:column;align-items:stretch}.choice.svelte-1yghr3b{width:100%}}@media (max-width: 800px){.toolbar.svelte-1yghr3b{flex-direction:column;align-items:stretch}.hf-header.svelte-1yghr3b{text-align:left}.hf-input.svelte-1yghr3b{width:100%}}.done-step.svelte-ujy0nl{flex:1;min-height:0;display:grid;grid-template-columns:.95fr 1fr 1fr;gap:18px;align-items:stretch}.hero.svelte-ujy0nl{display:flex;flex-direction:column;justify-content:center}.tick.svelte-ujy0nl{width:76px;height:76px;margin:0 0 20px;border-radius:50%;border:2px solid var(--vx-gold-0);display:grid;place-items:center;color:var(--vx-gold-1);font-family:var(--vx-mono);font-size:32px;box-shadow:0 0 30px var(--vx-gold-glow);animation:vxRing .6s var(--vx-ease)}.tick.warn.svelte-ujy0nl{border-color:var(--vx-bad);color:var(--vx-bad);box-shadow:0 0 30px #f4636e4d}h2.svelte-ujy0nl{margin:10px 0;font-size:clamp(28px,3.2vw,44px);letter-spacing:-.035em;line-height:1.02;font-weight:600}h2.svelte-ujy0nl span:where(.svelte-ujy0nl){color:var(--vx-gold-1)}h2.svelte-ujy0nl span.bad-word:where(.svelte-ujy0nl){color:var(--vx-bad)}.hero.svelte-ujy0nl p:where(.svelte-ujy0nl){margin:0 0 20px;font-size:14.5px;line-height:1.55;color:var(--vx-txt-1)}.summary.svelte-ujy0nl{display:grid;grid-template-columns:1fr 1fr;gap:10px 14px;padding:14px 16px;border-radius:14px;border:1px solid var(--vx-line);background:linear-gradient(180deg,rgba(34,212,239,.04),transparent)}.summary-value.svelte-ujy0nl{font-size:13px;font-weight:600;color:var(--vx-txt-0);margin-top:3px;word-break:break-word}.panel.svelte-ujy0nl{padding:20px;border-radius:18px;border:1px solid var(--vx-line);background:var(--vx-bg-1);display:flex;flex-direction:column;min-height:0}.panel.problems.svelte-ujy0nl{border-color:#f4636e66}.panel-head.svelte-ujy0nl{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.panel-title.svelte-ujy0nl{font-weight:600;font-size:16px;margin:6px 0 4px}.panel-desc.svelte-ujy0nl{font-size:13px;color:var(--vx-txt-2);line-height:1.5;margin-bottom:16px}.issue-list.svelte-ujy0nl{flex:1;min-height:0;overflow:auto;margin:10px 0 12px;display:grid;gap:10px;align-content:start}.issue.svelte-ujy0nl{border:1px solid var(--vx-line);border-radius:12px;background:#f4636e0a;padding:11px 12px}.issue-head.svelte-ujy0nl{display:flex;gap:9px;align-items:baseline}.issue-step.svelte-ujy0nl{flex:none;font-family:var(--vx-mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--vx-bad)}.issue-title.svelte-ujy0nl{font-size:13px;line-height:1.45;color:var(--vx-txt-0)}.issue-detail.svelte-ujy0nl{margin:8px 0 0;padding:8px 10px;border-radius:8px;background:#00000059;font-family:var(--vx-mono);font-size:11px;line-height:1.5;color:var(--vx-txt-2);white-space:pre-wrap;word-break:break-word;max-height:150px;overflow:auto}.problem-actions.svelte-ujy0nl{display:flex;gap:8px;margin-top:auto}.log-status.svelte-ujy0nl{margin-top:8px;font-size:12px;line-height:1.4;color:var(--vx-txt-2)}.mock-screen.svelte-ujy0nl{position:relative;flex:1;min-height:230px;border-radius:12px;border:1px solid var(--vx-line-2);background:linear-gradient(180deg,var(--vx-bg-2),var(--vx-bg-0));overflow:hidden}.mock-bar.svelte-ujy0nl{position:absolute;left:0;right:0;bottom:0;height:40px;background:#0000008c;border-top:1px solid var(--vx-line);display:flex;align-items:center;justify-content:flex-end;padding:0 14px;gap:12px}.mock-sys-icon.svelte-ujy0nl{font-size:11px;color:var(--vx-txt-3);opacity:.65;-webkit-user-select:none;user-select:none}.mock-sys-icon.chevron.svelte-ujy0nl{font-size:14px;margin-left:2px}.tray-btn-wrap.svelte-ujy0nl{position:relative;display:inline-flex;align-items:center;justify-content:center}.tray-btn.svelte-ujy0nl{width:32px;height:32px;border-radius:6px;border:1px solid transparent;background:transparent;cursor:pointer;display:grid;place-items:center;transition:all .2s}.tray-btn.svelte-ujy0nl:hover{background:#ffffff14}.tray-btn.on.svelte-ujy0nl{border-color:#ffffff40;background:#ffffff1f}.tray-btn.svelte-ujy0nl img:where(.svelte-ujy0nl){width:22px;height:22px;display:block;object-fit:contain}.tray-menu.svelte-ujy0nl{position:absolute;right:14px;bottom:48px;width:275px;padding:6px;border-radius:8px;border:1px solid rgba(255,255,255,.15);background:#1f232a;box-shadow:0 10px 30px #000000b3;animation:vxPop .18s var(--vx-ease);z-index:10}.tray-row.svelte-ujy0nl{width:100%;border:none;background:transparent;padding:6px 8px;border-radius:5px;display:flex;align-items:center;gap:8px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:13.5px;color:#e6edf3;text-align:left;cursor:pointer;transition:background .15s,color .15s}.tray-row.svelte-ujy0nl:hover{background:#ffffff14;color:#fff}.chk-gutter.svelte-ujy0nl{width:18px;height:18px;flex:none;display:flex;align-items:center;justify-content:center}.chk.svelte-ujy0nl{width:16px;height:16px;border-radius:4px;border:1px solid rgba(255,255,255,.3);background:#ffffff0f;display:flex;align-items:center;justify-content:center;transition:all .15s ease}.chk.on.svelte-ujy0nl{background:#1d8cf8;border-color:#38bdf8}.tray-icon.svelte-ujy0nl{width:20px;font-size:15px;display:flex;align-items:center;justify-content:center;flex:none}.tray-label.svelte-ujy0nl{flex:1;white-space:nowrap;letter-spacing:-.01em}.tray-label.no-icon.svelte-ujy0nl{padding-left:2px}.tray-sep.svelte-ujy0nl{height:1px;background:#ffffff1f;margin:5px 6px}.click-me.svelte-ujy0nl{position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;gap:2px;font-family:var(--vx-mono);font-size:11px;letter-spacing:.05em;color:var(--vx-cyan-1);white-space:nowrap;pointer-events:none;animation:svelte-ujy0nl-vxNudge 1.6s ease-in-out infinite}.arrow.svelte-ujy0nl{font-size:14px;font-weight:700;line-height:1}@keyframes svelte-ujy0nl-vxNudge{0%,to{transform:translate(-50%) translateY(0)}50%{transform:translate(-50%) translateY(4px)}}.where.svelte-ujy0nl{list-style:none;padding:0;margin:0 0 16px;display:grid;gap:2px}.where.svelte-ujy0nl li:where(.svelte-ujy0nl){display:flex;align-items:center;gap:9px;padding:7px 10px;font-size:12.5px;color:var(--vx-txt-1)}.where.svelte-ujy0nl .glyph:where(.svelte-ujy0nl){font-family:var(--vx-mono);color:var(--vx-cyan-2);width:16px}.where.svelte-ujy0nl .tag:where(.svelte-ujy0nl){margin-left:auto;font-family:var(--vx-mono);font-size:10px;color:var(--vx-txt-3)}.open-settings.svelte-ujy0nl{margin-top:auto;align-self:flex-start}.vx-btn.small.svelte-ujy0nl{height:34px;padding:0 12px;font-size:12px}@media (max-width: 1100px){.done-step.svelte-ujy0nl{grid-template-columns:1fr;align-content:start}}.vx-root.svelte-18pn5kx{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;overflow:hidden}.vx-titlebar.svelte-18pn5kx{height:46px;flex:none;display:flex;align-items:center;gap:9px;padding:0 18px;border-bottom:1px solid var(--vx-line);background:#0e1116b3;z-index:2}.vx-logo.svelte-18pn5kx{width:20px;height:20px;border-radius:5px}.vx-brand.svelte-18pn5kx{font-weight:600;font-size:14.5px;letter-spacing:-.01em}.vx-brand.svelte-18pn5kx span:where(.svelte-18pn5kx){color:var(--vx-cyan-0)}.vx-mono.svelte-18pn5kx{font-family:var(--vx-mono);font-size:11px;letter-spacing:.1em}.vx-dim.svelte-18pn5kx{color:var(--vx-txt-2)}.vx-faint.svelte-18pn5kx{color:var(--vx-txt-3)}.vx-spacer.svelte-18pn5kx{flex:1}.vx-screen.svelte-18pn5kx{flex:1;min-height:0;display:flex;flex-direction:column;padding:22px 32px 16px;overflow:auto;opacity:1;transform:none;transition:opacity .2s ease,transform .2s var(--vx-ease)}.vx-screen.vx-leaving.svelte-18pn5kx{opacity:0;transform:translateY(10px)}.vx-loading.svelte-18pn5kx{margin:auto;display:flex;align-items:center;gap:10px;color:var(--vx-txt-2);font-size:13.5px}.vx-footer.svelte-18pn5kx{flex:none;display:grid;grid-template-columns:170px 1fr auto;align-items:center;gap:28px;border-top:1px solid var(--vx-line);background:#0e1116cc;padding:10px 32px 12px;z-index:3}.vx-nav-left.svelte-18pn5kx,.vx-nav-right.svelte-18pn5kx{display:flex;align-items:center;gap:12px}.vx-nav-right.svelte-18pn5kx{justify-content:flex-end}.vx-skip.svelte-18pn5kx{font-weight:500;color:var(--vx-txt-3)}.vx-blocker.svelte-18pn5kx{max-width:340px;font-size:12px;line-height:1.35;color:var(--vx-txt-2);text-align:right}.vx-track.svelte-18pn5kx,.vx-track-cell.svelte-18pn5kx{display:flex;align-items:center;min-width:0}.vx-track-step.svelte-18pn5kx{display:flex;flex-direction:column;align-items:center;gap:6px;min-width:62px;padding:4px 6px;border:0;background:transparent;font:inherit;color:var(--vx-txt-3);cursor:pointer;transition:color .3s}.vx-track-step.svelte-18pn5kx:disabled{cursor:default}.vx-track-step.vx-done.svelte-18pn5kx{color:var(--vx-txt-1)}.vx-track-step.vx-cur.svelte-18pn5kx{color:var(--vx-txt-0)}.vx-ring.svelte-18pn5kx{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-family:var(--vx-mono);font-size:12px;border:1px solid var(--vx-line-2);background:transparent;color:var(--vx-txt-3);transition:all .35s var(--vx-ease)}.vx-track-step.vx-done.svelte-18pn5kx .vx-ring:where(.svelte-18pn5kx){border-color:#22d4ef66;background:#22d4ef1a;color:var(--vx-cyan-1)}.vx-track-step.vx-cur.svelte-18pn5kx .vx-ring:where(.svelte-18pn5kx){border-color:var(--vx-cyan-0);background:var(--vx-cyan-0);color:#00222a;box-shadow:0 0 16px #22d4ef73}.vx-track-label.svelte-18pn5kx{font-size:11px;font-weight:500;white-space:nowrap}.vx-track-step.vx-cur.svelte-18pn5kx .vx-track-label:where(.svelte-18pn5kx){font-weight:600}.vx-track-line.svelte-18pn5kx{flex:1;min-width:8px;height:2px;margin:0 2px 19px;border-radius:1px;background:var(--vx-bg-4);overflow:hidden}.vx-track-line.svelte-18pn5kx>div:where(.svelte-18pn5kx){height:100%;background:var(--vx-cyan-0);transition:width .5s var(--vx-ease)}.vx-toast.svelte-18pn5kx{position:fixed;left:50%;bottom:84px;transform:translate(-50%);display:flex;align-items:center;gap:14px;max-width:70vw;padding:11px 14px;border-radius:10px;border:1px solid rgba(244,99,110,.45);background:#2a1215;color:#ffb3b8;font-size:13px;box-shadow:var(--vx-panel-shadow);animation:vxPop .25s var(--vx-ease);z-index:20}.vx-toast.svelte-18pn5kx button:where(.svelte-18pn5kx){border:0;background:transparent;color:inherit;cursor:pointer;font-size:13px}@media (max-width: 1000px){.vx-footer.svelte-18pn5kx{grid-template-columns:110px 1fr auto;gap:16px;padding:10px 18px 12px}.vx-track-label.svelte-18pn5kx{display:none}.vx-track-line.svelte-18pn5kx{margin-bottom:0}.vx-screen.svelte-18pn5kx{padding:18px 20px 14px}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}main.svelte-15mrihi{background-color:var(--color-obsidian-950);width:100vw;height:100vh;padding:calc(var(--spacing,.25rem) * 5);color:var(--text);justify-content:center;align-items:flex-start;display:flex;overflow-y:auto}.card.svelte-15mrihi{gap:calc(var(--spacing,.25rem) * 4);flex-direction:column;width:100%;max-width:520px;display:flex}header.svelte-15mrihi{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 3);display:flex}.logo.svelte-15mrihi{height:calc(var(--spacing,.25rem) * 11);width:calc(var(--spacing,.25rem) * 11);border-radius:var(--radius-xl,.75rem);flex-shrink:0}h1.svelte-15mrihi{font-size:var(--text-lg,1.125rem);line-height:var(--tw-leading,var(--text-lg--line-height,calc(1.75 / 1.125)));--tw-leading:var(--leading-tight,1.25);line-height:var(--leading-tight,1.25);--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800);--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em);color:var(--color-white,#fff)}h2.svelte-15mrihi{margin-bottom:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em);color:var(--color-obsidian-400);text-transform:uppercase}.sub.svelte-15mrihi{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--color-obsidian-400);font-size:12.5px}.body.svelte-15mrihi{--tw-leading:var(--leading-relaxed,1.625);font-size:13px;line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-200)}.hint.svelte-15mrihi{--tw-leading:var(--leading-relaxed,1.625);font-size:11.5px;line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-400)}.notes-block.svelte-15mrihi{border-radius:var(--radius-lg,.5rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.notes-block.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.notes-block.svelte-15mrihi{padding:calc(var(--spacing,.25rem) * 3)}.notes.svelte-15mrihi{margin:calc(var(--spacing,.25rem) * 0);max-height:240px;font-family:var(--font-sans,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word;white-space:pre-wrap;color:var(--color-obsidian-200);overflow-y:auto}.warn.svelte-15mrihi{border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0033;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.warn.svelte-15mrihi{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 20%,transparent)}}.warn.svelte-15mrihi{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.warn.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.warn.svelte-15mrihi{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12.5px;line-height:var(--leading-relaxed,1.625);color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.warn.svelte-15mrihi{color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.error.svelte-15mrihi{border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3633;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.error.svelte-15mrihi{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.error.svelte-15mrihi{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.error.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.error.svelte-15mrihi{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12.5px;line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word;color:var(--color-red-400,oklch(70.4% .191 22.216))}.progress-block.svelte-15mrihi{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.bar.svelte-15mrihi{height:calc(var(--spacing,.25rem) * 2);background-color:#ffffff0d;border-radius:3.40282e38px;width:100%;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.bar.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.fill.svelte-15mrihi{background-color:var(--color-accent-blue);height:100%;transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-radius:3.40282e38px}.bar.indeterminate.svelte-15mrihi .fill:where(.svelte-15mrihi){width:33.3333%;animation:var(--animate-pulse,pulse 2s cubic-bezier(.4, 0, .6, 1) infinite)}footer.svelte-15mrihi{margin-top:calc(var(--spacing,.25rem) * 1);justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-wrap:wrap;display:flex}.left-actions.svelte-15mrihi{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;display:flex}.right-actions.svelte-15mrihi{align-items:center;gap:calc(var(--spacing,.25rem) * 2);margin-left:auto;display:flex}.btn-primary.svelte-15mrihi{cursor:pointer;border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-bold,700);font-size:12.5px;font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 14px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-primary.svelte-15mrihi:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 18px var(--tw-shadow-color,#38bdf873);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-secondary.svelte-15mrihi{cursor:pointer;border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-800);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-semibold,600);font-size:12.5px;font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-300);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-secondary.svelte-15mrihi:hover{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-15mrihi:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 10%,transparent)}}.btn-secondary.svelte-15mrihi:hover{background-color:var(--color-obsidian-700);color:var(--color-white,#fff)}.btn-secondary.svelte-15mrihi:disabled,.btn-primary.svelte-15mrihi:disabled{cursor:default;opacity:.6;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.link.svelte-15mrihi{cursor:pointer;border-style:var(--tw-border-style);padding:calc(var(--spacing,.25rem) * 0);text-align:left;--tw-font-weight:var(--font-weight-semibold,600);font-size:12px;font-weight:var(--font-weight-semibold,600);color:var(--color-accent-blue);text-underline-offset:2px;background-color:#0000;border-width:0;text-decoration-line:underline}.centered.svelte-15mrihi{justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 8);flex-direction:column;display:flex}.spinner.svelte-15mrihi{height:calc(var(--spacing,.25rem) * 7);width:calc(var(--spacing,.25rem) * 7);animation:var(--animate-spin,spin 1s linear infinite);border-style:var(--tw-border-style);border-width:2.5px;border-color:#ffffff0d;border-radius:3.40282e38px}@supports (color:color-mix(in lab,red,red)){.spinner.svelte-15mrihi{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.spinner.svelte-15mrihi{border-top-color:var(--color-accent-blue)}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--color-obsidian-950:#08090b;--color-obsidian-900:#0d0e12;--color-obsidian-800:#14171f;--color-obsidian-700:#1e222d;--color-obsidian-300:#9ca3af;--color-obsidian-100:#e5e7eb;--color-accent-tangerine:#ff6b35;--color-accent-blue:#38bdf8;--color-accent-green:#10b981;--radius-desktop:6px;--animate-border-pulse:border-pulse 1.5s infinite;--animate-flash:flash 1s infinite;--transition-snappy:all .25s cubic-bezier(.175, .885, .32, 1.2);--transition-snappy-fast:all .15s cubic-bezier(.175, .885, .32, 1.275)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,var(--font-sans,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"));font-feature-settings:var(--default-font-feature-settings,initial);font-variation-settings:var(--default-font-variation-settings,initial);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace));font-feature-settings:var(--default-mono-font-feature-settings,initial);font-variation-settings:var(--default-mono-font-variation-settings,initial);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing,.25rem) * 0)}.-top-0\.5{top:calc(var(--spacing,.25rem) * -.5)}.top-0{top:calc(var(--spacing,.25rem) * 0)}.top-2\.5{top:calc(var(--spacing,.25rem) * 2.5)}.top-\[15\%\]{top:15%}.right-0{right:calc(var(--spacing,.25rem) * 0)}.right-3\.5{right:calc(var(--spacing,.25rem) * 3.5)}.right-6{right:calc(var(--spacing,.25rem) * 6)}.-bottom-0\.5{bottom:calc(var(--spacing,.25rem) * -.5)}.bottom-6{bottom:calc(var(--spacing,.25rem) * 6)}.left-0{left:calc(var(--spacing,.25rem) * 0)}.isolate{isolation:isolate}.z-10{z-index:10}.z-\[100\]{z-index:100}.z-\[200\]{z-index:200}.z-\[2000\]{z-index:2000}.col-span-full{grid-column:1/-1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing,.25rem) * 0)}.my-1{margin-block:calc(var(--spacing,.25rem) * 1)}.mt-0\.5{margin-top:calc(var(--spacing,.25rem) * .5)}.mt-1{margin-top:calc(var(--spacing,.25rem) * 1)}.mt-1\.5{margin-top:calc(var(--spacing,.25rem) * 1.5)}.mt-2{margin-top:calc(var(--spacing,.25rem) * 2)}.mt-2\.5{margin-top:calc(var(--spacing,.25rem) * 2.5)}.mt-3\.5{margin-top:calc(var(--spacing,.25rem) * 3.5)}.mt-4{margin-top:calc(var(--spacing,.25rem) * 4)}.mt-6{margin-top:calc(var(--spacing,.25rem) * 6)}.mb-1{margin-bottom:calc(var(--spacing,.25rem) * 1)}.mb-2{margin-bottom:calc(var(--spacing,.25rem) * 2)}.mb-3{margin-bottom:calc(var(--spacing,.25rem) * 3)}.mb-3\.5{margin-bottom:calc(var(--spacing,.25rem) * 3.5)}.mb-4{margin-bottom:calc(var(--spacing,.25rem) * 4)}.mb-5{margin-bottom:calc(var(--spacing,.25rem) * 5)}.ml-2\.5{margin-left:calc(var(--spacing,.25rem) * 2.5)}.ml-4{margin-left:calc(var(--spacing,.25rem) * 4)}.ml-6{margin-left:calc(var(--spacing,.25rem) * 6)}.box-border{box-sizing:border-box}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\.5{height:calc(var(--spacing,.25rem) * 1.5)}.h-2{height:calc(var(--spacing,.25rem) * 2)}.h-3\.5{height:calc(var(--spacing,.25rem) * 3.5)}.h-4{height:calc(var(--spacing,.25rem) * 4)}.h-5{height:calc(var(--spacing,.25rem) * 5)}.h-7{height:calc(var(--spacing,.25rem) * 7)}.h-11{height:calc(var(--spacing,.25rem) * 11)}.h-16{height:calc(var(--spacing,.25rem) * 16)}.h-\[5px\]{height:5px}.h-\[70\%\]{height:70%}.h-full{height:100%}.h-screen{height:100vh}.max-h-60{max-height:calc(var(--spacing,.25rem) * 60)}.max-h-\[85vh\]{max-height:85vh}.max-h-\[180px\]{max-height:180px}.max-h-\[240px\]{max-height:240px}.max-h-\[340px\]{max-height:340px}.min-h-\[42px\]{min-height:42px}.min-h-\[70px\]{min-height:70px}.min-h-\[80px\]{min-height:80px}.min-h-\[150px\]{min-height:150px}.w-1\.5{width:calc(var(--spacing,.25rem) * 1.5)}.w-1\/3{width:33.3333%}.w-2{width:calc(var(--spacing,.25rem) * 2)}.w-4{width:calc(var(--spacing,.25rem) * 4)}.w-5{width:calc(var(--spacing,.25rem) * 5)}.w-7{width:calc(var(--spacing,.25rem) * 7)}.w-11{width:calc(var(--spacing,.25rem) * 11)}.w-16{width:calc(var(--spacing,.25rem) * 16)}.w-20{width:calc(var(--spacing,.25rem) * 20)}.w-\[2px\]{width:2px}.w-\[3px\]{width:3px}.w-\[5px\]{width:5px}.w-\[90\%\]{width:90%}.w-fit{width:fit-content}.w-full{width:100%}.w-screen{width:100vw}.max-w-\[280px\]{max-width:280px}.max-w-\[500px\]{max-width:500px}.max-w-\[520px\]{max-width:520px}.min-w-0{min-width:calc(var(--spacing,.25rem) * 0)}.min-w-\[36px\]{min-width:36px}.min-w-\[135px\]{min-width:135px}.min-w-\[190px\]{min-width:190px}.flex-1{flex:1}.flex-\[2\]{flex:2}.flex-shrink,.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-y-0\.5{--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-\[1px\]{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-\[0\.97\]{scale:.97}.scale-\[1\.01\]{scale:1.01}.scale-\[1\.02\]{scale:1.02}.scale-\[1\.18\]{scale:1.18}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.transform\!{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)!important}.animate-\[floating_4s_ease-in-out_infinite\]{animation:4s ease-in-out infinite floating}.animate-\[ripple_1\.6s_infinite_ease-out\]{animation:1.6s ease-out infinite ripple}.animate-border-pulse{animation:var(--animate-border-pulse)}.animate-flash{animation:var(--animate-flash)}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-y{resize:vertical}.list-none{list-style-type:none}.flex-col{flex-direction:column}.flex-row\!{flex-direction:row!important}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing,.25rem) * .5)}.gap-1{gap:calc(var(--spacing,.25rem) * 1)}.gap-1\.5{gap:calc(var(--spacing,.25rem) * 1.5)}.gap-2{gap:calc(var(--spacing,.25rem) * 2)}.gap-2\.5{gap:calc(var(--spacing,.25rem) * 2.5)}.gap-3{gap:calc(var(--spacing,.25rem) * 3)}.gap-3\.5{gap:calc(var(--spacing,.25rem) * 3.5)}.gap-4{gap:calc(var(--spacing,.25rem) * 4)}.gap-5{gap:calc(var(--spacing,.25rem) * 5)}.gap-\[2px\]{gap:2px}.gap-\[10px\]{gap:10px}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded\!{border-radius:.25rem!important}.rounded-\[99px_0_0_99px\]{border-radius:99px 0 0 99px}.rounded-\[var\(--radius\)\]{border-radius:var(--radius)}.rounded-desktop{border-radius:var(--radius-desktop)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg,.5rem)}.rounded-md{border-radius:var(--radius-md,.375rem)}.rounded-xl{border-radius:var(--radius-xl,.75rem)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[2\.5px\]{border-style:var(--tw-border-style);border-width:2.5px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-none\!{--tw-border-style:none!important;border-style:none!important}.border-solid{--tw-border-style:solid;border-style:solid}.border-\[\#f43f5e\]{border-color:#f43f5e}.border-\[\#fbbf24\]{border-color:#fbbf24}.border-\[var\(--accent\)\]{border-color:var(--accent)}.border-\[var\(--accent2\)\],.border-\[var\(--accent2\)\]\/25{border-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--accent2\)\]\/25{border-color:color-mix(in oklab,var(--accent2) 25%,transparent)}}.border-\[var\(--border\)\]{border-color:var(--border)}.border-\[var\(--color-accent-blue\)\]{border-color:var(--color-accent-blue)}.border-\[var\(--color-accent-blue\)\]\/15{border-color:#38bdf826}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-accent-blue\)\]\/15{border-color:color-mix(in oklab,var(--color-accent-blue) 15%,transparent)}}.border-\[var\(--color-accent-blue\)\]\/20{border-color:#38bdf833}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-accent-blue\)\]\/20{border-color:color-mix(in oklab,var(--color-accent-blue) 20%,transparent)}}.border-\[var\(--color-accent-blue\)\]\/25{border-color:#38bdf840}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-accent-blue\)\]\/25{border-color:color-mix(in oklab,var(--color-accent-blue) 25%,transparent)}}.border-amber-500\/20{border-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/20{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 20%,transparent)}}.border-amber-500\/25{border-color:#f99c0040}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/25{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.border-amber-500\/40{border-color:#f99c0066}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/40{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 40%,transparent)}}.border-amber-500\/70\!{border-color:#f99c00b3!important}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/70\!{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 70%,transparent)!important}}.border-emerald-500\/25{border-color:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/25{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 25%,transparent)}}.border-red-500{border-color:var(--color-red-500,oklch(63.7% .237 25.331))}.border-red-500\!{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.border-red-500\/20{border-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.border-red-500\/20{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.border-red-500\/25{border-color:#fb2c3640}@supports (color:color-mix(in lab,red,red)){.border-red-500\/25{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 25%,transparent)}}.border-slate-500\/30{border-color:#62748e4d}@supports (color:color-mix(in lab,red,red)){.border-slate-500\/30{border-color:color-mix(in oklab,var(--color-slate-500,oklch(55.4% .046 257.417)) 30%,transparent)}}.border-white\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.border-white\/5{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.border-white\/12{border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.border-white\/12{border-color:color-mix(in oklab,var(--color-white,#fff) 12%,transparent)}}.border-white\/15{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.border-white\/15{border-color:color-mix(in oklab,var(--color-white,#fff) 15%,transparent)}}.border-white\/\[0\.03\]{border-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.03\]{border-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.border-white\/\[0\.05\]{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.05\]{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.border-yellow-500\/30{border-color:#edb2004d}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/30{border-color:color-mix(in oklab,var(--color-yellow-500,oklch(79.5% .184 86.047)) 30%,transparent)}}.border-t-\[var\(--color-accent-blue\)\]{border-top-color:var(--color-accent-blue)}.bg-\[\#1e2436\]{background-color:#1e2436}.bg-\[\#39ff14\]{background-color:#39ff14}.bg-\[\#444\]{background-color:#444}.bg-\[\#ff6d00\]{background-color:#ff6d00}.bg-\[\#ffab00\]{background-color:#ffab00}.bg-\[rgba\(244\,63\,94\,0\.05\)\]{background-color:#f43f5e0d}.bg-\[rgba\(251\,191\,36\,0\.05\)\]{background-color:#fbbf240d}.bg-\[var\(--accent\)\]{background-color:var(--accent)}.bg-\[var\(--accent2\)\],.bg-\[var\(--accent2\)\]\/8{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--accent2\)\]\/8{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.bg-\[var\(--accent2\)\]\/10{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--accent2\)\]\/10{background-color:color-mix(in oklab,var(--accent2) 10%,transparent)}}.bg-\[var\(--accent2\)\]\/15{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--accent2\)\]\/15{background-color:color-mix(in oklab,var(--accent2) 15%,transparent)}}.bg-\[var\(--bg\)\]{background-color:var(--bg)}.bg-\[var\(--border\)\]{background-color:var(--border)}.bg-\[var\(--color-accent-blue\)\]{background-color:var(--color-accent-blue)}.bg-\[var\(--color-accent-blue\)\]\/8{background-color:#38bdf814}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--color-accent-blue\)\]\/8{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.bg-\[var\(--color-accent-green\)\]{background-color:var(--color-accent-green)}.bg-\[var\(--color-obsidian-300\)\]{background-color:var(--color-obsidian-300)}.bg-\[var\(--color-obsidian-700\)\]{background-color:var(--color-obsidian-700)}.bg-\[var\(--color-obsidian-800\)\]{background-color:var(--color-obsidian-800)}.bg-\[var\(--color-obsidian-900\)\]{background-color:var(--color-obsidian-900)}.bg-\[var\(--color-obsidian-950\)\]{background-color:var(--color-obsidian-950)}.bg-\[var\(--surface2\)\]{background-color:var(--surface2)}.bg-accent-blue{background-color:var(--color-accent-blue)}.bg-accent-blue\!{background-color:var(--color-accent-blue)!important}.bg-amber-400{background-color:var(--color-amber-400,oklch(82.8% .189 84.429))}.bg-amber-500\/6{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/6{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.bg-amber-950\/30{background-color:#4619014d}@supports (color:color-mix(in lab,red,red)){.bg-amber-950\/30{background-color:color-mix(in oklab,var(--color-amber-950,oklch(27.9% .077 45.635)) 30%,transparent)}}.bg-black\/25{background-color:#00000040}@supports (color:color-mix(in lab,red,red)){.bg-black\/25{background-color:color-mix(in oklab,var(--color-black,#000) 25%,transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black,#000) 40%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black,#000) 60%,transparent)}}.bg-cyan-500\/15{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.bg-cyan-500\/15{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.bg-emerald-500\/6{background-color:#00bb7f0f}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/6{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 6%,transparent)}}.bg-emerald-500\/15{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/15{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.bg-emerald-950\/80{background-color:#002c22cc}@supports (color:color-mix(in lab,red,red)){.bg-emerald-950\/80{background-color:color-mix(in oklab,var(--color-emerald-950,oklch(26.2% .051 172.552)) 80%,transparent)}}.bg-red-400\/10{background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.bg-red-400\/10{background-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 10%,transparent)}}.bg-red-500{background-color:var(--color-red-500,oklch(63.7% .237 25.331))}.bg-red-500\/6{background-color:#fb2c360f}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/6{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 6%,transparent)}}.bg-red-500\/8{background-color:#fb2c3614}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/8{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 8%,transparent)}}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.bg-red-500\/15{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/15{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 15%,transparent)}}.bg-slate-500\/10{background-color:#62748e1a}@supports (color:color-mix(in lab,red,red)){.bg-slate-500\/10{background-color:color-mix(in oklab,var(--color-slate-500,oklch(55.4% .046 257.417)) 10%,transparent)}}.bg-transparent{background-color:#0000}.bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/5{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.bg-white\/\[0\.02\]{background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.02\]{background-color:color-mix(in oklab,var(--color-white,#fff) 2%,transparent)}}.bg-white\/\[0\.03\]{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.03\]{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.bg-white\/\[0\.05\]{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.05\]{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.bg-white\/\[0\.08\]{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-white,#fff) 8%,transparent)}}.bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500,oklch(79.5% .184 86.047)) 10%,transparent)}}.object-contain{object-fit:contain}.p-0{padding:calc(var(--spacing,.25rem) * 0)}.p-0\.5{padding:calc(var(--spacing,.25rem) * .5)}.p-1{padding:calc(var(--spacing,.25rem) * 1)}.p-1\.5{padding:calc(var(--spacing,.25rem) * 1.5)}.p-2{padding:calc(var(--spacing,.25rem) * 2)}.p-2\.5{padding:calc(var(--spacing,.25rem) * 2.5)}.p-3{padding:calc(var(--spacing,.25rem) * 3)}.p-4{padding:calc(var(--spacing,.25rem) * 4)}.p-5{padding:calc(var(--spacing,.25rem) * 5)}.p-6{padding:calc(var(--spacing,.25rem) * 6)}.p-10{padding:calc(var(--spacing,.25rem) * 10)}.p-\[3px\]{padding:3px}.p-\[30px\]{padding:30px}.px-1{padding-inline:calc(var(--spacing,.25rem) * 1)}.px-1\.5{padding-inline:calc(var(--spacing,.25rem) * 1.5)}.px-1\.5\!{padding-inline:calc(var(--spacing,.25rem) * 1.5)!important}.px-2{padding-inline:calc(var(--spacing,.25rem) * 2)}.px-2\.5{padding-inline:calc(var(--spacing,.25rem) * 2.5)}.px-3{padding-inline:calc(var(--spacing,.25rem) * 3)}.px-3\.5{padding-inline:calc(var(--spacing,.25rem) * 3.5)}.px-4{padding-inline:calc(var(--spacing,.25rem) * 4)}.px-5{padding-inline:calc(var(--spacing,.25rem) * 5)}.py-0\.5{padding-block:calc(var(--spacing,.25rem) * .5)}.py-0\.5\!{padding-block:calc(var(--spacing,.25rem) * .5)!important}.py-1{padding-block:calc(var(--spacing,.25rem) * 1)}.py-1\.5{padding-block:calc(var(--spacing,.25rem) * 1.5)}.py-2{padding-block:calc(var(--spacing,.25rem) * 2)}.py-5{padding-block:calc(var(--spacing,.25rem) * 5)}.pt-2{padding-top:calc(var(--spacing,.25rem) * 2)}.pt-3\.5{padding-top:calc(var(--spacing,.25rem) * 3.5)}.pt-4{padding-top:calc(var(--spacing,.25rem) * 4)}.pt-\[14px\]{padding-top:14px}.pr-9{padding-right:calc(var(--spacing,.25rem) * 9)}.pb-4{padding-bottom:calc(var(--spacing,.25rem) * 4)}.pl-3{padding-left:calc(var(--spacing,.25rem) * 3)}.pl-3\.5{padding-left:calc(var(--spacing,.25rem) * 3.5)}.pl-4{padding-left:calc(var(--spacing,.25rem) * 4)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace)}.text-2xl{font-size:var(--text-2xl,1.5rem);line-height:var(--tw-leading,var(--text-2xl--line-height,calc(2 / 1.5)))}.text-base{font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ))}.text-lg{font-size:var(--text-lg,1.125rem);line-height:var(--tw-leading,var(--text-lg--line-height,calc(1.75 / 1.125)))}.text-sm{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)))}.text-xl{font-size:var(--text-xl,1.25rem);line-height:var(--tw-leading,var(--text-xl--line-height,calc(1.75 / 1.25)))}.text-xs{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)))}.text-\[7px\]{font-size:7px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11\.5px\]{font-size:11.5px}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-\[12px\]\!{font-size:12px!important}.text-\[13\.5px\]{font-size:13.5px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[32px\]{font-size:32px}.leading-5{--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5)}.leading-6{--tw-leading:calc(var(--spacing,.25rem) * 6);line-height:calc(var(--spacing,.25rem) * 6)}.leading-\[1\.1\]{--tw-leading:1.1;line-height:1.1}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625)}.font-\[850\]{--tw-font-weight:850;font-weight:850}.font-bold{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800)}.font-extrabold\!{--tw-font-weight:var(--font-weight-extrabold,800)!important;font-weight:var(--font-weight-extrabold,800)!important}.font-medium{--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500)}.font-normal{--tw-font-weight:var(--font-weight-normal,400);font-weight:var(--font-weight-normal,400)}.font-semibold{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600)}.tracking-\[-0\.5px\]{--tw-tracking:-.5px;letter-spacing:-.5px}.tracking-\[0\.06em\]{--tw-tracking:.06em;letter-spacing:.06em}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-tight{--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em)}.tracking-wide{--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em)}.tracking-wider{--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--accent\)\]{color:var(--accent)}.text-\[var\(--accent2\)\]{color:var(--accent2)}.text-\[var\(--color-accent-blue\)\]{color:var(--color-accent-blue)}.text-\[var\(--color-obsidian-200\)\]{color:var(--color-obsidian-200)}.text-\[var\(--color-obsidian-300\)\]{color:var(--color-obsidian-300)}.text-\[var\(--color-obsidian-400\)\]{color:var(--color-obsidian-400)}.text-\[var\(--text\)\]{color:var(--text)}.text-\[var\(--text-muted\)\]{color:var(--text-muted)}.text-accent-blue{color:var(--color-accent-blue)}.text-amber-200\/80{color:#fee685cc}@supports (color:color-mix(in lab,red,red)){.text-amber-200\/80{color:color-mix(in oklab,var(--color-amber-200,oklch(92.4% .12 95.746)) 80%,transparent)}}.text-amber-300\/90{color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.text-amber-300\/90{color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.text-amber-400{color:var(--color-amber-400,oklch(82.8% .189 84.429))}.text-black{color:var(--color-black,#000)}.text-black\!{color:var(--color-black,#000)!important}.text-cyan-200{color:var(--color-cyan-200,oklch(91.7% .08 205.041))}.text-cyan-300{color:var(--color-cyan-300,oklch(86.5% .127 207.078))}.text-emerald-200{color:var(--color-emerald-200,oklch(90.5% .093 164.15))}.text-emerald-300{color:var(--color-emerald-300,oklch(84.5% .143 164.978))}.text-emerald-300\/90{color:#5ee9b5e6}@supports (color:color-mix(in lab,red,red)){.text-emerald-300\/90{color:color-mix(in oklab,var(--color-emerald-300,oklch(84.5% .143 164.978)) 90%,transparent)}}.text-emerald-400{color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.text-neutral-900{color:var(--color-neutral-900,oklch(20.5% 0 0))}.text-obsidian-300{color:var(--color-obsidian-300)}.text-red-300{color:var(--color-red-300,oklch(80.8% .114 19.571))}.text-red-400{color:var(--color-red-400,oklch(70.4% .191 22.216))}.text-slate-100{color:var(--color-slate-100,oklch(96.8% .007 247.896))}.text-slate-200{color:var(--color-slate-200,oklch(92.9% .013 255.508))}.text-slate-300{color:var(--color-slate-300,oklch(86.9% .022 252.894))}.text-white{color:var(--color-white,#fff)}.text-white\/30{color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.text-white\/30{color:color-mix(in oklab,var(--color-white,#fff) 30%,transparent)}}.text-yellow-200{color:var(--color-yellow-200,oklch(94.5% .129 101.54))}.text-yellow-500{color:var(--color-yellow-500,oklch(79.5% .184 86.047))}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.not-italic{font-style:normal}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.no-underline{text-decoration-line:none}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-55{opacity:.55}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_6px_\#ffab00\]{--tw-shadow:0 0 6px var(--tw-shadow-color,#ffab00);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_8px_var\(--color-accent-blue\)\]{--tw-shadow:0 0 8px var(--tw-shadow-color,var(--color-accent-blue));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_2px_6px_rgba\(56\,189\,248\,0\.05\)\]{--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf80d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_4px_12px_rgba\(0\,0\,0\,0\.15\)\]{--tw-shadow:0 4px 12px var(--tw-shadow-color,#00000026);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_4px_14px_rgba\(56\,189\,248\,0\.3\)\]{--tw-shadow:0 4px 14px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_6px_14px_rgba\(56\,189\,248\,0\.35\)\]{--tw-shadow:0 6px 14px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_6px_18px_rgba\(56\,189\,248\,0\.45\)\]{--tw-shadow:0 6px 18px var(--tw-shadow-color,#38bdf873);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_10px_30px_rgba\(0\,0\,0\,0\.4\)\,_0_0_12px_rgba\(56\,189\,248\,0\.15\)\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#0006), 0 0 12px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_10px_30px_rgba\(0\,0\,0\,0\.5\)\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[inset_0_2px_4px_rgba\(0\,0\,0\,0\.2\)\]{--tw-shadow:inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2\!{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.ring-red-500\/20\!{--tw-ring-color:#fb2c3633!important}@supports (color:color-mix(in lab,red,red)){.ring-red-500\/20\!{--tw-ring-color:color-mix(in oklab, var(--color-red-500,oklch(63.7% .237 25.331)) 20%, transparent)!important}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.brightness-110{--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_0_6px_rgba\(234\,179\,8\,0\.3\)\]{--tw-drop-shadow-size:drop-shadow(0 0 6px var(--tw-drop-shadow-color,#eab3084d));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_0_10px_rgba\(56\,189\,248\,0\.6\)\]{--tw-drop-shadow-size:drop-shadow(0 0 10px var(--tw-drop-shadow-color,#38bdf899));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_2px_8px_rgba\(56\,189\,248\,0\.3\)\]{--tw-drop-shadow-size:drop-shadow(0 2px 8px var(--tw-drop-shadow-color,#38bdf84d));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_4px_24px_rgba\(56\,189\,248\,0\.35\)\]{--tw-drop-shadow-size:drop-shadow(0 4px 24px var(--tw-drop-shadow-color,#38bdf859));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter\!{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)!important}.backdrop-blur-\[4px\]{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-\[left\]{transition-property:left;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-250{--tw-duration:.25s;transition-duration:.25s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-\[50ms\]{--tw-duration:50ms;transition-duration:50ms}.ease-in-out{--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1))}.ease-out{--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.hover\:border-\[\#fbbf24\]\/80:hover{border-color:#fbbf24cc}.hover\:border-accent-blue:hover{border-color:var(--color-accent-blue)}.hover\:bg-\[var\(--accent2\)\]:hover{background-color:var(--accent2)}.hover\:bg-\[var\(--border\)\]:hover{background-color:var(--border)}.hover\:bg-black\/35:hover{background-color:#00000059}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/35:hover{background-color:color-mix(in oklab,var(--color-black,#000) 35%,transparent)}}.hover\:text-white:hover{color:var(--color-white,#fff)}}.focus\:border-accent-blue:focus{border-color:var(--color-accent-blue)}.focus\:border-red-500\!:focus{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.focus\:bg-black\/35:focus{background-color:#00000059}@supports (color:color-mix(in lab,red,red)){.focus\:bg-black\/35:focus{background-color:color-mix(in oklab,var(--color-black,#000) 35%,transparent)}}.focus\:ring-red-500\/20\!:focus{--tw-ring-color:#fb2c3633!important}@supports (color:color-mix(in lab,red,red)){.focus\:ring-red-500\/20\!:focus{--tw-ring-color:color-mix(in oklab, var(--color-red-500,oklch(63.7% .237 25.331)) 20%, transparent)!important}}.disabled\:opacity-50:disabled{opacity:.5}}section{flex-direction:column;gap:20px;max-width:650px;animation:.25s cubic-bezier(.175,.885,.32,1.15) forwards slideIn;display:flex}@keyframes slideIn{0%{opacity:0;transform:translateY(6px)scale(.995)}to{opacity:1;transform:none}}h2{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em);color:var(--color-obsidian-100);margin-bottom:2px;font-size:20px}h3{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em);text-transform:uppercase;color:var(--color-accent-blue);margin-bottom:8px;font-size:11px}.field-group{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;flex-direction:column;gap:16px;padding:18px 20px;transition:all .2s ease-out;display:flex}.field-group:hover{background-color:#ffffff0d;border-color:#ffffff1f}.field{cursor:pointer;justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 4);padding-top:4px;padding-bottom:4px;display:flex}.field.col{align-items:stretch;gap:calc(var(--spacing,.25rem) * 1.5);flex-direction:column;width:100%}.field span{color:var(--text);flex:1;font-size:13px;font-weight:500;transition:color .15s ease-out}.field:hover span{color:#fff}.field select{min-width:190px;padding:8px 36px 8px 12px;font-size:13px}.hint{color:var(--text-muted);margin-top:4px;font-size:11px;line-height:1.625}.hint code{background-color:var(--color-obsidian-950);color:var(--color-accent-blue);border:1px solid var(--border);border-radius:4px;padding:2px 6px;font-family:monospace;font-size:10px}.field-label-row{justify-content:space-between;align-items:center;width:100%;margin-bottom:2px;display:flex}.btn-add-inline{color:var(--accent2);cursor:pointer;border-radius:var(--radius);background:0 0;border:none;padding:4px 8px;font-size:11px;font-weight:700;transition:all .15s ease-out}.btn-add-inline:hover{color:#fff;background-color:#38bdf81a}.dynamic-list{flex-direction:column;gap:8px;width:100%;margin-top:4px;display:flex}.dynamic-list-row{align-items:center;gap:calc(var(--spacing,.25rem) * 2);width:100%;display:flex}.dynamic-list-row input,.dynamic-list-row select{min-width:calc(var(--spacing,.25rem) * 0)}.btn-remove-inline{box-sizing:border-box;color:#f87171;cursor:pointer;border-radius:var(--radius);background-color:#ef444414;border:1px solid #ef444433;justify-content:center;align-items:center;height:34px;padding:6px 12px;font-size:12px;font-weight:700;transition:all .15s ease-out;display:flex}.btn-remove-inline:hover{color:#fff;background-color:#ef4444;border-color:#ef4444;box-shadow:0 2px 8px #ef444440}.warning-alert{align-items:center;gap:calc(var(--spacing,.25rem) * 2);color:#f59e0b;border-radius:var(--radius);background-color:#f59e0b1a;border:1px solid #f59e0b40;margin-top:4px;padding:10px 14px;font-size:12px;font-weight:500;animation:.25s cubic-bezier(.175,.885,.32,1.15) forwards slideIn;display:flex}@keyframes border-pulse{0%,to{border-color:#f43f5e66}50%{border-color:#f43f5e}}@keyframes flash{0%,to{opacity:1}50%{opacity:.3}}:root{--bg:var(--color-obsidian-950);--surface:var(--color-obsidian-900);--surface2:var(--color-obsidian-800);--accent:var(--color-accent-blue);--accent2:var(--color-accent-blue);--text:var(--color-obsidian-100);--text-muted:var(--color-obsidian-300);--border:#ffffff0d;--radius:var(--radius-desktop);--recording-color:var(--color-accent-tangerine);--idle-color:var(--color-accent-blue);--speaking-color:var(--color-accent-green);--transition-spring:var(--transition-snappy);--transition-spring-fast:var(--transition-snappy-fast)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body,#app{width:100%;height:100%;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;font-family:Outfit,Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;overflow:hidden}html.overlay-window,body.overlay-window,body.overlay-window #app{box-shadow:none!important;background:0 0!important;border:none!important;outline:none!important;overflow:hidden!important}body.overlay-window *{box-shadow:none!important;outline:none!important}body.overlay-window ::-webkit-scrollbar{width:0!important;height:0!important;display:none!important}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#ffffff0f;border-radius:99px;transition:background .2s}::-webkit-scrollbar-thumb:hover{background:#ffffff26}.sr-only{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}button{cursor:pointer;font-family:inherit;font-size:inherit;background:0 0;border:none;outline:none}input,select,textarea{font-family:inherit;font-size:inherit;outline:none}select{-webkit-appearance:none;appearance:none;background:var(--surface2) url("data:image/svg+xml;utf8,") no-repeat right 12px center;color:var(--text);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;transition:var(--transition-snappy-fast);background-size:10px;padding:8px 36px 8px 12px;box-shadow:0 4px 12px #00000026}select:hover{background-color:var(--color-obsidian-700);border-color:#ffffff1f;transform:translateY(-1px)}select:focus{border-color:var(--accent2);box-shadow:0 0 0 2px #38bdf826}select option{background-color:var(--color-obsidian-900);color:var(--text);padding:10px 12px}select:-webkit-autofill{-webkit-text-fill-color:var(--text)!important;-webkit-box-shadow:0 0 0px 1000px var(--color-obsidian-900) inset!important}select:-webkit-autofill:hover{-webkit-text-fill-color:var(--text)!important;-webkit-box-shadow:0 0 0px 1000px var(--color-obsidian-900) inset!important}select:-webkit-autofill:focus{-webkit-text-fill-color:var(--text)!important;-webkit-box-shadow:0 0 0px 1000px var(--color-obsidian-900) inset!important}.interactive-spring{transition:var(--transition-snappy)}.interactive-spring:hover{transform:scale(1.02)translateY(-1px)}.interactive-spring:active{transform:scale(.97)translateY(0)}input[type=checkbox]{-webkit-appearance:none;appearance:none;background:var(--color-obsidian-700);cursor:pointer;width:36px;height:20px;transition:var(--transition-spring-fast);border:1px solid var(--border);border-radius:99px;outline:none;position:relative}input[type=checkbox]:before{content:"";background:var(--color-obsidian-300);width:14px;height:14px;transition:var(--transition-spring-fast);border-radius:50%;position:absolute;top:2px;left:2px}input[type=checkbox]:checked{background:var(--color-accent-blue);border-color:var(--color-accent-blue)}input[type=checkbox]:checked:before{background:#fff;left:18px;box-shadow:0 2px 4px #0003}input[type=checkbox]:hover{border-color:#ffffff26}input[type=number],input[type=text],input[type=password]{background:var(--color-obsidian-950);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);min-width:170px;transition:var(--transition-spring-fast);outline:none;padding:8px 12px;font-size:13px;box-shadow:inset 0 2px 4px #0003}input[type=number]:hover,input[type=text]:hover,input[type=password]:hover{background-color:var(--color-obsidian-900);border-color:#ffffff26}input[type=number]:focus,input[type=text]:focus,input[type=password]:focus{border-color:var(--accent2);background-color:var(--color-obsidian-950);box-shadow:0 0 0 2px #38bdf826,inset 0 2px 4px #0003}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false} diff --git a/dist/index.html b/dist/index.html index 5d0965b9..4f2cf9a4 100644 --- a/dist/index.html +++ b/dist/index.html @@ -16,8 +16,8 @@ - - + +
            diff --git a/src/lib/Settings/CommandsTab.svelte b/src/lib/Settings/CommandsTab.svelte index 677887a0..0646345a 100644 --- a/src/lib/Settings/CommandsTab.svelte +++ b/src/lib/Settings/CommandsTab.svelte @@ -2,6 +2,7 @@ import { onMount } from "svelte"; import { invoke } from "@tauri-apps/api/core"; import type { OutputTarget, HotkeyBinding } from "./routing-types"; + import { newOutputTarget } from "./routing-types"; import TargetEditorModal from "./TargetEditorModal.svelte"; let targets = $state([]); @@ -39,25 +40,7 @@ // --- CRUD Output Commands --- function addNewTarget() { isEditingTargetNew = true; - editingTarget = { - id: "new_target_" + Math.random().toString(36).substring(2, 6), - label: "New Target", - delivery: "inject", - file_prefix: "- ", - file_timestamp: true, - file_timestamp_format: "%Y-%m-%dT%H:%M:%SZ", - file_mode: "append", - http_method: "POST", - http_json_template: { text: "{text}" }, - webhook_json_template: { text: "{text}" }, - mcp_tool: "speak_text", - mcp_args: { text: "{text}" }, - chat_max_history: 20, - chat_timeout_secs: 120, - chat_reply_mode: "speak", - strip_newlines: false, - processing: {}, - }; + editingTarget = newOutputTarget(); } function editTarget(tgt: OutputTarget) { diff --git a/src/lib/Settings/FeaturesTab.svelte b/src/lib/Settings/FeaturesTab.svelte index 25b46e01..90e82bfd 100644 --- a/src/lib/Settings/FeaturesTab.svelte +++ b/src/lib/Settings/FeaturesTab.svelte @@ -5,6 +5,8 @@ import { onMount } from "svelte"; import CustomSelect from "./CustomSelect.svelte"; + import KeyValueListEditor from "./KeyValueListEditor.svelte"; + import { autoResize } from "../actions"; let { cfg = $bindable() } = $props<{ cfg: AppConfig }>(); if (cfg.engine && !cfg.engine.s1_mini) { @@ -84,50 +86,6 @@ } }); - // Snippets editing - let snippetList = $state<{key: string, val: string}[]>( - Object.entries(cfg.features.snippets).map(([k, v]) => ({ key: k, val: v as string })) - ); - - let isSnippetInitialized = false; - $effect(() => { - const list = snippetList; - const newSnippets: Record = {}; - for (const {key, val} of list) { - if (key.trim()) { - newSnippets[key.trim()] = val.trim(); - } - } - - const existing = cfg.features.snippets || {}; - const existingKeys = Object.keys(existing); - const newKeys = Object.keys(newSnippets); - let changed = existingKeys.length !== newKeys.length; - if (!changed) { - for (const k of newKeys) { - if (existing[k] !== newSnippets[k]) { - changed = true; - break; - } - } - } - - if (changed) { - cfg.features.snippets = newSnippets; - if (isSnippetInitialized) { - markDirty(); - } - } - isSnippetInitialized = true; - }); - - function addEmptySnippetRow() { - snippetList = [...snippetList, { key: "", val: "" }]; - } - - function removeSnippetRow(index: number) { - snippetList = snippetList.filter((_, i) => i !== index); - } let customVocabString = $derived( cfg.features.custom_vocabulary ? cfg.features.custom_vocabulary.join(", ") : "" @@ -142,26 +100,6 @@ markDirty(); } - // Reusable Svelte action to auto-resize textareas dynamically to fit their contents - function autoResize(node: HTMLTextAreaElement) { - function resize() { - node.style.height = "auto"; - node.style.height = `${node.scrollHeight}px`; - } - node.addEventListener("input", resize); - // Initial calculation on mount or state update - const timer = setTimeout(resize, 0); - - return { - update() { - resize(); - }, - destroy() { - clearTimeout(timer); - node.removeEventListener("input", resize); - } - }; - }
            @@ -285,43 +223,16 @@ > -
            -
            -
            -

            Snippets

            -

            Type a trigger word → it expands to the replacement text.

            -
            - -
            - -
            - {#each snippetList as snippet, idx} -
            - - → - - -
            - {/each} - {#if snippetList.length === 0} -
            -

            No snippets defined.

            -
            - {/if} -
            -
            +
            diff --git a/src/lib/Settings/HotkeysTab.svelte b/src/lib/Settings/HotkeysTab.svelte index c7824c3f..ff604b6c 100644 --- a/src/lib/Settings/HotkeysTab.svelte +++ b/src/lib/Settings/HotkeysTab.svelte @@ -5,6 +5,23 @@ import { config } from "../../stores/config"; import TargetEditorModal from "./TargetEditorModal.svelte"; import CustomSelect from "./CustomSelect.svelte"; + import HotkeyBackendBanners from "./HotkeyBackendBanners.svelte"; + import { newOutputTarget } from "./routing-types"; + import { + GESTURE_LABELS, + GESTURE_ORDER, + bindingSignature, + bindingTargetsLabel, + duplicateSignatures, + sameKeys, + targetOptionLabel, + type BoundShortcut, + type GestureType, + type HotkeyStatus, + type KeysCheck, + } from "./hotkeys"; + import { isModifiersOnly, mapBrowserKeyToEvdev } from "../keys"; + import { autoResize } from "../actions"; let targets = $state([]); let bindings = $state([]); @@ -32,54 +49,9 @@ let editOpenaiPrompt = $state(""); let editOpenaiSystemPrompt = $state(""); - // Helper to construct a canonical signature for a binding's key combination and gesture type - function getBindingSignature(keys: string[], gesture: string): string { - const sortedKeys = [...keys].sort().join(","); - return `${gesture}:${sortedKeys}`; - } - - // Keys alone, ignoring the gesture. double_tap and double_tap_hold on the - // same keys are a supported pairing rather than a conflict, and on the portal - // backend they are registered as a single system shortcut. - function getTriggerSignature(keys: string[]): string { - return [...keys].sort().join(","); - } - - // Derived set of signatures that are shared by two or more bindings (regardless of disabled state) - let conflictingSignatures = $derived.by(() => { - const sigCounts = new Map(); - for (const b of bindings) { - if (b.keys && b.keys.length > 0) { - const sig = getBindingSignature(b.keys, b.gesture); - sigCounts.set(sig, (sigCounts.get(sig) || 0) + 1); - } - } - const dups = new Set(); - for (const [sig, count] of sigCounts.entries()) { - if (count > 1) { - dups.add(sig); - } - } - return dups; - }); - - // Derived set of signatures that are shared by two or more active/enabled bindings - let activeConflictingSignatures = $derived.by(() => { - const activeSigCounts = new Map(); - for (const b of bindings) { - if (!b.disabled && b.keys && b.keys.length > 0) { - const sig = getBindingSignature(b.keys, b.gesture); - activeSigCounts.set(sig, (activeSigCounts.get(sig) || 0) + 1); - } - } - const dups = new Set(); - for (const [sig, count] of activeSigCounts.entries()) { - if (count > 1) { - dups.add(sig); - } - } - return dups; - }); + // Signatures shared by two or more bindings, and by two or more enabled ones. + let conflictingSignatures = $derived(duplicateSignatures(bindings)); + let activeConflictingSignatures = $derived(duplicateSignatures(bindings, true)); // Derived check: does the current edited binding in the modal conflict with another existing binding? // Excludes self-conflict: comparing a binding against the same binding ID never counts. @@ -87,83 +59,12 @@ // that a binding already had is not a conflict with itself. let editingBindingConflict = $derived.by(() => { if (!editingBinding || !editingBinding.keys || editingBinding.keys.length === 0) return false; - const editSig = getBindingSignature(editingBinding.keys, editingBinding.gesture); + const editSig = bindingSignature(editingBinding.keys, editingBinding.gesture); // Only flag as a conflict if another *different* binding (different ID) uses the same signature - return bindings.some(b => b.id !== editingBinding!.id && getBindingSignature(b.keys, b.gesture) === editSig); + return bindings.some(b => b.id !== editingBinding!.id && bindingSignature(b.keys, b.gesture) === editSig); }); - // Reusable Svelte action to auto-resize textareas dynamically to fit their contents - function autoResize(node: HTMLTextAreaElement) { - function resize() { - node.style.height = "auto"; - node.style.height = `${node.scrollHeight}px`; - } - node.addEventListener("input", resize); - const timer = setTimeout(resize, 0); - - return { - update() { - resize(); - }, - destroy() { - clearTimeout(timer); - node.removeEventListener("input", resize); - } - }; - } - - // How shortcuts are actually reaching the app. Shown in the UI because the - // answer decides what VoxCtrl can see: on the portal it is told only that its - // own shortcut fired, and the keys are chosen and owned by the desktop. - type BoundShortcut = { - binding_ids: string[]; - requested: string | null; - trigger_description: string; - bound: boolean; - }; - type GestureType = "hold" | "toggle" | "double_tap" | "double_tap_hold"; - - const GESTURE_LABELS: Record = { - hold: "Hold keys to dictate (Release to transcribe)", - toggle: "Tap once to start recording, tap again to finish", - double_tap: "Double-tap hotkey to trigger recording", - double_tap_hold: "Double-tap & hold keys to dictate (Release to transcribe)", - }; - - const GESTURE_ORDER: GestureType[] = ["hold", "toggle", "double_tap", "double_tap_hold"]; - - type HotkeyStatus = { - is_active: boolean; - backend: string; - is_private: boolean; - portal_error: string | null; - portal_refused: boolean; - shortcuts: BoundShortcut[]; - // Gesture styles the running backend can actually deliver. A backend that - // only learns about key presses (a Cinnamon/MATE native shortcut) cannot - // end a hold or tell a tap from a hold, so it reports "toggle" alone. - supported_gestures: GestureType[]; - x11_error: string | null; - session_type: string; - devices_total: number; - devices_readable: number; - needs_attention: boolean; - detail: string; - // KDE registers portal shortcuts disabled and gives no way to check that - // over D-Bus, so this is a standing warning on KDE rather than a detected - // fact about any one shortcut. See docs/hotkeys.md. - needs_manual_enable: boolean; - manual_enable_hint: string | null; - }; - let hotkeyStatus = $state(null); - let openingShortcutSettings = $state(false); - let openShortcutSettingsError = $state(null); - let retryingShortcuts = $state(false); - let retryShortcutsError = $state(null); - let backendBannerExpanded = $state(false); - let manualEnableExpanded = $state(false); - async function refreshHotkeyStatus() { try { hotkeyStatus = await invoke("check_hotkey_status"); @@ -172,32 +73,6 @@ } } - async function openShortcutSettings() { - openingShortcutSettings = true; - openShortcutSettingsError = null; - try { - await invoke("open_shortcut_settings"); - } catch (e: any) { - openShortcutSettingsError = e?.toString() ?? "Could not open shortcut settings."; - } finally { - openingShortcutSettings = false; - } - } - - async function handleRetryShortcuts() { - retryingShortcuts = true; - retryShortcutsError = null; - try { - await invoke("retry_portal_shortcuts"); - await refreshHotkeyStatus(); - } catch (e: any) { - retryShortcutsError = e?.toString() ?? "Failed to request shortcut approval from desktop."; - await refreshHotkeyStatus(); - } finally { - retryingShortcuts = false; - } - } - // The compositor may rename or reject a shortcut when bindings are saved, so // the panel is refreshed after every write rather than only on mount. let shortcutByBinding = $derived.by(() => { @@ -260,18 +135,8 @@ } } - function formatBindingTargets(b: HotkeyBinding) { - const ids = b.target_ids && b.target_ids.length > 0 ? b.target_ids : [b.target_id]; - return ids.map(id => { - const t = targets.find(target => target.id === id); - return t ? t.label : (id === "default" ? "Focused Window" : id); - }).join(", "); - } - - function getTargetLabel(id: string): string { - const t = targets.find(target => target.id === id); - return t ? `${t.label} (${t.delivery})` : (id === "default" ? "Focused Window" : id); - } + const formatBindingTargets = (b: HotkeyBinding) => bindingTargetsLabel(b, targets); + const getTargetLabel = (id: string) => targetOptionLabel(id, targets); // --- CRUD Hotkey Bindings --- function addNewBinding() { @@ -377,9 +242,7 @@ // skip the structural check. The binding was already saved with these keys, // so rejecting them here would be a false error — especially when the user // is only editing the label or output target. - const finalKeysSorted = [...editingBinding.keys].sort().join(","); - const origKeysSorted = [...originalBindingKeys].sort().join(","); - const keysUnchanged = !isEditingBindingNew && finalKeysSorted === origKeysSorted; + const keysUnchanged = !isEditingBindingNew && sameKeys(editingBinding.keys, originalBindingKeys); if (!keysUnchanged) { try { @@ -448,32 +311,6 @@ } // --- Keyboard Event Capture / Recorder --- - function mapBrowserKeyToEvdev(key: string, code: string): string { - const codeUpper = code.toUpperCase(); - if (key === "Control") return "KEY_LEFTCTRL"; - if (key === "Alt") return "KEY_LEFTALT"; - if (key === "Shift") return "KEY_LEFTSHIFT"; - if (key === "Meta" || key === "OS" || key === "Super") return "KEY_LEFTMETA"; - - if (codeUpper === "SPACE") return "KEY_SPACE"; - if (codeUpper === "ENTER") return "KEY_ENTER"; - if (codeUpper === "ESCAPE" || codeUpper === "ESC") return "KEY_ESC"; - if (codeUpper === "TAB") return "KEY_TAB"; - if (codeUpper === "BACKSPACE") return "KEY_BACKSPACE"; - if (codeUpper === "DELETE") return "KEY_DELETE"; - - if (/^KEY[A-Z]$/.test(codeUpper)) { - return `KEY_${codeUpper.slice(3)}`; - } - if (codeUpper.startsWith("KEY")) return codeUpper; - if (codeUpper.startsWith("DIGIT")) return `KEY_${codeUpper.replace("DIGIT", "")}`; - if (codeUpper.startsWith("ARROW")) return `KEY_${codeUpper.replace("ARROW", "")}`; - if (codeUpper.startsWith("F") && codeUpper.length > 1) return `KEY_${codeUpper}`; - - if (key.length === 1) return `KEY_${key.toUpperCase()}`; - return `KEY_${codeUpper}`; - } - let currentlyPressedKeys = $state([]); // The keys the binding had when the edit modal was opened. Used to detect // a no-op re-record so we don't show stale rejection state when the user @@ -488,32 +325,13 @@ ); }); - // Result of validating the last captured combination. The rules live in Rust - // (`voxctrl_hotkeys::accelerator`) and are reached over IPC, so the recorder - // and the portal registration cannot disagree about what is bindable. - type KeysCheck = { - accepted: boolean; - enforced: boolean; - accelerator: string | null; - problem: string | null; - message: string | null; - }; + // Result of validating the last captured combination (see `KeysCheck`). let keysCheck = $state(null); - // Presentational only — used for the live "keep going" hint while keys are - // still held, and for the badge on saved bindings. The authoritative verdict - // always comes from the backend, so drift here cannot let an invalid - // combination through. - const MODIFIER_KEYS = new Set([ - "KEY_LEFTCTRL", "KEY_RIGHTCTRL", - "KEY_LEFTALT", "KEY_RIGHTALT", - "KEY_LEFTSHIFT", "KEY_RIGHTSHIFT", - "KEY_LEFTMETA", "KEY_RIGHTMETA", - ]); - - function isModifiersOnly(keys: string[]): boolean { - return keys.length > 0 && keys.every(k => MODIFIER_KEYS.has(k)); - } + // `isModifiersOnly` is presentational only — used for the live "keep going" + // hint while keys are still held, and for the badge on saved bindings. The + // authoritative verdict always comes from the backend, so drift here cannot + // let an invalid combination through. // Whether a bare-modifier binding is actually broken on this machine, as // opposed to merely fragile. Only the portal cannot deliver them. @@ -539,9 +357,7 @@ // If the user re-recorded the exact same combination the binding already // had, treat it as a no-op: clear any stale rejection from a previous // capture in this session and keep the current keys unchanged. - const sortedNew = [...keys].sort().join(","); - const sortedOrig = [...originalBindingKeys].sort().join(","); - if (sortedNew === sortedOrig) { + if (sameKeys(keys, originalBindingKeys)) { keysCheck = null; editingBinding.keys = [...keys]; return; @@ -614,25 +430,7 @@ targetIndexTriggeredNew = idx; isEditingTargetNew = true; - editingTarget = { - id: "new_target_" + Math.random().toString(36).substring(2, 6), - label: "New Target", - delivery: "inject", - file_prefix: "- ", - file_timestamp: true, - file_timestamp_format: "%Y-%m-%dT%H:%M:%SZ", - file_mode: "append", - http_method: "POST", - http_json_template: { text: "{text}" }, - webhook_json_template: { text: "{text}" }, - mcp_tool: "speak_text", - mcp_args: { text: "{text}" }, - chat_max_history: 20, - chat_timeout_secs: 120, - chat_reply_mode: "speak", - strip_newlines: false, - processing: {}, - }; + editingTarget = newOutputTarget(); } function cancelTargetModal() { @@ -670,107 +468,7 @@ - {#if hotkeyStatus} -
            - - {#if backendBannerExpanded} - - {/if} -
            - {/if} - - {#if hotkeyStatus?.needs_manual_enable} -
            - - {#if manualEnableExpanded} - - {/if} -
            - {/if} +

            `),av=p('

            '),sv=p(`

            General

            Setup

            Run the first-launch setup wizard again

            Walks through the engine, model, hotkey, overlay and voice choices in one flow, and downloads whatever it needs. Your current settings stay in place until you change them in the wizard.

            Hugging Face Access Token

            Hugging Face access token

            Used by every gated model VoxCtrl can download — Pocket-TTS, Breeze-TTS-2, and VoxCPM2 in the TTS tab. Create a token at huggingface.co/settings/tokens and accept each model's license on its Hugging Face page before downloading. Enter it once here; the setup wizard reads and writes the same token, so the two always match.

            Updates

            VoxCtrl never checks for updates on its own. Press "Check now" to ask GitHub whether a newer release has been published — that request carries nothing about you or your machine.

            Check now

            MCP Server

            How long transcribe_voice listens when the calling agent does not ask for a - specific timeout. An explicit timeout_seconds in the tool call still wins.

            Socket: /tmp/voxctrl-mcp.sock (Linux) / \\\\.\\pipe\\voxctrl-mcp (Windows)

            `);function nv(s,a){Tt(a,!0);let t=Et(a,"cfg",15);function r(){Ot.set(t()),Ss.set(!0)}let l=S(null);const c=ce(()=>!!e(l)),u=ce(()=>{var O,X;return(X=(O=e(l))!=null?O:t().tts.hf_token)!=null?X:""});function v(O){if(e(c))return;const X=O.target.value;t(t().tts.hf_token=X.trim()?X.trim():null,!0),r()}let f=S(null),_=S(!1),b=S(null),m=S(null);async function h(){o(_,!0),o(m,null),o(b,null);try{o(b,await C("check_for_update"),!0)}catch(O){o(m,`${O}`)}finally{o(_,!1)}}async function x(){try{await C("open_update_window")}catch(O){o(m,`${O}`)}}async function M(){o(f,null);try{await C("open_setup_wizard")}catch(O){o(f,`${O}`)}}qt(()=>{C("hf_token_env").then(O=>o(l,O&&O.trim()?O.trim():null,!0)).catch(()=>o(l,null))});var q=sv(),T=i(n(q),2),z=i(n(T),2),se=i(n(z),2),ne=i(z,4);{var fe=O=>{var X=Zd(),ve=n(X);w(()=>{var Me;return y(ve,`Could not open the wizard: ${(Me=e(f))!=null?Me:""}`)}),d(O,X)};k(ne,O=>{e(f)&&O(fe)})}var Q=i(T,2),D=i(n(Q),2),I=i(n(D),2),R=i(D,2);{var ge=O=>{var X=Qd();d(O,X)};k(R,O=>{e(c)&&O(ge)})}var ee=i(Q,2),j=i(n(ee),4),V=i(n(j),2),oe=n(V),L=i(j,2);{var B=O=>{var X=ev(),ve=n(X);w(()=>{var Me;return y(ve,`VoxCtrl ${(Me=e(b).current_version)!=null?Me:""} is the latest release.`)}),d(O,X)},be=O=>{var X=tv(),ve=n(X),Me=i(ve);w(()=>{var Fe,_e;return y(ve,`Version ${(Fe=e(b).update.version)!=null?Fe:""} is available (you have - ${(_e=e(b).update.current_version)!=null?_e:""}). `)}),N("click",Me,x),d(O,X)};k(L,O=>{var X;e(b)&&!e(b).update?O(B):(X=e(b))!=null&&X.update&&O(be,1)})}var Pe=i(L,2);{var ue=O=>{var X=av(),ve=n(X);w(()=>{var Me;return y(ve,`Could not check for updates: ${(Me=e(m))!=null?Me:""}`)}),d(O,X)};k(Pe,O=>{e(m)&&O(ue)})}var W=i(ee,2),J=i(n(W),2),Se=i(n(J),2),ze=i(J,2),le=i(n(ze),2),$=i(ze,2),ae=i(n($),2);w(()=>{sr(I,e(u)),I.readOnly=e(c),mt(I,"title",e(c)?"Set by the HF_TOKEN environment variable":void 0),V.disabled=e(_),y(oe,e(_)?"Checking…":"Check for updates")}),N("click",se,M),N("input",I,v),N("click",V,h),N("change",Se,r),Xt(Se,()=>t().mcp.server_enabled,O=>t(t().mcp.server_enabled=O,!0)),N("change",le,r),Xt(le,()=>t().mcp.visual_feedback,O=>t(t().mcp.visual_feedback=O,!0)),N("change",ae,r),$e(ae,()=>t().mcp.record_timeout,O=>t(t().mcp.record_timeout=O,!0)),d(s,q),St()}Qt(["click","input","change"]);var iv=p(''),rv=p('
            '),lv=p('
            ');function sa(s,a){Tt(a,!0);let t=Et(a,"value",15),r=Et(a,"options",19,()=>[]),l=Et(a,"disabled",3,!1),c=Et(a,"defaultToFirst",3,!1),u=S(!1),v=S(null),f=S("");const _=4,b=8;function m(D){let I=D.parentElement;for(;I&&I!==document.body&&I!==document.documentElement;){const R=window.getComputedStyle(I);if(R.transform&&R.transform!=="none"||R.perspective&&R.perspective!=="none"||R.filter&&R.filter!=="none"||R.contain==="paint"||R.contain==="layout"||R.contain==="strict"||R.contain==="content"||R.willChange==="transform")return I;I=I.parentElement}return null}function h(){if(!e(v))return;const D=e(v).getBoundingClientRect(),I=m(e(v)),R=I?I.getBoundingClientRect():null,ge=R?R.left:0,ee=R?R.top:0,j=R?R.bottom:window.innerHeight,V=window.innerHeight-D.bottom-_-b,oe=D.top-_-b,L=V<160&&oe>V,B=Math.max(120,Math.floor(L?oe:V));o(f,L?`position: fixed; left: ${D.left-ge}px; width: ${D.width}px; bottom: ${j-D.top+_}px; max-height: ${B}px;`:`position: fixed; left: ${D.left-ge}px; width: ${D.width}px; top: ${D.bottom+_-ee}px; max-height: ${B}px;`,!0)}function x(){o(u,!e(u)),e(u)&&h()}let M=ce(()=>r().map(D=>typeof D=="string"?{value:D,label:D,disabled:!1}:{value:D.value,label:D.label,disabled:!!D.disabled}));pa(()=>{if(c()&&e(M).length>0&&!e(M).find(I=>I.value===t())){const I=e(M).find(R=>!R.disabled)||e(M)[0];I&&t()!==I.value&&(t(I.value),a.onchange&&a.onchange(I.value))}});let q=ce(()=>{const D=e(M).find(I=>I.value===t());if(D)return D.label;if(c()&&e(M).length>0){const I=e(M).find(R=>!R.disabled)||e(M)[0];if(I)return I.label}return t()!==void 0&&t()!==null?String(t()):""});pa(()=>{if(!e(u))return;const D=R=>{e(v)&&!e(v).contains(R.target)&&o(u,!1)},I=()=>h();return document.addEventListener("click",D),window.addEventListener("scroll",I,!0),window.addEventListener("resize",I),()=>{document.removeEventListener("click",D),window.removeEventListener("scroll",I,!0),window.removeEventListener("resize",I)}});function T(D){t(D),o(u,!1),a.onchange&&a.onchange(D)}var z=lv(),se=n(z),ne=n(se),fe=i(se,2);{var Q=D=>{var I=rv();pt(I,21,()=>e(M),ft,(R,ge)=>{var ee=iv();let j;var V=n(ee);w(()=>{j=Te(ee,1,"custom-dropdown-item svelte-1heock4",null,j,{selected:e(ge).value===t()}),ee.disabled=e(ge).disabled,y(V,e(ge).label)}),N("click",ee,oe=>{oe.preventDefault(),oe.stopPropagation(),T(e(ge).value)}),d(R,ee)}),w(()=>na(I,e(f))),d(D,I)};k(fe,D=>{e(u)&&!l()&&D(Q)})}sl(z,D=>o(v,D),()=>e(v)),w(()=>{se.disabled=l(),y(ne,e(q))}),N("click",se,x),d(s,z),St()}Qt(["click"]);var ov=p(''),cv=p('
            '),dv=p(`

            Design your own overlay style by adding a folder with an index.html and style.css to the folder below — it + specific timeout. An explicit timeout_seconds in the tool call still wins.

            Socket: /tmp/voxctrl-mcp.sock (Linux) / \\\\.\\pipe\\voxctrl-mcp (Windows)

            `);function nv(s,a){Tt(a,!0);let t=Ct(a,"cfg",15);function r(){Ot.set(t()),Ss.set(!0)}let l=S(null);const c=ce(()=>!!e(l)),u=ce(()=>{var O,X;return(X=(O=e(l))!=null?O:t().tts.hf_token)!=null?X:""});function v(O){if(e(c))return;const X=O.target.value;t(t().tts.hf_token=X.trim()?X.trim():null,!0),r()}let f=S(null),h=S(!1),b=S(null),m=S(null);async function _(){o(h,!0),o(m,null),o(b,null);try{o(b,await E("check_for_update"),!0)}catch(O){o(m,`${O}`)}finally{o(h,!1)}}async function x(){try{await E("open_update_window")}catch(O){o(m,`${O}`)}}async function A(){o(f,null);try{await E("open_setup_wizard")}catch(O){o(f,`${O}`)}}qt(()=>{E("hf_token_env").then(O=>o(l,O&&O.trim()?O.trim():null,!0)).catch(()=>o(l,null))});var q=sv(),T=i(n(q),2),D=i(n(T),2),se=i(n(D),2),ne=i(D,4);{var fe=O=>{var X=Zd(),ve=n(X);w(()=>{var Ae;return y(ve,`Could not open the wizard: ${(Ae=e(f))!=null?Ae:""}`)}),d(O,X)};k(ne,O=>{e(f)&&O(fe)})}var Q=i(T,2),z=i(n(Q),2),I=i(n(z),2),L=i(z,2);{var ge=O=>{var X=Qd();d(O,X)};k(L,O=>{e(c)&&O(ge)})}var ee=i(Q,2),j=i(n(ee),4),V=i(n(j),2),oe=n(V),R=i(j,2);{var B=O=>{var X=ev(),ve=n(X);w(()=>{var Ae;return y(ve,`VoxCtrl ${(Ae=e(b).current_version)!=null?Ae:""} is the latest release.`)}),d(O,X)},be=O=>{var X=tv(),ve=n(X),Ae=i(ve);w(()=>{var Fe,he;return y(ve,`Version ${(Fe=e(b).update.version)!=null?Fe:""} is available (you have + ${(he=e(b).update.current_version)!=null?he:""}). `)}),N("click",Ae,x),d(O,X)};k(R,O=>{var X;e(b)&&!e(b).update?O(B):(X=e(b))!=null&&X.update&&O(be,1)})}var Pe=i(R,2);{var ue=O=>{var X=av(),ve=n(X);w(()=>{var Ae;return y(ve,`Could not check for updates: ${(Ae=e(m))!=null?Ae:""}`)}),d(O,X)};k(Pe,O=>{e(m)&&O(ue)})}var K=i(ee,2),J=i(n(K),2),Se=i(n(J),2),De=i(J,2),le=i(n(De),2),W=i(De,2),ae=i(n(W),2);w(()=>{sr(I,e(u)),I.readOnly=e(c),mt(I,"title",e(c)?"Set by the HF_TOKEN environment variable":void 0),V.disabled=e(h),y(oe,e(h)?"Checking…":"Check for updates")}),N("click",se,A),N("input",I,v),N("click",V,_),N("change",Se,r),Xt(Se,()=>t().mcp.server_enabled,O=>t(t().mcp.server_enabled=O,!0)),N("change",le,r),Xt(le,()=>t().mcp.visual_feedback,O=>t(t().mcp.visual_feedback=O,!0)),N("change",ae,r),We(ae,()=>t().mcp.record_timeout,O=>t(t().mcp.record_timeout=O,!0)),d(s,q),St()}Qt(["click","input","change"]);var iv=p(''),rv=p('
            '),lv=p('
            ');function sa(s,a){Tt(a,!0);let t=Ct(a,"value",15),r=Ct(a,"options",19,()=>[]),l=Ct(a,"disabled",3,!1),c=Ct(a,"defaultToFirst",3,!1),u=S(!1),v=S(null),f=S("");const h=4,b=8;function m(z){let I=z.parentElement;for(;I&&I!==document.body&&I!==document.documentElement;){const L=window.getComputedStyle(I);if(L.transform&&L.transform!=="none"||L.perspective&&L.perspective!=="none"||L.filter&&L.filter!=="none"||L.contain==="paint"||L.contain==="layout"||L.contain==="strict"||L.contain==="content"||L.willChange==="transform")return I;I=I.parentElement}return null}function _(){if(!e(v))return;const z=e(v).getBoundingClientRect(),I=m(e(v)),L=I?I.getBoundingClientRect():null,ge=L?L.left:0,ee=L?L.top:0,j=L?L.bottom:window.innerHeight,V=window.innerHeight-z.bottom-h-b,oe=z.top-h-b,R=V<160&&oe>V,B=Math.max(120,Math.floor(R?oe:V));o(f,R?`position: fixed; left: ${z.left-ge}px; width: ${z.width}px; bottom: ${j-z.top+h}px; max-height: ${B}px;`:`position: fixed; left: ${z.left-ge}px; width: ${z.width}px; top: ${z.bottom+h-ee}px; max-height: ${B}px;`,!0)}function x(){o(u,!e(u)),e(u)&&_()}let A=ce(()=>r().map(z=>typeof z=="string"?{value:z,label:z,disabled:!1}:{value:z.value,label:z.label,disabled:!!z.disabled}));pa(()=>{if(c()&&e(A).length>0&&!e(A).find(I=>I.value===t())){const I=e(A).find(L=>!L.disabled)||e(A)[0];I&&t()!==I.value&&(t(I.value),a.onchange&&a.onchange(I.value))}});let q=ce(()=>{const z=e(A).find(I=>I.value===t());if(z)return z.label;if(c()&&e(A).length>0){const I=e(A).find(L=>!L.disabled)||e(A)[0];if(I)return I.label}return t()!==void 0&&t()!==null?String(t()):""});pa(()=>{if(!e(u))return;const z=L=>{e(v)&&!e(v).contains(L.target)&&o(u,!1)},I=()=>_();return document.addEventListener("click",z),window.addEventListener("scroll",I,!0),window.addEventListener("resize",I),()=>{document.removeEventListener("click",z),window.removeEventListener("scroll",I,!0),window.removeEventListener("resize",I)}});function T(z){t(z),o(u,!1),a.onchange&&a.onchange(z)}var D=lv(),se=n(D),ne=n(se),fe=i(se,2);{var Q=z=>{var I=rv();pt(I,21,()=>e(A),ft,(L,ge)=>{var ee=iv();let j;var V=n(ee);w(()=>{j=Te(ee,1,"custom-dropdown-item svelte-1heock4",null,j,{selected:e(ge).value===t()}),ee.disabled=e(ge).disabled,y(V,e(ge).label)}),N("click",ee,oe=>{oe.preventDefault(),oe.stopPropagation(),T(e(ge).value)}),d(L,ee)}),w(()=>na(I,e(f))),d(z,I)};k(fe,z=>{e(u)&&!l()&&z(Q)})}sl(D,z=>o(v,z),()=>e(v)),w(()=>{se.disabled=l(),y(ne,e(q))}),N("click",se,x),d(s,D),St()}Qt(["click"]);var ov=p(''),cv=p('
            '),dv=p(`

            Design your own overlay style by adding a folder with an index.html and style.css to the folder below — it shows up here as a selectable style automatically. A working example (a copy of Voice Card, ready to duplicate) and a README covering the - format live there already.

            Custom overlay styles:

            `,1),vv=p('

            Visual & Feedback

            Overlay & HUD

            Alerts & OS Integration

            Application Window

            ');function uv(s,a){Tt(a,!0);let t=Et(a,"cfg",15),r=S(yt([])),l=S(yt([])),c=S(""),u=ce(()=>[{value:"voice_card",label:"Voice Card"},{value:"waveform",label:"Waveform"},{value:"pulse",label:"Pulse Ring"},{value:"blue_wave",label:"Ocean Wave"},{value:"mono_bars",label:"Mono Bars"},{value:"spectrum",label:"Neon Spectrum"},{value:"terminal",label:"Retro Terminal"},{value:"vinyl",label:"Analog VU"},...e(r).map(J=>({value:J.name,label:J.name}))]);const v=[{value:"top",label:"Top of screen"},{value:"center",label:"Center of screen"},{value:"bottom",label:"Bottom of screen"}];let f=ce(()=>[{value:"primary",label:"Primary Monitor"},...e(l).filter(J=>J.name).map(J=>({value:J.name,label:`${J.name} (${J.width}x${J.height})${J.is_primary?" [Primary]":""}`}))]);qt(async()=>{try{o(r,await C("get_custom_overlays"),!0)}catch(J){console.error("Failed to fetch custom overlays:",J)}try{o(l,await C("get_available_monitors"),!0)}catch(J){console.error("Failed to fetch available monitors:",J)}try{o(c,await C("get_custom_overlays_dir"),!0)}catch(J){console.error("Failed to fetch custom overlays directory:",J)}});function _(){Ot.set(t()),Ss.set(!0)}function b(J){_(),Vo("overlay-style-selected",J)}var m=vv(),h=i(n(m),2),x=i(n(h),2),M=i(n(x),2),q=i(x,2),T=i(n(q),2),z=i(q,2);{var se=J=>{var Se=ov(),ze=i(n(Se),2);N("change",ze,_),$e(ze,()=>t().ui.command_overlay_duration_secs,le=>t(t().ui.command_overlay_duration_secs=le,!0)),d(J,Se)};k(z,J=>{t().ui.show_command_overlay&&J(se)})}var ne=i(z,2),fe=i(n(ne),2);sa(fe,{get options(){return e(u)},onchange:b,get value(){return t().ui.overlay_style},set value(J){t(t().ui.overlay_style=J,!0)}});var Q=i(ne,2),D=i(n(Q),2);sa(D,{get options(){return v},onchange:_,get value(){return t().ui.overlay_position},set value(J){t(t().ui.overlay_position=J,!0)}});var I=i(Q,2),R=i(n(I),2);sa(R,{get options(){return e(f)},onchange:_,get value(){return t().ui.overlay_monitor},set value(J){t(t().ui.overlay_monitor=J,!0)}});var ge=i(I,2);{var ee=J=>{var Se=cv(),ze=n(Se),le=n(ze);w(()=>{var $;return y(le,`⚠️ Configured monitor "${($=t().ui.overlay_monitor)!=null?$:""}" is disconnected. Using Primary Monitor.`)}),d(J,Se)},j=ce(()=>t().ui.overlay_monitor!=="primary"&&e(l).length>0&&!e(l).some(J=>J.name===t().ui.overlay_monitor));k(ge,J=>{e(j)&&J(ee)})}var V=i(ge,2);{var oe=J=>{var Se=dv(),ze=i(_t(Se),2),le=i(n(ze)),$=n(le);w(()=>y($,e(c))),d(J,Se)};k(V,J=>{e(c)&&J(oe)})}var L=i(h,2),B=i(n(L),2),be=i(n(B),2),Pe=i(L,2),ue=i(n(Pe),2),W=i(n(ue),2);N("change",M,_),Xt(M,()=>t().ui.show_overlay,J=>t(t().ui.show_overlay=J,!0)),N("change",T,_),Xt(T,()=>t().ui.show_command_overlay,J=>t(t().ui.show_command_overlay=J,!0)),N("change",be,_),Xt(be,()=>t().ui.show_notification,J=>t(t().ui.show_notification=J,!0)),N("change",W,_),Xt(W,()=>t().ui.auto_show_settings,J=>t(t().ui.auto_show_settings=J,!0)),d(s,m),St()}Qt(["change"]);var pv=p(`
            ⚠️
            Voice Model Not Downloaded

            The configuration specifies a voice model ( ) that is not currently downloaded. Please select the model size to - use and download it below, or choose another model.

            `),fv=p('⏳ Checking local model files...'),hv=p(' '),_v=p('✔ Model downloaded and ready'),gv=p('
            ❌ Model file missing
            '),mv=p('

            '),bv=p(`

            Whisper.cpp Settings

            Model directory (leave blank for default)

            Language code (e.g. en, da, fr) to force transcription in that + format live there already.

            Custom overlay styles:

            `,1),vv=p('

            Visual & Feedback

            Overlay & HUD

            Alerts & OS Integration

            Application Window

            ');function uv(s,a){Tt(a,!0);let t=Ct(a,"cfg",15),r=S(yt([])),l=S(yt([])),c=S(""),u=ce(()=>[{value:"voice_card",label:"Voice Card"},{value:"waveform",label:"Waveform"},{value:"pulse",label:"Pulse Ring"},{value:"blue_wave",label:"Ocean Wave"},{value:"mono_bars",label:"Mono Bars"},{value:"spectrum",label:"Neon Spectrum"},{value:"terminal",label:"Retro Terminal"},{value:"vinyl",label:"Analog VU"},...e(r).map(J=>({value:J.name,label:J.name}))]);const v=[{value:"top",label:"Top of screen"},{value:"center",label:"Center of screen"},{value:"bottom",label:"Bottom of screen"}];let f=ce(()=>[{value:"primary",label:"Primary Monitor"},...e(l).filter(J=>J.name).map(J=>({value:J.name,label:`${J.name} (${J.width}x${J.height})${J.is_primary?" [Primary]":""}`}))]);qt(async()=>{try{o(r,await E("get_custom_overlays"),!0)}catch(J){console.error("Failed to fetch custom overlays:",J)}try{o(l,await E("get_available_monitors"),!0)}catch(J){console.error("Failed to fetch available monitors:",J)}try{o(c,await E("get_custom_overlays_dir"),!0)}catch(J){console.error("Failed to fetch custom overlays directory:",J)}});function h(){Ot.set(t()),Ss.set(!0)}function b(J){h(),Vo("overlay-style-selected",J)}var m=vv(),_=i(n(m),2),x=i(n(_),2),A=i(n(x),2),q=i(x,2),T=i(n(q),2),D=i(q,2);{var se=J=>{var Se=ov(),De=i(n(Se),2);N("change",De,h),We(De,()=>t().ui.command_overlay_duration_secs,le=>t(t().ui.command_overlay_duration_secs=le,!0)),d(J,Se)};k(D,J=>{t().ui.show_command_overlay&&J(se)})}var ne=i(D,2),fe=i(n(ne),2);sa(fe,{get options(){return e(u)},onchange:b,get value(){return t().ui.overlay_style},set value(J){t(t().ui.overlay_style=J,!0)}});var Q=i(ne,2),z=i(n(Q),2);sa(z,{get options(){return v},onchange:h,get value(){return t().ui.overlay_position},set value(J){t(t().ui.overlay_position=J,!0)}});var I=i(Q,2),L=i(n(I),2);sa(L,{get options(){return e(f)},onchange:h,get value(){return t().ui.overlay_monitor},set value(J){t(t().ui.overlay_monitor=J,!0)}});var ge=i(I,2);{var ee=J=>{var Se=cv(),De=n(Se),le=n(De);w(()=>{var W;return y(le,`⚠️ Configured monitor "${(W=t().ui.overlay_monitor)!=null?W:""}" is disconnected. Using Primary Monitor.`)}),d(J,Se)},j=ce(()=>t().ui.overlay_monitor!=="primary"&&e(l).length>0&&!e(l).some(J=>J.name===t().ui.overlay_monitor));k(ge,J=>{e(j)&&J(ee)})}var V=i(ge,2);{var oe=J=>{var Se=dv(),De=i(ht(Se),2),le=i(n(De)),W=n(le);w(()=>y(W,e(c))),d(J,Se)};k(V,J=>{e(c)&&J(oe)})}var R=i(_,2),B=i(n(R),2),be=i(n(B),2),Pe=i(R,2),ue=i(n(Pe),2),K=i(n(ue),2);N("change",A,h),Xt(A,()=>t().ui.show_overlay,J=>t(t().ui.show_overlay=J,!0)),N("change",T,h),Xt(T,()=>t().ui.show_command_overlay,J=>t(t().ui.show_command_overlay=J,!0)),N("change",be,h),Xt(be,()=>t().ui.show_notification,J=>t(t().ui.show_notification=J,!0)),N("change",K,h),Xt(K,()=>t().ui.auto_show_settings,J=>t(t().ui.auto_show_settings=J,!0)),d(s,m),St()}Qt(["change"]);var pv=p(`
            ⚠️
            Voice Model Not Downloaded

            The configuration specifies a voice model ( ) that is not currently downloaded. Please select the model size to + use and download it below, or choose another model.

            `),fv=p('⏳ Checking local model files...'),_v=p(' '),hv=p('✔ Model downloaded and ready'),gv=p('
            ❌ Model file missing
            '),mv=p('

            '),bv=p(`

            Whisper.cpp Settings

            Model directory (leave blank for default)

            Language code (e.g. en, da, fr) to force transcription in that language, or auto to let whisper.cpp detect it. Forcing a language helps short phrases that auto-detect sometimes misidentifies.

            Default model directory: ~/.local/share/voxctrl/models/

            `),yv=p(`
            ⚠️
            Moonshine backend not included in this build

            This build was compiled without Moonshine, so selecting it will fall back to Whisper.cpp (using the Whisper model configured above). Rebuild with --features moonshine to enable it.

            `),wv=p(`
            🖥️
            Moonshine runs on the CPU in this build

            ONNX Runtime, which Moonshine uses, has no Vulkan backend, so the Device setting above applies to Whisper.cpp only. Moonshine holds - its weights in RAM as fp32 — roughly 530 MB for base, 240 MB for tiny

            `),kv=p('⏳ Checking local model files...'),xv=p(' '),Tv=p('✔ Model downloaded'),Sv=p('
            Model not downloaded
            '),Cv=p('
            '),Ev=p('

            Moonshine Settings

            '),Mv=p(`
            ⚠️
            Parakeet backend not included in this build

            This build was compiled without Parakeet, so selecting it will fall - back to Whisper.cpp. Rebuild with --features parakeet to enable it.

            `),Av=p('⏳ Checking local model files...'),Pv=p(' '),zv=p('✔ Model downloaded and ready'),Dv=p('
            Model not downloaded
            '),Iv=p('
            '),Ov=p('

            Parakeet Settings

            NVIDIA FastConformer TDT 0.6B with 128-mel ONNX preprocessor and INT8 quantization (~665 MB total).

            '),Rv=p(''),Lv=p('
            Discovered models from server:
            '),Nv=p("
            "),Vv=p(`

            Remote Speech Engine Settings

            Connect to a network speech-to-text service supporting the OpenAI /v1/audio/transcriptions API (e.g., Faster-Whisper-Server, vLLM, LocalAI, Whisper-standalone, or OpenAI Whisper). - Audio will begin streaming to the endpoint as soon as your keybind is triggered.

            Base URL or full transcriptions path (e.g. http://192.168.1.50:8000/v1 or https://api.openai.com/v1).

            Leave blank if your local network server does not require authentication.

            Language code (e.g. en, es, fr) or leave blank/auto for automatic detection.

            `),Fv=p('

            Inference Engine

            Backend

            ');function Bv(s,a){Tt(a,!0);let t=Et(a,"cfg",15);function r(){Ot.set(t()),Ss.set(!0)}const l=["tiny","tiny.en","base","base.en","small","small.en","medium","medium.en","large-v2","large-v3","large-v3-turbo"];let c=S(null),u=S(null),v=S(null);const f={cuda:"CUDA (NVIDIA)",vulkan:"Vulkan (AMD/Intel/NVIDIA)",coreml:"CoreML (Apple)",webgpu:"WebGPU (AMD/Intel/NVIDIA)"},_=Y=>{var he;return(he=f[Y])!=null?he:Y};let b=ce(()=>[{value:"whisper-cpp",label:"Whisper.cpp"},{value:"moonshine",label:e(u)?`Moonshine (${_(e(u))})`:"Moonshine (CPU only)"},{value:"parakeet",label:e(v)?`Parakeet TDT (${_(e(v))})`:"Parakeet TDT (CPU only)"},{value:"remote-openai",label:"Remote Speech Engine (OpenAI API)"}]),m=ce(()=>l.map(Y=>({value:Y,label:`${Y}${e(q)[Y]?" ✔":""}`}))),h=ce(()=>[{value:"auto",label:e(c)?`Auto (${_(e(c))})`:"Auto"},...e(c)?[{value:e(c),label:_(e(c))}]:[],{value:"cpu",label:"CPU"}]);const x=[{value:"base",label:"Base"},{value:"tiny",label:"Tiny"}],M=[{value:"tdt-0.6b-v3",label:"TDT 0.6B v3 (INT8, ~665 MB)"}];let q=S(yt({})),T=S(!1),z=S(!1),se=S(null),ne=S(!0),fe=S(yt({})),Q=S(!1),D=S(!1),I=S(!0),R=S(yt({})),ge=S(!1),ee=S(!1);async function j(){o(ge,!0);const Y={};for(const he of M)try{Y[he.value]=await C("check_parakeet_downloaded",{modelSize:he.value})}catch(me){console.error("Failed to check Parakeet download status for "+he.value,me),Y[he.value]=!1}o(R,Y,!0),o(ge,!1)}async function V(Y){if(!e(ee)){o(ee,!0);try{await C("download_parakeet_model",{modelSize:Y}),e(R)[Y]=!0}catch(he){alert(`Failed to download Parakeet model: ${he}`)}finally{o(ee,!1)}}}async function oe(){var he,me;r();const Y=(me=(he=t().engine.parakeet)==null?void 0:he.model_size)!=null?me:"tdt-0.6b-v3";e(I)&&!e(R)[Y]&&await V(Y)}let L=S(!1),B=S(null),be=S(yt([]));function Pe(){t().engine.remote_openai||t(t().engine.remote_openai={endpoint:"http://localhost:8000/v1",api_key:null,model:"whisper-1",language:"",timeout_secs:30},!0)}async function ue(){if(Pe(),!e(L)){o(L,!0),o(B,null);try{const Y=await C("test_remote_stt",{endpoint:t().engine.remote_openai.endpoint||"http://localhost:8000/v1",apiKey:t().engine.remote_openai.api_key||null,model:t().engine.remote_openai.model||"whisper-1",timeoutSecs:t().engine.remote_openai.timeout_secs||30});o(B,{success:Y.success,message:Y.message},!0),Y.models&&Y.models.length>0&&(o(be,Y.models,!0),t().engine.remote_openai.model||(t(t().engine.remote_openai.model=Y.models[0],!0),r()))}catch(Y){o(B,{success:!1,message:Y.toString()},!0)}finally{o(L,!1)}}}async function W(){o(Q,!0);const Y={};for(const he of x)try{Y[he.value]=await C("check_moonshine_downloaded",{modelSize:he.value})}catch(me){console.error("Failed to check Moonshine download status for "+he.value,me),Y[he.value]=!1}o(fe,Y,!0),o(Q,!1)}async function J(Y){if(!e(D)){o(D,!0);try{await C("download_moonshine_model",{modelSize:Y}),e(fe)[Y]=!0}catch(he){alert(`Failed to download Moonshine model: ${he}`)}finally{o(D,!1)}}}async function Se(){r();const Y=t().engine.moonshine.model_size;e(ne)&&!e(fe)[Y]&&await J(Y)}async function ze(){o(T,!0);const Y={};for(const he of l)try{Y[he]=await C("check_model_downloaded",{modelSize:he,modelDir:t().engine.whisper_cpp.model_dir})}catch(me){console.error("Failed to check download status for model "+he,me),Y[he]=!1}o(q,Y,!0),o(T,!1)}async function le(Y){if(!e(z)){o(z,!0);try{await C("download_model",{modelSize:Y,modelDir:t().engine.whisper_cpp.model_dir}),e(q)[Y]=!0}catch(he){alert(`Failed to download model: ${he}`)}finally{o(z,!1)}}}async function $(){r();const Y=t().engine.whisper_cpp.model_size;e(q)[Y]||await le(Y)}async function ae(){const Y=t().engine.whisper_cpp.model_dir;if(!Y){o(se,null);return}const he=await C("check_directory_exists",{path:Y});o(se,he?null:"This folder does not exist. Please create it first or leave blank for the default location.",!0),e(se)||await ze()}function O(){r()}function X(Y){Y.key==="Enter"&&Y.currentTarget.blur()}qt(async()=>{var he,me,pe;ze();try{o(ne,await C("moonshine_available"),!0)}catch(De){console.error("Failed to query Moonshine availability",De)}W();try{o(I,await C("parakeet_available"),!0)}catch(De){console.error("Failed to query Parakeet availability",De)}j();try{const De=await C("accelerator_support");o(c,(he=De.whisper_gpu)!=null?he:null,!0),o(u,(me=De.moonshine_gpu)!=null?me:null,!0),o(v,(pe=De.parakeet_gpu)!=null?pe:null,!0)}catch(De){console.error("Failed to query GPU support",De)}const Y=t().engine.whisper_cpp.device;Y!=="auto"&&Y!=="cpu"&&Y!==e(c)&&(t(t().engine.whisper_cpp.device="auto",!0),r())});var ve=Fv(),Me=i(n(ve),2);{var Fe=Y=>{var he=pv(),me=i(n(he),2),pe=i(n(me),2),De=i(n(pe)),Ge=n(De);w(()=>y(Ge,t().engine.whisper_cpp.model_size)),d(Y,he)};k(Me,Y=>{t().engine.backend==="whisper-cpp"&&!e(T)&&!e(q)[t().engine.whisper_cpp.model_size]&&Y(Fe)})}var _e=i(Me,2),re=i(n(_e),2),we=i(n(re),2);sa(we,{get options(){return e(b)},onchange:r,get value(){return t().engine.backend},set value(Y){t(t().engine.backend=Y,!0)}});var Je=i(_e,2);{var de=Y=>{var he=bv(),me=i(n(he),2),pe=i(n(me),2);sa(pe,{get options(){return e(m)},onchange:$,get value(){return t().engine.whisper_cpp.model_size},set value(Ce){t(t().engine.whisper_cpp.model_size=Ce,!0)}});var De=i(me,2),Ge=n(De);{var st=Ce=>{var Ke=fv();d(Ce,Ke)},it=Ce=>{var Ke=hv(),ct=n(Ke);w(()=>{var vt;return y(ct,`⏳ Downloading ${(vt=t().engine.whisper_cpp.model_size)!=null?vt:""} (GGUF format)...`)}),d(Ce,Ke)},H=Ce=>{var Ke=_v();d(Ce,Ke)},A=Ce=>{var Ke=gv(),ct=i(n(Ke),2);N("click",ct,()=>le(t().engine.whisper_cpp.model_size)),d(Ce,Ke)};k(Ge,Ce=>{e(T)?Ce(st):e(z)?Ce(it,1):e(q)[t().engine.whisper_cpp.model_size]?Ce(H,2):Ce(A,-1)})}var E=i(De,2),ke=i(n(E),2);sa(ke,{get options(){return e(h)},onchange:r,get value(){return t().engine.whisper_cpp.device},set value(Ce){t(t().engine.whisper_cpp.device=Ce,!0)}});var We=i(E,2),ye=i(n(We),2);let Ie;var Ye=i(ye,2);{var Ze=Ce=>{var Ke=mv(),ct=n(Ke);w(()=>y(ct,e(se))),d(Ce,Ke)};k(Ye,Ce=>{e(se)&&Ce(Ze)})}var Ve=i(We,2),at=i(n(Ve),2),et=i(Ve,2),rt=i(n(et),2);w(()=>Ie=Te(ye,1,"svelte-nfi4ak",null,Ie,{"field-input-error":!!e(se)})),N("change",ye,O),xs("blur",ye,ae),N("keydown",ye,X),$e(ye,()=>t().engine.whisper_cpp.model_dir,Ce=>t(t().engine.whisper_cpp.model_dir=Ce,!0)),N("change",at,r),$e(at,()=>t().engine.whisper_cpp.threads,Ce=>t(t().engine.whisper_cpp.threads=Ce,!0)),N("change",rt,r),$e(rt,()=>t().engine.whisper_cpp.language,Ce=>t(t().engine.whisper_cpp.language=Ce,!0)),d(Y,he)},G=Y=>{var he=Ev(),me=i(n(he),2);{var pe=We=>{var ye=yv();d(We,ye)};k(me,We=>{e(ne)||We(pe)})}var De=i(me,2);{var Ge=We=>{var ye=wv(),Ie=i(n(ye),2),Ye=i(n(Ie),2),Ze=i(n(Ye),8);w(Ve=>y(Ze,` — + its weights in RAM as fp32 — roughly 530 MB for base, 240 MB for tiny

            `),kv=p('⏳ Checking local model files...'),xv=p(' '),Tv=p('✔ Model downloaded'),Sv=p('
            Model not downloaded
            '),Ev=p('
            '),Cv=p('

            Moonshine Settings

            '),Av=p(`
            ⚠️
            Parakeet backend not included in this build

            This build was compiled without Parakeet, so selecting it will fall + back to Whisper.cpp. Rebuild with --features parakeet to enable it.

            `),Mv=p('⏳ Checking local model files...'),Pv=p(' '),Dv=p('✔ Model downloaded and ready'),zv=p('
            Model not downloaded
            '),Iv=p('
            '),Ov=p('

            Parakeet Settings

            NVIDIA FastConformer TDT 0.6B with 128-mel ONNX preprocessor and INT8 quantization (~665 MB total).

            '),Lv=p(''),Rv=p('
            Discovered models from server:
            '),Nv=p("
            "),Vv=p(`

            Remote Speech Engine Settings

            Connect to a network speech-to-text service supporting the OpenAI /v1/audio/transcriptions API (e.g., Faster-Whisper-Server, vLLM, LocalAI, Whisper-standalone, or OpenAI Whisper). + Audio will begin streaming to the endpoint as soon as your keybind is triggered.

            Base URL or full transcriptions path (e.g. http://192.168.1.50:8000/v1 or https://api.openai.com/v1).

            Leave blank if your local network server does not require authentication.

            Language code (e.g. en, es, fr) or leave blank/auto for automatic detection.

            `),Fv=p('

            Inference Engine

            Backend

            ');function Bv(s,a){Tt(a,!0);let t=Ct(a,"cfg",15);function r(){Ot.set(t()),Ss.set(!0)}const l=["tiny","tiny.en","base","base.en","small","small.en","medium","medium.en","large-v2","large-v3","large-v3-turbo"];let c=S(null),u=S(null),v=S(null);const f={cuda:"CUDA (NVIDIA)",vulkan:"Vulkan (AMD/Intel/NVIDIA)",coreml:"CoreML (Apple)",webgpu:"WebGPU (AMD/Intel/NVIDIA)"},h=Y=>{var _e;return(_e=f[Y])!=null?_e:Y};let b=ce(()=>[{value:"whisper-cpp",label:"Whisper.cpp"},{value:"moonshine",label:e(u)?`Moonshine (${h(e(u))})`:"Moonshine (CPU only)"},{value:"parakeet",label:e(v)?`Parakeet TDT (${h(e(v))})`:"Parakeet TDT (CPU only)"},{value:"remote-openai",label:"Remote Speech Engine (OpenAI API)"}]),m=ce(()=>l.map(Y=>({value:Y,label:`${Y}${e(q)[Y]?" ✔":""}`}))),_=ce(()=>[{value:"auto",label:e(c)?`Auto (${h(e(c))})`:"Auto"},...e(c)?[{value:e(c),label:h(e(c))}]:[],{value:"cpu",label:"CPU"}]);const x=[{value:"base",label:"Base"},{value:"tiny",label:"Tiny"}],A=[{value:"tdt-0.6b-v3",label:"TDT 0.6B v3 (INT8, ~665 MB)"}];let q=S(yt({})),T=S(!1),D=S(!1),se=S(null),ne=S(!0),fe=S(yt({})),Q=S(!1),z=S(!1),I=S(!0),L=S(yt({})),ge=S(!1),ee=S(!1);async function j(){o(ge,!0);const Y={};for(const _e of A)try{Y[_e.value]=await E("check_parakeet_downloaded",{modelSize:_e.value})}catch(me){console.error("Failed to check Parakeet download status for "+_e.value,me),Y[_e.value]=!1}o(L,Y,!0),o(ge,!1)}async function V(Y){if(!e(ee)){o(ee,!0);try{await E("download_parakeet_model",{modelSize:Y}),e(L)[Y]=!0}catch(_e){alert(`Failed to download Parakeet model: ${_e}`)}finally{o(ee,!1)}}}async function oe(){var _e,me;r();const Y=(me=(_e=t().engine.parakeet)==null?void 0:_e.model_size)!=null?me:"tdt-0.6b-v3";e(I)&&!e(L)[Y]&&await V(Y)}let R=S(!1),B=S(null),be=S(yt([]));function Pe(){t().engine.remote_openai||t(t().engine.remote_openai={endpoint:"http://localhost:8000/v1",api_key:null,model:"whisper-1",language:"",timeout_secs:30},!0)}async function ue(){if(Pe(),!e(R)){o(R,!0),o(B,null);try{const Y=await E("test_remote_stt",{endpoint:t().engine.remote_openai.endpoint||"http://localhost:8000/v1",apiKey:t().engine.remote_openai.api_key||null,model:t().engine.remote_openai.model||"whisper-1",timeoutSecs:t().engine.remote_openai.timeout_secs||30});o(B,{success:Y.success,message:Y.message},!0),Y.models&&Y.models.length>0&&(o(be,Y.models,!0),t().engine.remote_openai.model||(t(t().engine.remote_openai.model=Y.models[0],!0),r()))}catch(Y){o(B,{success:!1,message:Y.toString()},!0)}finally{o(R,!1)}}}async function K(){o(Q,!0);const Y={};for(const _e of x)try{Y[_e.value]=await E("check_moonshine_downloaded",{modelSize:_e.value})}catch(me){console.error("Failed to check Moonshine download status for "+_e.value,me),Y[_e.value]=!1}o(fe,Y,!0),o(Q,!1)}async function J(Y){if(!e(z)){o(z,!0);try{await E("download_moonshine_model",{modelSize:Y}),e(fe)[Y]=!0}catch(_e){alert(`Failed to download Moonshine model: ${_e}`)}finally{o(z,!1)}}}async function Se(){r();const Y=t().engine.moonshine.model_size;e(ne)&&!e(fe)[Y]&&await J(Y)}async function De(){o(T,!0);const Y={};for(const _e of l)try{Y[_e]=await E("check_model_downloaded",{modelSize:_e,modelDir:t().engine.whisper_cpp.model_dir})}catch(me){console.error("Failed to check download status for model "+_e,me),Y[_e]=!1}o(q,Y,!0),o(T,!1)}async function le(Y){if(!e(D)){o(D,!0);try{await E("download_model",{modelSize:Y,modelDir:t().engine.whisper_cpp.model_dir}),e(q)[Y]=!0}catch(_e){alert(`Failed to download model: ${_e}`)}finally{o(D,!1)}}}async function W(){r();const Y=t().engine.whisper_cpp.model_size;e(q)[Y]||await le(Y)}async function ae(){const Y=t().engine.whisper_cpp.model_dir;if(!Y){o(se,null);return}const _e=await E("check_directory_exists",{path:Y});o(se,_e?null:"This folder does not exist. Please create it first or leave blank for the default location.",!0),e(se)||await De()}function O(){r()}function X(Y){Y.key==="Enter"&&Y.currentTarget.blur()}qt(async()=>{var _e,me,pe;De();try{o(ne,await E("moonshine_available"),!0)}catch(ze){console.error("Failed to query Moonshine availability",ze)}K();try{o(I,await E("parakeet_available"),!0)}catch(ze){console.error("Failed to query Parakeet availability",ze)}j();try{const ze=await E("accelerator_support");o(c,(_e=ze.whisper_gpu)!=null?_e:null,!0),o(u,(me=ze.moonshine_gpu)!=null?me:null,!0),o(v,(pe=ze.parakeet_gpu)!=null?pe:null,!0)}catch(ze){console.error("Failed to query GPU support",ze)}const Y=t().engine.whisper_cpp.device;Y!=="auto"&&Y!=="cpu"&&Y!==e(c)&&(t(t().engine.whisper_cpp.device="auto",!0),r())});var ve=Fv(),Ae=i(n(ve),2);{var Fe=Y=>{var _e=pv(),me=i(n(_e),2),pe=i(n(me),2),ze=i(n(pe)),$e=n(ze);w(()=>y($e,t().engine.whisper_cpp.model_size)),d(Y,_e)};k(Ae,Y=>{t().engine.backend==="whisper-cpp"&&!e(T)&&!e(q)[t().engine.whisper_cpp.model_size]&&Y(Fe)})}var he=i(Ae,2),re=i(n(he),2),we=i(n(re),2);sa(we,{get options(){return e(b)},onchange:r,get value(){return t().engine.backend},set value(Y){t(t().engine.backend=Y,!0)}});var Je=i(he,2);{var de=Y=>{var _e=bv(),me=i(n(_e),2),pe=i(n(me),2);sa(pe,{get options(){return e(m)},onchange:W,get value(){return t().engine.whisper_cpp.model_size},set value(Ee){t(t().engine.whisper_cpp.model_size=Ee,!0)}});var ze=i(me,2),$e=n(ze);{var st=Ee=>{var Ge=fv();d(Ee,Ge)},it=Ee=>{var Ge=_v(),ct=n(Ge);w(()=>{var vt;return y(ct,`⏳ Downloading ${(vt=t().engine.whisper_cpp.model_size)!=null?vt:""} (GGUF format)...`)}),d(Ee,Ge)},H=Ee=>{var Ge=hv();d(Ee,Ge)},M=Ee=>{var Ge=gv(),ct=i(n(Ge),2);N("click",ct,()=>le(t().engine.whisper_cpp.model_size)),d(Ee,Ge)};k($e,Ee=>{e(T)?Ee(st):e(D)?Ee(it,1):e(q)[t().engine.whisper_cpp.model_size]?Ee(H,2):Ee(M,-1)})}var C=i(ze,2),ke=i(n(C),2);sa(ke,{get options(){return e(_)},onchange:r,get value(){return t().engine.whisper_cpp.device},set value(Ee){t(t().engine.whisper_cpp.device=Ee,!0)}});var Ke=i(C,2),ye=i(n(Ke),2);let Ie;var Ye=i(ye,2);{var Ze=Ee=>{var Ge=mv(),ct=n(Ge);w(()=>y(ct,e(se))),d(Ee,Ge)};k(Ye,Ee=>{e(se)&&Ee(Ze)})}var Ve=i(Ke,2),at=i(n(Ve),2),et=i(Ve,2),rt=i(n(et),2);w(()=>Ie=Te(ye,1,"svelte-nfi4ak",null,Ie,{"field-input-error":!!e(se)})),N("change",ye,O),xs("blur",ye,ae),N("keydown",ye,X),We(ye,()=>t().engine.whisper_cpp.model_dir,Ee=>t(t().engine.whisper_cpp.model_dir=Ee,!0)),N("change",at,r),We(at,()=>t().engine.whisper_cpp.threads,Ee=>t(t().engine.whisper_cpp.threads=Ee,!0)),N("change",rt,r),We(rt,()=>t().engine.whisper_cpp.language,Ee=>t(t().engine.whisper_cpp.language=Ee,!0)),d(Y,_e)},$=Y=>{var _e=Cv(),me=i(n(_e),2);{var pe=Ke=>{var ye=yv();d(Ke,ye)};k(me,Ke=>{e(ne)||Ke(pe)})}var ze=i(me,2);{var $e=Ke=>{var ye=wv(),Ie=i(n(ye),2),Ye=i(n(Ie),2),Ze=i(n(Ye),8);w(Ve=>y(Ze,` — where Whisper.cpp${Ve!=null?Ve:""}. Pick Whisper.cpp if memory - matters more than Moonshine's latency.`),[()=>e(c)?` puts a quantized model in VRAM via ${_(e(c))}`:" uses a smaller quantized model"]),d(We,ye)};k(De,We=>{e(ne)&&!e(u)&&We(Ge)})}var st=i(De,2),it=i(n(st),2);sa(it,{get options(){return x},onchange:Se,get value(){return t().engine.moonshine.model_size},set value(We){t(t().engine.moonshine.model_size=We,!0)}});var H=i(st,2);{var A=We=>{var ye=Cv(),Ie=n(ye);{var Ye=et=>{var rt=kv();d(et,rt)},Ze=et=>{var rt=xv(),Ce=n(rt);w(()=>{var Ke;return y(Ce,`⏳ Downloading Moonshine ${(Ke=t().engine.moonshine.model_size)!=null?Ke:""} (ONNX)...`)}),d(et,rt)},Ve=et=>{var rt=Tv();d(et,rt)},at=et=>{var rt=Sv(),Ce=i(n(rt),2),Ke=n(Ce);w(()=>{var ct;return y(Ke,`Download ${(ct=t().engine.moonshine.model_size)!=null?ct:""}`)}),N("click",Ce,()=>J(t().engine.moonshine.model_size)),d(et,rt)};k(Ie,et=>{e(Q)?et(Ye):e(D)?et(Ze,1):e(fe)[t().engine.moonshine.model_size]?et(Ve,2):et(at,-1)})}d(We,ye)};k(H,We=>{e(ne)&&We(A)})}var E=i(H,2),ke=i(n(E),2);N("change",ke,r),$e(ke,()=>t().engine.moonshine.language,We=>t(t().engine.moonshine.language=We,!0)),d(Y,he)},U=Y=>{var he=Ov(),me=i(n(he),2);{var pe=E=>{var ke=Mv();d(E,ke)};k(me,E=>{e(I)||E(pe)})}var De=i(me,2),Ge=i(n(De),2);sa(Ge,{get options(){return M},onchange:oe,get value(){return t().engine.parakeet.model_size},set value(E){t(t().engine.parakeet.model_size=E,!0)}});var st=i(De,2);{var it=E=>{var ke=Iv(),We=n(ke);{var ye=Ve=>{var at=Av();d(Ve,at)},Ie=Ve=>{var at=Pv(),et=n(at);w(()=>{var rt;return y(et,`⏳ Downloading Parakeet ${(rt=t().engine.parakeet.model_size)!=null?rt:""} (ONNX INT8)...`)}),d(Ve,at)},Ye=Ve=>{var at=zv();d(Ve,at)},Ze=Ve=>{var at=Dv(),et=i(n(at),2),rt=n(et);w(()=>{var Ce;return y(rt,`Download ${(Ce=t().engine.parakeet.model_size)!=null?Ce:""}`)}),N("click",et,()=>V(t().engine.parakeet.model_size)),d(Ve,at)};k(We,Ve=>{e(ge)?Ve(ye):e(ee)?Ve(Ie,1):e(R)[t().engine.parakeet.model_size]?Ve(Ye,2):Ve(Ze,-1)})}d(E,ke)};k(st,E=>{e(I)&&E(it)})}var H=i(st,2),A=i(n(H),2);N("change",A,r),$e(A,()=>t().engine.parakeet.language,E=>t(t().engine.parakeet.language=E,!0)),d(Y,he)},te=Y=>{var he=Vv(),me=i(n(he),4),pe=i(n(me),2),De=i(me,4),Ge=i(n(De),2),st=i(De,4),it=i(n(st),2),H=i(st,2);{var A=Ce=>{var Ke=Lv(),ct=i(n(Ke),2);pt(ct,21,()=>e(be),ft,(vt,nt)=>{var wt=Rv();let dt;var Ct=n(wt);w(()=>{dt=Te(wt,1,"tag-btn svelte-nfi4ak",null,dt,{active:t().engine.remote_openai.model===e(nt)}),y(Ct,e(nt))}),N("click",wt,()=>{t(t().engine.remote_openai.model=e(nt),!0),r()}),d(vt,wt)}),d(Ce,Ke)};k(H,Ce=>{e(be).length>0&&Ce(A)})}var E=i(H,2),ke=i(n(E),2),We=i(E,4),ye=i(n(We),2),Ie=i(We,2),Ye=n(Ie),Ze=n(Ye);{var Ve=Ce=>{var Ke=Be("⏳ Testing Connection...");d(Ce,Ke)},at=Ce=>{var Ke=Be("🧪 Test Connection");d(Ce,Ke)};k(Ze,Ce=>{e(L)?Ce(Ve):Ce(at,-1)})}var et=i(Ye,2);{var rt=Ce=>{var Ke=Nv();let ct;var vt=n(Ke);{var nt=dt=>{var Ct=Be();w(()=>{var Wt;return y(Ct,`✔ ${(Wt=e(B).message)!=null?Wt:""}`)}),d(dt,Ct)},wt=dt=>{var Ct=Be();w(()=>{var Wt;return y(Ct,`⚠️ ${(Wt=e(B).message)!=null?Wt:""}`)}),d(dt,Ct)};k(vt,dt=>{e(B).success?dt(nt):dt(wt,-1)})}w(()=>ct=Te(Ke,1,"status-pill svelte-nfi4ak",null,ct,{success:e(B).success,error:!e(B).success})),d(Ce,Ke)};k(et,Ce=>{e(B)&&Ce(rt)})}w(()=>Ye.disabled=e(L)),N("change",pe,r),$e(pe,()=>t().engine.remote_openai.endpoint,Ce=>t(t().engine.remote_openai.endpoint=Ce,!0)),N("change",Ge,r),$e(Ge,()=>t().engine.remote_openai.api_key,Ce=>t(t().engine.remote_openai.api_key=Ce,!0)),N("change",it,r),$e(it,()=>t().engine.remote_openai.model,Ce=>t(t().engine.remote_openai.model=Ce,!0)),N("change",ke,r),$e(ke,()=>t().engine.remote_openai.language,Ce=>t(t().engine.remote_openai.language=Ce,!0)),N("change",ye,r),$e(ye,()=>t().engine.remote_openai.timeout_secs,Ce=>t(t().engine.remote_openai.timeout_secs=Ce,!0)),N("click",Ye,ue),d(Y,he)};k(Je,Y=>{t().engine.backend==="whisper-cpp"?Y(de):t().engine.backend==="moonshine"?Y(G,1):t().engine.backend==="parakeet"?Y(U,2):t().engine.backend==="remote-openai"&&Y(te,3)})}d(s,ve),St()}Qt(["click","change","keydown"]);var qv=p("
            "),jv=p('
            '),Uv=p(`

            Audio

            Input Device

            Microphone Monitor

            Only opens the microphone stream when recording is triggered, which saves power but cannot capture anything spoken while the microphone is still opening. Turn this off to keep the stream open: the last 300ms before you trigger recording is then kept and included, so a first word spoken early — the one carrying a voice command's "Hey Vox" or "Vox Control" — is not lost.

            Voice Activity Detection

            Processing

            Removes steady background noise (fans, hiss, hum) from the microphone before - transcription, keeping speech intact. Takes effect on the next recording — no restart needed.

            `);function Wv(s,a){Tt(a,!0);let t=Et(a,"cfg",15);function r(){Ot.set(t()),Ss.set(!0)}let l=S(yt([])),c=ce(()=>[{value:-1,label:"Default system device"},...e(l).map(O=>({value:O.index,label:O.name}))]),u=S(0),v=S(0),f=S(0),_=0,b=S(null),m;function h(){const O=e(u);O>e(v)?o(v,e(v)+(O-e(v))*.45):o(v,e(v)+(O-e(v))*.12),e(v)>e(f)?(o(f,e(v),!0),_=25):_>0?_--:o(f,Math.max(0,e(f)-.012),!0),m=requestAnimationFrame(h)}qt(async()=>{o(l,await C("list_audio_devices"),!0);try{await C("start_monitoring_audio"),o(b,await _a("audio-level",O=>{o(u,O.payload,!0)}),!0)}catch(O){console.error("Failed to start audio monitoring:",O)}m=requestAnimationFrame(h)}),ar(async()=>{m&&cancelAnimationFrame(m),e(b)&&e(b)();try{await C("stop_monitoring_audio")}catch(O){console.error("Failed to stop audio monitoring:",O)}});var x=Uv(),M=i(n(x),2),q=i(n(M),2),T=i(n(q),2);{let O=ce(()=>{var X;return(X=t().audio.input_device_index)!=null?X:-1});sa(T,{get value(){return e(O)},get options(){return e(c)},onchange:X=>{t(t().audio.input_device_index=X<0?null:X,!0),r()}})}var z=i(q,2),se=n(z),ne=i(n(se),2);let fe;var Q=i(ne,2),D=n(Q),I=i(se,2),R=n(I),ge=n(R);pt(ge,16,()=>Array(24),ft,(O,X,ve)=>{const Me=ce(()=>ve/24),Fe=ce(()=>e(v)>=e(Me)),_e=ce(()=>ve>=17);var re=qv();let we;w(()=>we=Te(re,1,"vu-segment svelte-1msnq7i",null,we,{active:e(Fe),orange:e(_e)})),d(O,re)});var ee=i(ge,2);{var j=O=>{var X=jv();w(ve=>na(X,`left: ${ve!=null?ve:""}%;`),[()=>Math.min(.99,e(f))*100]),d(O,X)};k(ee,O=>{e(f)>.01&&O(j)})}var V=i(z,2),oe=i(n(V),2),L=i(M,2),B=i(n(L),2),be=i(n(B),2),Pe=i(be,2),ue=n(Pe),W=i(L,2),J=i(n(W),2),Se=i(n(J),2),ze=i(J,4),le=i(n(ze),2),$=i(le,2),ae=n($);w((O,X)=>{fe=Te(ne,1,"vu-status-dot svelte-1msnq7i",null,fe,{active:e(u)>.005}),y(D,e(u)>.005?"Signal Detected":"Listening..."),y(ue,O),y(ae,`${X!=null?X:""}×`)},[()=>t().audio.vad_threshold.toFixed(2),()=>t().audio.gain.toFixed(1)]),N("change",oe,r),Xt(oe,()=>t().audio.dynamic_stream,O=>t(t().audio.dynamic_stream=O,!0)),N("change",be,r),$e(be,()=>t().audio.vad_threshold,O=>t(t().audio.vad_threshold=O,!0)),N("change",Se,r),Xt(Se,()=>t().audio.noise_suppression,O=>t(t().audio.noise_suppression=O,!0)),N("change",le,r),$e(le,()=>t().audio.gain,O=>t(t().audio.gain=O,!0)),d(s,x),St()}Qt(["change"]);function ua(s){function a(){s.style.height="auto",s.style.height=`${s.scrollHeight}px`}s.addEventListener("input",a);const t=setTimeout(a,0);return{update(){a()},destroy(){clearTimeout(t),s.removeEventListener("input",a)}}}var Hv=p(''),$v=p('
            Voice Command Router Settings

            Types dictated text into your active application by default. If your dictation contains Hey Vox <target_name> <text> or Vox Control <target_name> <text> (for example, "Hey Vox, Notes Hello world" or "Vox Control Notes Hello world"), VoxCtrl dynamically reroutes the text to that target instead.

            '),Gv=p(' '),Kv=p('
            Shell Executor Settings
            Terminal Command Shell command

            Use inside the command string as a placeholder to substitute transcribed speech.

            '),Yv=p(' '),Jv=p('

            Each line starts with:

            '),Xv=p(`

            A strftime pattern, written in UTC. Common pieces: %Y year (2026), %m month (09), %d day (04), %H hour (17), %M minute, %S second, %b month name (Sep), %a weekday (Fri), %p AM/PM, %Z zone (UTC), %% a literal percent. Anything else is written as typed. - Default:

            `,1),Zv=p('
            Local File Writer Settings
            '),Qv=p('
            Network Socket settings
            '),eu=p('
            FIFO Named Pipe settings
            '),tu=p('
            Linux DBus emitter settings
            '),au=p(''),su=p(''),nu=p(' '),iu=p('
            Method
            Custom Post Body JSON Template

            Must be valid JSON. Use to substitute transcribed speech.

            ',1),ru=p(' '),lu=p('
            Webhook Secret Token (HMAC)
            Custom Webhook Body JSON Template

            Must be valid JSON. Use to substitute transcribed speech.

            ',1),ou=p('
            API Endpoint Client settings
            REST endpoint URL
            '),cu=p(' '),du=p('
            MCP Server Client settings
            Custom Socket/Pipe Path Optional override

            Leave empty to use defaults (/tmp/voxctrl-mcp.sock on Linux, \\\\.\\pipe\\voxctrl-mcp on Windows).

            MCP Tool Name
            Custom Tool Arguments JSON Template

            Must be valid JSON. Use to substitute transcribed speech.

            '),vu=p(' '),uu=p(''),pu=p(' '),fu=p(" "),hu=p(`

            Discards this target's stored conversation so the next dictation starts a new - thread. History is in-memory only and is never written to disk.

            `),_u=p(`
            Conversational LLM settings

            Sends each dictation to an OpenAI-compatible /v1/chat/completions endpoint — Hermes, Ollama, llama.cpp — + matters more than Moonshine's latency.`),[()=>e(c)?` puts a quantized model in VRAM via ${h(e(c))}`:" uses a smaller quantized model"]),d(Ke,ye)};k(ze,Ke=>{e(ne)&&!e(u)&&Ke($e)})}var st=i(ze,2),it=i(n(st),2);sa(it,{get options(){return x},onchange:Se,get value(){return t().engine.moonshine.model_size},set value(Ke){t(t().engine.moonshine.model_size=Ke,!0)}});var H=i(st,2);{var M=Ke=>{var ye=Ev(),Ie=n(ye);{var Ye=et=>{var rt=kv();d(et,rt)},Ze=et=>{var rt=xv(),Ee=n(rt);w(()=>{var Ge;return y(Ee,`⏳ Downloading Moonshine ${(Ge=t().engine.moonshine.model_size)!=null?Ge:""} (ONNX)...`)}),d(et,rt)},Ve=et=>{var rt=Tv();d(et,rt)},at=et=>{var rt=Sv(),Ee=i(n(rt),2),Ge=n(Ee);w(()=>{var ct;return y(Ge,`Download ${(ct=t().engine.moonshine.model_size)!=null?ct:""}`)}),N("click",Ee,()=>J(t().engine.moonshine.model_size)),d(et,rt)};k(Ie,et=>{e(Q)?et(Ye):e(z)?et(Ze,1):e(fe)[t().engine.moonshine.model_size]?et(Ve,2):et(at,-1)})}d(Ke,ye)};k(H,Ke=>{e(ne)&&Ke(M)})}var C=i(H,2),ke=i(n(C),2);N("change",ke,r),We(ke,()=>t().engine.moonshine.language,Ke=>t(t().engine.moonshine.language=Ke,!0)),d(Y,_e)},U=Y=>{var _e=Ov(),me=i(n(_e),2);{var pe=C=>{var ke=Av();d(C,ke)};k(me,C=>{e(I)||C(pe)})}var ze=i(me,2),$e=i(n(ze),2);sa($e,{get options(){return A},onchange:oe,get value(){return t().engine.parakeet.model_size},set value(C){t(t().engine.parakeet.model_size=C,!0)}});var st=i(ze,2);{var it=C=>{var ke=Iv(),Ke=n(ke);{var ye=Ve=>{var at=Mv();d(Ve,at)},Ie=Ve=>{var at=Pv(),et=n(at);w(()=>{var rt;return y(et,`⏳ Downloading Parakeet ${(rt=t().engine.parakeet.model_size)!=null?rt:""} (ONNX INT8)...`)}),d(Ve,at)},Ye=Ve=>{var at=Dv();d(Ve,at)},Ze=Ve=>{var at=zv(),et=i(n(at),2),rt=n(et);w(()=>{var Ee;return y(rt,`Download ${(Ee=t().engine.parakeet.model_size)!=null?Ee:""}`)}),N("click",et,()=>V(t().engine.parakeet.model_size)),d(Ve,at)};k(Ke,Ve=>{e(ge)?Ve(ye):e(ee)?Ve(Ie,1):e(L)[t().engine.parakeet.model_size]?Ve(Ye,2):Ve(Ze,-1)})}d(C,ke)};k(st,C=>{e(I)&&C(it)})}var H=i(st,2),M=i(n(H),2);N("change",M,r),We(M,()=>t().engine.parakeet.language,C=>t(t().engine.parakeet.language=C,!0)),d(Y,_e)},te=Y=>{var _e=Vv(),me=i(n(_e),4),pe=i(n(me),2),ze=i(me,4),$e=i(n(ze),2),st=i(ze,4),it=i(n(st),2),H=i(st,2);{var M=Ee=>{var Ge=Rv(),ct=i(n(Ge),2);pt(ct,21,()=>e(be),ft,(vt,nt)=>{var wt=Lv();let dt;var Et=n(wt);w(()=>{dt=Te(wt,1,"tag-btn svelte-nfi4ak",null,dt,{active:t().engine.remote_openai.model===e(nt)}),y(Et,e(nt))}),N("click",wt,()=>{t(t().engine.remote_openai.model=e(nt),!0),r()}),d(vt,wt)}),d(Ee,Ge)};k(H,Ee=>{e(be).length>0&&Ee(M)})}var C=i(H,2),ke=i(n(C),2),Ke=i(C,4),ye=i(n(Ke),2),Ie=i(Ke,2),Ye=n(Ie),Ze=n(Ye);{var Ve=Ee=>{var Ge=Be("⏳ Testing Connection...");d(Ee,Ge)},at=Ee=>{var Ge=Be("🧪 Test Connection");d(Ee,Ge)};k(Ze,Ee=>{e(R)?Ee(Ve):Ee(at,-1)})}var et=i(Ye,2);{var rt=Ee=>{var Ge=Nv();let ct;var vt=n(Ge);{var nt=dt=>{var Et=Be();w(()=>{var Kt;return y(Et,`✔ ${(Kt=e(B).message)!=null?Kt:""}`)}),d(dt,Et)},wt=dt=>{var Et=Be();w(()=>{var Kt;return y(Et,`⚠️ ${(Kt=e(B).message)!=null?Kt:""}`)}),d(dt,Et)};k(vt,dt=>{e(B).success?dt(nt):dt(wt,-1)})}w(()=>ct=Te(Ge,1,"status-pill svelte-nfi4ak",null,ct,{success:e(B).success,error:!e(B).success})),d(Ee,Ge)};k(et,Ee=>{e(B)&&Ee(rt)})}w(()=>Ye.disabled=e(R)),N("change",pe,r),We(pe,()=>t().engine.remote_openai.endpoint,Ee=>t(t().engine.remote_openai.endpoint=Ee,!0)),N("change",$e,r),We($e,()=>t().engine.remote_openai.api_key,Ee=>t(t().engine.remote_openai.api_key=Ee,!0)),N("change",it,r),We(it,()=>t().engine.remote_openai.model,Ee=>t(t().engine.remote_openai.model=Ee,!0)),N("change",ke,r),We(ke,()=>t().engine.remote_openai.language,Ee=>t(t().engine.remote_openai.language=Ee,!0)),N("change",ye,r),We(ye,()=>t().engine.remote_openai.timeout_secs,Ee=>t(t().engine.remote_openai.timeout_secs=Ee,!0)),N("click",Ye,ue),d(Y,_e)};k(Je,Y=>{t().engine.backend==="whisper-cpp"?Y(de):t().engine.backend==="moonshine"?Y($,1):t().engine.backend==="parakeet"?Y(U,2):t().engine.backend==="remote-openai"&&Y(te,3)})}d(s,ve),St()}Qt(["click","change","keydown"]);var qv=p("

            "),jv=p('
            '),Uv=p(`

            Audio

            Input Device

            Microphone Monitor

            Only opens the microphone stream when recording is triggered, which saves power but cannot capture anything spoken while the microphone is still opening. Turn this off to keep the stream open: the last 300ms before you trigger recording is then kept and included, so a first word spoken early — the one carrying a voice command's "Hey Vox" or "Vox Control" — is not lost.

            Voice Activity Detection

            Processing

            Removes steady background noise (fans, hiss, hum) from the microphone before + transcription, keeping speech intact. Takes effect on the next recording — no restart needed.

            `);function Kv(s,a){Tt(a,!0);let t=Ct(a,"cfg",15);function r(){Ot.set(t()),Ss.set(!0)}let l=S(yt([])),c=ce(()=>[{value:-1,label:"Default system device"},...e(l).map(O=>({value:O.index,label:O.name}))]),u=S(0),v=S(0),f=S(0),h=0,b=S(null),m;function _(){const O=e(u);O>e(v)?o(v,e(v)+(O-e(v))*.45):o(v,e(v)+(O-e(v))*.12),e(v)>e(f)?(o(f,e(v),!0),h=25):h>0?h--:o(f,Math.max(0,e(f)-.012),!0),m=requestAnimationFrame(_)}qt(async()=>{o(l,await E("list_audio_devices"),!0);try{await E("start_monitoring_audio"),o(b,await ha("audio-level",O=>{o(u,O.payload,!0)}),!0)}catch(O){console.error("Failed to start audio monitoring:",O)}m=requestAnimationFrame(_)}),ar(async()=>{m&&cancelAnimationFrame(m),e(b)&&e(b)();try{await E("stop_monitoring_audio")}catch(O){console.error("Failed to stop audio monitoring:",O)}});var x=Uv(),A=i(n(x),2),q=i(n(A),2),T=i(n(q),2);{let O=ce(()=>{var X;return(X=t().audio.input_device_index)!=null?X:-1});sa(T,{get value(){return e(O)},get options(){return e(c)},onchange:X=>{t(t().audio.input_device_index=X<0?null:X,!0),r()}})}var D=i(q,2),se=n(D),ne=i(n(se),2);let fe;var Q=i(ne,2),z=n(Q),I=i(se,2),L=n(I),ge=n(L);pt(ge,16,()=>Array(24),ft,(O,X,ve)=>{const Ae=ce(()=>ve/24),Fe=ce(()=>e(v)>=e(Ae)),he=ce(()=>ve>=17);var re=qv();let we;w(()=>we=Te(re,1,"vu-segment svelte-1msnq7i",null,we,{active:e(Fe),orange:e(he)})),d(O,re)});var ee=i(ge,2);{var j=O=>{var X=jv();w(ve=>na(X,`left: ${ve!=null?ve:""}%;`),[()=>Math.min(.99,e(f))*100]),d(O,X)};k(ee,O=>{e(f)>.01&&O(j)})}var V=i(D,2),oe=i(n(V),2),R=i(A,2),B=i(n(R),2),be=i(n(B),2),Pe=i(be,2),ue=n(Pe),K=i(R,2),J=i(n(K),2),Se=i(n(J),2),De=i(J,4),le=i(n(De),2),W=i(le,2),ae=n(W);w((O,X)=>{fe=Te(ne,1,"vu-status-dot svelte-1msnq7i",null,fe,{active:e(u)>.005}),y(z,e(u)>.005?"Signal Detected":"Listening..."),y(ue,O),y(ae,`${X!=null?X:""}×`)},[()=>t().audio.vad_threshold.toFixed(2),()=>t().audio.gain.toFixed(1)]),N("change",oe,r),Xt(oe,()=>t().audio.dynamic_stream,O=>t(t().audio.dynamic_stream=O,!0)),N("change",be,r),We(be,()=>t().audio.vad_threshold,O=>t(t().audio.vad_threshold=O,!0)),N("change",Se,r),Xt(Se,()=>t().audio.noise_suppression,O=>t(t().audio.noise_suppression=O,!0)),N("change",le,r),We(le,()=>t().audio.gain,O=>t(t().audio.gain=O,!0)),d(s,x),St()}Qt(["change"]);function ua(s){function a(){s.style.height="auto",s.style.height=`${s.scrollHeight}px`}s.addEventListener("input",a);const t=setTimeout(a,0);return{update(){a()},destroy(){clearTimeout(t),s.removeEventListener("input",a)}}}var Hv=p(''),Wv=p('
            Voice Command Router Settings

            Types dictated text into your active application by default. If your dictation contains Hey Vox <target_name> <text> or Vox Control <target_name> <text> (for example, "Hey Vox, Notes Hello world" or "Vox Control Notes Hello world"), VoxCtrl dynamically reroutes the text to that target instead.

            '),$v=p(' '),Gv=p('
            Shell Executor Settings
            Terminal Command Shell command

            Use inside the command string as a placeholder to substitute transcribed speech.

            '),Yv=p(' '),Jv=p('

            Each line starts with:

            '),Xv=p(`

            A strftime pattern, written in UTC. Common pieces: %Y year (2026), %m month (09), %d day (04), %H hour (17), %M minute, %S second, %b month name (Sep), %a weekday (Fri), %p AM/PM, %Z zone (UTC), %% a literal percent. Anything else is written as typed. + Default:

            `,1),Zv=p('
            Local File Writer Settings
            '),Qv=p('
            Network Socket settings
            '),eu=p('
            FIFO Named Pipe settings
            '),tu=p('
            Linux DBus emitter settings
            '),au=p(''),su=p(''),nu=p(' '),iu=p('
            Method
            Custom Post Body JSON Template

            Must be valid JSON. Use to substitute transcribed speech.

            ',1),ru=p(' '),lu=p('
            Webhook Secret Token (HMAC)
            Custom Webhook Body JSON Template

            Must be valid JSON. Use to substitute transcribed speech.

            ',1),ou=p('
            API Endpoint Client settings
            REST endpoint URL
            '),cu=p(' '),du=p('
            MCP Server Client settings
            Custom Socket/Pipe Path Optional override

            Leave empty to use defaults (/tmp/voxctrl-mcp.sock on Linux, \\\\.\\pipe\\voxctrl-mcp on Windows).

            MCP Tool Name
            Custom Tool Arguments JSON Template

            Must be valid JSON. Use to substitute transcribed speech.

            '),vu=p(' '),uu=p(''),pu=p(' '),fu=p(" "),_u=p(`

            Discards this target's stored conversation so the next dictation starts a new + thread. History is in-memory only and is never written to disk.

            `),hu=p(`
            Conversational LLM settings

            Sends each dictation to an OpenAI-compatible /v1/chat/completions endpoint — Hermes, Ollama, llama.cpp — carrying the running conversation so the model keeps its context between turns.

            Server Base URL

            The /v1 suffix is optional — it is added automatically.

            Model

            Press Test & fetch models to confirm the server is reachable and pick from the ids it reports.

            API Key Optional
            System Prompt

            Sent ahead of every turn and never trimmed from the history window.

            Reply Handling

            Speaking the reply requires TTS to be enabled in the TTS tab.

            Conversation Memory Messages

            Most recent messages sent with each turn. 0 sends the whole conversation.

            Request Timeout Seconds
            Spoken Reset Phrase Optional

            Saying exactly this clears the conversation instead of sending it to the model. Casing and punctuation are ignored.

            `),gu=p('
            Output
            '),mu=p(`
            `);function Bo(s,a){Tt(a,!0);let t=Et(a,"editingTarget",15),r=Et(a,"isNested",3,!1),l=S(""),c=S(""),u=S(""),v=S(yt([])),f=S(!1),_=S(""),b=S(!1);const m="%Y-%m-%dT%H:%M:%SZ";let h=S(""),x=S(null);pa(()=>{var V,oe;const ee=(oe=(V=t())==null?void 0:V.file_timestamp_format)!=null?oe:"";if(!t()||t().delivery!=="file"||!t().file_timestamp){o(x,null),o(h,"");return}let j=!1;return C("preview_timestamp_format",{format:ee}).then(L=>{j||(o(h,L,!0),o(x,null))}).catch(L=>{j||(o(h,""),o(x,`${L}`))}),()=>{j=!0}});let M=ce(()=>!t()||t().delivery!=="exec"||(t().command||"").includes("{text}")?null:"Command must contain '{text}' placeholder."),q=ce(()=>{if(!e(l).trim())return null;try{JSON.parse(e(l))}catch(ee){return"Invalid JSON format: "+ee.message}return e(l).includes("{text}")?null:"Arguments must contain '{text}' placeholder."}),T=ce(()=>{if(!e(c).trim())return null;try{JSON.parse(e(c))}catch(ee){return"Invalid JSON format: "+ee.message}return e(c).includes("{text}")?null:"JSON template must contain '{text}' placeholder."}),z=ce(()=>{if(!e(u).trim())return null;try{JSON.parse(e(u))}catch(ee){return"Invalid JSON format: "+ee.message}return e(u).includes("{text}")?null:"JSON template must contain '{text}' placeholder."}),se=ce(()=>{if(!t()||t().delivery!=="chat")return null;const ee=(t().chat_url||"").trim();return ee?/^https?:\/\//i.test(ee)?null:"URL must start with http:// or https://":"A server base URL is required."}),ne=ce(()=>!t()||t().delivery!=="chat"||(t().chat_model||"").trim()?null:"A model name is required.");async function fe(){if(t()){o(f,!0);try{const ee=await C("test_chat_target",{target:t()});o(v,ee.models,!0),o(_,ee.message,!0),o(b,ee.success,!0),ee.success&&!t().chat_model&&ee.models.length>0&&t(t().chat_model=ee.models[0],!0)}catch(ee){o(v,[],!0),o(_,String(ee),!0),o(b,!1)}finally{o(f,!1)}}}async function Q(){if(t())try{const ee=await C("reset_chat_conversation",{targetId:t().id});o(_,`Conversation cleared (${ee} message(s) discarded).`),o(b,!0)}catch(ee){o(_,String(ee),!0),o(b,!1)}}qt(()=>{var ee,j,V,oe,L;t()&&(t().processing||t(t().processing={},!0),t().file_mode||t(t().file_mode="append",!0),t().file_timestamp_format||t(t().file_timestamp_format=m,!0),t((j=(ee=t()).chat_max_history)!=null?j:ee.chat_max_history=20,!0),t((oe=(V=t()).chat_timeout_secs)!=null?oe:V.chat_timeout_secs=120,!0),t((L=t()).chat_reply_mode||(L.chat_reply_mode="speak"),!0),o(l,t().mcp_args?JSON.stringify(t().mcp_args,null,2):`{ + easy to say and easy for speech recognition to catch.

            `);function Bo(s,a){Tt(a,!0);let t=Ct(a,"editingTarget",15),r=Ct(a,"isNested",3,!1),l=S(""),c=S(""),u=S(""),v=S(yt([])),f=S(!1),h=S(""),b=S(!1);const m="%Y-%m-%dT%H:%M:%SZ";let _=S(""),x=S(null);pa(()=>{var V,oe;const ee=(oe=(V=t())==null?void 0:V.file_timestamp_format)!=null?oe:"";if(!t()||t().delivery!=="file"||!t().file_timestamp){o(x,null),o(_,"");return}let j=!1;return E("preview_timestamp_format",{format:ee}).then(R=>{j||(o(_,R,!0),o(x,null))}).catch(R=>{j||(o(_,""),o(x,`${R}`))}),()=>{j=!0}});let A=ce(()=>!t()||t().delivery!=="exec"||(t().command||"").includes("{text}")?null:"Command must contain '{text}' placeholder."),q=ce(()=>{if(!e(l).trim())return null;try{JSON.parse(e(l))}catch(ee){return"Invalid JSON format: "+ee.message}return e(l).includes("{text}")?null:"Arguments must contain '{text}' placeholder."}),T=ce(()=>{if(!e(c).trim())return null;try{JSON.parse(e(c))}catch(ee){return"Invalid JSON format: "+ee.message}return e(c).includes("{text}")?null:"JSON template must contain '{text}' placeholder."}),D=ce(()=>{if(!e(u).trim())return null;try{JSON.parse(e(u))}catch(ee){return"Invalid JSON format: "+ee.message}return e(u).includes("{text}")?null:"JSON template must contain '{text}' placeholder."}),se=ce(()=>{if(!t()||t().delivery!=="chat")return null;const ee=(t().chat_url||"").trim();return ee?/^https?:\/\//i.test(ee)?null:"URL must start with http:// or https://":"A server base URL is required."}),ne=ce(()=>!t()||t().delivery!=="chat"||(t().chat_model||"").trim()?null:"A model name is required.");async function fe(){if(t()){o(f,!0);try{const ee=await E("test_chat_target",{target:t()});o(v,ee.models,!0),o(h,ee.message,!0),o(b,ee.success,!0),ee.success&&!t().chat_model&&ee.models.length>0&&t(t().chat_model=ee.models[0],!0)}catch(ee){o(v,[],!0),o(h,String(ee),!0),o(b,!1)}finally{o(f,!1)}}}async function Q(){if(t())try{const ee=await E("reset_chat_conversation",{targetId:t().id});o(h,`Conversation cleared (${ee} message(s) discarded).`),o(b,!0)}catch(ee){o(h,String(ee),!0),o(b,!1)}}qt(()=>{var ee,j,V,oe,R;t()&&(t().processing||t(t().processing={},!0),t().file_mode||t(t().file_mode="append",!0),t().file_timestamp_format||t(t().file_timestamp_format=m,!0),t((j=(ee=t()).chat_max_history)!=null?j:ee.chat_max_history=20,!0),t((oe=(V=t()).chat_timeout_secs)!=null?oe:V.chat_timeout_secs=120,!0),t((R=t()).chat_reply_mode||(R.chat_reply_mode="speak"),!0),o(l,t().mcp_args?JSON.stringify(t().mcp_args,null,2):`{ "text": "{text}" }`,!0),o(c,t().http_json_template?JSON.stringify(t().http_json_template,null,2):`{ "text": "{text}" }`,!0),o(u,t().webhook_json_template?JSON.stringify(t().webhook_json_template,null,2):`{ "text": "{text}" -}`,!0))});function D(){if(t()){if(t().id.trim()===""){alert("Target ID cannot be empty.");return}if(t().delivery==="file"&&t().file_timestamp&&e(x)){alert("Validation Error: "+e(x));return}if(t().delivery==="exec"&&e(M)){alert("Validation Error: "+e(M));return}if(t().delivery==="mcp"){if(e(q)){alert("Validation Error: "+e(q));return}try{t(t().mcp_args=JSON.parse(e(l)),!0)}catch{alert("Invalid JSON format in MCP Custom Tool Arguments.");return}}if(t().delivery==="http"){if(e(T)){alert("Validation Error: "+e(T));return}try{t(t().http_json_template=JSON.parse(e(c)),!0)}catch{alert("Invalid JSON format in HTTP Custom Post Body.");return}}if(t().delivery==="webhook"){if(e(z)){alert("Validation Error: "+e(z));return}try{t(t().webhook_json_template=JSON.parse(e(u)),!0)}catch{alert("Invalid JSON format in Webhook Custom Post Body.");return}}if(t().delivery==="chat"){const ee=e(se)||e(ne);if(ee){alert("Validation Error: "+ee);return}t(t().chat_max_history=Number(t().chat_max_history)||0,!0),t(t().chat_timeout_secs=Number(t().chat_timeout_secs)||120,!0)}a.onSave()}}var I=xi(),R=_t(I);{var ge=ee=>{var j=mu(),V=n(j),oe=n(V),L=n(oe),B=n(L),be=i(L,2),Pe=i(oe,2),ue=n(Pe);{var W=ye=>{var Ie=Hv(),Ye=i(n(Ie),2);w(()=>Ye.disabled=!a.isNew),$e(Ye,()=>t().id,Ze=>t(t().id=Ze,!0)),d(ye,Ie)};k(ue,ye=>{r()||ye(W)})}var J=i(ue,2),Se=i(n(J),2),ze=i(J,2),le=i(n(ze)),$=n(le),ae=i(le,2),O=n(ae),X=i(ze,2),ve=i(n(X),2);sa(ve,{options:[{value:"command",label:"Voice Command Router (Hey Vox / Vox Control keyword)"},{value:"inject",label:"Inject Text Directly (Simulate keyboard)"},{value:"clipboard",label:"Save to Clipboard"},{value:"exec",label:"Execute Command"},{value:"file",label:"Write to File"},{value:"pipe",label:"FIFO Named Pipe"},{value:"socket",label:"TCP / Unix Socket"},{value:"dbus",label:"DBus Signal"},{value:"http",label:"HTTP Custom Client"},{value:"webhook",label:"Send Webhook Event"},{value:"mcp",label:"Call MCP Server Tool"},{value:"speak",label:"Speak Text Aloud (TTS)"},{value:"chat",label:"Chat with a Local LLM (Hermes / OpenAI-compatible)"}],get value(){return t().delivery},set value(ye){t(t().delivery=ye,!0)}});var Me=i(X,2);{var Fe=ye=>{var Ie=$v();d(ye,Ie)};k(Me,ye=>{t().delivery==="command"&&ye(Fe)})}var _e=i(Me,2);{var re=ye=>{var Ie=Kv(),Ye=i(n(Ie),2),Ze=i(n(Ye),2);mt(Ze,"placeholder","e.g. xdg-open {text}");var Ve=i(Ze,2),at=i(n(Ve));at.textContent="{text}";var et=i(Ve,2);{var rt=Ce=>{var Ke=Gv(),ct=n(Ke);w(()=>{var vt;return y(ct,`⚠️ ${(vt=e(M))!=null?vt:""}`)}),d(Ce,Ke)};k(et,Ce=>{e(M)&&Ce(rt)})}w(()=>Te(Ze,1,`full-width-input ${e(M)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""}`,"svelte-oc07pw")),$e(Ze,()=>t().command,Ce=>t(t().command=Ce,!0)),d(ye,Ie)};k(_e,ye=>{t().delivery==="exec"&&ye(re)})}var we=i(_e,2);{var Je=ye=>{var Ie=Zv(),Ye=i(n(Ie),2),Ze=i(n(Ye),2),Ve=i(Ye,2),at=i(n(Ve),2);sa(at,{options:[{value:"append",label:"Append (Add to end of file)"},{value:"prepend",label:"Prepend (Add to beginning of file)"}],get value(){return t().file_mode},set value(nt){t(t().file_mode=nt,!0)}});var et=i(Ve,2),rt=i(n(et),2),Ce=i(et,2),Ke=n(Ce),ct=i(Ce,2);{var vt=nt=>{var wt=Xv(),dt=_t(wt),Ct=i(n(dt),2);mt(Ct,"placeholder",m);var Wt=i(dt,2),ia=i(n(Wt),25);ia.textContent="%Y-%m-%dT%H:%M:%SZ";var ra=i(Wt,2);{var bt=Rt=>{var Ht=Yv(),ta=n(Ht);w(()=>{var Oe;return y(ta,`⚠️ ${(Oe=e(x))!=null?Oe:""}`)}),d(Rt,Ht)},ea=Rt=>{var Ht=Jv(),ta=i(n(Ht)),Oe=n(ta);w(()=>{var qe;return y(Oe,`[${(qe=e(h))!=null?qe:""}]`)}),d(Rt,Ht)};k(ra,Rt=>{e(x)?Rt(bt):e(h)&&Rt(ea,1)})}w(()=>Te(Ct,1,Ia(e(x)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""))),$e(Ct,()=>t().file_timestamp_format,Rt=>t(t().file_timestamp_format=Rt,!0)),d(nt,wt)};k(ct,nt=>{t().file_timestamp&&nt(vt)})}$e(Ze,()=>t().file_path,nt=>t(t().file_path=nt,!0)),$e(rt,()=>t().file_prefix,nt=>t(t().file_prefix=nt,!0)),Xt(Ke,()=>t().file_timestamp,nt=>t(t().file_timestamp=nt,!0)),d(ye,Ie)};k(we,ye=>{t().delivery==="file"&&ye(Je)})}var de=i(we,2);{var G=ye=>{var Ie=Qv(),Ye=i(n(Ie),2),Ze=i(n(Ye),2),Ve=i(Ye,2),at=i(n(Ve),2),et=i(Ve,2),rt=i(n(et),2);$e(Ze,()=>t().socket_host,Ce=>t(t().socket_host=Ce,!0)),$e(at,()=>t().socket_port,Ce=>t(t().socket_port=Ce,!0)),$e(rt,()=>t().socket_unix,Ce=>t(t().socket_unix=Ce,!0)),d(ye,Ie)};k(de,ye=>{t().delivery==="socket"&&ye(G)})}var U=i(de,2);{var te=ye=>{var Ie=eu(),Ye=i(n(Ie),2),Ze=i(n(Ye),2),Ve=i(Ye,2),at=i(n(Ve),2);$e(Ze,()=>t().pipe_path,et=>t(t().pipe_path=et,!0)),$e(at,()=>t().response_pipe,et=>t(t().response_pipe=et,!0)),d(ye,Ie)};k(U,ye=>{t().delivery==="pipe"&&ye(te)})}var Y=i(U,2);{var he=ye=>{var Ie=tu(),Ye=i(n(Ie),2),Ze=i(n(Ye),2);$e(Ze,()=>t().dbus_signal,Ve=>t(t().dbus_signal=Ve,!0)),d(ye,Ie)};k(Y,ye=>{t().delivery==="dbus"&&ye(he)})}var me=i(Y,2);{var pe=ye=>{var Ie=ou(),Ye=i(n(Ie),2),Ze=i(n(Ye),2);{var Ve=Ke=>{var ct=au();$e(ct,()=>t().http_url,vt=>t(t().http_url=vt,!0)),d(Ke,ct)},at=Ke=>{var ct=su();$e(ct,()=>t().webhook_url,vt=>t(t().webhook_url=vt,!0)),d(Ke,ct)};k(Ze,Ke=>{t().delivery==="http"?Ke(Ve):Ke(at,-1)})}var et=i(Ye,2);{var rt=Ke=>{var ct=iu(),vt=_t(ct),nt=i(n(vt),2);sa(nt,{options:[{value:"POST",label:"POST"},{value:"GET",label:"GET"},{value:"PUT",label:"PUT"}],get value(){return t().http_method},set value(bt){t(t().http_method=bt,!0)}});var wt=i(vt,2),dt=i(n(wt),2);mt(dt,"placeholder",'{"text": "{text}"}'),As(()=>$e(dt,()=>e(c),bt=>o(c,bt))),Fs(dt,bt=>ua==null?void 0:ua(bt));var Ct=i(dt,2),Wt=i(n(Ct));Wt.textContent="{text}";var ia=i(Ct,2);{var ra=bt=>{var ea=nu(),Rt=n(ea);w(()=>{var Ht;return y(Rt,`⚠️ ${(Ht=e(T))!=null?Ht:""}`)}),d(bt,ea)};k(ia,bt=>{e(T)&&bt(ra)})}w(()=>Te(dt,1,Ia(e(T)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""),"svelte-oc07pw")),d(Ke,ct)},Ce=Ke=>{var ct=lu(),vt=_t(ct),nt=i(n(vt),2),wt=i(vt,2),dt=i(n(wt),2);mt(dt,"placeholder",'{"text": "{text}"}'),As(()=>$e(dt,()=>e(u),bt=>o(u,bt))),Fs(dt,bt=>ua==null?void 0:ua(bt));var Ct=i(dt,2),Wt=i(n(Ct));Wt.textContent="{text}";var ia=i(Ct,2);{var ra=bt=>{var ea=ru(),Rt=n(ea);w(()=>{var Ht;return y(Rt,`⚠️ ${(Ht=e(z))!=null?Ht:""}`)}),d(bt,ea)};k(ia,bt=>{e(z)&&bt(ra)})}w(()=>Te(dt,1,Ia(e(z)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""),"svelte-oc07pw")),$e(nt,()=>t().webhook_secret,bt=>t(t().webhook_secret=bt,!0)),d(Ke,ct)};k(et,Ke=>{t().delivery==="http"?Ke(rt):Ke(Ce,-1)})}d(ye,Ie)};k(me,ye=>{(t().delivery==="http"||t().delivery==="webhook")&&ye(pe)})}var De=i(me,2);{var Ge=ye=>{var Ie=du(),Ye=i(n(Ie),2),Ze=i(n(Ye),2),Ve=i(Ye,2),at=i(n(Ve),2),et=i(Ve,2),rt=i(n(et),2);mt(rt,"placeholder",'{"text": "{text}"}'),As(()=>$e(rt,()=>e(l),nt=>o(l,nt))),Fs(rt,nt=>ua==null?void 0:ua(nt));var Ce=i(rt,2),Ke=i(n(Ce));Ke.textContent="{text}";var ct=i(Ce,2);{var vt=nt=>{var wt=cu(),dt=n(wt);w(()=>{var Ct;return y(dt,`⚠️ ${(Ct=e(q))!=null?Ct:""}`)}),d(nt,wt)};k(ct,nt=>{e(q)&&nt(vt)})}w(()=>Te(rt,1,Ia(e(q)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""),"svelte-oc07pw")),$e(Ze,()=>t().mcp_path,nt=>t(t().mcp_path=nt,!0)),$e(at,()=>t().mcp_tool,nt=>t(t().mcp_tool=nt,!0)),d(ye,Ie)};k(De,ye=>{t().delivery==="mcp"&&ye(Ge)})}var st=i(De,2);{var it=ye=>{var Ie=_u(),Ye=i(n(Ie),4),Ze=i(n(Ye),2),Ve=i(Ze,4);{var at=ie=>{var xe=vu(),Ee=n(xe);w(()=>{var He;return y(Ee,`⚠️ ${(He=e(se))!=null?He:""}`)}),d(ie,xe)};k(Ve,ie=>{e(se)&&ie(at)})}var et=i(Ye,2),rt=n(et),Ce=i(n(rt),2),Ke=n(Ce),ct=i(rt,2);{var vt=ie=>{{let xe=ce(()=>e(v).map(Ee=>({value:Ee,label:Ee})));sa(ie,{get options(){return e(xe)},get value(){return t().chat_model},set value(Ee){t(t().chat_model=Ee,!0)}})}},nt=ie=>{var xe=uu();w(()=>Te(xe,1,`full-width-input ${e(ne)?"border-red-500! ring-2! ring-red-500/20!":""}`,"svelte-oc07pw")),$e(xe,()=>t().chat_model,Ee=>t(t().chat_model=Ee,!0)),d(ie,xe)};k(ct,ie=>{e(v).length>0?ie(vt):ie(nt,-1)})}var wt=i(ct,4);{var dt=ie=>{var xe=pu(),Ee=n(xe);w(()=>{var He;return y(Ee,`⚠️ ${(He=e(ne))!=null?He:""}`)}),d(ie,xe)};k(wt,ie=>{e(ne)&&ie(dt)})}var Ct=i(wt,2);{var Wt=ie=>{var xe=fu(),Ee=n(xe);w(()=>{Te(xe,1,`chat-status ${e(b)?"ok":"bad"}`,"svelte-oc07pw"),y(Ee,e(_))}),d(ie,xe)};k(Ct,ie=>{e(_)&&ie(Wt)})}var ia=i(et,2),ra=i(n(ia),2),bt=i(ia,2),ea=i(n(bt),2);As(()=>$e(ea,()=>t().chat_system_prompt,ie=>t(t().chat_system_prompt=ie,!0))),Fs(ea,ie=>ua==null?void 0:ua(ie));var Rt=i(bt,2),Ht=i(n(Rt),2);sa(Ht,{options:[{value:"speak",label:"Speak the reply aloud (TTS)"},{value:"inject",label:"Type the reply into the focused window"},{value:"clipboard",label:"Copy the reply to the clipboard"},{value:"none",label:"Discard the reply (fire and forget)"}],get value(){return t().chat_reply_mode},set value(ie){t(t().chat_reply_mode=ie,!0)}});var ta=i(Rt,2),Oe=i(n(ta),2),qe=i(ta,2),K=i(n(qe),2),g=i(qe,2),P=i(n(g),2),Ae=i(g,2);{var Ue=ie=>{var xe=hu(),Ee=n(xe),He=n(Ee);N("click",He,Q),d(ie,xe)};k(Ae,ie=>{a.isNew||ie(Ue)})}w(()=>{Te(Ze,1,`full-width-input ${e(se)?"border-red-500! ring-2! ring-red-500/20!":""}`,"svelte-oc07pw"),Ce.disabled=e(f),y(Ke,e(f)?"Connecting…":"Test & fetch models")}),$e(Ze,()=>t().chat_url,ie=>t(t().chat_url=ie,!0)),N("click",Ce,fe),$e(ra,()=>t().chat_api_key,ie=>t(t().chat_api_key=ie,!0)),$e(Oe,()=>t().chat_max_history,ie=>t(t().chat_max_history=ie,!0)),$e(K,()=>t().chat_timeout_secs,ie=>t(t().chat_timeout_secs=ie,!0)),$e(P,()=>t().chat_reset_phrase,ie=>t(t().chat_reset_phrase=ie,!0)),d(ye,Ie)};k(st,ye=>{t().delivery==="chat"&&ye(it)})}var H=i(st,2);{var A=ye=>{var Ie=gu(),Ye=i(n(Ie),2),Ze=n(Ye);Xt(Ze,()=>t().strip_newlines,Ve=>t(t().strip_newlines=Ve,!0)),d(ye,Ie)};k(H,ye=>{(t().delivery==="inject"||t().delivery==="command")&&ye(A)})}var E=i(Pe,2),ke=n(E),We=i(ke,2);w(()=>{Te(j,1,`modal-backdrop ${r()?"target-modal-backdrop":""}`,"svelte-oc07pw"),y(B,a.isNew?"Create Target":"Edit Target"),y($,t().label||"Obsidian Notes"),y(O,t().label||"Obsidian Notes")}),N("click",be,function(...ye){var Ie;(Ie=a.onCancel)==null||Ie.apply(this,ye)}),$e(Se,()=>t().label,ye=>t(t().label=ye,!0)),N("click",ke,function(...ye){var Ie;(Ie=a.onCancel)==null||Ie.apply(this,ye)}),N("click",We,D),d(ee,j)};k(R,ee=>{t()&&ee(ge)})}d(s,I),St()}Qt(["click"]);var bu=p(`Your desktop decides which keys VoxCtrl may claim, and may ask you to confirm them. +}`,!0))});function z(){if(t()){if(t().id.trim()===""){alert("Target ID cannot be empty.");return}if(t().delivery==="file"&&t().file_timestamp&&e(x)){alert("Validation Error: "+e(x));return}if(t().delivery==="exec"&&e(A)){alert("Validation Error: "+e(A));return}if(t().delivery==="mcp"){if(e(q)){alert("Validation Error: "+e(q));return}try{t(t().mcp_args=JSON.parse(e(l)),!0)}catch{alert("Invalid JSON format in MCP Custom Tool Arguments.");return}}if(t().delivery==="http"){if(e(T)){alert("Validation Error: "+e(T));return}try{t(t().http_json_template=JSON.parse(e(c)),!0)}catch{alert("Invalid JSON format in HTTP Custom Post Body.");return}}if(t().delivery==="webhook"){if(e(D)){alert("Validation Error: "+e(D));return}try{t(t().webhook_json_template=JSON.parse(e(u)),!0)}catch{alert("Invalid JSON format in Webhook Custom Post Body.");return}}if(t().delivery==="chat"){const ee=e(se)||e(ne);if(ee){alert("Validation Error: "+ee);return}t(t().chat_max_history=Number(t().chat_max_history)||0,!0),t(t().chat_timeout_secs=Number(t().chat_timeout_secs)||120,!0)}a.onSave()}}var I=xi(),L=ht(I);{var ge=ee=>{var j=mu(),V=n(j),oe=n(V),R=n(oe),B=n(R),be=i(R,2),Pe=i(oe,2),ue=n(Pe);{var K=ye=>{var Ie=Hv(),Ye=i(n(Ie),2);w(()=>Ye.disabled=!a.isNew),We(Ye,()=>t().id,Ze=>t(t().id=Ze,!0)),d(ye,Ie)};k(ue,ye=>{r()||ye(K)})}var J=i(ue,2),Se=i(n(J),2),De=i(J,2),le=i(n(De)),W=n(le),ae=i(le,2),O=n(ae),X=i(De,2),ve=i(n(X),2);sa(ve,{options:[{value:"command",label:"Voice Command Router (Hey Vox / Vox Control keyword)"},{value:"inject",label:"Inject Text Directly (Simulate keyboard)"},{value:"clipboard",label:"Save to Clipboard"},{value:"exec",label:"Execute Command"},{value:"file",label:"Write to File"},{value:"pipe",label:"FIFO Named Pipe"},{value:"socket",label:"TCP / Unix Socket"},{value:"dbus",label:"DBus Signal"},{value:"http",label:"HTTP Custom Client"},{value:"webhook",label:"Send Webhook Event"},{value:"mcp",label:"Call MCP Server Tool"},{value:"speak",label:"Speak Text Aloud (TTS)"},{value:"chat",label:"Chat with a Local LLM (Hermes / OpenAI-compatible)"}],get value(){return t().delivery},set value(ye){t(t().delivery=ye,!0)}});var Ae=i(X,2);{var Fe=ye=>{var Ie=Wv();d(ye,Ie)};k(Ae,ye=>{t().delivery==="command"&&ye(Fe)})}var he=i(Ae,2);{var re=ye=>{var Ie=Gv(),Ye=i(n(Ie),2),Ze=i(n(Ye),2);mt(Ze,"placeholder","e.g. xdg-open {text}");var Ve=i(Ze,2),at=i(n(Ve));at.textContent="{text}";var et=i(Ve,2);{var rt=Ee=>{var Ge=$v(),ct=n(Ge);w(()=>{var vt;return y(ct,`⚠️ ${(vt=e(A))!=null?vt:""}`)}),d(Ee,Ge)};k(et,Ee=>{e(A)&&Ee(rt)})}w(()=>Te(Ze,1,`full-width-input ${e(A)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""}`,"svelte-oc07pw")),We(Ze,()=>t().command,Ee=>t(t().command=Ee,!0)),d(ye,Ie)};k(he,ye=>{t().delivery==="exec"&&ye(re)})}var we=i(he,2);{var Je=ye=>{var Ie=Zv(),Ye=i(n(Ie),2),Ze=i(n(Ye),2),Ve=i(Ye,2),at=i(n(Ve),2);sa(at,{options:[{value:"append",label:"Append (Add to end of file)"},{value:"prepend",label:"Prepend (Add to beginning of file)"}],get value(){return t().file_mode},set value(nt){t(t().file_mode=nt,!0)}});var et=i(Ve,2),rt=i(n(et),2),Ee=i(et,2),Ge=n(Ee),ct=i(Ee,2);{var vt=nt=>{var wt=Xv(),dt=ht(wt),Et=i(n(dt),2);mt(Et,"placeholder",m);var Kt=i(dt,2),ia=i(n(Kt),25);ia.textContent="%Y-%m-%dT%H:%M:%SZ";var ra=i(Kt,2);{var bt=Lt=>{var Ht=Yv(),ta=n(Ht);w(()=>{var Oe;return y(ta,`⚠️ ${(Oe=e(x))!=null?Oe:""}`)}),d(Lt,Ht)},ea=Lt=>{var Ht=Jv(),ta=i(n(Ht)),Oe=n(ta);w(()=>{var qe;return y(Oe,`[${(qe=e(_))!=null?qe:""}]`)}),d(Lt,Ht)};k(ra,Lt=>{e(x)?Lt(bt):e(_)&&Lt(ea,1)})}w(()=>Te(Et,1,Ia(e(x)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""))),We(Et,()=>t().file_timestamp_format,Lt=>t(t().file_timestamp_format=Lt,!0)),d(nt,wt)};k(ct,nt=>{t().file_timestamp&&nt(vt)})}We(Ze,()=>t().file_path,nt=>t(t().file_path=nt,!0)),We(rt,()=>t().file_prefix,nt=>t(t().file_prefix=nt,!0)),Xt(Ge,()=>t().file_timestamp,nt=>t(t().file_timestamp=nt,!0)),d(ye,Ie)};k(we,ye=>{t().delivery==="file"&&ye(Je)})}var de=i(we,2);{var $=ye=>{var Ie=Qv(),Ye=i(n(Ie),2),Ze=i(n(Ye),2),Ve=i(Ye,2),at=i(n(Ve),2),et=i(Ve,2),rt=i(n(et),2);We(Ze,()=>t().socket_host,Ee=>t(t().socket_host=Ee,!0)),We(at,()=>t().socket_port,Ee=>t(t().socket_port=Ee,!0)),We(rt,()=>t().socket_unix,Ee=>t(t().socket_unix=Ee,!0)),d(ye,Ie)};k(de,ye=>{t().delivery==="socket"&&ye($)})}var U=i(de,2);{var te=ye=>{var Ie=eu(),Ye=i(n(Ie),2),Ze=i(n(Ye),2),Ve=i(Ye,2),at=i(n(Ve),2);We(Ze,()=>t().pipe_path,et=>t(t().pipe_path=et,!0)),We(at,()=>t().response_pipe,et=>t(t().response_pipe=et,!0)),d(ye,Ie)};k(U,ye=>{t().delivery==="pipe"&&ye(te)})}var Y=i(U,2);{var _e=ye=>{var Ie=tu(),Ye=i(n(Ie),2),Ze=i(n(Ye),2);We(Ze,()=>t().dbus_signal,Ve=>t(t().dbus_signal=Ve,!0)),d(ye,Ie)};k(Y,ye=>{t().delivery==="dbus"&&ye(_e)})}var me=i(Y,2);{var pe=ye=>{var Ie=ou(),Ye=i(n(Ie),2),Ze=i(n(Ye),2);{var Ve=Ge=>{var ct=au();We(ct,()=>t().http_url,vt=>t(t().http_url=vt,!0)),d(Ge,ct)},at=Ge=>{var ct=su();We(ct,()=>t().webhook_url,vt=>t(t().webhook_url=vt,!0)),d(Ge,ct)};k(Ze,Ge=>{t().delivery==="http"?Ge(Ve):Ge(at,-1)})}var et=i(Ye,2);{var rt=Ge=>{var ct=iu(),vt=ht(ct),nt=i(n(vt),2);sa(nt,{options:[{value:"POST",label:"POST"},{value:"GET",label:"GET"},{value:"PUT",label:"PUT"}],get value(){return t().http_method},set value(bt){t(t().http_method=bt,!0)}});var wt=i(vt,2),dt=i(n(wt),2);mt(dt,"placeholder",'{"text": "{text}"}'),Ms(()=>We(dt,()=>e(c),bt=>o(c,bt))),Fs(dt,bt=>ua==null?void 0:ua(bt));var Et=i(dt,2),Kt=i(n(Et));Kt.textContent="{text}";var ia=i(Et,2);{var ra=bt=>{var ea=nu(),Lt=n(ea);w(()=>{var Ht;return y(Lt,`⚠️ ${(Ht=e(T))!=null?Ht:""}`)}),d(bt,ea)};k(ia,bt=>{e(T)&&bt(ra)})}w(()=>Te(dt,1,Ia(e(T)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""),"svelte-oc07pw")),d(Ge,ct)},Ee=Ge=>{var ct=lu(),vt=ht(ct),nt=i(n(vt),2),wt=i(vt,2),dt=i(n(wt),2);mt(dt,"placeholder",'{"text": "{text}"}'),Ms(()=>We(dt,()=>e(u),bt=>o(u,bt))),Fs(dt,bt=>ua==null?void 0:ua(bt));var Et=i(dt,2),Kt=i(n(Et));Kt.textContent="{text}";var ia=i(Et,2);{var ra=bt=>{var ea=ru(),Lt=n(ea);w(()=>{var Ht;return y(Lt,`⚠️ ${(Ht=e(D))!=null?Ht:""}`)}),d(bt,ea)};k(ia,bt=>{e(D)&&bt(ra)})}w(()=>Te(dt,1,Ia(e(D)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""),"svelte-oc07pw")),We(nt,()=>t().webhook_secret,bt=>t(t().webhook_secret=bt,!0)),d(Ge,ct)};k(et,Ge=>{t().delivery==="http"?Ge(rt):Ge(Ee,-1)})}d(ye,Ie)};k(me,ye=>{(t().delivery==="http"||t().delivery==="webhook")&&ye(pe)})}var ze=i(me,2);{var $e=ye=>{var Ie=du(),Ye=i(n(Ie),2),Ze=i(n(Ye),2),Ve=i(Ye,2),at=i(n(Ve),2),et=i(Ve,2),rt=i(n(et),2);mt(rt,"placeholder",'{"text": "{text}"}'),Ms(()=>We(rt,()=>e(l),nt=>o(l,nt))),Fs(rt,nt=>ua==null?void 0:ua(nt));var Ee=i(rt,2),Ge=i(n(Ee));Ge.textContent="{text}";var ct=i(Ee,2);{var vt=nt=>{var wt=cu(),dt=n(wt);w(()=>{var Et;return y(dt,`⚠️ ${(Et=e(q))!=null?Et:""}`)}),d(nt,wt)};k(ct,nt=>{e(q)&&nt(vt)})}w(()=>Te(rt,1,Ia(e(q)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""),"svelte-oc07pw")),We(Ze,()=>t().mcp_path,nt=>t(t().mcp_path=nt,!0)),We(at,()=>t().mcp_tool,nt=>t(t().mcp_tool=nt,!0)),d(ye,Ie)};k(ze,ye=>{t().delivery==="mcp"&&ye($e)})}var st=i(ze,2);{var it=ye=>{var Ie=hu(),Ye=i(n(Ie),4),Ze=i(n(Ye),2),Ve=i(Ze,4);{var at=ie=>{var xe=vu(),Ce=n(xe);w(()=>{var He;return y(Ce,`⚠️ ${(He=e(se))!=null?He:""}`)}),d(ie,xe)};k(Ve,ie=>{e(se)&&ie(at)})}var et=i(Ye,2),rt=n(et),Ee=i(n(rt),2),Ge=n(Ee),ct=i(rt,2);{var vt=ie=>{{let xe=ce(()=>e(v).map(Ce=>({value:Ce,label:Ce})));sa(ie,{get options(){return e(xe)},get value(){return t().chat_model},set value(Ce){t(t().chat_model=Ce,!0)}})}},nt=ie=>{var xe=uu();w(()=>Te(xe,1,`full-width-input ${e(ne)?"border-red-500! ring-2! ring-red-500/20!":""}`,"svelte-oc07pw")),We(xe,()=>t().chat_model,Ce=>t(t().chat_model=Ce,!0)),d(ie,xe)};k(ct,ie=>{e(v).length>0?ie(vt):ie(nt,-1)})}var wt=i(ct,4);{var dt=ie=>{var xe=pu(),Ce=n(xe);w(()=>{var He;return y(Ce,`⚠️ ${(He=e(ne))!=null?He:""}`)}),d(ie,xe)};k(wt,ie=>{e(ne)&&ie(dt)})}var Et=i(wt,2);{var Kt=ie=>{var xe=fu(),Ce=n(xe);w(()=>{Te(xe,1,`chat-status ${e(b)?"ok":"bad"}`,"svelte-oc07pw"),y(Ce,e(h))}),d(ie,xe)};k(Et,ie=>{e(h)&&ie(Kt)})}var ia=i(et,2),ra=i(n(ia),2),bt=i(ia,2),ea=i(n(bt),2);Ms(()=>We(ea,()=>t().chat_system_prompt,ie=>t(t().chat_system_prompt=ie,!0))),Fs(ea,ie=>ua==null?void 0:ua(ie));var Lt=i(bt,2),Ht=i(n(Lt),2);sa(Ht,{options:[{value:"speak",label:"Speak the reply aloud (TTS)"},{value:"inject",label:"Type the reply into the focused window"},{value:"clipboard",label:"Copy the reply to the clipboard"},{value:"none",label:"Discard the reply (fire and forget)"}],get value(){return t().chat_reply_mode},set value(ie){t(t().chat_reply_mode=ie,!0)}});var ta=i(Lt,2),Oe=i(n(ta),2),qe=i(ta,2),G=i(n(qe),2),g=i(qe,2),P=i(n(g),2),Me=i(g,2);{var Ue=ie=>{var xe=_u(),Ce=n(xe),He=n(Ce);N("click",He,Q),d(ie,xe)};k(Me,ie=>{a.isNew||ie(Ue)})}w(()=>{Te(Ze,1,`full-width-input ${e(se)?"border-red-500! ring-2! ring-red-500/20!":""}`,"svelte-oc07pw"),Ee.disabled=e(f),y(Ge,e(f)?"Connecting…":"Test & fetch models")}),We(Ze,()=>t().chat_url,ie=>t(t().chat_url=ie,!0)),N("click",Ee,fe),We(ra,()=>t().chat_api_key,ie=>t(t().chat_api_key=ie,!0)),We(Oe,()=>t().chat_max_history,ie=>t(t().chat_max_history=ie,!0)),We(G,()=>t().chat_timeout_secs,ie=>t(t().chat_timeout_secs=ie,!0)),We(P,()=>t().chat_reset_phrase,ie=>t(t().chat_reset_phrase=ie,!0)),d(ye,Ie)};k(st,ye=>{t().delivery==="chat"&&ye(it)})}var H=i(st,2);{var M=ye=>{var Ie=gu(),Ye=i(n(Ie),2),Ze=n(Ye);Xt(Ze,()=>t().strip_newlines,Ve=>t(t().strip_newlines=Ve,!0)),d(ye,Ie)};k(H,ye=>{(t().delivery==="inject"||t().delivery==="command")&&ye(M)})}var C=i(Pe,2),ke=n(C),Ke=i(ke,2);w(()=>{Te(j,1,`modal-backdrop ${r()?"target-modal-backdrop":""}`,"svelte-oc07pw"),y(B,a.isNew?"Create Target":"Edit Target"),y(W,t().label||"Obsidian Notes"),y(O,t().label||"Obsidian Notes")}),N("click",be,function(...ye){var Ie;(Ie=a.onCancel)==null||Ie.apply(this,ye)}),We(Se,()=>t().label,ye=>t(t().label=ye,!0)),N("click",ke,function(...ye){var Ie;(Ie=a.onCancel)==null||Ie.apply(this,ye)}),N("click",Ke,z),d(ee,j)};k(L,ee=>{t()&&ee(ge)})}d(s,I),St()}Qt(["click"]);var bu=p(`Your desktop decides which keys VoxCtrl may claim, and may ask you to confirm them. If a shortcut below shows different keys than you chose, that is your desktop's - choice and it wins.`),yu=p(''),wu=p('
            '),ku=p(' '),xu=p(''),Tu=p('
            '),Su=p(" ",1);function Cu(s,a){Tt(a,!0);let t=S(!1),r=S(!1),l=S(!1),c=S(null);async function u(){var h;o(l,!0),o(c,null);try{await C("open_shortcut_settings")}catch(x){o(c,(h=x==null?void 0:x.toString())!=null?h:"Could not open shortcut settings.",!0)}finally{o(l,!1)}}var v=Su(),f=_t(v);{var _=h=>{var x=wu();let M;var q=n(x),T=n(q),z=n(T),se=i(T,2),ne=n(se);{var fe=oe=>{var L=Be("Your desktop is handling these shortcuts");d(oe,L)},Q=oe=>{var L=Be("Reading keystrokes with a keyboard hook");d(oe,L)},D=oe=>{var L=Be("Reading input devices directly");d(oe,L)},I=oe=>{var L=Be("Starting up…");d(oe,L)},R=oe=>{var L=Be("Global shortcuts are not available");d(oe,L)};k(ne,oe=>{a.status.backend==="portal"?oe(fe):a.status.backend==="windows_hook"?oe(Q,1):a.status.backend==="evdev"?oe(D,2):a.status.backend==="starting"?oe(I,3):oe(R,-1)})}var ge=i(se,2);let ee;var j=i(q,2);{var V=oe=>{var L=yu(),B=n(L),be=n(B),Pe=i(B,2);{var ue=W=>{var J=bu();d(W,J)};k(Pe,W=>{a.status.backend==="portal"&&W(ue)})}w(()=>y(be,a.status.detail)),d(oe,L)};k(j,oe=>{e(t)&&oe(V)})}w(()=>{M=Te(x,1,"backend-banner svelte-1hl6idm",null,M,{private:a.status.is_private,warn:!a.status.is_private&&a.status.is_active,broken:!a.status.is_active}),mt(q,"aria-expanded",e(t)),y(z,a.status.is_private?"🔒":a.status.is_active?"⚠️":"⛔"),ee=Te(ge,0,"banner-chevron svelte-1hl6idm",null,ee,{expanded:e(t)})}),N("click",q,()=>o(t,!e(t))),d(h,x)};k(f,h=>{a.status&&h(_)})}var b=i(f,2);{var m=h=>{var x=Tu(),M=n(x),q=i(n(M),4);let T;var z=i(M,2);{var se=ne=>{var fe=xu(),Q=n(fe),D=n(Q),I=i(Q,2),R=n(I),ge=n(R),ee=i(I,2);{var j=V=>{var oe=ku(),L=n(oe);w(()=>y(L,e(c))),d(V,oe)};k(ee,V=>{e(c)&&V(j)})}w(()=>{y(D,a.status.manual_enable_hint),R.disabled=e(l),y(ge,e(l)?"Opening…":"Open Shortcut Settings")}),N("click",R,u),d(ne,fe)};k(z,ne=>{e(r)&&ne(se)})}w(()=>{mt(M,"aria-expanded",e(r)),T=Te(q,0,"banner-chevron svelte-1hl6idm",null,T,{expanded:e(r)})}),N("click",M,()=>o(r,!e(r))),d(h,x)};k(b,h=>{var x;(x=a.status)!=null&&x.needs_manual_enable&&h(m)})}d(s,v),St()}Qt(["click"]);function qo(){return{id:"new_target_"+Math.random().toString(36).substring(2,6),label:"New Target",delivery:"inject",file_prefix:"- ",file_timestamp:!0,file_timestamp_format:"%Y-%m-%dT%H:%M:%SZ",file_mode:"append",http_method:"POST",http_json_template:{text:"{text}"},webhook_json_template:{text:"{text}"},mcp_tool:"speak_text",mcp_args:{text:"{text}"},chat_max_history:20,chat_timeout_secs:120,chat_reply_mode:"speak",strip_newlines:!1,processing:{}}}const El={hold:"Hold keys to dictate (Release to transcribe)",toggle:"Tap once to start recording, tap again to finish",double_tap:"Double-tap hotkey to trigger recording",double_tap_hold:"Double-tap & hold keys to dictate (Release to transcribe)"},mr=["hold","toggle","double_tap","double_tap_hold"];function Ks(s,a){const t=[...s].sort().join(",");return`${a}:${t}`}function Ml(s,a){return[...s].sort().join(",")===[...a].sort().join(",")}function Al(s,a=!1){const t=new Map;for(const r of s){if(a&&r.disabled||!r.keys||r.keys.length===0)continue;const l=Ks(r.keys,r.gesture);t.set(l,(t.get(l)||0)+1)}return new Set([...t].filter(([,r])=>r>1).map(([r])=>r))}function Eu(s,a){const t=a.find(r=>r.id===s);return t?t.label:s==="default"?"Focused Window":s}function Mu(s,a){return(s.target_ids&&s.target_ids.length>0?s.target_ids:[s.target_id]).map(r=>Eu(r,a)).join(", ")}function Au(s,a){const t=a.find(r=>r.id===s);return t?`${t.label} (${t.delivery})`:s==="default"?"Focused Window":s}function il(s,a){const t=a.toUpperCase();return s==="Control"?"KEY_LEFTCTRL":s==="Alt"?"KEY_LEFTALT":s==="Shift"?"KEY_LEFTSHIFT":s==="Meta"||s==="OS"||s==="Super"?"KEY_LEFTMETA":t==="SPACE"?"KEY_SPACE":t==="ENTER"?"KEY_ENTER":t==="ESCAPE"||t==="ESC"?"KEY_ESC":t==="TAB"?"KEY_TAB":t==="BACKSPACE"?"KEY_BACKSPACE":t==="DELETE"?"KEY_DELETE":/^KEY[A-Z]$/.test(t)?`KEY_${t.slice(3)}`:t.startsWith("KEY")?t:t.startsWith("DIGIT")?`KEY_${t.replace("DIGIT","")}`:t.startsWith("ARROW")?`KEY_${t.replace("ARROW","")}`:t.startsWith("F")&&t.length>1?`KEY_${t}`:s.length===1?`KEY_${s.toUpperCase()}`:`KEY_${t}`}const Pu=new Set(["KEY_LEFTCTRL","KEY_RIGHTCTRL","KEY_LEFTALT","KEY_RIGHTALT","KEY_LEFTSHIFT","KEY_RIGHTSHIFT","KEY_LEFTMETA","KEY_RIGHTMETA"]);function Vr(s){return s.length>0&&s.every(a=>Pu.has(a))}var zu=p('
            ⚠️ Conflict detected: Some key bindings share the same key combination and gesture type. Disabling one of the conflicting binds will fix the problem.
            '),Du=p('CONFLICT'),Iu=p('LLM'),Ou=p('S1-mini'),Ru=p(' '),Lu=p('needs a regular key'),Nu=p('not bound by your desktop'),Vu=p(' '),Fu=p('Delete? ',1),Bu=p(''),qu=p('
            '),ju=p('
            ⌨

            No keyboard bindings defined. Create a binding to link a physical hotkey to a routing target!

            '),Uu=p(''),Wu=p('
            ',1),Hu=p(''),$u=p('
            '),Gu=p(' '),Ku=p(`⚠️ This binding uses a gesture this system cannot deliver, so it will not fire. - Pick one of the styles above.`),Yu=p(''),Ju=p(``),Xu=p(' '),Zu=p('
            ',1),Qu=p(' '),ep=p('
            (Click / Tab here to record)',1),tp=p(''),ap=p(''),sp=p('
            ⚠️
            '),np=p('Your desktop will register this as .'),ip=p('⚠️ Warning: This key combination and gesture type conflicts with another existing binding.'),rp=p('⚠️ Validation Error: Prompt template MUST contain the placeholder.'),lp=p('

            Prompt template MUST contain the placeholder. Leave empty to inherit the default user prompt.

            '),op=p('
            System Prompt Override LLM Prompt

            Overrides the default system prompt configured in Settings → OpenAI API. Leave empty to inherit it.

            User Prompt Template LLM Prompt
            '),cp=p(''),dp=p('

            Hotkey Bindings

            Bind keyboard combinations to your output targets. Each hotkey supports customizable triggers (double-taps, holding keys, etc.)

            ',1);function vp(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",r),[r,l]=Ca();let c=S(yt([])),u=S(yt([])),v=S(null),f=S(!1),_=S(null),b=S(null),m=S(null),h=S(!1),x=S(null),M=S(null),q=S(!1),T=S(!1),z=S(""),se=S("custom"),ne=S(""),fe=S(""),Q=ce(()=>Al(e(u))),D=ce(()=>Al(e(u),!0)),I=ce(()=>{if(!e(v)||!e(v).keys||e(v).keys.length===0)return!1;const A=Ks(e(v).keys,e(v).gesture);return e(u).some(E=>E.id!==e(v).id&&Ks(E.keys,E.gesture)===A)}),R=S(null);async function ge(){try{o(R,await C("check_hotkey_status"),!0)}catch(A){console.error("Failed to read hotkey status:",A)}}let ee=ce(()=>{var E,ke;const A=new Map;for(const We of(ke=(E=e(R))==null?void 0:E.shortcuts)!=null?ke:[])for(const ye of We.binding_ids)A.set(ye,We);return A});const j=ce(()=>{var A,E;return(E=(A=e(R))==null?void 0:A.supported_gestures)!=null&&E.length?mr.filter(ke=>e(R).supported_gestures.includes(ke)):mr}),V=ce(()=>mr.length-e(j).length),oe=ce(()=>{var ke,We;const A=e(j).map(ye=>({value:ye,label:El[ye]})),E=(ke=e(v))==null?void 0:ke.gesture;return E&&!e(j).includes(E)&&A.push({value:E,label:`${(We=El[E])!=null?We:E} — not supported on this system`}),A});qt(async()=>{o(c,await C("get_targets"),!0),o(u,await C("get_bindings"),!0),await ge()});async function L(){try{await C("save_targets",{targets:e(c)}),console.log("Targets auto-saved successfully!")}catch(A){console.error("Failed to save targets:",A)}}async function B(){try{await C("save_bindings",{bindings:e(u)}),console.log("Bindings auto-saved successfully!"),await ge()}catch(A){console.error("Failed to save bindings:",A)}}const be=A=>Mu(A,e(c)),Pe=A=>Au(A,e(c));function ue(){var A,E,ke,We;if(e(c).length===0){alert("Please create at least one Output Command before making a hotkey binding.");return}o(f,!0),o(X,null),o(O,[],!0),o(q,(We=(ke=(E=(A=t())==null?void 0:A.engine)==null?void 0:E.s1_mini)==null?void 0:ke.enabled)!=null?We:!1,!0),o(T,!1),o(z,""),o(se,"custom"),o(ne,""),o(fe,""),o(v,{id:"binding_"+Math.random().toString(36).substring(2,6),label:"New Binding",keys:[],gesture:e(j).includes("hold")?"hold":e(j)[0],target_id:e(c)[0].id,target_ids:[e(c)[0].id],tap_ms:300,hold_threshold_ms:200,disabled:!1,openai_enabled:!1,openai_model:"",openai_mode:"custom",openai_prompt:"",openai_system_prompt:"",s1_mini_enabled:e(q)},!0)}function W(A){var ke,We,ye,Ie;o(f,!1),o(X,null),o(O,[...A.keys],!0);const E=JSON.parse(JSON.stringify(A));E.target_ids||(E.target_ids=E.target_id?[E.target_id]:[]),E.s1_mini_enabled!==void 0&&E.s1_mini_enabled!==null?o(q,E.s1_mini_enabled,!0):o(q,(Ie=(ye=(We=(ke=t())==null?void 0:ke.engine)==null?void 0:We.s1_mini)==null?void 0:ye.enabled)!=null?Ie:!1,!0),o(T,E.openai_enabled===!0),o(z,E.openai_model||"",!0),o(se,E.openai_mode||"custom",!0),o(ne,E.openai_prompt||"",!0),o(fe,E.openai_system_prompt||"",!0),o(v,E,!0)}async function J(A){o(u,e(u).map(E=>E.id===A?{...E,disabled:!E.disabled}:E),!0),await B()}function Se(){if(!e(v))return;e(v).target_ids||(e(v).target_ids=[e(v).target_id]);const A=e(c).find(ke=>!e(v).target_ids.includes(ke.id)),E=A?A.id:e(c)[0].id;e(v).target_ids=[...e(v).target_ids,E]}function ze(A){!e(v)||!e(v).target_ids||(e(v).target_ids=e(v).target_ids.filter((E,ke)=>ke!==A))}async function le(){var E;if(!e(v))return;if(e(v).id.trim()===""){alert("Binding ID cannot be empty.");return}if(e(v).keys.length===0){alert("Please capture at least one hotkey before saving.");return}if(!(!e(f)&&Ml(e(v).keys,e(O))))try{const ke=await C("check_hotkey_keys",{keys:e(v).keys});if(!ke.accepted){o(X,ke,!0),alert((E=ke.message)!=null?E:"This key combination cannot be used as a shortcut.");return}}catch(ke){console.error("Failed to validate hotkey keys before saving:",ke)}if(e(T)&&e(se)==="custom"&&!e(ne).includes("{text}")){alert(`LLM Configuration Error: + choice and it wins.
            `),yu=p(''),wu=p('
            '),ku=p(' '),xu=p(''),Tu=p('
            '),Su=p(" ",1);function Eu(s,a){Tt(a,!0);let t=S(!1),r=S(!1),l=S(!1),c=S(null);async function u(){var _;o(l,!0),o(c,null);try{await E("open_shortcut_settings")}catch(x){o(c,(_=x==null?void 0:x.toString())!=null?_:"Could not open shortcut settings.",!0)}finally{o(l,!1)}}var v=Su(),f=ht(v);{var h=_=>{var x=wu();let A;var q=n(x),T=n(q),D=n(T),se=i(T,2),ne=n(se);{var fe=oe=>{var R=Be("Your desktop is handling these shortcuts");d(oe,R)},Q=oe=>{var R=Be("Reading keystrokes with a keyboard hook");d(oe,R)},z=oe=>{var R=Be("Reading input devices directly");d(oe,R)},I=oe=>{var R=Be("Starting up…");d(oe,R)},L=oe=>{var R=Be("Global shortcuts are not available");d(oe,R)};k(ne,oe=>{a.status.backend==="portal"?oe(fe):a.status.backend==="windows_hook"?oe(Q,1):a.status.backend==="evdev"?oe(z,2):a.status.backend==="starting"?oe(I,3):oe(L,-1)})}var ge=i(se,2);let ee;var j=i(q,2);{var V=oe=>{var R=yu(),B=n(R),be=n(B),Pe=i(B,2);{var ue=K=>{var J=bu();d(K,J)};k(Pe,K=>{a.status.backend==="portal"&&K(ue)})}w(()=>y(be,a.status.detail)),d(oe,R)};k(j,oe=>{e(t)&&oe(V)})}w(()=>{A=Te(x,1,"backend-banner svelte-1hl6idm",null,A,{private:a.status.is_private,warn:!a.status.is_private&&a.status.is_active,broken:!a.status.is_active}),mt(q,"aria-expanded",e(t)),y(D,a.status.is_private?"🔒":a.status.is_active?"⚠️":"⛔"),ee=Te(ge,0,"banner-chevron svelte-1hl6idm",null,ee,{expanded:e(t)})}),N("click",q,()=>o(t,!e(t))),d(_,x)};k(f,_=>{a.status&&_(h)})}var b=i(f,2);{var m=_=>{var x=Tu(),A=n(x),q=i(n(A),4);let T;var D=i(A,2);{var se=ne=>{var fe=xu(),Q=n(fe),z=n(Q),I=i(Q,2),L=n(I),ge=n(L),ee=i(I,2);{var j=V=>{var oe=ku(),R=n(oe);w(()=>y(R,e(c))),d(V,oe)};k(ee,V=>{e(c)&&V(j)})}w(()=>{y(z,a.status.manual_enable_hint),L.disabled=e(l),y(ge,e(l)?"Opening…":"Open Shortcut Settings")}),N("click",L,u),d(ne,fe)};k(D,ne=>{e(r)&&ne(se)})}w(()=>{mt(A,"aria-expanded",e(r)),T=Te(q,0,"banner-chevron svelte-1hl6idm",null,T,{expanded:e(r)})}),N("click",A,()=>o(r,!e(r))),d(_,x)};k(b,_=>{var x;(x=a.status)!=null&&x.needs_manual_enable&&_(m)})}d(s,v),St()}Qt(["click"]);function qo(){return{id:"new_target_"+Math.random().toString(36).substring(2,6),label:"New Target",delivery:"inject",file_prefix:"- ",file_timestamp:!0,file_timestamp_format:"%Y-%m-%dT%H:%M:%SZ",file_mode:"append",http_method:"POST",http_json_template:{text:"{text}"},webhook_json_template:{text:"{text}"},mcp_tool:"speak_text",mcp_args:{text:"{text}"},chat_max_history:20,chat_timeout_secs:120,chat_reply_mode:"speak",strip_newlines:!1,processing:{}}}const Cl={hold:"Hold keys to dictate (Release to transcribe)",toggle:"Tap once to start recording, tap again to finish",double_tap:"Double-tap hotkey to trigger recording",double_tap_hold:"Double-tap & hold keys to dictate (Release to transcribe)"},mr=["hold","toggle","double_tap","double_tap_hold"];function Gs(s,a){const t=[...s].sort().join(",");return`${a}:${t}`}function Al(s,a){return[...s].sort().join(",")===[...a].sort().join(",")}function Ml(s,a=!1){const t=new Map;for(const r of s){if(a&&r.disabled||!r.keys||r.keys.length===0)continue;const l=Gs(r.keys,r.gesture);t.set(l,(t.get(l)||0)+1)}return new Set([...t].filter(([,r])=>r>1).map(([r])=>r))}function Cu(s,a){const t=a.find(r=>r.id===s);return t?t.label:s==="default"?"Focused Window":s}function Au(s,a){return(s.target_ids&&s.target_ids.length>0?s.target_ids:[s.target_id]).map(r=>Cu(r,a)).join(", ")}function Mu(s,a){const t=a.find(r=>r.id===s);return t?`${t.label} (${t.delivery})`:s==="default"?"Focused Window":s}const Pu={ControlLeft:"KEY_LEFTCTRL",ControlRight:"KEY_RIGHTCTRL",AltLeft:"KEY_LEFTALT",AltRight:"KEY_RIGHTALT",ShiftLeft:"KEY_LEFTSHIFT",ShiftRight:"KEY_RIGHTSHIFT",MetaLeft:"KEY_LEFTMETA",MetaRight:"KEY_RIGHTMETA",OSLeft:"KEY_LEFTMETA",OSRight:"KEY_RIGHTMETA",Minus:"KEY_MINUS",Equal:"KEY_EQUAL",BracketLeft:"KEY_LEFTBRACE",BracketRight:"KEY_RIGHTBRACE",Backslash:"KEY_BACKSLASH",Semicolon:"KEY_SEMICOLON",Quote:"KEY_APOSTROPHE",Backquote:"KEY_GRAVE",Comma:"KEY_COMMA",Period:"KEY_DOT",Slash:"KEY_SLASH",IntlBackslash:"KEY_102ND",Numpad0:"KEY_KP0",Numpad1:"KEY_KP1",Numpad2:"KEY_KP2",Numpad3:"KEY_KP3",Numpad4:"KEY_KP4",Numpad5:"KEY_KP5",Numpad6:"KEY_KP6",Numpad7:"KEY_KP7",Numpad8:"KEY_KP8",Numpad9:"KEY_KP9",NumpadAdd:"KEY_KPPLUS",NumpadSubtract:"KEY_KPMINUS",NumpadMultiply:"KEY_KPASTERISK",NumpadDivide:"KEY_KPSLASH",NumpadDecimal:"KEY_KPDOT",NumpadEnter:"KEY_KPENTER",NumpadEqual:"KEY_KPEQUAL"};function il(s,a){const t=Pu[a];if(t)return t;const r=a.toUpperCase();return s==="Control"?"KEY_LEFTCTRL":s==="Alt"?"KEY_LEFTALT":s==="Shift"?"KEY_LEFTSHIFT":s==="Meta"||s==="OS"||s==="Super"?"KEY_LEFTMETA":r==="SPACE"?"KEY_SPACE":r==="ENTER"?"KEY_ENTER":r==="ESCAPE"||r==="ESC"?"KEY_ESC":r==="TAB"?"KEY_TAB":r==="BACKSPACE"?"KEY_BACKSPACE":r==="DELETE"?"KEY_DELETE":/^KEY[A-Z]$/.test(r)?`KEY_${r.slice(3)}`:r.startsWith("KEY")?r:r.startsWith("DIGIT")?`KEY_${r.replace("DIGIT","")}`:r.startsWith("ARROW")?`KEY_${r.replace("ARROW","")}`:r.startsWith("F")&&r.length>1?`KEY_${r}`:s.length===1?`KEY_${s.toUpperCase()}`:`KEY_${r}`}const Du=new Set(["KEY_LEFTCTRL","KEY_RIGHTCTRL","KEY_LEFTALT","KEY_RIGHTALT","KEY_LEFTSHIFT","KEY_RIGHTSHIFT","KEY_LEFTMETA","KEY_RIGHTMETA"]);function Vr(s){return s.length>0&&s.every(a=>Du.has(a))}var zu=p('
            ⚠️ Conflict detected: Some key bindings share the same key combination and gesture type. Disabling one of the conflicting binds will fix the problem.
            '),Iu=p('CONFLICT'),Ou=p('LLM'),Lu=p('S1-mini'),Ru=p(' '),Nu=p('needs a regular key'),Vu=p('not bound by your desktop'),Fu=p(' '),Bu=p('Delete? ',1),qu=p(''),ju=p('
            '),Uu=p('
            ⌨

            No keyboard bindings defined. Create a binding to link a physical hotkey to a routing target!

            '),Ku=p(''),Hu=p('
            ',1),Wu=p(''),$u=p('
            '),Gu=p(' '),Yu=p(`⚠️ This binding uses a gesture this system cannot deliver, so it will not fire. + Pick one of the styles above.`),Ju=p(''),Xu=p(``),Zu=p(' '),Qu=p('
            ',1),ep=p(' '),tp=p('
            (Click / Tab here to record)',1),ap=p(''),sp=p(''),np=p('
            ⚠️
            '),ip=p('Your desktop will register this as .'),rp=p('⚠️ Warning: This key combination and gesture type conflicts with another existing binding.'),lp=p('⚠️ Validation Error: Prompt template MUST contain the placeholder.'),op=p('

            Prompt template MUST contain the placeholder. Leave empty to inherit the default user prompt.

            '),cp=p('
            System Prompt Override LLM Prompt

            Overrides the default system prompt configured in Settings → OpenAI API. Leave empty to inherit it.

            User Prompt Template LLM Prompt
            '),dp=p(''),vp=p('

            Hotkey Bindings

            Bind keyboard combinations to your output targets. Each hotkey supports customizable triggers (double-taps, holding keys, etc.)

            ',1);function up(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",r),[r,l]=Ea();let c=S(yt([])),u=S(yt([])),v=S(null),f=S(!1),h=S(null),b=S(null),m=S(null),_=S(!1),x=S(null),A=S(null),q=S(!1),T=S(!1),D=S(""),se=S("custom"),ne=S(""),fe=S(""),Q=ce(()=>Ml(e(u))),z=ce(()=>Ml(e(u),!0)),I=ce(()=>{if(!e(v)||!e(v).keys||e(v).keys.length===0)return!1;const M=Gs(e(v).keys,e(v).gesture);return e(u).some(C=>C.id!==e(v).id&&Gs(C.keys,C.gesture)===M)}),L=S(null);async function ge(){try{o(L,await E("check_hotkey_status"),!0)}catch(M){console.error("Failed to read hotkey status:",M)}}let ee=ce(()=>{var C,ke;const M=new Map;for(const Ke of(ke=(C=e(L))==null?void 0:C.shortcuts)!=null?ke:[])for(const ye of Ke.binding_ids)M.set(ye,Ke);return M});const j=ce(()=>{var M,C;return(C=(M=e(L))==null?void 0:M.supported_gestures)!=null&&C.length?mr.filter(ke=>e(L).supported_gestures.includes(ke)):mr}),V=ce(()=>mr.length-e(j).length),oe=ce(()=>{var ke,Ke;const M=e(j).map(ye=>({value:ye,label:Cl[ye]})),C=(ke=e(v))==null?void 0:ke.gesture;return C&&!e(j).includes(C)&&M.push({value:C,label:`${(Ke=Cl[C])!=null?Ke:C} — not supported on this system`}),M});qt(async()=>{o(c,await E("get_targets"),!0),o(u,await E("get_bindings"),!0),await ge()});async function R(){try{await E("save_targets",{targets:e(c)}),console.log("Targets auto-saved successfully!")}catch(M){console.error("Failed to save targets:",M)}}async function B(){try{await E("save_bindings",{bindings:e(u)}),console.log("Bindings auto-saved successfully!"),await ge()}catch(M){console.error("Failed to save bindings:",M)}}const be=M=>Au(M,e(c)),Pe=M=>Mu(M,e(c));function ue(){var M,C,ke,Ke;if(e(c).length===0){alert("Please create at least one Output Command before making a hotkey binding.");return}o(f,!0),o(X,null),o(O,[],!0),o(q,(Ke=(ke=(C=(M=t())==null?void 0:M.engine)==null?void 0:C.s1_mini)==null?void 0:ke.enabled)!=null?Ke:!1,!0),o(T,!1),o(D,""),o(se,"custom"),o(ne,""),o(fe,""),o(v,{id:"binding_"+Math.random().toString(36).substring(2,6),label:"New Binding",keys:[],gesture:e(j).includes("hold")?"hold":e(j)[0],target_id:e(c)[0].id,target_ids:[e(c)[0].id],tap_ms:300,hold_threshold_ms:200,disabled:!1,openai_enabled:!1,openai_model:"",openai_mode:"custom",openai_prompt:"",openai_system_prompt:"",s1_mini_enabled:e(q)},!0)}function K(M){var ke,Ke,ye,Ie;o(f,!1),o(X,null),o(O,[...M.keys],!0);const C=JSON.parse(JSON.stringify(M));C.target_ids||(C.target_ids=C.target_id?[C.target_id]:[]),C.s1_mini_enabled!==void 0&&C.s1_mini_enabled!==null?o(q,C.s1_mini_enabled,!0):o(q,(Ie=(ye=(Ke=(ke=t())==null?void 0:ke.engine)==null?void 0:Ke.s1_mini)==null?void 0:ye.enabled)!=null?Ie:!1,!0),o(T,C.openai_enabled===!0),o(D,C.openai_model||"",!0),o(se,C.openai_mode||"custom",!0),o(ne,C.openai_prompt||"",!0),o(fe,C.openai_system_prompt||"",!0),o(v,C,!0)}async function J(M){o(u,e(u).map(C=>C.id===M?{...C,disabled:!C.disabled}:C),!0),await B()}function Se(){if(!e(v))return;e(v).target_ids||(e(v).target_ids=[e(v).target_id]);const M=e(c).find(ke=>!e(v).target_ids.includes(ke.id)),C=M?M.id:e(c)[0].id;e(v).target_ids=[...e(v).target_ids,C]}function De(M){!e(v)||!e(v).target_ids||(e(v).target_ids=e(v).target_ids.filter((C,ke)=>ke!==M))}async function le(){var C;if(!e(v))return;if(e(v).id.trim()===""){alert("Binding ID cannot be empty.");return}if(e(v).keys.length===0){alert("Please capture at least one hotkey before saving.");return}if(!(!e(f)&&Al(e(v).keys,e(O))))try{const ke=await E("check_hotkey_keys",{keys:e(v).keys});if(!ke.accepted){o(X,ke,!0),alert((C=ke.message)!=null?C:"This key combination cannot be used as a shortcut.");return}}catch(ke){console.error("Failed to validate hotkey keys before saving:",ke)}if(e(T)&&e(se)==="custom"&&!e(ne).includes("{text}")){alert(`LLM Configuration Error: Your custom prompt template MUST contain the '{text}' placeholder so the model knows where to insert the transcribed text. Example: -write a haiku about {text}`);return}if(e(v).openai_enabled=e(T),e(v).openai_model=e(z),e(v).openai_mode=e(se),e(v).openai_prompt=e(ne),e(v).openai_system_prompt=e(fe),e(v).s1_mini_enabled=e(q),e(v).target_ids&&e(v).target_ids.length>0){if(e(v).target_ids=e(v).target_ids.filter(We=>We.trim()!==""),e(v).target_ids.length===0){alert("Please assign at least one Output Command.");return}if(new Set(e(v).target_ids).size!==e(v).target_ids.length){alert(`Duplicate commands detected. -You cannot assign the same Output Command multiple times to a single keybind.`);return}e(v).target_id=e(v).target_ids[0]}else e(v).target_id="",e(v).target_ids=[];if(e(f)){if(e(u).some(ke=>ke.id===e(v).id)){alert("Binding with this ID already exists.");return}o(u,[...e(u),e(v)],!0)}else o(u,e(u).map(ke=>ke.id===e(v).id?e(v):ke),!0);o(v,null),o(_,null),await B()}async function $(A){o(u,e(u).filter(E=>E.id!==A),!0),await B()}let ae=S(yt([])),O=S(yt([]));pa(()=>{C("set_hotkeys_inhibited",{inhibited:e(_)==="keys"}).catch(A=>console.error("Failed to set hotkeys inhibited:",A))});let X=S(null),ve=ce(()=>e(R)===null||e(R).backend==="portal"||e(R).backend==="starting"),Me=ce(()=>e(_)!=="keys"||!Vr(e(ae))||!e(ve)?null:"Keep holding and add a regular key — modifiers alone cannot be a shortcut.");async function Fe(A){if(!e(v)||A.length===0)return;if(Ml(A,e(O))){o(X,null),e(v).keys=[...A];return}let E;try{E=await C("check_hotkey_keys",{keys:A})}catch(ke){console.error("Failed to validate hotkey keys:",ke),e(v).keys=[...A];return}o(X,E,!0),E.accepted&&e(v)&&(e(v).keys=[...A])}function _e(A){if(!e(_)||!e(v))return;A.preventDefault(),A.stopPropagation();const E=il(A.key,A.code);if(e(_)==="keys"&&(e(ae).includes(E)||o(ae,[...e(ae),E],!0),A.key==="Escape")){const ke=[...e(ae)];o(ae,[],!0),o(_,null),Fe(ke)}}function re(A){if(!(!e(_)||!e(v))&&(A.preventDefault(),A.stopPropagation(),e(_)==="keys")){const E=[...e(ae)];o(ae,[],!0),o(_,null),Fe(E)}}function we(){if(e(_)){if(e(_)==="keys"&&e(ae).length>0){const A=[...e(ae)];o(ae,[],!0),Fe(A)}o(_,null)}}function Je(A){o(x,A,!0),o(h,!0),o(m,qo(),!0)}function de(){o(m,null),o(x,null)}async function G(){if(e(m)){if(e(c).some(A=>A.id===e(m).id)){alert("Target with this ID already exists.");return}o(c,[...e(c),e(m)],!0),e(x)!==null&&e(v)&&(e(v).target_ids||(e(v).target_ids=[]),e(v).target_ids[e(x)]=e(m).id),o(m,null),o(x,null),await L()}}var U=dp(),te=_t(U),Y=i(n(te),2);Cu(Y,{get status(){return e(R)}});var he=i(Y,2),me=i(he,2);{var pe=A=>{var E=zu();d(A,E)};k(me,A=>{e(Q).size>0&&A(pe)})}var De=i(me,2);pt(De,21,()=>e(u),ft,(A,E)=>{var ke=qu();let We;var ye=n(ke);{var Ie=ie=>{var xe=Du();d(ie,xe)},Ye=ce(()=>!e(E).disabled&&e(E).keys&&e(E).keys.length>0&&e(D).has(Ks(e(E).keys,e(E).gesture)));k(ye,ie=>{e(Ye)&&ie(Ie)})}var Ze=i(ye,2),Ve=n(Ze),at=n(Ve);let et;var rt=n(at),Ce=i(at,2);{var Ke=ie=>{var xe=Iu();d(ie,xe)};k(Ce,ie=>{e(E).openai_enabled&&ie(Ke)})}var ct=i(Ce,2);{var vt=ie=>{var xe=Ou();d(ie,xe)};k(ct,ie=>{var xe,Ee,He,Xe;((Xe=e(E).s1_mini_enabled)!=null?Xe:(He=(Ee=(xe=t())==null?void 0:xe.engine)==null?void 0:Ee.s1_mini)!=null&&He.enabled)&&ie(vt)})}var nt=i(Ve,2),wt=n(nt);pt(wt,21,()=>e(E).keys,ft,(ie,xe)=>{var Ee=Ru(),He=n(Ee);w(Xe=>y(He,Xe),[()=>e(xe).replace("KEY_","")]),d(ie,Ee)});var dt=i(wt,2),Ct=n(dt),Wt=i(dt,2);{var ia=ie=>{var xe=Lu();d(ie,xe)},ra=ce(()=>e(ve)&&Vr(e(E).keys));k(Wt,ie=>{e(ra)&&ie(ia)})}var bt=i(Wt,2);{var ea=ie=>{const xe=ce(()=>e(ee).get(e(E).id));var Ee=xi(),He=_t(Ee);{var Xe=Dt=>{var Ft=Nu();d(Dt,Ft)},zt=Dt=>{var Ft=Vu(),$t=n(Ft);w(()=>{var Gt;return y($t,`desktop: ${(Gt=e(xe).trigger_description)!=null?Gt:""}`)}),d(Dt,Ft)};k(He,Dt=>{e(xe).bound?e(xe).trigger_description&&Dt(zt,1):Dt(Xe)})}d(ie,Ee)},Rt=ce(()=>{var ie;return((ie=e(R))==null?void 0:ie.backend)==="portal"&&!e(E).disabled&&e(ee).get(e(E).id)});k(bt,ie=>{e(Rt)&&ie(ea)})}var Ht=i(nt,2),ta=n(Ht),Oe=i(Ht,2),qe=n(Oe),K=n(qe),g=i(qe,2),P=i(g,2);{var Ae=ie=>{var xe=Fu(),Ee=i(_t(xe),2),He=i(Ee,2);N("click",Ee,()=>{$(e(E).id),o(b,null)}),N("click",He,()=>o(b,null)),d(ie,xe)},Ue=ie=>{var xe=Bu();N("click",xe,()=>o(b,e(E).id,!0)),d(ie,xe)};k(P,ie=>{e(b)===e(E).id?ie(Ae):ie(Ue,-1)})}w((ie,xe,Ee)=>{We=Te(ke,1,"binding-item glass svelte-w4d8v7",null,We,ie),et=Te(at,1,"binding-title svelte-w4d8v7",null,et,xe),y(rt,e(E).label||e(E).id),y(Ct,e(E).gesture),y(ta,Ee),y(K,e(E).disabled?"Enable":"Disable")},[()=>({disabled:e(E).disabled,"has-conflict":e(E).keys&&e(E).keys.length>0&&e(Q).has(Ks(e(E).keys,e(E).gesture)),"active-conflict":!e(E).disabled&&e(E).keys&&e(E).keys.length>0&&e(D).has(Ks(e(E).keys,e(E).gesture))}),()=>({"has-conflict":!e(E).disabled&&e(E).keys&&e(E).keys.length>0&&e(D).has(Ks(e(E).keys,e(E).gesture))}),()=>be(e(E))]),N("click",qe,()=>J(e(E).id)),N("click",g,()=>W(e(E))),d(A,ke)},A=>{var E=ju();d(A,E)});var Ge=i(te,2);{var st=A=>{var E=cp(),ke=n(E),We=n(ke),ye=n(We),Ie=n(ye),Ye=i(ye,2),Ze=i(We,2),Ve=n(Ze),at=i(n(Ve),2),et=i(Ve,2),rt=i(n(et),2),Ce=i(et,2),Ke=n(Ce),ct=i(n(Ke),2),vt=i(Ke,2);pt(vt,21,()=>e(v).target_ids||[],ft,(tt,gt,It)=>{var ut=$u(),Mt=n(ut),jt=n(Mt),wa=n(jt),oa=i(jt,2);{var Ra=Re=>{var je=Wu(),Le=_t(je),Qe=i(Le,2),Jt=n(Qe);pt(Jt,17,()=>e(c),ft,(ka,xa)=>{var Ta=Uu(),la=n(Ta);w(ha=>{var Pa,Ea;Ta.disabled=ha,y(la,`${(Pa=e(xa).label)!=null?Pa:""} (${(Ea=e(xa).delivery)!=null?Ea:""})`)},[()=>e(v).target_ids.includes(e(xa).id)&&e(xa).id!==e(gt)]),N("click",Ta,ha=>{ha.preventDefault(),ha.stopPropagation(),e(v).target_ids[It]=e(xa).id,o(M,null)}),d(ka,Ta)});var Kt=i(Jt,2);N("click",Le,()=>o(M,null)),N("click",Kt,ka=>{ka.preventDefault(),ka.stopPropagation(),o(M,null),Je(It)}),d(Re,je)};k(oa,Re=>{e(M)===It&&Re(Ra)})}var ja=i(Mt,2);{var Z=Re=>{var je=Hu();N("click",je,()=>ze(It)),d(Re,je)};k(ja,Re=>{It>0&&Re(Z)})}w(Re=>y(wa,Re),[()=>Pe(e(gt))]),N("click",jt,()=>o(M,e(M)===It?null:It,!0)),d(tt,ut)});var nt=i(Ce,2),wt=i(n(nt),2);sa(wt,{get options(){return e(oe)},get value(){return e(v).gesture},set value(tt){e(v).gesture=tt}});var dt=i(wt,2);{var Ct=tt=>{var gt=Gu(),It=n(gt);w(()=>{var ut;return y(It,((ut=e(R))==null?void 0:ut.backend)==="mint_dbus"?"Your desktop delivers VoxCtrl's shortcuts itself and only reports the key going down, never coming back up — so hold and double-tap styles cannot work here and are not offered.":`${e(V)} gesture style${e(V)===1?"":"s"} are hidden because the way this system delivers shortcuts cannot produce them.`)}),d(tt,gt)};k(dt,tt=>{e(V)>0&&tt(Ct)})}var Wt=i(dt,2);{var ia=tt=>{var gt=Ku();d(tt,gt)},ra=ce(()=>e(v).gesture&&!e(j).includes(e(v).gesture));k(Wt,tt=>{e(ra)&&tt(ia)})}var bt=i(nt,2);{var ea=tt=>{var gt=Yu(),It=i(n(gt),2),ut=i(It,2),Mt=n(ut);w(()=>y(Mt,e(v).gesture==="double_tap_hold"?"How long the second tap must stay held before recording starts. Keeps a plain double-tap from being read as a double-tap-and-hold.":"Minimum duration to keep keys pressed to count as a 'hold'.")),$e(It,()=>e(v).hold_threshold_ms,jt=>e(v).hold_threshold_ms=jt),d(tt,gt)};k(bt,tt=>{(e(v).gesture==="hold"||e(v).gesture==="double_tap_hold")&&tt(ea)})}var Rt=i(bt,2);{var Ht=tt=>{var gt=Ju(),It=i(n(gt),2);$e(It,()=>e(v).tap_ms,ut=>e(v).tap_ms=ut),d(tt,gt)};k(Rt,tt=>{(e(v).gesture==="double_tap"||e(v).gesture==="double_tap_hold")&&tt(Ht)})}var ta=i(Rt,2),Oe=n(ta),qe=i(n(Oe),2),K=n(qe);{var g=tt=>{var gt=Zu(),It=_t(gt),ut=i(n(It),2),Mt=n(ut),jt=i(It,2);{var wa=oa=>{var Ra=Xu(),ja=n(Ra);w(()=>y(ja,e(Me))),d(oa,Ra)};k(jt,oa=>{e(Me)&&oa(wa)})}w(oa=>y(Mt,oa),[()=>e(ae).length>0?e(ae).join(" + ").replace(/KEY_/g,""):"Press your physical shortcut combination now..."]),d(tt,gt)},P=tt=>{var gt=tp(),It=n(gt);{var ut=jt=>{var wa=ep(),oa=_t(wa);pt(oa,21,()=>e(v).keys,ft,(Ra,ja)=>{var Z=Qu(),Re=n(Z);w(je=>y(Re,je),[()=>e(ja).replace("KEY_","")]),d(Ra,Z)}),d(jt,wa)},Mt=jt=>{var wa=Be("⚠️ Click/Focus here to press keys!");d(jt,wa)};k(It,jt=>{e(v).keys.length>0?jt(ut):jt(Mt,-1)})}d(tt,gt)};k(K,tt=>{e(_)==="keys"?tt(g):tt(P,-1)})}var Ae=i(Oe,2);{var Ue=tt=>{var gt=ap(),It=i(n(gt),2),ut=i(n(It));w(()=>{var Mt;return y(ut,` ${(Mt=e(X).message)!=null?Mt:""}`)}),d(tt,gt)},ie=tt=>{var gt=sp(),It=i(n(gt),2),ut=n(It);w(()=>y(ut,e(X).message)),d(tt,gt)},xe=tt=>{var gt=np(),It=i(n(gt)),ut=n(It);w(()=>y(ut,e(X).accelerator)),d(tt,gt)};k(Ae,tt=>{var gt;e(X)&&!e(X).accepted?tt(Ue):e(X)&&e(X).problem?tt(ie,1):(gt=e(X))!=null&>.accelerator&&e(ve)&&tt(xe,2)})}var Ee=i(Ae,2);{var He=tt=>{var gt=ip();d(tt,gt)};k(Ee,tt=>{e(I)&&tt(He)})}var Xe=i(ta,2),zt=i(n(Xe),2),Dt=n(zt),Ft=i(zt,2);{var $t=tt=>{var gt=op(),It=n(gt),ut=i(n(It),2),Mt=i(It,2),jt=i(n(Mt),2);As(()=>$e(jt,()=>e(fe),je=>o(fe,je))),Fs(jt,je=>ua==null?void 0:ua(je));var wa=i(Mt,2),oa=i(n(wa),2);mt(oa,"placeholder","e.g. write a haiku about {text}"),As(()=>$e(oa,()=>e(ne),je=>o(ne,je))),Fs(oa,je=>ua==null?void 0:ua(je));var Ra=i(oa,2);{var ja=je=>{var Le=rp(),Qe=i(n(Le));Qe.textContent="{text}",d(je,Le)},Z=ce(()=>e(ne)&&!e(ne).includes("{text}")),Re=je=>{var Le=lp(),Qe=i(n(Le));Qe.textContent="{text}",d(je,Le)};k(Ra,je=>{e(Z)?je(ja):je(Re,-1)})}w(je=>Te(oa,1,je,"svelte-w4d8v7"),[()=>Ia(e(ne)&&!e(ne).includes("{text}")?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":"")]),$e(ut,()=>e(z),je=>o(z,je)),d(tt,gt)};k(Ft,tt=>{e(T)&&tt($t)})}var Gt=i(Xe,2),fa=i(n(Gt),2),Yt=n(fa),ma=i(Ze,2),Oa=n(ma),Ya=i(Oa,2);w(tt=>{y(Ie,e(f)?"Create Hotkey Binding":"Edit Hotkey Binding"),at.disabled=!e(f),Te(qe,1,tt,"svelte-w4d8v7")},[()=>Ia(["border-2 rounded-desktop p-4 text-center cursor-pointer outline-none transition-all duration-200 flex flex-col items-center justify-center min-h-[70px]",e(_)==="keys"?"border-solid border-[#f43f5e] bg-[rgba(244,63,94,0.05)] animate-border-pulse":e(I)?"border-solid border-[#fbbf24] bg-[rgba(251,191,36,0.05)] hover:border-[#fbbf24]/80":"border-dashed border-white/5 bg-black/25 hover:border-accent-blue hover:bg-black/35 focus:border-accent-blue focus:bg-black/35"].join(" "))]),N("click",Ye,()=>{o(v,null),o(_,null)}),$e(at,()=>e(v).id,tt=>e(v).id=tt),$e(rt,()=>e(v).label,tt=>e(v).label=tt),N("click",ct,Se),N("click",qe,()=>o(_,"keys")),xs("focus",qe,()=>o(_,"keys")),xs("blur",qe,()=>we()),N("keydown",qe,_e),N("keyup",qe,re),Xt(Dt,()=>e(T),tt=>o(T,tt)),Xt(Yt,()=>e(q),tt=>o(q,tt)),N("click",Oa,()=>{o(v,null),o(_,null)}),N("click",Ya,le),d(A,E)};k(Ge,A=>{e(v)&&A(st)})}var it=i(Ge,2);{var H=A=>{Bo(A,{isNew:!0,get existingTargets(){return e(c)},isNested:!0,onSave:G,onCancel:de,get editingTarget(){return e(m)},set editingTarget(E){o(m,E,!0)}})};k(it,A=>{e(m)&&A(H)})}N("click",he,ue),d(s,U),St(),l()}Qt(["click","keydown","keyup"]);var up=p('
            '),pp=p('
            '),fp=p('
            '),hp=p('
            '),_p=p('
            '),gp=p('
            '),mp=p('
            Speech: Plays transcribed text via TTS
            '),bp=p('
            '),yp=p('Delete? ',1),wp=p(''),kp=p('
            '),xp=p('
            🎯

            No output targets defined. Create one to route your transcription output!

            '),Tp=p(`

            Output Commands

            Define routing destinations where transcribed text is typed, copied, piped, or sent over network sockets.

            Saying a command by name. Start dictation and say “Hey Vox,” (or “VoxCtrl” / “Vox Control”), then the command's name, then what you want to send — for +write a haiku about {text}`);return}if(e(v).openai_enabled=e(T),e(v).openai_model=e(D),e(v).openai_mode=e(se),e(v).openai_prompt=e(ne),e(v).openai_system_prompt=e(fe),e(v).s1_mini_enabled=e(q),e(v).target_ids&&e(v).target_ids.length>0){if(e(v).target_ids=e(v).target_ids.filter(Ke=>Ke.trim()!==""),e(v).target_ids.length===0){alert("Please assign at least one Output Command.");return}if(new Set(e(v).target_ids).size!==e(v).target_ids.length){alert(`Duplicate commands detected. +You cannot assign the same Output Command multiple times to a single keybind.`);return}e(v).target_id=e(v).target_ids[0]}else e(v).target_id="",e(v).target_ids=[];if(e(f)){if(e(u).some(ke=>ke.id===e(v).id)){alert("Binding with this ID already exists.");return}o(u,[...e(u),e(v)],!0)}else o(u,e(u).map(ke=>ke.id===e(v).id?e(v):ke),!0);o(v,null),o(h,null),await B()}async function W(M){o(u,e(u).filter(C=>C.id!==M),!0),await B()}let ae=S(yt([])),O=S(yt([]));pa(()=>{E("set_hotkeys_inhibited",{inhibited:e(h)==="keys"}).catch(M=>console.error("Failed to set hotkeys inhibited:",M))});let X=S(null),ve=ce(()=>e(L)===null||e(L).backend==="portal"||e(L).backend==="starting"),Ae=ce(()=>e(h)!=="keys"||!Vr(e(ae))||!e(ve)?null:"Keep holding and add a regular key — modifiers alone cannot be a shortcut.");async function Fe(M){if(!e(v)||M.length===0)return;if(Al(M,e(O))){o(X,null),e(v).keys=[...M];return}let C;try{C=await E("check_hotkey_keys",{keys:M})}catch(ke){console.error("Failed to validate hotkey keys:",ke),e(v).keys=[...M];return}o(X,C,!0),C.accepted&&e(v)&&(e(v).keys=[...M])}function he(M){if(!e(h)||!e(v))return;M.preventDefault(),M.stopPropagation();const C=il(M.key,M.code);if(e(h)==="keys"&&(e(ae).includes(C)||o(ae,[...e(ae),C],!0),M.key==="Escape")){const ke=[...e(ae)];o(ae,[],!0),o(h,null),Fe(ke)}}function re(M){if(!(!e(h)||!e(v))&&(M.preventDefault(),M.stopPropagation(),e(h)==="keys")){const C=[...e(ae)];o(ae,[],!0),o(h,null),Fe(C)}}function we(){if(e(h)){if(e(h)==="keys"&&e(ae).length>0){const M=[...e(ae)];o(ae,[],!0),Fe(M)}o(h,null)}}function Je(M){o(x,M,!0),o(_,!0),o(m,qo(),!0)}function de(){o(m,null),o(x,null)}async function $(){if(e(m)){if(e(c).some(M=>M.id===e(m).id)){alert("Target with this ID already exists.");return}o(c,[...e(c),e(m)],!0),e(x)!==null&&e(v)&&(e(v).target_ids||(e(v).target_ids=[]),e(v).target_ids[e(x)]=e(m).id),o(m,null),o(x,null),await R()}}var U=vp(),te=ht(U),Y=i(n(te),2);Eu(Y,{get status(){return e(L)}});var _e=i(Y,2),me=i(_e,2);{var pe=M=>{var C=zu();d(M,C)};k(me,M=>{e(Q).size>0&&M(pe)})}var ze=i(me,2);pt(ze,21,()=>e(u),ft,(M,C)=>{var ke=ju();let Ke;var ye=n(ke);{var Ie=ie=>{var xe=Iu();d(ie,xe)},Ye=ce(()=>!e(C).disabled&&e(C).keys&&e(C).keys.length>0&&e(z).has(Gs(e(C).keys,e(C).gesture)));k(ye,ie=>{e(Ye)&&ie(Ie)})}var Ze=i(ye,2),Ve=n(Ze),at=n(Ve);let et;var rt=n(at),Ee=i(at,2);{var Ge=ie=>{var xe=Ou();d(ie,xe)};k(Ee,ie=>{e(C).openai_enabled&&ie(Ge)})}var ct=i(Ee,2);{var vt=ie=>{var xe=Lu();d(ie,xe)};k(ct,ie=>{var xe,Ce,He,Xe;((Xe=e(C).s1_mini_enabled)!=null?Xe:(He=(Ce=(xe=t())==null?void 0:xe.engine)==null?void 0:Ce.s1_mini)!=null&&He.enabled)&&ie(vt)})}var nt=i(Ve,2),wt=n(nt);pt(wt,21,()=>e(C).keys,ft,(ie,xe)=>{var Ce=Ru(),He=n(Ce);w(Xe=>y(He,Xe),[()=>e(xe).replace("KEY_","")]),d(ie,Ce)});var dt=i(wt,2),Et=n(dt),Kt=i(dt,2);{var ia=ie=>{var xe=Nu();d(ie,xe)},ra=ce(()=>e(ve)&&Vr(e(C).keys));k(Kt,ie=>{e(ra)&&ie(ia)})}var bt=i(Kt,2);{var ea=ie=>{const xe=ce(()=>e(ee).get(e(C).id));var Ce=xi(),He=ht(Ce);{var Xe=zt=>{var Ft=Vu();d(zt,Ft)},Dt=zt=>{var Ft=Fu(),Wt=n(Ft);w(()=>{var $t;return y(Wt,`desktop: ${($t=e(xe).trigger_description)!=null?$t:""}`)}),d(zt,Ft)};k(He,zt=>{e(xe).bound?e(xe).trigger_description&&zt(Dt,1):zt(Xe)})}d(ie,Ce)},Lt=ce(()=>{var ie;return((ie=e(L))==null?void 0:ie.backend)==="portal"&&!e(C).disabled&&e(ee).get(e(C).id)});k(bt,ie=>{e(Lt)&&ie(ea)})}var Ht=i(nt,2),ta=n(Ht),Oe=i(Ht,2),qe=n(Oe),G=n(qe),g=i(qe,2),P=i(g,2);{var Me=ie=>{var xe=Bu(),Ce=i(ht(xe),2),He=i(Ce,2);N("click",Ce,()=>{W(e(C).id),o(b,null)}),N("click",He,()=>o(b,null)),d(ie,xe)},Ue=ie=>{var xe=qu();N("click",xe,()=>o(b,e(C).id,!0)),d(ie,xe)};k(P,ie=>{e(b)===e(C).id?ie(Me):ie(Ue,-1)})}w((ie,xe,Ce)=>{Ke=Te(ke,1,"binding-item glass svelte-w4d8v7",null,Ke,ie),et=Te(at,1,"binding-title svelte-w4d8v7",null,et,xe),y(rt,e(C).label||e(C).id),y(Et,e(C).gesture),y(ta,Ce),y(G,e(C).disabled?"Enable":"Disable")},[()=>({disabled:e(C).disabled,"has-conflict":e(C).keys&&e(C).keys.length>0&&e(Q).has(Gs(e(C).keys,e(C).gesture)),"active-conflict":!e(C).disabled&&e(C).keys&&e(C).keys.length>0&&e(z).has(Gs(e(C).keys,e(C).gesture))}),()=>({"has-conflict":!e(C).disabled&&e(C).keys&&e(C).keys.length>0&&e(z).has(Gs(e(C).keys,e(C).gesture))}),()=>be(e(C))]),N("click",qe,()=>J(e(C).id)),N("click",g,()=>K(e(C))),d(M,ke)},M=>{var C=Uu();d(M,C)});var $e=i(te,2);{var st=M=>{var C=dp(),ke=n(C),Ke=n(ke),ye=n(Ke),Ie=n(ye),Ye=i(ye,2),Ze=i(Ke,2),Ve=n(Ze),at=i(n(Ve),2),et=i(Ve,2),rt=i(n(et),2),Ee=i(et,2),Ge=n(Ee),ct=i(n(Ge),2),vt=i(Ge,2);pt(vt,21,()=>e(v).target_ids||[],ft,(tt,gt,It)=>{var ut=$u(),At=n(ut),jt=n(At),wa=n(jt),oa=i(jt,2);{var La=Le=>{var je=Hu(),Re=ht(je),Qe=i(Re,2),Jt=n(Qe);pt(Jt,17,()=>e(c),ft,(ka,xa)=>{var Ta=Ku(),la=n(Ta);w(_a=>{var Pa,Ca;Ta.disabled=_a,y(la,`${(Pa=e(xa).label)!=null?Pa:""} (${(Ca=e(xa).delivery)!=null?Ca:""})`)},[()=>e(v).target_ids.includes(e(xa).id)&&e(xa).id!==e(gt)]),N("click",Ta,_a=>{_a.preventDefault(),_a.stopPropagation(),e(v).target_ids[It]=e(xa).id,o(A,null)}),d(ka,Ta)});var Gt=i(Jt,2);N("click",Re,()=>o(A,null)),N("click",Gt,ka=>{ka.preventDefault(),ka.stopPropagation(),o(A,null),Je(It)}),d(Le,je)};k(oa,Le=>{e(A)===It&&Le(La)})}var ja=i(At,2);{var Z=Le=>{var je=Wu();N("click",je,()=>De(It)),d(Le,je)};k(ja,Le=>{It>0&&Le(Z)})}w(Le=>y(wa,Le),[()=>Pe(e(gt))]),N("click",jt,()=>o(A,e(A)===It?null:It,!0)),d(tt,ut)});var nt=i(Ee,2),wt=i(n(nt),2);sa(wt,{get options(){return e(oe)},get value(){return e(v).gesture},set value(tt){e(v).gesture=tt}});var dt=i(wt,2);{var Et=tt=>{var gt=Gu(),It=n(gt);w(()=>{var ut;return y(It,((ut=e(L))==null?void 0:ut.backend)==="mint_dbus"?"Your desktop delivers VoxCtrl's shortcuts itself and only reports the key going down, never coming back up — so hold and double-tap styles cannot work here and are not offered.":`${e(V)} gesture style${e(V)===1?"":"s"} are hidden because the way this system delivers shortcuts cannot produce them.`)}),d(tt,gt)};k(dt,tt=>{e(V)>0&&tt(Et)})}var Kt=i(dt,2);{var ia=tt=>{var gt=Yu();d(tt,gt)},ra=ce(()=>e(v).gesture&&!e(j).includes(e(v).gesture));k(Kt,tt=>{e(ra)&&tt(ia)})}var bt=i(nt,2);{var ea=tt=>{var gt=Ju(),It=i(n(gt),2),ut=i(It,2),At=n(ut);w(()=>y(At,e(v).gesture==="double_tap_hold"?"How long the second tap must stay held before recording starts. Keeps a plain double-tap from being read as a double-tap-and-hold.":"Minimum duration to keep keys pressed to count as a 'hold'.")),We(It,()=>e(v).hold_threshold_ms,jt=>e(v).hold_threshold_ms=jt),d(tt,gt)};k(bt,tt=>{(e(v).gesture==="hold"||e(v).gesture==="double_tap_hold")&&tt(ea)})}var Lt=i(bt,2);{var Ht=tt=>{var gt=Xu(),It=i(n(gt),2);We(It,()=>e(v).tap_ms,ut=>e(v).tap_ms=ut),d(tt,gt)};k(Lt,tt=>{(e(v).gesture==="double_tap"||e(v).gesture==="double_tap_hold")&&tt(Ht)})}var ta=i(Lt,2),Oe=n(ta),qe=i(n(Oe),2),G=n(qe);{var g=tt=>{var gt=Qu(),It=ht(gt),ut=i(n(It),2),At=n(ut),jt=i(It,2);{var wa=oa=>{var La=Zu(),ja=n(La);w(()=>y(ja,e(Ae))),d(oa,La)};k(jt,oa=>{e(Ae)&&oa(wa)})}w(oa=>y(At,oa),[()=>e(ae).length>0?e(ae).join(" + ").replace(/KEY_/g,""):"Press your physical shortcut combination now..."]),d(tt,gt)},P=tt=>{var gt=ap(),It=n(gt);{var ut=jt=>{var wa=tp(),oa=ht(wa);pt(oa,21,()=>e(v).keys,ft,(La,ja)=>{var Z=ep(),Le=n(Z);w(je=>y(Le,je),[()=>e(ja).replace("KEY_","")]),d(La,Z)}),d(jt,wa)},At=jt=>{var wa=Be("⚠️ Click/Focus here to press keys!");d(jt,wa)};k(It,jt=>{e(v).keys.length>0?jt(ut):jt(At,-1)})}d(tt,gt)};k(G,tt=>{e(h)==="keys"?tt(g):tt(P,-1)})}var Me=i(Oe,2);{var Ue=tt=>{var gt=sp(),It=i(n(gt),2),ut=i(n(It));w(()=>{var At;return y(ut,` ${(At=e(X).message)!=null?At:""}`)}),d(tt,gt)},ie=tt=>{var gt=np(),It=i(n(gt),2),ut=n(It);w(()=>y(ut,e(X).message)),d(tt,gt)},xe=tt=>{var gt=ip(),It=i(n(gt)),ut=n(It);w(()=>y(ut,e(X).accelerator)),d(tt,gt)};k(Me,tt=>{var gt;e(X)&&!e(X).accepted?tt(Ue):e(X)&&e(X).problem?tt(ie,1):(gt=e(X))!=null&>.accelerator&&e(ve)&&tt(xe,2)})}var Ce=i(Me,2);{var He=tt=>{var gt=rp();d(tt,gt)};k(Ce,tt=>{e(I)&&tt(He)})}var Xe=i(ta,2),Dt=i(n(Xe),2),zt=n(Dt),Ft=i(Dt,2);{var Wt=tt=>{var gt=cp(),It=n(gt),ut=i(n(It),2),At=i(It,2),jt=i(n(At),2);Ms(()=>We(jt,()=>e(fe),je=>o(fe,je))),Fs(jt,je=>ua==null?void 0:ua(je));var wa=i(At,2),oa=i(n(wa),2);mt(oa,"placeholder","e.g. write a haiku about {text}"),Ms(()=>We(oa,()=>e(ne),je=>o(ne,je))),Fs(oa,je=>ua==null?void 0:ua(je));var La=i(oa,2);{var ja=je=>{var Re=lp(),Qe=i(n(Re));Qe.textContent="{text}",d(je,Re)},Z=ce(()=>e(ne)&&!e(ne).includes("{text}")),Le=je=>{var Re=op(),Qe=i(n(Re));Qe.textContent="{text}",d(je,Re)};k(La,je=>{e(Z)?je(ja):je(Le,-1)})}w(je=>Te(oa,1,je,"svelte-w4d8v7"),[()=>Ia(e(ne)&&!e(ne).includes("{text}")?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":"")]),We(ut,()=>e(D),je=>o(D,je)),d(tt,gt)};k(Ft,tt=>{e(T)&&tt(Wt)})}var $t=i(Xe,2),fa=i(n($t),2),Yt=n(fa),ma=i(Ze,2),Oa=n(ma),Ya=i(Oa,2);w(tt=>{y(Ie,e(f)?"Create Hotkey Binding":"Edit Hotkey Binding"),at.disabled=!e(f),Te(qe,1,tt,"svelte-w4d8v7")},[()=>Ia(["border-2 rounded-desktop p-4 text-center cursor-pointer outline-none transition-all duration-200 flex flex-col items-center justify-center min-h-[70px]",e(h)==="keys"?"border-solid border-[#f43f5e] bg-[rgba(244,63,94,0.05)] animate-border-pulse":e(I)?"border-solid border-[#fbbf24] bg-[rgba(251,191,36,0.05)] hover:border-[#fbbf24]/80":"border-dashed border-white/5 bg-black/25 hover:border-accent-blue hover:bg-black/35 focus:border-accent-blue focus:bg-black/35"].join(" "))]),N("click",Ye,()=>{o(v,null),o(h,null)}),We(at,()=>e(v).id,tt=>e(v).id=tt),We(rt,()=>e(v).label,tt=>e(v).label=tt),N("click",ct,Se),N("click",qe,()=>o(h,"keys")),xs("focus",qe,()=>o(h,"keys")),xs("blur",qe,()=>we()),N("keydown",qe,he),N("keyup",qe,re),Xt(zt,()=>e(T),tt=>o(T,tt)),Xt(Yt,()=>e(q),tt=>o(q,tt)),N("click",Oa,()=>{o(v,null),o(h,null)}),N("click",Ya,le),d(M,C)};k($e,M=>{e(v)&&M(st)})}var it=i($e,2);{var H=M=>{Bo(M,{isNew:!0,get existingTargets(){return e(c)},isNested:!0,onSave:$,onCancel:de,get editingTarget(){return e(m)},set editingTarget(C){o(m,C,!0)}})};k(it,M=>{e(m)&&M(H)})}N("click",_e,ue),d(s,U),St(),l()}Qt(["click","keydown","keyup"]);var pp=p('

            '),fp=p('
            '),_p=p('
            '),hp=p('
            '),gp=p('
            '),mp=p('
            '),bp=p('
            Speech: Plays transcribed text via TTS
            '),yp=p('
            '),wp=p('Delete? ',1),kp=p(''),xp=p('
            '),Tp=p('
            🎯

            No output targets defined. Create one to route your transcription output!

            '),Sp=p(`

            Output Commands

            Define routing destinations where transcribed text is typed, copied, piped, or sent over network sockets.

            Saying a command by name. Start dictation and say “Hey Vox,” (or “VoxCtrl” / “Vox Control”), then the command's name, then what you want to send — for example “Hey Vox, notes, remember to call the plumber” or “VoxCtrl notes, remember to call the plumber” routes remember to call the plumber to the command named notes. Everything after the name is the text. Natural phrasing works too (“Hey Vox, add this to my notes: …”). Say nothing of the sort and - dictation goes wherever your hotkey already points.

            `,1);function Sp(s,a){Tt(a,!0);let t=S(yt([])),r=S(yt([])),l=S(null),c=S(!1),u=S(null),v=S(null);qt(async()=>{o(t,await C("get_targets"),!0),o(r,await C("get_bindings"),!0)});async function f(){try{await C("save_targets",{targets:e(t)}),console.log("Targets auto-saved successfully!")}catch(Q){console.error("Failed to save targets:",Q)}}async function _(){try{await C("save_bindings",{bindings:e(r)}),console.log("Bindings auto-saved successfully!")}catch(Q){console.error("Failed to save bindings:",Q)}}function b(){o(c,!0),o(l,qo(),!0)}function m(Q){o(c,!1),o(u,Q.id,!0);const D=JSON.parse(JSON.stringify(Q));D.processing||(D.processing={}),D.file_mode||(D.file_mode="append"),o(l,D,!0)}function h(){o(l,null),o(u,null)}async function x(){if(e(l)){if(e(c))o(t,[...e(t),e(l)],!0);else{if(e(u)&&e(u)!==e(l).id){let Q=!1;o(r,e(r).map(D=>{let I=!1,R=D.target_ids?[...D.target_ids]:[D.target_id];for(let ge=0;geQ.id===e(u)?e(l):Q),!0)}o(l,null),o(u,null),await f()}}async function M(Q){const D=e(r).filter(I=>(I.target_ids&&I.target_ids.length>0?I.target_ids:[I.target_id]).includes(Q)).map(I=>I.label||I.id);if(D.length>0){alert(`Cannot delete target. It is currently being used by hotkeys: ${D.join(", ")}`);return}o(t,e(t).filter(I=>I.id!==Q),!0),await f()}var q=Tp(),T=_t(q),z=i(n(T),4),se=i(z,2);pt(se,21,()=>e(t),ft,(Q,D)=>{var I=kp(),R=n(I),ge=n(R),ee=n(ge),j=n(ee),V=i(ee,2),oe=n(V),L=i(ge,2);{var B=de=>{var G=up(),U=n(G);w(()=>{var te;return y(U,`Cmd: ${(te=e(D).command)!=null?te:""}`)}),d(de,G)};k(L,de=>{e(D).delivery==="exec"&&de(B)})}var be=i(L,2);{var Pe=de=>{var G=pp(),U=n(G);w(()=>{var te;return y(U,`File: ${(te=e(D).file_path)!=null?te:""}`)}),d(de,G)};k(be,de=>{e(D).delivery==="file"&&de(Pe)})}var ue=i(be,2);{var W=de=>{var G=fp(),U=n(G);w(()=>{var te,Y;return y(U,`Socket: ${(te=e(D).socket_host)!=null?te:""}:${(Y=e(D).socket_port)!=null?Y:""}`)}),d(de,G)};k(ue,de=>{e(D).delivery==="socket"&&de(W)})}var J=i(ue,2);{var Se=de=>{var G=hp(),U=n(G),te=i(U);{var Y=he=>{var me=Be();w(()=>{var pe;return y(me,`→ ${(pe=e(D).response_pipe)!=null?pe:""}`)}),d(he,me)};k(te,he=>{e(D).response_pipe&&he(Y)})}w(()=>{var he;return y(U,`Pipe: ${(he=e(D).pipe_path)!=null?he:""} `)}),d(de,G)};k(J,de=>{e(D).delivery==="pipe"&&de(Se)})}var ze=i(J,2);{var le=de=>{var G=_p(),U=n(G);w(()=>{var te;return y(U,`API: ${(te=e(D).http_url||e(D).webhook_url)!=null?te:""}`)}),d(de,G)};k(ze,de=>{(e(D).delivery==="http"||e(D).delivery==="webhook")&&de(le)})}var $=i(ze,2);{var ae=de=>{var G=gp(),U=n(G);w(()=>{var te;return y(U,`MCP Tool: ${(te=e(D).mcp_tool||"speak_text")!=null?te:""}`)}),d(de,G)};k($,de=>{e(D).delivery==="mcp"&&de(ae)})}var O=i($,2);{var X=de=>{var G=mp();d(de,G)};k(O,de=>{e(D).delivery==="speak"&&de(X)})}var ve=i(O,2);{var Me=de=>{var G=bp(),U=n(G);w(()=>{var te,Y,he;return y(U,`Chat: ${(te=e(D).chat_model||"no model")!=null?te:""} @ ${(Y=e(D).chat_url||"no endpoint")!=null?Y:""} → ${(he=e(D).chat_reply_mode||"speak")!=null?he:""}`)}),d(de,G)};k(ve,de=>{e(D).delivery==="chat"&&de(Me)})}var Fe=i(ve,2),_e=n(Fe),re=i(_e,2);{var we=de=>{var G=yp(),U=i(_t(G),2),te=i(U,2);N("click",U,()=>{M(e(D).id),o(v,null)}),N("click",te,()=>o(v,null)),d(de,G)},Je=de=>{var G=wp();N("click",G,()=>o(v,e(D).id,!0)),d(de,G)};k(re,de=>{e(v)===e(D).id?de(we):de(Je,-1)})}w(()=>{y(j,e(D).label),y(oe,e(D).delivery)}),N("click",_e,()=>m(e(D))),d(Q,I)},Q=>{var D=xp();d(Q,D)});var ne=i(T,2);{var fe=Q=>{Bo(Q,{get isNew(){return e(c)},get existingTargets(){return e(t)},isNested:!1,onSave:x,onCancel:h,get editingTarget(){return e(l)},set editingTarget(D){o(l,D,!0)}})};k(ne,Q=>{e(l)&&Q(fe)})}N("click",z,b),d(s,q),St()}Qt(["click"]);var Cp=p('
            →
            '),Ep=p('

            '),Mp=p('

            ');function jo(s,a){Tt(a,!0);let t=Et(a,"value",15),r=Et(a,"class",3,""),l=S(yt(Object.entries(t()||{}).map(([Q,D])=>({key:Q,val:D})))),c=!1;pa(()=>{var ee;const Q={};for(const{key:j,val:V}of e(l))j.trim()&&(Q[j.trim()]=V.trim());const D=t()||{},I=Object.keys(D),R=Object.keys(Q);(I.length!==R.length||R.some(j=>D[j]!==Q[j]))&&(t(Q),c&&((ee=a.onchange)==null||ee.call(a))),c=!0});function u(){o(l,[...e(l),{key:"",val:""}],!0)}function v(Q){o(l,e(l).filter((D,I)=>I!==Q),!0)}var f=Mp(),_=n(f),b=n(_),m=n(b),h=n(m),x=i(m,2),M=n(x),q=i(b,2),T=n(q),z=i(_,2),se=n(z);pt(se,17,()=>e(l),ft,(Q,D,I)=>{var R=Cp(),ge=n(R),ee=i(ge,4),j=i(ee,2);w(()=>{mt(ge,"placeholder",a.keyPlaceholder),mt(ee,"placeholder",a.valuePlaceholder)}),$e(ge,()=>e(l)[I].key,V=>e(l)[I].key=V),$e(ee,()=>e(l)[I].val,V=>e(l)[I].val=V),N("click",j,()=>v(I)),d(Q,R)});var ne=i(se,2);{var fe=Q=>{var D=Ep(),I=n(D),R=n(I);w(()=>y(R,a.emptyText)),d(Q,D)};k(ne,Q=>{e(l).length===0&&Q(fe)})}w(Q=>{var D;Te(f,1,Q),y(h,a.title),y(M,a.hint),y(T,`+ ${(D=a.addLabel)!=null?D:""}`)},[()=>Ia(["field-group",r()].filter(Boolean).join(" "))]),N("click",q,u),d(s,f),St()}Qt(["click"]);var Ap=p('
            '),Pp=p(' '),zp=p('
            (Click / Tab here to record a new stop key)',1),Dp=p(''),Ip=p('
            ');function Op(s,a){Tt(a,!0);let t=Et(a,"keys",15),r=S(!1),l=S(yt([]));function c(h){var M;if(!e(r))return;h.preventDefault(),h.stopPropagation();const x=il(h.key,h.code);e(l).includes(x)||o(l,[...e(l),x],!0),h.key==="Escape"&&(t([...e(l)]),(M=a.onchange)==null||M.call(a),o(l,[],!0),o(r,!1))}function u(h){var x;e(r)&&(h.preventDefault(),h.stopPropagation(),e(l).length>0&&(t([...e(l)]),(x=a.onchange)==null||x.call(a)),o(l,[],!0),o(r,!1))}function v(){var h;e(l).length>0&&(t([...e(l)]),(h=a.onchange)==null||h.call(a),o(l,[],!0)),o(r,!1)}var f=Ip(),_=n(f);{var b=h=>{var x=Ap(),M=i(n(x),2),q=n(M);w(T=>y(q,T),[()=>e(l).length>0?e(l).join(" + ").replace(/KEY_/g,""):"Press your physical shortcut combination now..."]),d(h,x)},m=h=>{var x=Dp(),M=n(x);{var q=z=>{var se=zp(),ne=_t(se);pt(ne,21,t,ft,(fe,Q)=>{var D=Pp(),I=n(D);w(R=>y(I,R),[()=>e(Q).replace("KEY_","")]),d(fe,D)}),d(z,se)},T=z=>{var se=Be("⚠️ Click/Focus here to press a stop key!");d(z,se)};k(M,z=>{t().length>0?z(q):z(T,-1)})}d(h,x)};k(_,h=>{e(r)?h(b):h(m,-1)})}w(h=>Te(f,1,h),[()=>Ia(["border-2 rounded-desktop p-6 text-center cursor-pointer outline-none transition-all duration-200 flex flex-col items-center justify-center min-h-[80px]",e(r)?"border-solid border-[#f43f5e] bg-[rgba(244,63,94,0.05)] animate-border-pulse":"border-dashed border-white/5 bg-black/25 hover:border-accent-blue hover:bg-black/35 focus:border-accent-blue focus:bg-black/35"].join(" "))]),N("click",f,()=>o(r,!0)),xs("focus",f,()=>o(r,!0)),xs("blur",f,v),N("keydown",f,c),N("keyup",f,u),d(s,f),St()}Qt(["click","keydown","keyup"]);var Rp=p('

            Use CUDA GPU acceleration (ONNX Runtime). Falls back to CPU if unavailable.

            ',1),Lp=p('

            Runs synthesis on the GPU via Vulkan. Falls back to the CPU whenever no Vulkan device can be opened.

            ',1),Np=p('

            Runs synthesis on the GPU via Vulkan. Falls back to the CPU whenever no Vulkan device can be opened.

            ',1),Vp=p('

            Runs synthesis on the GPU via Vulkan. Falls back to the CPU whenever no Vulkan device can be opened.

            ',1),Fp=p('
            Run speed
            '),Bp=p('

            '),qp=p('

            '),jp=p('⏳ Checking local voice files...'),Up=p(' '),Wp=p('
            '),Hp=p('

            '),$p=p('

            Piper Voice

            Voice directory (leave blank for default)

            Default voice directory: ~/.local/share/voxctrl/piper-voices/

            '),Gp=p('⏳ Checking local model files...'),Kp=p('⏳ Downloading VoxCPM2 model weights from HuggingFace (4.5 GB)...'),Yp=p('
            '),Jp=p("Currently using the HF_TOKEN environment variable.",1),Xp=p(`

            VoxCPM2 Voice

            ⚡ OpenBMB VoxCPM2 — 2B Autoregressive Diffusion TTS

            Runs through audio.cpp with optional Vulkan acceleration. Supports reference Voice Cloning and Ultimate Cloning (reference audio + transcript matching). Licensed under Apache 2.0.

            Voice Design (prompt-based) isn't offered here: audio.cpp's current VoxCPM2 build doesn't + dictation goes wherever your hotkey already points.

            `,1);function Ep(s,a){Tt(a,!0);let t=S(yt([])),r=S(yt([])),l=S(null),c=S(!1),u=S(null),v=S(null);qt(async()=>{o(t,await E("get_targets"),!0),o(r,await E("get_bindings"),!0)});async function f(){try{await E("save_targets",{targets:e(t)}),console.log("Targets auto-saved successfully!")}catch(Q){console.error("Failed to save targets:",Q)}}async function h(){try{await E("save_bindings",{bindings:e(r)}),console.log("Bindings auto-saved successfully!")}catch(Q){console.error("Failed to save bindings:",Q)}}function b(){o(c,!0),o(l,qo(),!0)}function m(Q){o(c,!1),o(u,Q.id,!0);const z=JSON.parse(JSON.stringify(Q));z.processing||(z.processing={}),z.file_mode||(z.file_mode="append"),o(l,z,!0)}function _(){o(l,null),o(u,null)}async function x(){if(e(l)){if(e(c))o(t,[...e(t),e(l)],!0);else{if(e(u)&&e(u)!==e(l).id){let Q=!1;o(r,e(r).map(z=>{let I=!1,L=z.target_ids?[...z.target_ids]:[z.target_id];for(let ge=0;geQ.id===e(u)?e(l):Q),!0)}o(l,null),o(u,null),await f()}}async function A(Q){const z=e(r).filter(I=>(I.target_ids&&I.target_ids.length>0?I.target_ids:[I.target_id]).includes(Q)).map(I=>I.label||I.id);if(z.length>0){alert(`Cannot delete target. It is currently being used by hotkeys: ${z.join(", ")}`);return}o(t,e(t).filter(I=>I.id!==Q),!0),await f()}var q=Sp(),T=ht(q),D=i(n(T),4),se=i(D,2);pt(se,21,()=>e(t),ft,(Q,z)=>{var I=xp(),L=n(I),ge=n(L),ee=n(ge),j=n(ee),V=i(ee,2),oe=n(V),R=i(ge,2);{var B=de=>{var $=pp(),U=n($);w(()=>{var te;return y(U,`Cmd: ${(te=e(z).command)!=null?te:""}`)}),d(de,$)};k(R,de=>{e(z).delivery==="exec"&&de(B)})}var be=i(R,2);{var Pe=de=>{var $=fp(),U=n($);w(()=>{var te;return y(U,`File: ${(te=e(z).file_path)!=null?te:""}`)}),d(de,$)};k(be,de=>{e(z).delivery==="file"&&de(Pe)})}var ue=i(be,2);{var K=de=>{var $=_p(),U=n($);w(()=>{var te,Y;return y(U,`Socket: ${(te=e(z).socket_host)!=null?te:""}:${(Y=e(z).socket_port)!=null?Y:""}`)}),d(de,$)};k(ue,de=>{e(z).delivery==="socket"&&de(K)})}var J=i(ue,2);{var Se=de=>{var $=hp(),U=n($),te=i(U);{var Y=_e=>{var me=Be();w(()=>{var pe;return y(me,`→ ${(pe=e(z).response_pipe)!=null?pe:""}`)}),d(_e,me)};k(te,_e=>{e(z).response_pipe&&_e(Y)})}w(()=>{var _e;return y(U,`Pipe: ${(_e=e(z).pipe_path)!=null?_e:""} `)}),d(de,$)};k(J,de=>{e(z).delivery==="pipe"&&de(Se)})}var De=i(J,2);{var le=de=>{var $=gp(),U=n($);w(()=>{var te;return y(U,`API: ${(te=e(z).http_url||e(z).webhook_url)!=null?te:""}`)}),d(de,$)};k(De,de=>{(e(z).delivery==="http"||e(z).delivery==="webhook")&&de(le)})}var W=i(De,2);{var ae=de=>{var $=mp(),U=n($);w(()=>{var te;return y(U,`MCP Tool: ${(te=e(z).mcp_tool||"speak_text")!=null?te:""}`)}),d(de,$)};k(W,de=>{e(z).delivery==="mcp"&&de(ae)})}var O=i(W,2);{var X=de=>{var $=bp();d(de,$)};k(O,de=>{e(z).delivery==="speak"&&de(X)})}var ve=i(O,2);{var Ae=de=>{var $=yp(),U=n($);w(()=>{var te,Y,_e;return y(U,`Chat: ${(te=e(z).chat_model||"no model")!=null?te:""} @ ${(Y=e(z).chat_url||"no endpoint")!=null?Y:""} → ${(_e=e(z).chat_reply_mode||"speak")!=null?_e:""}`)}),d(de,$)};k(ve,de=>{e(z).delivery==="chat"&&de(Ae)})}var Fe=i(ve,2),he=n(Fe),re=i(he,2);{var we=de=>{var $=wp(),U=i(ht($),2),te=i(U,2);N("click",U,()=>{A(e(z).id),o(v,null)}),N("click",te,()=>o(v,null)),d(de,$)},Je=de=>{var $=kp();N("click",$,()=>o(v,e(z).id,!0)),d(de,$)};k(re,de=>{e(v)===e(z).id?de(we):de(Je,-1)})}w(()=>{y(j,e(z).label),y(oe,e(z).delivery)}),N("click",he,()=>m(e(z))),d(Q,I)},Q=>{var z=Tp();d(Q,z)});var ne=i(T,2);{var fe=Q=>{Bo(Q,{get isNew(){return e(c)},get existingTargets(){return e(t)},isNested:!1,onSave:x,onCancel:_,get editingTarget(){return e(l)},set editingTarget(z){o(l,z,!0)}})};k(ne,Q=>{e(l)&&Q(fe)})}N("click",D,b),d(s,q),St()}Qt(["click"]);var Cp=p('
            →
            '),Ap=p('

            '),Mp=p('

            ');function jo(s,a){Tt(a,!0);let t=Ct(a,"value",15),r=Ct(a,"class",3,""),l=S(yt(Object.entries(t()||{}).map(([Q,z])=>({key:Q,val:z})))),c=!1;pa(()=>{var ee;const Q={};for(const{key:j,val:V}of e(l))j.trim()&&(Q[j.trim()]=V.trim());const z=t()||{},I=Object.keys(z),L=Object.keys(Q);(I.length!==L.length||L.some(j=>z[j]!==Q[j]))&&(t(Q),c&&((ee=a.onchange)==null||ee.call(a))),c=!0});function u(){o(l,[...e(l),{key:"",val:""}],!0)}function v(Q){o(l,e(l).filter((z,I)=>I!==Q),!0)}var f=Mp(),h=n(f),b=n(h),m=n(b),_=n(m),x=i(m,2),A=n(x),q=i(b,2),T=n(q),D=i(h,2),se=n(D);pt(se,17,()=>e(l),ft,(Q,z,I)=>{var L=Cp(),ge=n(L),ee=i(ge,4),j=i(ee,2);w(()=>{mt(ge,"placeholder",a.keyPlaceholder),mt(ee,"placeholder",a.valuePlaceholder)}),We(ge,()=>e(l)[I].key,V=>e(l)[I].key=V),We(ee,()=>e(l)[I].val,V=>e(l)[I].val=V),N("click",j,()=>v(I)),d(Q,L)});var ne=i(se,2);{var fe=Q=>{var z=Ap(),I=n(z),L=n(I);w(()=>y(L,a.emptyText)),d(Q,z)};k(ne,Q=>{e(l).length===0&&Q(fe)})}w(Q=>{var z;Te(f,1,Q),y(_,a.title),y(A,a.hint),y(T,`+ ${(z=a.addLabel)!=null?z:""}`)},[()=>Ia(["field-group",r()].filter(Boolean).join(" "))]),N("click",q,u),d(s,f),St()}Qt(["click"]);var Pp=p('
            '),Dp=p(' '),zp=p('
            (Click / Tab here to record a new stop key)',1),Ip=p(''),Op=p('
            ');function Lp(s,a){Tt(a,!0);let t=Ct(a,"keys",15),r=S(!1),l=S(yt([]));function c(_){var A;if(!e(r))return;_.preventDefault(),_.stopPropagation();const x=il(_.key,_.code);e(l).includes(x)||o(l,[...e(l),x],!0),_.key==="Escape"&&(t([...e(l)]),(A=a.onchange)==null||A.call(a),o(l,[],!0),o(r,!1))}function u(_){var x;e(r)&&(_.preventDefault(),_.stopPropagation(),e(l).length>0&&(t([...e(l)]),(x=a.onchange)==null||x.call(a)),o(l,[],!0),o(r,!1))}function v(){var _;e(l).length>0&&(t([...e(l)]),(_=a.onchange)==null||_.call(a),o(l,[],!0)),o(r,!1)}var f=Op(),h=n(f);{var b=_=>{var x=Pp(),A=i(n(x),2),q=n(A);w(T=>y(q,T),[()=>e(l).length>0?e(l).join(" + ").replace(/KEY_/g,""):"Press your physical shortcut combination now..."]),d(_,x)},m=_=>{var x=Ip(),A=n(x);{var q=D=>{var se=zp(),ne=ht(se);pt(ne,21,t,ft,(fe,Q)=>{var z=Dp(),I=n(z);w(L=>y(I,L),[()=>e(Q).replace("KEY_","")]),d(fe,z)}),d(D,se)},T=D=>{var se=Be("⚠️ Click/Focus here to press a stop key!");d(D,se)};k(A,D=>{t().length>0?D(q):D(T,-1)})}d(_,x)};k(h,_=>{e(r)?_(b):_(m,-1)})}w(_=>Te(f,1,_),[()=>Ia(["border-2 rounded-desktop p-6 text-center cursor-pointer outline-none transition-all duration-200 flex flex-col items-center justify-center min-h-[80px]",e(r)?"border-solid border-[#f43f5e] bg-[rgba(244,63,94,0.05)] animate-border-pulse":"border-dashed border-white/5 bg-black/25 hover:border-accent-blue hover:bg-black/35 focus:border-accent-blue focus:bg-black/35"].join(" "))]),N("click",f,()=>o(r,!0)),xs("focus",f,()=>o(r,!0)),xs("blur",f,v),N("keydown",f,c),N("keyup",f,u),d(s,f),St()}Qt(["click","keydown","keyup"]);var Rp=p('

            Use CUDA GPU acceleration (ONNX Runtime). Falls back to CPU if unavailable.

            ',1),Np=p('

            Runs synthesis on the GPU via Vulkan. Falls back to the CPU whenever no Vulkan device can be opened.

            ',1),Vp=p('

            Runs synthesis on the GPU via Vulkan. Falls back to the CPU whenever no Vulkan device can be opened.

            ',1),Fp=p('

            Runs synthesis on the GPU via Vulkan. Falls back to the CPU whenever no Vulkan device can be opened.

            ',1),Bp=p('
            Run speed
            '),qp=p('

            '),jp=p('

            '),Up=p('⏳ Checking local voice files...'),Kp=p(' '),Hp=p('
            '),Wp=p('

            '),$p=p('

            Piper Voice

            Voice directory (leave blank for default)

            Default voice directory: ~/.local/share/voxctrl/piper-voices/

            '),Gp=p('⏳ Checking local model files...'),Yp=p('⏳ Downloading VoxCPM2 model weights from HuggingFace (4.5 GB)...'),Jp=p('
            '),Xp=p("Currently using the HF_TOKEN environment variable.",1),Zp=p(`

            VoxCPM2 Voice

            ⚡ OpenBMB VoxCPM2 — 2B Autoregressive Diffusion TTS

            Runs through audio.cpp with optional Vulkan acceleration. Supports reference Voice Cloning and Ultimate Cloning (reference audio + transcript matching). Licensed under Apache 2.0.

            Voice Design (prompt-based) isn't offered here: audio.cpp's current VoxCPM2 build doesn't act on the prompt yet, an upstream limitation. Voice Cloning below works correctly.

            Shared Voice Folder (leave blank for default)

            Default directory: ~/.local/share/voxctrl/cloned-tts-voices/

            Enable Ultimate Cloning

            When enabled, VoxCPM2 reads a companion .txt transcript file next to the .wav reference audio (e.g. voice_name.txt alongside voice_name.wav) for maximum phoneme alignment, nuanced breathing, and exact prosodic preservation.

            VoxCPM2 model files are hosted on HuggingFace at huggingface.co/openbmb/VoxCPM2. - An optional token can avoid anonymous download rate limits — set it once in the General tab.

            Model directory (leave blank for default)

            Default directory: ~/.local/share/voxctrl/models/voxcpm2/

            Loads the model at startup so the first reply doesn't pay the load cost.

            `),Zp=p('⏳ Checking local model files...'),Qp=p('⏳ Downloading Breeze-TTS-2 model weights from HuggingFace...'),ef=p('
            '),tf=p(`

            Breeze-TTS-2 Voice

            ⚠️ Non-Commercial License Warning

            Breeze-TTS-2 model weights are released under the BreezeBlue Research and Non-Commercial License. + An optional token can avoid anonymous download rate limits — set it once in the General tab.

            Model directory (leave blank for default)

            Default directory: ~/.local/share/voxctrl/models/voxcpm2/

            Loads the model at startup so the first reply doesn't pay the load cost.

            `),Qp=p('⏳ Checking local model files...'),ef=p('⏳ Downloading Breeze-TTS-2 model weights from HuggingFace...'),tf=p('
            '),af=p(`

            Breeze-TTS-2 Voice

            ⚠️ Non-Commercial License Warning

            Breeze-TTS-2 model weights are released under the BreezeBlue Research and Non-Commercial License. Commercial use requires a personal or commercial license directly from the creator (RESONIA, INC.).

            Voice Design (prompt-based) isn't offered here: it doesn't reliably apply the described voice and quality suffers compared to Voice Cloning below, which works correctly.

            Shared Voice Folder (leave blank for default)

            Default directory: ~/.local/share/voxctrl/cloned-tts-voices/

            ⚠️ Voice Cloning Transcript Required

            Unlike Pocket-TTS and VoxCPM2, Breeze-TTS-2 cannot clone a voice without a transcript. Drop reference .wav audio files into your shared voice folder along with a matching text file (e.g. voice_name.txt) containing exactly what is spoken in the audio — cloning fails without one.

            Breeze-TTS-2 runs through the audio.cpp engine, which downloads the model on its first use - here — no HuggingFace token required.

            Model directory (leave blank for default)

            Default directory: ~/.local/share/voxctrl/models/breeze-tts-2/

            Loads the model at startup so the first reply doesn't pay the load cost.

            `),af=p('⏳ Checking local model files...'),sf=p('⏳ Downloading Pocket-TTS model & voice clip (may take a few minutes)...'),nf=p('
            '),rf=p('

            '),lf=p(`

            Pocket-TTS Voice

            Pocket-TTS runs through the audio.cpp engine, which downloads the model and voice clip on + here — no HuggingFace token required.

            Model directory (leave blank for default)

            Default directory: ~/.local/share/voxctrl/models/breeze-tts-2/

            Loads the model at startup so the first reply doesn't pay the load cost.

            `),sf=p('⏳ Checking local model files...'),nf=p('⏳ Downloading Pocket-TTS model & voice clip (may take a few minutes)...'),rf=p('
            '),lf=p('

            '),of=p(`

            Pocket-TTS Voice

            Pocket-TTS runs through the audio.cpp engine, which downloads the model and voice clip on their first use here — no HuggingFace token required.

            Custom voice directory (leave blank for default)

            Drop a .wav reference clip into this folder to add it to the voice list — the filename (without extension) becomes the voice's id, e.g. narrator.wav adds "Narrator (Custom)". Naming a clip after a built-in voice (e.g. alba.wav) replaces - that voice's reference clip. Default: ~/.local/share/voxctrl/cloned-tts-voices/

            Loads the model at startup so the first reply doesn't pay the load cost.

            `),of=p(`

            This build cannot run this engine. The ONNX half is behind an opt-in + that voice's reference clip. Default: ~/.local/share/voxctrl/cloned-tts-voices/

            Loads the model at startup so the first reply doesn't pay the load cost.

            `),cf=p(`

            This build cannot run this engine. The ONNX half is behind an opt-in cargo feature, so Test TTS stays disabled until the app is rebuilt with it:
            npm run tauri dev -- --features inflect-micro
            npm run tauri build -- --features inflect-micro
            The -- is required, or npm consumes the flag itself. Downloading the - model works either way — only synthesis needs the feature.

            `),cf=p('⏳ Checking local model files...'),df=p('⏳ Downloading Inflect-Micro-v2 model (~38 MB)...'),vf=p('
            '),uf=p('
             
            '),pf=p('
             
            '),ff=p(`

            Inflect Micro

            A 9.4M-parameter VITS model (38 MB) with a single fixed English voice at 24 kHz, so + model works either way — only synthesis needs the feature.

            `),df=p('⏳ Checking local model files...'),vf=p('⏳ Downloading Inflect-Micro-v2 model (~38 MB)...'),uf=p('
            '),pf=p('
             
            '),ff=p('
             
            '),_f=p(`

            Inflect Micro

            A 9.4M-parameter VITS model (38 MB) with a single fixed English voice at 24 kHz, so there is no voice to choose. Needs espeak-ng installed for phonemization.

            The model is deterministic for a fixed seed, so the same text always produces identical audio. Change it to resample the prosody.

            Higher values give more expressive but less predictable delivery. Default is 0.667.

            Loads the ONNX graphs at launch so the first spoken response has no load delay.

            Model directory (leave blank for default)

            Point this at an existing copy of the model to skip downloading. Default: ~/.local/share/voxctrl/models/inflect-micro/

            Model diagnostics

            Reports the tensor names the downloaded export declares. Useful if synthesis fails with a - message about an input that could not be mapped.

            `),hf=p('

            ',1),_f=p(`

            The model stays in memory for the whole session — the fastest possible response, at - the cost of holding its memory even while TTS sits unused.

            `),gf=p('

            Text to Speech

            TTS Engine

            Model Memory

            Playback

            Stop Key Bind

            Press a key combo to immediately stop TTS playback — works even when this window is hidden.

            ');function mf(s,a){Tt(a,!0);let t=Et(a,"cfg",15);function r(){Ot.set(t()),Ss.set(!0)}let l=S(null),c=S(0),u=S(!1),v=null,f=null,_=null,b=null,m=S(!1),h=S(null),x=0;function M(){o(u,!0),o(c,0),o(l,null),x=performance.now(),v&&clearInterval(v),v=setInterval(()=>{o(c,Math.round(performance.now()-x),!0),e(c)>1e4&&(clearInterval(v),o(u,!1),o(l,null))},10)}const q=["en-us-libritts-high","en-us-amy-low","en-us-kathleen-low","en-gb-southern_english_female-low","en-us-ryan-high","en-us-ryan-medium","en-us-ryan-low","en-us-lessac-medium","en-us-lessac-low","en-us-danny-low","en-gb-alan-low"];let T=S(yt({})),z=S(!1),se=S(!1),ne=S(!1),fe=S(null);async function Q(){o(z,!0);const Z={};for(const Re of q)try{Z[Re]=await C("check_voice_downloaded",{voiceName:Re,voiceDir:t().tts.voice_dir})}catch(je){console.error("Failed to check download status for voice "+Re,je),Z[Re]=!1}o(T,Z,!0),o(z,!1)}async function D(Z){if(!e(se)){o(se,!0);try{await C("download_voice",{voiceName:Z,voiceDir:t().tts.voice_dir}),e(T)[Z]=!0}catch(Re){alert(`Failed to download voice: ${Re}`)}finally{o(se,!1)}}}async function I(){const Z=t().tts.voice_dir;if(!Z){o(fe,null);return}const Re=await C("check_directory_exists",{path:Z});o(fe,Re?null:"This folder does not exist. Please create it first or leave blank for the default location.",!0),e(fe)||await Q()}function R(){r()}function ge(Z){Z.key==="Enter"&&Z.currentTarget.blur()}async function ee(){r()}async function j(){if(e(ne))return;try{await nl(t())}catch(Le){o(h,`Failed to save configuration: ${Le}`);return}if(e(m)){o(m,!1);try{await C("stop_tts")}catch(Le){console.error("Failed to stop TTS:",Le)}}o(ne,!0),o(h,null),M();let Z="TTS",Re=null;t().tts.engine==="piper"?(Z="Piper",Re=t().tts.voice):t().tts.engine==="pocket_tts"?(Z="Pocket-TTS",Re=t().tts.pocket_tts.voice):t().tts.engine==="breeze_tts_2"?(Z="Breeze-TTS-2",Re=null):t().tts.engine==="vox_cpm_2"?(Z="VoxCPM2",Re=null):t().tts.engine==="inflect_micro"?(Z="Inflect Micro",Re=null):t().tts.engine==="espeak"&&(Z="eSpeak-NG",Re=null);const je=`Hi this is ${Z} speaking from VoxCtrl`;try{await C("speak_text",{text:je,voice:Re})}catch(Le){o(h,`${Le}`),clearInterval(v),o(u,!1),o(ne,!1)}}let V=S(!1);function oe(){if(!t().tts.enabled)return"Enable text-to-speech above first.";if(e(V))return"Switching engine...";if(e(m))return null;if(e(ne))return"Already speaking.";if(t().tts.engine==="inflect_micro"){if(!e(Fe))return"This build was compiled without the `inflect-micro` feature, so this engine cannot synthesize. Rebuild with: npm run tauri dev -- --features inflect-micro";if(e(re))return"Checking local model files...";if(e(we))return"Downloading the model...";if(!e(_e))return"Download the model first."}if(t().tts.engine==="breeze_tts_2"){if(e(Ye))return"Checking local model files...";if(e(Ze))return"Downloading the model...";if(!e(Ie))return"Download the model first."}if(t().tts.engine==="vox_cpm_2"){if(e(E))return"Checking local model files...";if(e(ke))return"Downloading the model...";if(!e(A))return"Download the model first."}return null}function L(){return!t().tts.enabled||e(V)?!0:e(m)?!1:e(ne)?!0:t().tts.engine==="piper"?e(z)||e(se)||!e(T)[t().tts.voice]:t().tts.engine==="pocket_tts"?e(De)||e(Ge)||!e(pe):t().tts.engine==="breeze_tts_2"?e(Ye)||e(Ze)||!e(Ie):t().tts.engine==="vox_cpm_2"?e(E)||e(ke)||!e(A):t().tts.engine==="inflect_micro"?e(re)||e(we)||!e(_e)||!e(Fe):!1}let B=S(yt([])),be=S(null);function Pe(){return t().tts.engine==="vox_cpm_2"?t().tts.vox_cpm_2.voice_dir||"":t().tts.engine==="breeze_tts_2"?t().tts.breeze_tts_2.voice_dir||"":t().tts.pocket_tts.voice_dir||""}function ue(){if(!e(B)||e(B).length===0)return;const Z=e(B)[0].id;let Re=!1;(!t().tts.vox_cpm_2.cloned_voice||!e(B).some(je=>je.id===t().tts.vox_cpm_2.cloned_voice))&&(t(t().tts.vox_cpm_2.cloned_voice=Z,!0),Re=!0),(!t().tts.breeze_tts_2.cloned_voice||!e(B).some(je=>je.id===t().tts.breeze_tts_2.cloned_voice))&&(t(t().tts.breeze_tts_2.cloned_voice=Z,!0),Re=!0),(!t().tts.pocket_tts.voice||!e(B).some(je=>je.id===t().tts.pocket_tts.voice))&&(t(t().tts.pocket_tts.voice=Z,!0),Re=!0),Re&&r()}pa(()=>{ue(),t().tts.vox_cpm_2.voice_mode!=="clone"&&(t(t().tts.vox_cpm_2.voice_mode="clone",!0),r()),t().tts.breeze_tts_2.voice_mode!=="clone"&&(t(t().tts.breeze_tts_2.voice_mode="clone",!0),r())});async function W(){try{o(B,await C("list_pocket_tts_voices",{voiceDir:Pe()}),!0),ue()}catch(Z){console.error("list_pocket_tts_voices:",Z)}}async function J(Z){const Re=typeof Z=="string"?Z:Pe();if(!Re){o(be,null),await W();return}const je=await C("check_directory_exists",{path:Re});o(be,je?null:"This folder does not exist. Please create it first or leave blank for the default location.",!0),e(be)||await W()}function Se(){r()}function ze(Z){Z.key==="Enter"&&Z.currentTarget.blur()}let le=ce(()=>q.map(Z=>({value:Z,label:`${Z}${e(T)[Z]?" ✔":""}`}))),$=ce(()=>e(B).map(Z=>({value:Z.id,label:Z.label})));const ae=[{value:"always_loaded",label:"Always loaded (fastest response)"},{value:"on_demand",label:"Load when needed, unload when idle (saves memory)"}];let O=ce(()=>{var Z;return Math.round(((Z=t().tts.idle_unload_secs)!=null?Z:900)/60)});function X(){t().tts.memory_mode==="on_demand"&&!t().tts.idle_unload_secs&&t(t().tts.idle_unload_secs=900,!0),r()}function ve(Z){const Re=Number(Z.currentTarget.value),je=Math.min(480,Math.max(1,Math.round(Re)||15));t(t().tts.idle_unload_secs=je*60,!0),r()}const Me=[{value:"vox_cpm_2",label:"VoxCPM2 (neural, voice cloning & design)"},{value:"breeze_tts_2",label:"Breeze-TTS-2 (neural, voice design)"},{value:"pocket_tts",label:"Pocket-TTS (neural, voice cloning)"},{value:"piper",label:"Piper (neural, high quality)"},{value:"inflect_micro",label:"Inflect Micro (neural, 38 MB)"},{value:"espeak",label:"eSpeak-NG (lightweight)"}];let Fe=S(!0),_e=S(!1),re=S(!1),we=S(!1),Je=S(null),de=S(!1),G=S(null);async function U(){try{o(Fe,await C("inflect_micro_available"),!0)}catch(Z){console.error("inflect_micro_available:",Z),o(Fe,!1)}}async function te(){o(re,!0);try{o(_e,await C("check_inflect_micro_downloaded",{modelDir:t().tts.inflect_micro.model_dir}),!0)}catch(Z){console.error("check_inflect_micro_downloaded:",Z),o(_e,!1)}finally{o(re,!1)}}async function Y(){if(!e(we)){o(we,!0),o(G,null);try{await C("download_inflect_micro",{modelDir:t().tts.inflect_micro.model_dir}),o(_e,!0)}catch(Z){o(G,`${Z}`)}finally{o(we,!1)}}}async function he(){if(!e(de)){o(de,!0),o(Je,null);try{const Z=await C("inflect_micro_inspect",{modelDir:t().tts.inflect_micro.model_dir});o(Je,JSON.stringify(Z,null,2),!0)}catch(Z){o(Je,`${Z}`)}finally{o(de,!1)}}}function me(){r()}let pe=S(!1),De=S(!1),Ge=S(!1);async function st(){o(De,!0);try{o(pe,await C("check_pocket_tts_ready",{voice:t().tts.pocket_tts.voice,voiceDir:t().tts.pocket_tts.voice_dir}),!0)}catch(Z){console.error("check_pocket_tts_ready:",Z),o(pe,!1)}finally{o(De,!1)}}async function it(){if(!e(Ge)){o(Ge,!0);try{await C("download_pocket_tts",{voice:t().tts.pocket_tts.voice,voiceDir:t().tts.pocket_tts.voice_dir,hfToken:t().tts.hf_token}),o(pe,!0)}catch(Z){alert(`Failed to download Pocket-TTS assets: ${Z}`)}finally{o(Ge,!1)}}}function H(){r(),o(pe,!1),st()}let A=S(!1),E=S(!1),ke=S(!1);async function We(){o(E,!0);try{o(A,await C("check_vox_cpm_2_ready",{modelDir:t().tts.vox_cpm_2.model_dir}),!0)}catch(Z){console.error("check_vox_cpm_2_ready:",Z),o(A,!1)}finally{o(E,!1)}}async function ye(){if(!e(ke)){o(ke,!0);try{const Z=t().tts.hf_token;await C("download_vox_cpm_2",{modelDir:t().tts.vox_cpm_2.model_dir,hfToken:Z}),o(A,!0)}catch(Z){alert(`Failed to download VoxCPM2 assets: ${Z}`)}finally{o(ke,!1)}}}let Ie=S(!1),Ye=S(!1),Ze=S(!1);async function Ve(){o(Ye,!0);try{o(Ie,await C("check_breeze_tts_2_ready",{modelDir:t().tts.breeze_tts_2.model_dir}),!0)}catch(Z){console.error("check_breeze_tts_2_ready:",Z),o(Ie,!1)}finally{o(Ye,!1)}}async function at(){if(!e(Ze)){o(Ze,!0);try{const Z=t().tts.hf_token;await C("download_breeze_tts_2",{modelDir:t().tts.breeze_tts_2.model_dir,hfToken:Z}),o(Ie,!0)}catch(Z){alert(`Failed to download Breeze-TTS-2 assets: ${Z}`)}finally{o(Ze,!1)}}}let et=S(null);const rt=ce(()=>!!e(et));async function Ce(){r(),o(V,!0);try{t().tts.engine==="vox_cpm_2"?(t(t().tts.vox_cpm_2.voice_mode="clone",!0),o(A,!1),await We(),await W()):t().tts.engine==="breeze_tts_2"?(t(t().tts.breeze_tts_2.voice_mode="clone",!0),o(Ie,!1),await Ve(),await W()):t().tts.engine==="pocket_tts"?(o(pe,!1),await W(),await st()):t().tts.engine==="inflect_micro"?(o(_e,!1),await U(),await te()):t().tts.engine==="piper"&&(t().tts.voice_dir?await I():await Q())}finally{setTimeout(()=>{o(V,!1)},400)}}qt(async()=>{C("hf_token_env").then(Z=>o(et,Z&&Z.trim()?Z.trim():null,!0)).catch(()=>o(et,null)),t().tts.voice_dir?I():Q(),W(),t().tts.engine==="vox_cpm_2"&&We(),t().tts.engine==="breeze_tts_2"&&Ve(),t().tts.engine==="pocket_tts"&&st(),t().tts.engine==="inflect_micro"&&(await U(),te()),f=await _a("tts-playback-start",()=>{e(u)&&(clearInterval(v),o(l,e(c),!0),o(u,!1)),o(ne,!1),o(m,!0)}),_=await _a("tts-playback-end",()=>{o(m,!1),e(ne)&&(clearInterval(v),o(u,!1),o(ne,!1))}),b=await _a("tts-error",Z=>{o(h,Z.payload,!0),clearInterval(v),o(u,!1),o(l,null),o(ne,!1),o(m,!1)})}),ar(()=>{v&&clearInterval(v),f&&f(),_&&_(),b&&b()});var Ke=gf(),ct=i(n(Ke),2),vt=i(n(ct),2),nt=i(n(vt),2),wt=i(vt,2),dt=i(n(wt),2);sa(dt,{get options(){return Me},onchange:Ce,get value(){return t().tts.engine},set value(Z){t(t().tts.engine=Z,!0)}});var Ct=i(wt,2);{var Wt=Z=>{var Re=Rp(),je=_t(Re),Le=i(n(je),2);N("change",Le,r),Xt(Le,()=>t().tts.gpu,Qe=>t(t().tts.gpu=Qe,!0)),d(Z,Re)},ia=Z=>{var Re=Lp(),je=_t(Re),Le=i(n(je),2);N("change",Le,r),Xt(Le,()=>t().tts.pocket_tts.gpu,Qe=>t(t().tts.pocket_tts.gpu=Qe,!0)),d(Z,Re)},ra=Z=>{var Re=Np(),je=_t(Re),Le=i(n(je),2);N("change",Le,r),Xt(Le,()=>t().tts.breeze_tts_2.gpu,Qe=>t(t().tts.breeze_tts_2.gpu=Qe,!0)),d(Z,Re)},bt=Z=>{var Re=Vp(),je=_t(Re),Le=i(n(je),2);N("change",Le,r),Xt(Le,()=>t().tts.vox_cpm_2.gpu,Qe=>t(t().tts.vox_cpm_2.gpu=Qe,!0)),d(Z,Re)};k(Ct,Z=>{t().tts.engine==="piper"?Z(Wt):t().tts.engine==="pocket_tts"?Z(ia,1):t().tts.engine==="breeze_tts_2"?Z(ra,2):t().tts.engine==="vox_cpm_2"&&Z(bt,3)})}var ea=i(Ct,2),Rt=n(ea),Ht=n(Rt),ta=i(Rt,2),Oe=i(ea,2),qe=n(Oe),K=n(qe),g=i(qe,2);{var P=Z=>{var Re=Fp(),je=i(n(Re),2);let Le;var Qe=n(je);w(()=>{Le=Te(je,1,"run-speed-value svelte-1q9seip",null,Le,{counting:e(u)}),y(Qe,e(u)?`${e(c)} ms`:`${e(l)} ms`)}),d(Z,Re)};k(g,Z=>{(e(u)||e(l)!==null)&&Z(P)})}var Ae=i(Oe,2);{var Ue=Z=>{var Re=Bp(),je=n(Re);w(()=>{var Le;return y(je,`❌ ${(Le=e(h))!=null?Le:""}`)}),d(Z,Re)};k(Ae,Z=>{e(h)&&Z(Ue)})}var ie=i(Ae,2);{var xe=Z=>{var Re=qp(),je=n(Re);w(Le=>y(je,`Test TTS unavailable: ${Le!=null?Le:""}`),[()=>oe()]),d(Z,Re)},Ee=ce(()=>!e(h)&&L()&&oe());k(ie,Z=>{e(Ee)&&Z(xe)})}var He=i(ct,2);{var Xe=Z=>{var Re=$p(),je=i(n(Re),2),Le=i(n(je),2);sa(Le,{get options(){return e(le)},onchange:ee,get value(){return t().tts.voice},set value(Ut){t(t().tts.voice=Ut,!0)}});var Qe=i(je,2),Jt=n(Qe);{var Kt=Ut=>{var At=jp();d(Ut,At)},ka=Ut=>{var At=Up(),kt=n(At);w(()=>{var aa;return y(kt,`⏳ Downloading ${(aa=t().tts.voice)!=null?aa:""} (model + config)...`)}),d(Ut,At)},xa=Ut=>{var At=Wp(),kt=n(At),aa=n(kt),za=i(kt,2),Ua=n(za);w(()=>{Te(kt,1,Ia(e(T)[t().tts.voice]?"status-downloaded":"status-missing"),"svelte-1q9seip"),y(aa,e(T)[t().tts.voice]?"✔ Voice downloaded and ready":"❌ Voice files missing"),za.disabled=e(T)[t().tts.voice]||e(se),y(Ua,e(T)[t().tts.voice]?"Downloaded":"📥 Download")}),N("click",za,()=>D(t().tts.voice)),d(Ut,At)};k(Jt,Ut=>{e(z)?Ut(Kt):e(se)?Ut(ka,1):Ut(xa,-1)})}var Ta=i(Qe,2),la=i(n(Ta),2);let ha;var Pa=i(la,2);{var Ea=Ut=>{var At=Hp(),kt=n(At);w(()=>y(kt,e(fe))),d(Ut,At)};k(Pa,Ut=>{e(fe)&&Ut(Ea)})}w(()=>ha=Te(la,1,"svelte-1q9seip",null,ha,{"field-input-error":!!e(fe)})),N("change",la,R),xs("blur",la,I),N("keydown",la,ge),$e(la,()=>t().tts.voice_dir,Ut=>t(t().tts.voice_dir=Ut,!0)),d(Z,Re)};k(He,Z=>{t().tts.engine==="piper"&&Z(Xe)})}var zt=i(He,2);{var Dt=Z=>{var Re=Xp(),je=i(n(Re),6),Le=i(n(je),2);sa(Le,{get options(){return e($)},defaultToFirst:!0,onchange:r,get value(){return t().tts.vox_cpm_2.cloned_voice},set value(Lt){t(t().tts.vox_cpm_2.cloned_voice=Lt,!0)}});var Qe=i(je,2),Jt=i(n(Qe),2),Kt=i(Qe,4),ka=i(n(Kt),2),xa=i(Kt,4),Ta=n(xa);{var la=Lt=>{var Ja=Gp();d(Lt,Ja)},ha=Lt=>{var Ja=Kp();d(Lt,Ja)},Pa=Lt=>{var Ja=Yp(),Bn=n(Ja),rr=n(Bn),Nt=i(Bn,2),Da=n(Nt);w(()=>{Te(Bn,1,Ia(e(A)?"status-downloaded":"status-missing"),"svelte-1q9seip"),y(rr,e(A)?"✔ Model weights downloaded and ready":"❌ Model files missing"),Nt.disabled=e(A)||e(ke),y(Da,e(A)?"Downloaded":"📥 Download")}),N("click",Nt,ye),d(Lt,Ja)};k(Ta,Lt=>{e(E)?Lt(la):e(ke)?Lt(ha,1):Lt(Pa,-1)})}var Ea=i(xa,2),Ut=i(n(Ea),5);{var At=Lt=>{var Ja=Jp();d(Lt,Ja)};k(Ut,Lt=>{e(rt)&&Lt(At)})}var kt=i(Ea,2),aa=i(n(kt),2),za=i(kt,4),Ua=i(n(za),2);N("change",Jt,()=>{r(),J(t().tts.vox_cpm_2.voice_dir)}),$e(Jt,()=>t().tts.vox_cpm_2.voice_dir,Lt=>t(t().tts.vox_cpm_2.voice_dir=Lt,!0)),N("change",ka,r),Xt(ka,()=>t().tts.vox_cpm_2.ultimate_cloning,Lt=>t(t().tts.vox_cpm_2.ultimate_cloning=Lt,!0)),N("change",aa,r),$e(aa,()=>t().tts.vox_cpm_2.model_dir,Lt=>t(t().tts.vox_cpm_2.model_dir=Lt,!0)),N("change",Ua,r),Xt(Ua,()=>t().tts.vox_cpm_2.prewarm,Lt=>t(t().tts.vox_cpm_2.prewarm=Lt,!0)),d(Z,Re)};k(zt,Z=>{t().tts.engine==="vox_cpm_2"&&Z(Dt)})}var Ft=i(zt,2);{var $t=Z=>{var Re=tf(),je=i(n(Re),6),Le=i(n(je),2);sa(Le,{get options(){return e($)},defaultToFirst:!0,onchange:r,get value(){return t().tts.breeze_tts_2.cloned_voice},set value(At){t(t().tts.breeze_tts_2.cloned_voice=At,!0)}});var Qe=i(je,2),Jt=i(n(Qe),2),Kt=i(Qe,6),ka=n(Kt);{var xa=At=>{var kt=Zp();d(At,kt)},Ta=At=>{var kt=Qp();d(At,kt)},la=At=>{var kt=ef(),aa=n(kt),za=n(aa),Ua=i(aa,2),Lt=n(Ua);w(()=>{Te(aa,1,Ia(e(Ie)?"status-downloaded":"status-missing"),"svelte-1q9seip"),y(za,e(Ie)?"✔ Model weights downloaded and ready":"❌ Model files missing"),Ua.disabled=e(Ie)||e(Ze),y(Lt,e(Ie)?"Downloaded":"📥 Download")}),N("click",Ua,at),d(At,kt)};k(ka,At=>{e(Ye)?At(xa):e(Ze)?At(Ta,1):At(la,-1)})}var ha=i(Kt,4),Pa=i(n(ha),2),Ea=i(ha,4),Ut=i(n(Ea),2);N("change",Jt,()=>{r(),J(t().tts.breeze_tts_2.voice_dir)}),$e(Jt,()=>t().tts.breeze_tts_2.voice_dir,At=>t(t().tts.breeze_tts_2.voice_dir=At,!0)),N("change",Pa,r),$e(Pa,()=>t().tts.breeze_tts_2.model_dir,At=>t(t().tts.breeze_tts_2.model_dir=At,!0)),N("change",Ut,r),Xt(Ut,()=>t().tts.breeze_tts_2.prewarm,At=>t(t().tts.breeze_tts_2.prewarm=At,!0)),d(Z,Re)};k(Ft,Z=>{t().tts.engine==="breeze_tts_2"&&Z($t)})}var Gt=i(Ft,2);{var fa=Z=>{var Re=lf(),je=i(n(Re),2),Le=i(n(je),2);sa(Le,{get options(){return e($)},defaultToFirst:!0,onchange:H,get value(){return t().tts.pocket_tts.voice},set value(kt){t(t().tts.pocket_tts.voice=kt,!0)}});var Qe=i(je,2),Jt=n(Qe);{var Kt=kt=>{var aa=af();d(kt,aa)},ka=kt=>{var aa=sf();d(kt,aa)},xa=kt=>{var aa=nf(),za=n(aa),Ua=n(za),Lt=i(za,2),Ja=n(Lt);w(()=>{Te(za,1,Ia(e(pe)?"status-downloaded":"status-missing"),"svelte-1q9seip"),y(Ua,e(pe)?"✔ Model and voice clip downloaded and ready":"❌ Model files missing"),Lt.disabled=e(pe)||e(Ge),y(Ja,e(pe)?"Downloaded":"📥 Download")}),N("click",Lt,it),d(kt,aa)};k(Jt,kt=>{e(De)?kt(Kt):e(Ge)?kt(ka,1):kt(xa,-1)})}var Ta=i(Qe,4),la=i(n(Ta),2);let ha;var Pa=i(la,2);{var Ea=kt=>{var aa=rf(),za=n(aa);w(()=>y(za,e(be))),d(kt,aa)};k(Pa,kt=>{e(be)&&kt(Ea)})}var Ut=i(Ta,4),At=i(n(Ut),2);w(()=>ha=Te(la,1,"svelte-1q9seip",null,ha,{"field-input-error":!!e(be)})),N("change",la,Se),xs("blur",la,J),N("keydown",la,ze),$e(la,()=>t().tts.pocket_tts.voice_dir,kt=>t(t().tts.pocket_tts.voice_dir=kt,!0)),N("change",At,r),Xt(At,()=>t().tts.pocket_tts.prewarm,kt=>t(t().tts.pocket_tts.prewarm=kt,!0)),d(Z,Re)};k(Gt,Z=>{t().tts.engine==="pocket_tts"&&Z(fa)})}var Yt=i(Gt,2);{var ma=Z=>{var Re=ff(),je=i(n(Re),4);{var Le=Nt=>{var Da=of();d(Nt,Da)};k(je,Nt=>{e(Fe)||Nt(Le)})}var Qe=i(je,2),Jt=n(Qe);{var Kt=Nt=>{var Da=cf();d(Nt,Da)},ka=Nt=>{var Da=df();d(Nt,Da)},xa=Nt=>{var Da=vf(),Hs=n(Da),Ti=n(Hs),lr=i(Hs,2),$o=n(lr);w(()=>{Te(Hs,1,Ia(e(_e)?"status-downloaded":"status-missing"),"svelte-1q9seip"),y(Ti,e(_e)?"✔ Model downloaded and ready":"❌ Model files missing"),lr.disabled=e(_e)||e(we),y($o,e(_e)?"Downloaded":"📥 Download")}),N("click",lr,Y),d(Nt,Da)};k(Jt,Nt=>{e(re)?Nt(Kt):e(we)?Nt(ka,1):Nt(xa,-1)})}var Ta=i(Qe,2);{var la=Nt=>{var Da=uf(),Hs=n(Da);w(()=>{var Ti;return y(Hs,`❌ ${(Ti=e(G))!=null?Ti:""}`)}),d(Nt,Da)};k(Ta,Nt=>{e(G)&&Nt(la)})}var ha=i(Ta,2),Pa=i(n(ha),2),Ea=i(ha,4),Ut=i(n(Ea),2),At=i(Ea,4),kt=i(n(At),2),aa=i(At,4),za=i(n(aa),2),Ua=i(aa,4),Lt=i(n(Ua),2),Ja=n(Lt),Bn=i(Ua,4);{var rr=Nt=>{var Da=pf(),Hs=n(Da);w(()=>y(Hs,e(Je))),d(Nt,Da)};k(Bn,Nt=>{e(Je)&&Nt(rr)})}w(()=>{Lt.disabled=!e(_e)||e(de),y(Ja,e(de)?"Inspecting...":"🔍 Inspect graphs")}),N("change",Pa,me),$e(Pa,()=>t().tts.inflect_micro.seed,Nt=>t(t().tts.inflect_micro.seed=Nt,!0)),N("change",Ut,me),$e(Ut,()=>t().tts.inflect_micro.noise_scale,Nt=>t(t().tts.inflect_micro.noise_scale=Nt,!0)),N("change",kt,me),Xt(kt,()=>t().tts.inflect_micro.prewarm,Nt=>t(t().tts.inflect_micro.prewarm=Nt,!0)),N("change",za,me),$e(za,()=>t().tts.inflect_micro.model_dir,Nt=>t(t().tts.inflect_micro.model_dir=Nt,!0)),N("click",Lt,he),d(Z,Re)};k(Yt,Z=>{t().tts.engine==="inflect_micro"&&Z(ma)})}var Oa=i(Yt,2),Ya=i(n(Oa),2),tt=i(n(Ya),2);sa(tt,{get options(){return ae},onchange:X,get value(){return t().tts.memory_mode},set value(Z){t(t().tts.memory_mode=Z,!0)}});var gt=i(Ya,2);{var It=Z=>{var Re=hf(),je=_t(Re),Le=i(n(je),2),Qe=i(je,2),Jt=n(Qe);w(()=>{var Kt;sr(Le,e(O)),y(Jt,`The model is loaded the moment VoxCtrl knows it will be needed — as soon as you start + message about an input that could not be mapped.

            `),hf=p('

            ',1),gf=p(`

            The model stays in memory for the whole session — the fastest possible response, at + the cost of holding its memory even while TTS sits unused.

            `),mf=p('

            Text to Speech

            TTS Engine

            Model Memory

            Playback

            Stop Key Bind

            Press a key combo to immediately stop TTS playback — works even when this window is hidden.

            ');function bf(s,a){Tt(a,!0);let t=Ct(a,"cfg",15);function r(){Ot.set(t()),Ss.set(!0)}let l=S(null),c=S(0),u=S(!1),v=null,f=null,h=null,b=null,m=S(!1),_=S(null),x=0;function A(){o(u,!0),o(c,0),o(l,null),x=performance.now(),v&&clearInterval(v),v=setInterval(()=>{o(c,Math.round(performance.now()-x),!0),e(c)>1e4&&(clearInterval(v),o(u,!1),o(l,null))},10)}const q=["en-us-libritts-high","en-us-amy-low","en-us-kathleen-low","en-gb-southern_english_female-low","en-us-ryan-high","en-us-ryan-medium","en-us-ryan-low","en-us-lessac-medium","en-us-lessac-low","en-us-danny-low","en-gb-alan-low"];let T=S(yt({})),D=S(!1),se=S(!1),ne=S(!1),fe=S(null);async function Q(){o(D,!0);const Z={};for(const Le of q)try{Z[Le]=await E("check_voice_downloaded",{voiceName:Le,voiceDir:t().tts.voice_dir})}catch(je){console.error("Failed to check download status for voice "+Le,je),Z[Le]=!1}o(T,Z,!0),o(D,!1)}async function z(Z){if(!e(se)){o(se,!0);try{await E("download_voice",{voiceName:Z,voiceDir:t().tts.voice_dir}),e(T)[Z]=!0}catch(Le){alert(`Failed to download voice: ${Le}`)}finally{o(se,!1)}}}async function I(){const Z=t().tts.voice_dir;if(!Z){o(fe,null);return}const Le=await E("check_directory_exists",{path:Z});o(fe,Le?null:"This folder does not exist. Please create it first or leave blank for the default location.",!0),e(fe)||await Q()}function L(){r()}function ge(Z){Z.key==="Enter"&&Z.currentTarget.blur()}async function ee(){r()}async function j(){if(e(ne))return;try{await nl(t())}catch(Re){o(_,`Failed to save configuration: ${Re}`);return}if(e(m)){o(m,!1);try{await E("stop_tts")}catch(Re){console.error("Failed to stop TTS:",Re)}}o(ne,!0),o(_,null),A();let Z="TTS",Le=null;t().tts.engine==="piper"?(Z="Piper",Le=t().tts.voice):t().tts.engine==="pocket_tts"?(Z="Pocket-TTS",Le=t().tts.pocket_tts.voice):t().tts.engine==="breeze_tts_2"?(Z="Breeze-TTS-2",Le=null):t().tts.engine==="vox_cpm_2"?(Z="VoxCPM2",Le=null):t().tts.engine==="inflect_micro"?(Z="Inflect Micro",Le=null):t().tts.engine==="espeak"&&(Z="eSpeak-NG",Le=null);const je=`Hi this is ${Z} speaking from VoxCtrl`;try{await E("speak_text",{text:je,voice:Le})}catch(Re){o(_,`${Re}`),clearInterval(v),o(u,!1),o(ne,!1)}}let V=S(!1);function oe(){if(!t().tts.enabled)return"Enable text-to-speech above first.";if(e(V))return"Switching engine...";if(e(m))return null;if(e(ne))return"Already speaking.";if(t().tts.engine==="inflect_micro"){if(!e(Fe))return"This build was compiled without the `inflect-micro` feature, so this engine cannot synthesize. Rebuild with: npm run tauri dev -- --features inflect-micro";if(e(re))return"Checking local model files...";if(e(we))return"Downloading the model...";if(!e(he))return"Download the model first."}if(t().tts.engine==="breeze_tts_2"){if(e(Ye))return"Checking local model files...";if(e(Ze))return"Downloading the model...";if(!e(Ie))return"Download the model first."}if(t().tts.engine==="vox_cpm_2"){if(e(C))return"Checking local model files...";if(e(ke))return"Downloading the model...";if(!e(M))return"Download the model first."}return null}function R(){return!t().tts.enabled||e(V)?!0:e(m)?!1:e(ne)?!0:t().tts.engine==="piper"?e(D)||e(se)||!e(T)[t().tts.voice]:t().tts.engine==="pocket_tts"?e(ze)||e($e)||!e(pe):t().tts.engine==="breeze_tts_2"?e(Ye)||e(Ze)||!e(Ie):t().tts.engine==="vox_cpm_2"?e(C)||e(ke)||!e(M):t().tts.engine==="inflect_micro"?e(re)||e(we)||!e(he)||!e(Fe):!1}let B=S(yt([])),be=S(null);function Pe(){return t().tts.engine==="vox_cpm_2"?t().tts.vox_cpm_2.voice_dir||"":t().tts.engine==="breeze_tts_2"?t().tts.breeze_tts_2.voice_dir||"":t().tts.pocket_tts.voice_dir||""}function ue(){if(!e(B)||e(B).length===0)return;const Z=e(B)[0].id;let Le=!1;(!t().tts.vox_cpm_2.cloned_voice||!e(B).some(je=>je.id===t().tts.vox_cpm_2.cloned_voice))&&(t(t().tts.vox_cpm_2.cloned_voice=Z,!0),Le=!0),(!t().tts.breeze_tts_2.cloned_voice||!e(B).some(je=>je.id===t().tts.breeze_tts_2.cloned_voice))&&(t(t().tts.breeze_tts_2.cloned_voice=Z,!0),Le=!0),(!t().tts.pocket_tts.voice||!e(B).some(je=>je.id===t().tts.pocket_tts.voice))&&(t(t().tts.pocket_tts.voice=Z,!0),Le=!0),Le&&r()}pa(()=>{ue(),t().tts.vox_cpm_2.voice_mode!=="clone"&&(t(t().tts.vox_cpm_2.voice_mode="clone",!0),r()),t().tts.breeze_tts_2.voice_mode!=="clone"&&(t(t().tts.breeze_tts_2.voice_mode="clone",!0),r())});async function K(){try{o(B,await E("list_pocket_tts_voices",{voiceDir:Pe()}),!0),ue()}catch(Z){console.error("list_pocket_tts_voices:",Z)}}async function J(Z){const Le=typeof Z=="string"?Z:Pe();if(!Le){o(be,null),await K();return}const je=await E("check_directory_exists",{path:Le});o(be,je?null:"This folder does not exist. Please create it first or leave blank for the default location.",!0),e(be)||await K()}function Se(){r()}function De(Z){Z.key==="Enter"&&Z.currentTarget.blur()}let le=ce(()=>q.map(Z=>({value:Z,label:`${Z}${e(T)[Z]?" ✔":""}`}))),W=ce(()=>e(B).map(Z=>({value:Z.id,label:Z.label})));const ae=[{value:"always_loaded",label:"Always loaded (fastest response)"},{value:"on_demand",label:"Load when needed, unload when idle (saves memory)"}];let O=ce(()=>{var Z;return Math.round(((Z=t().tts.idle_unload_secs)!=null?Z:900)/60)});function X(){t().tts.memory_mode==="on_demand"&&!t().tts.idle_unload_secs&&t(t().tts.idle_unload_secs=900,!0),r()}function ve(Z){const Le=Number(Z.currentTarget.value),je=Math.min(480,Math.max(1,Math.round(Le)||15));t(t().tts.idle_unload_secs=je*60,!0),r()}const Ae=[{value:"vox_cpm_2",label:"VoxCPM2 (neural, voice cloning & design)"},{value:"breeze_tts_2",label:"Breeze-TTS-2 (neural, voice design)"},{value:"pocket_tts",label:"Pocket-TTS (neural, voice cloning)"},{value:"piper",label:"Piper (neural, high quality)"},{value:"inflect_micro",label:"Inflect Micro (neural, 38 MB)"},{value:"espeak",label:"eSpeak-NG (lightweight)"}];let Fe=S(!0),he=S(!1),re=S(!1),we=S(!1),Je=S(null),de=S(!1),$=S(null);async function U(){try{o(Fe,await E("inflect_micro_available"),!0)}catch(Z){console.error("inflect_micro_available:",Z),o(Fe,!1)}}async function te(){o(re,!0);try{o(he,await E("check_inflect_micro_downloaded",{modelDir:t().tts.inflect_micro.model_dir}),!0)}catch(Z){console.error("check_inflect_micro_downloaded:",Z),o(he,!1)}finally{o(re,!1)}}async function Y(){if(!e(we)){o(we,!0),o($,null);try{await E("download_inflect_micro",{modelDir:t().tts.inflect_micro.model_dir}),o(he,!0)}catch(Z){o($,`${Z}`)}finally{o(we,!1)}}}async function _e(){if(!e(de)){o(de,!0),o(Je,null);try{const Z=await E("inflect_micro_inspect",{modelDir:t().tts.inflect_micro.model_dir});o(Je,JSON.stringify(Z,null,2),!0)}catch(Z){o(Je,`${Z}`)}finally{o(de,!1)}}}function me(){r()}let pe=S(!1),ze=S(!1),$e=S(!1);async function st(){o(ze,!0);try{o(pe,await E("check_pocket_tts_ready",{voice:t().tts.pocket_tts.voice,voiceDir:t().tts.pocket_tts.voice_dir}),!0)}catch(Z){console.error("check_pocket_tts_ready:",Z),o(pe,!1)}finally{o(ze,!1)}}async function it(){if(!e($e)){o($e,!0);try{await E("download_pocket_tts",{voice:t().tts.pocket_tts.voice,voiceDir:t().tts.pocket_tts.voice_dir,hfToken:t().tts.hf_token}),o(pe,!0)}catch(Z){alert(`Failed to download Pocket-TTS assets: ${Z}`)}finally{o($e,!1)}}}function H(){r(),o(pe,!1),st()}let M=S(!1),C=S(!1),ke=S(!1);async function Ke(){o(C,!0);try{o(M,await E("check_vox_cpm_2_ready",{modelDir:t().tts.vox_cpm_2.model_dir}),!0)}catch(Z){console.error("check_vox_cpm_2_ready:",Z),o(M,!1)}finally{o(C,!1)}}async function ye(){if(!e(ke)){o(ke,!0);try{const Z=t().tts.hf_token;await E("download_vox_cpm_2",{modelDir:t().tts.vox_cpm_2.model_dir,hfToken:Z}),o(M,!0)}catch(Z){alert(`Failed to download VoxCPM2 assets: ${Z}`)}finally{o(ke,!1)}}}let Ie=S(!1),Ye=S(!1),Ze=S(!1);async function Ve(){o(Ye,!0);try{o(Ie,await E("check_breeze_tts_2_ready",{modelDir:t().tts.breeze_tts_2.model_dir}),!0)}catch(Z){console.error("check_breeze_tts_2_ready:",Z),o(Ie,!1)}finally{o(Ye,!1)}}async function at(){if(!e(Ze)){o(Ze,!0);try{const Z=t().tts.hf_token;await E("download_breeze_tts_2",{modelDir:t().tts.breeze_tts_2.model_dir,hfToken:Z}),o(Ie,!0)}catch(Z){alert(`Failed to download Breeze-TTS-2 assets: ${Z}`)}finally{o(Ze,!1)}}}let et=S(null);const rt=ce(()=>!!e(et));async function Ee(){r(),o(V,!0);try{t().tts.engine==="vox_cpm_2"?(t(t().tts.vox_cpm_2.voice_mode="clone",!0),o(M,!1),await Ke(),await K()):t().tts.engine==="breeze_tts_2"?(t(t().tts.breeze_tts_2.voice_mode="clone",!0),o(Ie,!1),await Ve(),await K()):t().tts.engine==="pocket_tts"?(o(pe,!1),await K(),await st()):t().tts.engine==="inflect_micro"?(o(he,!1),await U(),await te()):t().tts.engine==="piper"&&(t().tts.voice_dir?await I():await Q())}finally{setTimeout(()=>{o(V,!1)},400)}}qt(async()=>{E("hf_token_env").then(Z=>o(et,Z&&Z.trim()?Z.trim():null,!0)).catch(()=>o(et,null)),t().tts.voice_dir?I():Q(),K(),t().tts.engine==="vox_cpm_2"&&Ke(),t().tts.engine==="breeze_tts_2"&&Ve(),t().tts.engine==="pocket_tts"&&st(),t().tts.engine==="inflect_micro"&&(await U(),te()),f=await ha("tts-playback-start",()=>{e(u)&&(clearInterval(v),o(l,e(c),!0),o(u,!1)),o(ne,!1),o(m,!0)}),h=await ha("tts-playback-end",()=>{o(m,!1),e(ne)&&(clearInterval(v),o(u,!1),o(ne,!1))}),b=await ha("tts-error",Z=>{o(_,Z.payload,!0),clearInterval(v),o(u,!1),o(l,null),o(ne,!1),o(m,!1)})}),ar(()=>{v&&clearInterval(v),f&&f(),h&&h(),b&&b()});var Ge=mf(),ct=i(n(Ge),2),vt=i(n(ct),2),nt=i(n(vt),2),wt=i(vt,2),dt=i(n(wt),2);sa(dt,{get options(){return Ae},onchange:Ee,get value(){return t().tts.engine},set value(Z){t(t().tts.engine=Z,!0)}});var Et=i(wt,2);{var Kt=Z=>{var Le=Rp(),je=ht(Le),Re=i(n(je),2);N("change",Re,r),Xt(Re,()=>t().tts.gpu,Qe=>t(t().tts.gpu=Qe,!0)),d(Z,Le)},ia=Z=>{var Le=Np(),je=ht(Le),Re=i(n(je),2);N("change",Re,r),Xt(Re,()=>t().tts.pocket_tts.gpu,Qe=>t(t().tts.pocket_tts.gpu=Qe,!0)),d(Z,Le)},ra=Z=>{var Le=Vp(),je=ht(Le),Re=i(n(je),2);N("change",Re,r),Xt(Re,()=>t().tts.breeze_tts_2.gpu,Qe=>t(t().tts.breeze_tts_2.gpu=Qe,!0)),d(Z,Le)},bt=Z=>{var Le=Fp(),je=ht(Le),Re=i(n(je),2);N("change",Re,r),Xt(Re,()=>t().tts.vox_cpm_2.gpu,Qe=>t(t().tts.vox_cpm_2.gpu=Qe,!0)),d(Z,Le)};k(Et,Z=>{t().tts.engine==="piper"?Z(Kt):t().tts.engine==="pocket_tts"?Z(ia,1):t().tts.engine==="breeze_tts_2"?Z(ra,2):t().tts.engine==="vox_cpm_2"&&Z(bt,3)})}var ea=i(Et,2),Lt=n(ea),Ht=n(Lt),ta=i(Lt,2),Oe=i(ea,2),qe=n(Oe),G=n(qe),g=i(qe,2);{var P=Z=>{var Le=Bp(),je=i(n(Le),2);let Re;var Qe=n(je);w(()=>{Re=Te(je,1,"run-speed-value svelte-1q9seip",null,Re,{counting:e(u)}),y(Qe,e(u)?`${e(c)} ms`:`${e(l)} ms`)}),d(Z,Le)};k(g,Z=>{(e(u)||e(l)!==null)&&Z(P)})}var Me=i(Oe,2);{var Ue=Z=>{var Le=qp(),je=n(Le);w(()=>{var Re;return y(je,`❌ ${(Re=e(_))!=null?Re:""}`)}),d(Z,Le)};k(Me,Z=>{e(_)&&Z(Ue)})}var ie=i(Me,2);{var xe=Z=>{var Le=jp(),je=n(Le);w(Re=>y(je,`Test TTS unavailable: ${Re!=null?Re:""}`),[()=>oe()]),d(Z,Le)},Ce=ce(()=>!e(_)&&R()&&oe());k(ie,Z=>{e(Ce)&&Z(xe)})}var He=i(ct,2);{var Xe=Z=>{var Le=$p(),je=i(n(Le),2),Re=i(n(je),2);sa(Re,{get options(){return e(le)},onchange:ee,get value(){return t().tts.voice},set value(Ut){t(t().tts.voice=Ut,!0)}});var Qe=i(je,2),Jt=n(Qe);{var Gt=Ut=>{var Mt=Up();d(Ut,Mt)},ka=Ut=>{var Mt=Kp(),kt=n(Mt);w(()=>{var aa;return y(kt,`⏳ Downloading ${(aa=t().tts.voice)!=null?aa:""} (model + config)...`)}),d(Ut,Mt)},xa=Ut=>{var Mt=Hp(),kt=n(Mt),aa=n(kt),Da=i(kt,2),Ua=n(Da);w(()=>{Te(kt,1,Ia(e(T)[t().tts.voice]?"status-downloaded":"status-missing"),"svelte-1q9seip"),y(aa,e(T)[t().tts.voice]?"✔ Voice downloaded and ready":"❌ Voice files missing"),Da.disabled=e(T)[t().tts.voice]||e(se),y(Ua,e(T)[t().tts.voice]?"Downloaded":"📥 Download")}),N("click",Da,()=>z(t().tts.voice)),d(Ut,Mt)};k(Jt,Ut=>{e(D)?Ut(Gt):e(se)?Ut(ka,1):Ut(xa,-1)})}var Ta=i(Qe,2),la=i(n(Ta),2);let _a;var Pa=i(la,2);{var Ca=Ut=>{var Mt=Wp(),kt=n(Mt);w(()=>y(kt,e(fe))),d(Ut,Mt)};k(Pa,Ut=>{e(fe)&&Ut(Ca)})}w(()=>_a=Te(la,1,"svelte-1q9seip",null,_a,{"field-input-error":!!e(fe)})),N("change",la,L),xs("blur",la,I),N("keydown",la,ge),We(la,()=>t().tts.voice_dir,Ut=>t(t().tts.voice_dir=Ut,!0)),d(Z,Le)};k(He,Z=>{t().tts.engine==="piper"&&Z(Xe)})}var Dt=i(He,2);{var zt=Z=>{var Le=Zp(),je=i(n(Le),6),Re=i(n(je),2);sa(Re,{get options(){return e(W)},defaultToFirst:!0,onchange:r,get value(){return t().tts.vox_cpm_2.cloned_voice},set value(Rt){t(t().tts.vox_cpm_2.cloned_voice=Rt,!0)}});var Qe=i(je,2),Jt=i(n(Qe),2),Gt=i(Qe,4),ka=i(n(Gt),2),xa=i(Gt,4),Ta=n(xa);{var la=Rt=>{var Ja=Gp();d(Rt,Ja)},_a=Rt=>{var Ja=Yp();d(Rt,Ja)},Pa=Rt=>{var Ja=Jp(),Bn=n(Ja),rr=n(Bn),Nt=i(Bn,2),za=n(Nt);w(()=>{Te(Bn,1,Ia(e(M)?"status-downloaded":"status-missing"),"svelte-1q9seip"),y(rr,e(M)?"✔ Model weights downloaded and ready":"❌ Model files missing"),Nt.disabled=e(M)||e(ke),y(za,e(M)?"Downloaded":"📥 Download")}),N("click",Nt,ye),d(Rt,Ja)};k(Ta,Rt=>{e(C)?Rt(la):e(ke)?Rt(_a,1):Rt(Pa,-1)})}var Ca=i(xa,2),Ut=i(n(Ca),5);{var Mt=Rt=>{var Ja=Xp();d(Rt,Ja)};k(Ut,Rt=>{e(rt)&&Rt(Mt)})}var kt=i(Ca,2),aa=i(n(kt),2),Da=i(kt,4),Ua=i(n(Da),2);N("change",Jt,()=>{r(),J(t().tts.vox_cpm_2.voice_dir)}),We(Jt,()=>t().tts.vox_cpm_2.voice_dir,Rt=>t(t().tts.vox_cpm_2.voice_dir=Rt,!0)),N("change",ka,r),Xt(ka,()=>t().tts.vox_cpm_2.ultimate_cloning,Rt=>t(t().tts.vox_cpm_2.ultimate_cloning=Rt,!0)),N("change",aa,r),We(aa,()=>t().tts.vox_cpm_2.model_dir,Rt=>t(t().tts.vox_cpm_2.model_dir=Rt,!0)),N("change",Ua,r),Xt(Ua,()=>t().tts.vox_cpm_2.prewarm,Rt=>t(t().tts.vox_cpm_2.prewarm=Rt,!0)),d(Z,Le)};k(Dt,Z=>{t().tts.engine==="vox_cpm_2"&&Z(zt)})}var Ft=i(Dt,2);{var Wt=Z=>{var Le=af(),je=i(n(Le),6),Re=i(n(je),2);sa(Re,{get options(){return e(W)},defaultToFirst:!0,onchange:r,get value(){return t().tts.breeze_tts_2.cloned_voice},set value(Mt){t(t().tts.breeze_tts_2.cloned_voice=Mt,!0)}});var Qe=i(je,2),Jt=i(n(Qe),2),Gt=i(Qe,6),ka=n(Gt);{var xa=Mt=>{var kt=Qp();d(Mt,kt)},Ta=Mt=>{var kt=ef();d(Mt,kt)},la=Mt=>{var kt=tf(),aa=n(kt),Da=n(aa),Ua=i(aa,2),Rt=n(Ua);w(()=>{Te(aa,1,Ia(e(Ie)?"status-downloaded":"status-missing"),"svelte-1q9seip"),y(Da,e(Ie)?"✔ Model weights downloaded and ready":"❌ Model files missing"),Ua.disabled=e(Ie)||e(Ze),y(Rt,e(Ie)?"Downloaded":"📥 Download")}),N("click",Ua,at),d(Mt,kt)};k(ka,Mt=>{e(Ye)?Mt(xa):e(Ze)?Mt(Ta,1):Mt(la,-1)})}var _a=i(Gt,4),Pa=i(n(_a),2),Ca=i(_a,4),Ut=i(n(Ca),2);N("change",Jt,()=>{r(),J(t().tts.breeze_tts_2.voice_dir)}),We(Jt,()=>t().tts.breeze_tts_2.voice_dir,Mt=>t(t().tts.breeze_tts_2.voice_dir=Mt,!0)),N("change",Pa,r),We(Pa,()=>t().tts.breeze_tts_2.model_dir,Mt=>t(t().tts.breeze_tts_2.model_dir=Mt,!0)),N("change",Ut,r),Xt(Ut,()=>t().tts.breeze_tts_2.prewarm,Mt=>t(t().tts.breeze_tts_2.prewarm=Mt,!0)),d(Z,Le)};k(Ft,Z=>{t().tts.engine==="breeze_tts_2"&&Z(Wt)})}var $t=i(Ft,2);{var fa=Z=>{var Le=of(),je=i(n(Le),2),Re=i(n(je),2);sa(Re,{get options(){return e(W)},defaultToFirst:!0,onchange:H,get value(){return t().tts.pocket_tts.voice},set value(kt){t(t().tts.pocket_tts.voice=kt,!0)}});var Qe=i(je,2),Jt=n(Qe);{var Gt=kt=>{var aa=sf();d(kt,aa)},ka=kt=>{var aa=nf();d(kt,aa)},xa=kt=>{var aa=rf(),Da=n(aa),Ua=n(Da),Rt=i(Da,2),Ja=n(Rt);w(()=>{Te(Da,1,Ia(e(pe)?"status-downloaded":"status-missing"),"svelte-1q9seip"),y(Ua,e(pe)?"✔ Model and voice clip downloaded and ready":"❌ Model files missing"),Rt.disabled=e(pe)||e($e),y(Ja,e(pe)?"Downloaded":"📥 Download")}),N("click",Rt,it),d(kt,aa)};k(Jt,kt=>{e(ze)?kt(Gt):e($e)?kt(ka,1):kt(xa,-1)})}var Ta=i(Qe,4),la=i(n(Ta),2);let _a;var Pa=i(la,2);{var Ca=kt=>{var aa=lf(),Da=n(aa);w(()=>y(Da,e(be))),d(kt,aa)};k(Pa,kt=>{e(be)&&kt(Ca)})}var Ut=i(Ta,4),Mt=i(n(Ut),2);w(()=>_a=Te(la,1,"svelte-1q9seip",null,_a,{"field-input-error":!!e(be)})),N("change",la,Se),xs("blur",la,J),N("keydown",la,De),We(la,()=>t().tts.pocket_tts.voice_dir,kt=>t(t().tts.pocket_tts.voice_dir=kt,!0)),N("change",Mt,r),Xt(Mt,()=>t().tts.pocket_tts.prewarm,kt=>t(t().tts.pocket_tts.prewarm=kt,!0)),d(Z,Le)};k($t,Z=>{t().tts.engine==="pocket_tts"&&Z(fa)})}var Yt=i($t,2);{var ma=Z=>{var Le=_f(),je=i(n(Le),4);{var Re=Nt=>{var za=cf();d(Nt,za)};k(je,Nt=>{e(Fe)||Nt(Re)})}var Qe=i(je,2),Jt=n(Qe);{var Gt=Nt=>{var za=df();d(Nt,za)},ka=Nt=>{var za=vf();d(Nt,za)},xa=Nt=>{var za=uf(),Hs=n(za),Ti=n(Hs),lr=i(Hs,2),Wo=n(lr);w(()=>{Te(Hs,1,Ia(e(he)?"status-downloaded":"status-missing"),"svelte-1q9seip"),y(Ti,e(he)?"✔ Model downloaded and ready":"❌ Model files missing"),lr.disabled=e(he)||e(we),y(Wo,e(he)?"Downloaded":"📥 Download")}),N("click",lr,Y),d(Nt,za)};k(Jt,Nt=>{e(re)?Nt(Gt):e(we)?Nt(ka,1):Nt(xa,-1)})}var Ta=i(Qe,2);{var la=Nt=>{var za=pf(),Hs=n(za);w(()=>{var Ti;return y(Hs,`❌ ${(Ti=e($))!=null?Ti:""}`)}),d(Nt,za)};k(Ta,Nt=>{e($)&&Nt(la)})}var _a=i(Ta,2),Pa=i(n(_a),2),Ca=i(_a,4),Ut=i(n(Ca),2),Mt=i(Ca,4),kt=i(n(Mt),2),aa=i(Mt,4),Da=i(n(aa),2),Ua=i(aa,4),Rt=i(n(Ua),2),Ja=n(Rt),Bn=i(Ua,4);{var rr=Nt=>{var za=ff(),Hs=n(za);w(()=>y(Hs,e(Je))),d(Nt,za)};k(Bn,Nt=>{e(Je)&&Nt(rr)})}w(()=>{Rt.disabled=!e(he)||e(de),y(Ja,e(de)?"Inspecting...":"🔍 Inspect graphs")}),N("change",Pa,me),We(Pa,()=>t().tts.inflect_micro.seed,Nt=>t(t().tts.inflect_micro.seed=Nt,!0)),N("change",Ut,me),We(Ut,()=>t().tts.inflect_micro.noise_scale,Nt=>t(t().tts.inflect_micro.noise_scale=Nt,!0)),N("change",kt,me),Xt(kt,()=>t().tts.inflect_micro.prewarm,Nt=>t(t().tts.inflect_micro.prewarm=Nt,!0)),N("change",Da,me),We(Da,()=>t().tts.inflect_micro.model_dir,Nt=>t(t().tts.inflect_micro.model_dir=Nt,!0)),N("click",Rt,_e),d(Z,Le)};k(Yt,Z=>{t().tts.engine==="inflect_micro"&&Z(ma)})}var Oa=i(Yt,2),Ya=i(n(Oa),2),tt=i(n(Ya),2);sa(tt,{get options(){return ae},onchange:X,get value(){return t().tts.memory_mode},set value(Z){t(t().tts.memory_mode=Z,!0)}});var gt=i(Ya,2);{var It=Z=>{var Le=hf(),je=ht(Le),Re=i(n(je),2),Qe=i(je,2),Jt=n(Qe);w(()=>{var Gt;sr(Re,e(O)),y(Jt,`The model is loaded the moment VoxCtrl knows it will be needed — as soon as you start dictating to a target that speaks — and stays primed while you keep using it. The - countdown restarts on every use, so it only unloads after ${(Kt=e(O))!=null?Kt:""} + countdown restarts on every use, so it only unloads after ${(Gt=e(O))!=null?Gt:""} ${e(O)===1?"minute":"minutes"} of no speech. The first reply after an - unload takes a few seconds longer while the model loads again.`)}),N("change",Le,ve),d(Z,Re)},ut=Z=>{var Re=_f();d(Z,Re)};k(gt,Z=>{t().tts.memory_mode==="on_demand"?Z(It):Z(ut,-1)})}var Mt=i(Oa,2),jt=i(n(Mt),2),wa=i(n(jt),2),oa=i(jt,2),Ra=i(n(oa),4);Op(Ra,{onchange:r,get keys(){return t().tts.stop_key},set keys(Z){t(t().tts.stop_key=Z,!0)}});var ja=i(Mt,2);jo(ja,{class:"mt-6",onchange:r,title:"TTS Snippets (Pronunciation Guide)",hint:'Type a word (e.g. "voxctrl") ➔ its spoken expansion/pronunciation (e.g. "vox control"). Only affects speech playback.',addLabel:"Add Pronunciation",keyPlaceholder:"Word / Abbreviation",valuePlaceholder:"Spoken pronunciation",emptyText:"No pronunciation snippets defined.",get value(){return t().tts.snippets},set value(Z){t(t().tts.snippets=Z,!0)}}),w((Z,Re,je)=>{y(Ht,`Speed (${Z!=null?Z:""}×)`),qe.disabled=Re,mt(qe,"title",je),y(K,e(ne)?"Speaking...":e(m)?"⏹ Stop & Test":"Test TTS")},[()=>t().tts.speed.toFixed(2),()=>L(),()=>{var Z;return(Z=oe())!=null?Z:"Speak a test phrase"}]),N("change",nt,r),Xt(nt,()=>t().tts.enabled,Z=>t(t().tts.enabled=Z,!0)),N("change",ta,r),$e(ta,()=>t().tts.speed,Z=>t(t().tts.speed=Z,!0)),N("click",qe,j),N("change",wa,r),Xt(wa,()=>t().tts.response_overlay,Z=>t(t().tts.response_overlay=Z,!0)),d(s,Ke),St()}Qt(["change","click","keydown"]);var bf=p(''),yf=p(`⚠️ The model isn't available on this server. Post-processing will fail with a 404 — pick a model from the list above or pull it on the server.`),wf=p(" "),kf=p('Select the Custom preset to edit the system and user prompts.'),xf=p('⚠️ The user prompt must contain the placeholder.'),Tf=p('Use where your dictated speech should be inserted.'),Sf=p(`

            OpenAI API LLM Post-Processing

            Connect to any OpenAI-compatible API server — a local server or a hosted + unload takes a few seconds longer while the model loads again.`)}),N("change",Re,ve),d(Z,Le)},ut=Z=>{var Le=gf();d(Z,Le)};k(gt,Z=>{t().tts.memory_mode==="on_demand"?Z(It):Z(ut,-1)})}var At=i(Oa,2),jt=i(n(At),2),wa=i(n(jt),2),oa=i(jt,2),La=i(n(oa),4);Lp(La,{onchange:r,get keys(){return t().tts.stop_key},set keys(Z){t(t().tts.stop_key=Z,!0)}});var ja=i(At,2);jo(ja,{class:"mt-6",onchange:r,title:"TTS Snippets (Pronunciation Guide)",hint:'Type a word (e.g. "voxctrl") ➔ its spoken expansion/pronunciation (e.g. "vox control"). Only affects speech playback.',addLabel:"Add Pronunciation",keyPlaceholder:"Word / Abbreviation",valuePlaceholder:"Spoken pronunciation",emptyText:"No pronunciation snippets defined.",get value(){return t().tts.snippets},set value(Z){t(t().tts.snippets=Z,!0)}}),w((Z,Le,je)=>{y(Ht,`Speed (${Z!=null?Z:""}×)`),qe.disabled=Le,mt(qe,"title",je),y(G,e(ne)?"Speaking...":e(m)?"⏹ Stop & Test":"Test TTS")},[()=>t().tts.speed.toFixed(2),()=>R(),()=>{var Z;return(Z=oe())!=null?Z:"Speak a test phrase"}]),N("change",nt,r),Xt(nt,()=>t().tts.enabled,Z=>t(t().tts.enabled=Z,!0)),N("change",ta,r),We(ta,()=>t().tts.speed,Z=>t(t().tts.speed=Z,!0)),N("click",qe,j),N("change",wa,r),Xt(wa,()=>t().tts.response_overlay,Z=>t(t().tts.response_overlay=Z,!0)),d(s,Ge),St()}Qt(["change","click","keydown"]);var yf=p(''),wf=p(`⚠️ The model isn't available on this server. Post-processing will fail with a 404 — pick a model from the list above or pull it on the server.`),kf=p(" "),xf=p('Select the Custom preset to edit the system and user prompts.'),Tf=p('⚠️ The user prompt must contain the placeholder.'),Sf=p('Use where your dictated speech should be inserted.'),Ef=p(`

            OpenAI API LLM Post-Processing

            Connect to any OpenAI-compatible API server — a local server or a hosted provider. The URL defaults to a local server; point it anywhere you like and supply an API key when the server requires one.

            Connection

            Default Prompts

            The system prompt tells the model how to transform your speech. The user prompt is the message sent to the model — it must contain , which is replaced with whatever you dictate. Built-in presets are read-only; choose Custom to edit the - prompts yourself.

            System Prompt
            User Prompt
            `);function Cf(s,a){Tt(a,!0);let t=Et(a,"cfg",15);function r(){Ot.set(t()),Ss.set(!0)}let l=S(!1),c=S(null),u=S(yt([])),v=ce(()=>[...e(u).map(_e=>({value:_e,label:_e})),...t().openai.model&&!e(u).includes(t().openai.model)?[{value:t().openai.model,label:`${t().openai.model} (not found)`}]:[]]);const f=[{value:"clean",label:"Clean (grammar fix)"},{value:"formal",label:"Formal"},{value:"casual",label:"Casual"},{value:"bullet",label:"Bullet points"},{value:"concise",label:"Concise (summarize)"},{value:"custom",label:"Custom (editable)"}],_={clean:"Fix grammar and punctuation only. Return only the corrected text, no commentary.",formal:"Rewrite the user's text in formal professional language. Return only the result.",casual:"Rewrite the user's text in casual conversational language. Return only the result.",bullet:"Convert the user's text to a bullet-point list. Return only the list.",concise:"Summarize the user's text concisely in 1-2 sentences. Return only the summary."};let b=ce(()=>t().openai.mode==="custom");function m(){const _e=_[t().openai.mode];_e!==void 0&&(t(t().openai.system_prompt=_e,!0),t(t().openai.user_prompt="{text}",!0)),r()}let h=ce(()=>t().openai.user_prompt.includes("{text}")),x=ce(()=>e(u).length>0&&!!t().openai.model&&!e(u).includes(t().openai.model));async function M(){o(l,!0),o(c,null);try{const _e=await C("test_openai",{endpoint:t().openai.endpoint,apiKey:t().openai.api_key,timeoutSecs:t().openai.timeout_secs});o(c,{success:_e.success,message:_e.message},!0),_e.success&&(o(u,_e.models,!0),!t().openai.model&&_e.models.length>0&&(t(t().openai.model=_e.models[0],!0),r()))}catch(_e){o(c,{success:!1,message:_e.toString()},!0)}finally{o(l,!1)}}qt(()=>{M()});var q=Sf(),T=i(n(q),4),z=i(n(T),2),se=i(n(z),2),ne=i(z,2),fe=i(n(ne),2),Q=i(ne,2),D=i(n(Q),2);{var I=_e=>{sa(_e,{get options(){return e(v)},onchange:r,get value(){return t().openai.model},set value(re){t(t().openai.model=re,!0)}})},R=_e=>{var re=bf();N("change",re,r),$e(re,()=>t().openai.model,we=>t(t().openai.model=we,!0)),d(_e,re)};k(D,_e=>{e(u).length>0?_e(I):_e(R,-1)})}var ge=i(Q,2);{var ee=_e=>{var re=yf(),we=i(n(re)),Je=n(we);w(()=>y(Je,t().openai.model)),d(_e,re)};k(ge,_e=>{e(x)&&_e(ee)})}var j=i(ge,2),V=i(n(j),2),oe=i(j,2),L=n(oe),B=n(L),be=i(L,2);{var Pe=_e=>{var re=wf(),we=n(re);w(()=>{Te(re,1,`status-msg ${e(c).success?"success":"error"}`,"svelte-1bvctpo"),y(we,e(c).message)}),d(_e,re)};k(be,_e=>{e(c)&&_e(Pe)})}var ue=i(T,2),W=i(n(ue),2),J=i(n(W));J.textContent="{text}";var Se=i(W,2),ze=i(n(Se),2);sa(ze,{get options(){return f},onchange:m,get value(){return t().openai.mode},set value(_e){t(t().openai.mode=_e,!0)}});var le=i(Se,2),$=i(n(le),2),ae=i(le,2),O=i(n(ae),2);mt(O,"placeholder","{text}");var X=i(O,2);{var ve=_e=>{var re=kf();d(_e,re)},Me=_e=>{var re=xf(),we=i(n(re));we.textContent="{text}",d(_e,re)},Fe=_e=>{var re=Tf(),we=i(n(re));we.textContent="{text}",d(_e,re)};k(X,_e=>{e(b)?e(h)?_e(Fe,-1):_e(Me,1):_e(ve)})}w(()=>{L.disabled=e(l),y(B,e(l)?"⏳ Testing...":"🔌 Test Connection"),$.readOnly=!e(b),Te($,1,Ia(e(b)?"":"locked"),"svelte-1bvctpo"),O.readOnly=!e(b),Te(O,1,Ia(e(b)?e(h)?"":"invalid":"locked"),"svelte-1bvctpo")}),N("change",se,r),$e(se,()=>t().openai.endpoint,_e=>t(t().openai.endpoint=_e,!0)),N("change",fe,r),$e(fe,()=>t().openai.api_key,_e=>t(t().openai.api_key=_e,!0)),N("change",V,r),$e(V,()=>t().openai.timeout_secs,_e=>t(t().openai.timeout_secs=_e,!0)),N("click",L,M),N("change",$,r),$e($,()=>t().openai.system_prompt,_e=>t(t().openai.system_prompt=_e,!0)),N("change",O,r),$e(O,()=>t().openai.user_prompt,_e=>t(t().openai.user_prompt=_e,!0)),d(s,q),St()}Qt(["change","click"]);var Ef=p(' '),Mf=p('⏳ Downloading'),Af=p('Missing'),Pf=p('⏳ Checking S1-mini model files...'),zf=p('⏳ Downloading S1-mini model (s1-mini-q4_k_m.gguf & tokenizer.json)...'),Df=p(' '),If=p('
            ❌ Model files missing
            '),Of=p('
            ',1),Rf=p('

            These features are covered by S1-mini when enabled.

            '),Lf=p(`

            Post-Processing

            S1-mini Dictation Cleanup

            Note: S1-Mini is a ~480 MB download.

            Basic Text Cleanup

            Voice Commands

            Transcribes the first few seconds of each recording early, so a command like + prompts yourself.

            System Prompt
            User Prompt
            `);function Cf(s,a){Tt(a,!0);let t=Ct(a,"cfg",15);function r(){Ot.set(t()),Ss.set(!0)}let l=S(!1),c=S(null),u=S(yt([])),v=ce(()=>[...e(u).map(he=>({value:he,label:he})),...t().openai.model&&!e(u).includes(t().openai.model)?[{value:t().openai.model,label:`${t().openai.model} (not found)`}]:[]]);const f=[{value:"clean",label:"Clean (grammar fix)"},{value:"formal",label:"Formal"},{value:"casual",label:"Casual"},{value:"bullet",label:"Bullet points"},{value:"concise",label:"Concise (summarize)"},{value:"custom",label:"Custom (editable)"}],h={clean:"Fix grammar and punctuation only. Return only the corrected text, no commentary.",formal:"Rewrite the user's text in formal professional language. Return only the result.",casual:"Rewrite the user's text in casual conversational language. Return only the result.",bullet:"Convert the user's text to a bullet-point list. Return only the list.",concise:"Summarize the user's text concisely in 1-2 sentences. Return only the summary."};let b=ce(()=>t().openai.mode==="custom");function m(){const he=h[t().openai.mode];he!==void 0&&(t(t().openai.system_prompt=he,!0),t(t().openai.user_prompt="{text}",!0)),r()}let _=ce(()=>t().openai.user_prompt.includes("{text}")),x=ce(()=>e(u).length>0&&!!t().openai.model&&!e(u).includes(t().openai.model));async function A(){o(l,!0),o(c,null);try{const he=await E("test_openai",{endpoint:t().openai.endpoint,apiKey:t().openai.api_key,timeoutSecs:t().openai.timeout_secs});o(c,{success:he.success,message:he.message},!0),he.success&&(o(u,he.models,!0),!t().openai.model&&he.models.length>0&&(t(t().openai.model=he.models[0],!0),r()))}catch(he){o(c,{success:!1,message:he.toString()},!0)}finally{o(l,!1)}}qt(()=>{A()});var q=Ef(),T=i(n(q),4),D=i(n(T),2),se=i(n(D),2),ne=i(D,2),fe=i(n(ne),2),Q=i(ne,2),z=i(n(Q),2);{var I=he=>{sa(he,{get options(){return e(v)},onchange:r,get value(){return t().openai.model},set value(re){t(t().openai.model=re,!0)}})},L=he=>{var re=yf();N("change",re,r),We(re,()=>t().openai.model,we=>t(t().openai.model=we,!0)),d(he,re)};k(z,he=>{e(u).length>0?he(I):he(L,-1)})}var ge=i(Q,2);{var ee=he=>{var re=wf(),we=i(n(re)),Je=n(we);w(()=>y(Je,t().openai.model)),d(he,re)};k(ge,he=>{e(x)&&he(ee)})}var j=i(ge,2),V=i(n(j),2),oe=i(j,2),R=n(oe),B=n(R),be=i(R,2);{var Pe=he=>{var re=kf(),we=n(re);w(()=>{Te(re,1,`status-msg ${e(c).success?"success":"error"}`,"svelte-1bvctpo"),y(we,e(c).message)}),d(he,re)};k(be,he=>{e(c)&&he(Pe)})}var ue=i(T,2),K=i(n(ue),2),J=i(n(K));J.textContent="{text}";var Se=i(K,2),De=i(n(Se),2);sa(De,{get options(){return f},onchange:m,get value(){return t().openai.mode},set value(he){t(t().openai.mode=he,!0)}});var le=i(Se,2),W=i(n(le),2),ae=i(le,2),O=i(n(ae),2);mt(O,"placeholder","{text}");var X=i(O,2);{var ve=he=>{var re=xf();d(he,re)},Ae=he=>{var re=Tf(),we=i(n(re));we.textContent="{text}",d(he,re)},Fe=he=>{var re=Sf(),we=i(n(re));we.textContent="{text}",d(he,re)};k(X,he=>{e(b)?e(_)?he(Fe,-1):he(Ae,1):he(ve)})}w(()=>{R.disabled=e(l),y(B,e(l)?"⏳ Testing...":"🔌 Test Connection"),W.readOnly=!e(b),Te(W,1,Ia(e(b)?"":"locked"),"svelte-1bvctpo"),O.readOnly=!e(b),Te(O,1,Ia(e(b)?e(_)?"":"invalid":"locked"),"svelte-1bvctpo")}),N("change",se,r),We(se,()=>t().openai.endpoint,he=>t(t().openai.endpoint=he,!0)),N("change",fe,r),We(fe,()=>t().openai.api_key,he=>t(t().openai.api_key=he,!0)),N("change",V,r),We(V,()=>t().openai.timeout_secs,he=>t(t().openai.timeout_secs=he,!0)),N("click",R,A),N("change",W,r),We(W,()=>t().openai.system_prompt,he=>t(t().openai.system_prompt=he,!0)),N("change",O,r),We(O,()=>t().openai.user_prompt,he=>t(t().openai.user_prompt=he,!0)),d(s,q),St()}Qt(["change","click"]);var Af=p(' '),Mf=p('⏳ Downloading'),Pf=p('Missing'),Df=p('⏳ Checking S1-mini model files...'),zf=p('⏳ Downloading S1-mini model (s1-mini-q4_k_m.gguf & tokenizer.json)...'),If=p(' '),Of=p('
            ❌ Model files missing
            '),Lf=p('
            ',1),Rf=p('

            These features are covered by S1-mini when enabled.

            '),Nf=p(`

            Post-Processing

            S1-mini Dictation Cleanup

            Note: S1-Mini is a ~480 MB download.

            Basic Text Cleanup

            Voice Commands

            Transcribes the first few seconds of each recording early, so a command like “Hey Vox, say …” shows its overlay and starts loading the voice before you let go of the hotkey. Where the text goes is still decided by the full transcript. Turn - this off to save the extra transcription work.

            Custom Dictionary

            Provide a comma-separated list of words (e.g. names or jargon like "Waylin, Rufer, Enola, Kenz") that are hard to spell. The transcription process will correct these in the final text.

            `);function Nf(s,a){Tt(a,!0);let t=Et(a,"cfg",15);t().engine&&!t().engine.s1_mini&&t(t().engine.s1_mini={enabled:!1,styling:"semi-formal"},!0);function r(){Ot.set(t()),Ss.set(!0)}let l=S(!1),c=S(!1),u=S(!1),v=S(null);const f={cuda:"CUDA (NVIDIA)",vulkan:"Vulkan (AMD/Intel/NVIDIA)",coreml:"CoreML (Apple)",webgpu:"WebGPU (AMD/Intel/NVIDIA)"},_=ve=>{var Me;return(Me=f[ve])!=null?Me:ve};function b(){t().engine.s1_mini||t(t().engine.s1_mini={enabled:!1,styling:"semi-formal"},!0)}async function m(){o(c,!0);try{o(l,await C("check_s1_mini_downloaded"),!0)}catch(ve){console.error("Failed to check S1-mini download status",ve),o(l,!1)}finally{o(c,!1)}}async function h(){if(!e(u)){o(u,!0);try{await C("download_s1_mini_model"),o(l,!0)}catch(ve){alert(`Failed to download S1-mini model: ${ve}`)}finally{o(u,!1)}}}async function x(){b(),r(),t().engine.s1_mini.enabled&&!e(l)&&await h()}let M=ce(()=>{var ve;return!!((ve=t().engine.s1_mini)!=null&&ve.enabled)});qt(async()=>{var ve;b(),m();try{const Me=await C("accelerator_support");o(v,(ve=Me.s1_mini_gpu)!=null?ve:null,!0)}catch(Me){console.error("Failed to query GPU support",Me)}});let q=ce(()=>t().features.custom_vocabulary?t().features.custom_vocabulary.join(", "):"");function T(ve){const Me=ve.target;t(t().features.custom_vocabulary=Me.value.split(",").map(Fe=>Fe.trim()).filter(Fe=>Fe.length>0),!0),r()}var z=Lf(),se=i(n(z),2),ne=n(se),fe=i(n(ne),2);{var Q=ve=>{var Me=Ef(),Fe=n(Me);w(_e=>y(Fe,`✔ Ready ${_e!=null?_e:""}`),[()=>e(v)?`(${_(e(v))})`:"(CPU)"]),d(ve,Me)},D=ve=>{var Me=Mf();d(ve,Me)},I=ve=>{var Me=Af();d(ve,Me)};k(fe,ve=>{e(l)?ve(Q):e(u)?ve(D,1):e(M)&&ve(I,2)})}var R=i(ne,2),ge=i(n(R),2),ee=i(R,4);{var j=ve=>{var Me=Of(),Fe=_t(Me),_e=n(Fe);{var re=te=>{var Y=Pf();d(te,Y)},we=te=>{var Y=zf();d(te,Y)},Je=te=>{var Y=Df(),he=n(Y);w(me=>y(he,`✔ Model downloaded and ready ${me!=null?me:""}`),[()=>e(v)?`(${_(e(v))} GPU accelerated)`:"on CPU"]),d(te,Y)},de=te=>{var Y=If(),he=i(n(Y),2);N("click",he,h),d(te,Y)};k(_e,te=>{e(c)?te(re):e(u)?te(we,1):e(l)?te(Je,2):te(de,-1)})}var G=i(Fe,2),U=i(n(G),2);sa(U,{options:[{value:"semi-formal",label:"Semi-formal (Default)"},{value:"casual",label:"Casual"},{value:"formal",label:"Formal"},{value:"verbatim",label:"Verbatim"},{value:"concise",label:"Concise"}],onchange:r,get value(){return t().engine.s1_mini.styling},set value(te){t(t().engine.s1_mini.styling=te,!0)}}),d(ve,Me)};k(ee,ve=>{e(M)&&ve(j)})}var V=i(se,2);let oe;var L=i(n(V),2);{var B=ve=>{var Me=Rf();d(ve,Me)};k(L,ve=>{e(M)&&ve(B)})}var be=i(L,2),Pe=i(n(be),2),ue=i(be,2),W=i(n(ue),2),J=i(ue,2),Se=i(n(J),2),ze=i(V,2),le=i(n(ze),2),$=i(n(le),2),ae=i(ze,2),O=i(n(ae),4);Fs(O,ve=>ua==null?void 0:ua(ve));var X=i(ae,2);jo(X,{onchange:r,title:"Snippets",hint:"Type a trigger word → it expands to the replacement text.",addLabel:"Add Snippet",keyPlaceholder:"Trigger word",valuePlaceholder:"Expansion text",emptyText:"No snippets defined.",get value(){return t().features.snippets},set value(ve){t(t().features.snippets=ve,!0)}}),w(()=>{oe=Te(V,1,"field-group svelte-1s1a8xn",null,oe,{"disabled-section":e(M)}),Pe.disabled=e(M),W.disabled=e(M),Se.disabled=e(M),sr(O,e(q))}),N("change",ge,x),Xt(ge,()=>t().engine.s1_mini.enabled,ve=>t(t().engine.s1_mini.enabled=ve,!0)),N("change",Pe,r),Xt(Pe,()=>t().features.remove_fillers,ve=>t(t().features.remove_fillers=ve,!0)),N("change",W,r),Xt(W,()=>t().features.spoken_punctuation,ve=>t(t().features.spoken_punctuation=ve,!0)),N("change",Se,r),Xt(Se,()=>t().features.auto_format_lists,ve=>t(t().features.auto_format_lists=ve,!0)),N("change",$,r),Xt($,()=>t().features.early_command_detection,ve=>t(t().features.early_command_detection=ve,!0)),N("input",O,T),d(s,z),St()}Qt(["change","click","input"]);async function Uo(s,a){await C("plugin:shell|open",{path:s,with:a})}async function Vf(s={}){return typeof s=="object"&&Object.freeze(s),await C("plugin:dialog|save",{options:s})}var Ff=p(""),Bf=p(""),qf=p('
            '),jf=p('
            '),Uf=p(''),Wf=p('

            Building the report…

            '),Hf=p('
             
            '),$f=p('

            Title: · Report ID

            ',1),Gf=p('

            Fill in the summary and description above and the finished report appears here.

            '),Kf=p(''),Yf=p(''),Jf=p(''),Xf=p(''),Zf=p('
            '),Qf=p('
            '),eh=p("Send report files it for you — no GitHub account needed.",1),th=p("This build has no automatic submission set up, so the routes below are the ones to use. Submit bug report opens the pre-filled issue form on GitHub and copies the report to your clipboard so you can submit directly.",1),ah=p('
            Saved to
            '),sh=p(''),nh=p("
            "),ih=p(`

            Report a Bug

            VoxCtrl 0.5.0 added a Windows build, and a Windows GPU build is on its way. Neither has been + this off to save the extra transcription work.

            Custom Dictionary

            Provide a comma-separated list of words (e.g. names or jargon like "Waylin, Rufer, Enola, Kenz") that are hard to spell. The transcription process will correct these in the final text.

            `);function Vf(s,a){Tt(a,!0);let t=Ct(a,"cfg",15);t().engine&&!t().engine.s1_mini&&t(t().engine.s1_mini={enabled:!1,styling:"semi-formal"},!0);function r(){Ot.set(t()),Ss.set(!0)}let l=S(!1),c=S(!1),u=S(!1),v=S(null);const f={cuda:"CUDA (NVIDIA)",vulkan:"Vulkan (AMD/Intel/NVIDIA)",coreml:"CoreML (Apple)",webgpu:"WebGPU (AMD/Intel/NVIDIA)"},h=ve=>{var Ae;return(Ae=f[ve])!=null?Ae:ve};function b(){t().engine.s1_mini||t(t().engine.s1_mini={enabled:!1,styling:"semi-formal"},!0)}async function m(){o(c,!0);try{o(l,await E("check_s1_mini_downloaded"),!0)}catch(ve){console.error("Failed to check S1-mini download status",ve),o(l,!1)}finally{o(c,!1)}}async function _(){if(!e(u)){o(u,!0);try{await E("download_s1_mini_model"),o(l,!0)}catch(ve){alert(`Failed to download S1-mini model: ${ve}`)}finally{o(u,!1)}}}async function x(){b(),r(),t().engine.s1_mini.enabled&&!e(l)&&await _()}let A=ce(()=>{var ve;return!!((ve=t().engine.s1_mini)!=null&&ve.enabled)});qt(async()=>{var ve;b(),m();try{const Ae=await E("accelerator_support");o(v,(ve=Ae.s1_mini_gpu)!=null?ve:null,!0)}catch(Ae){console.error("Failed to query GPU support",Ae)}});let q=ce(()=>t().features.custom_vocabulary?t().features.custom_vocabulary.join(", "):"");function T(ve){const Ae=ve.target;t(t().features.custom_vocabulary=Ae.value.split(",").map(Fe=>Fe.trim()).filter(Fe=>Fe.length>0),!0),r()}var D=Nf(),se=i(n(D),2),ne=n(se),fe=i(n(ne),2);{var Q=ve=>{var Ae=Af(),Fe=n(Ae);w(he=>y(Fe,`✔ Ready ${he!=null?he:""}`),[()=>e(v)?`(${h(e(v))})`:"(CPU)"]),d(ve,Ae)},z=ve=>{var Ae=Mf();d(ve,Ae)},I=ve=>{var Ae=Pf();d(ve,Ae)};k(fe,ve=>{e(l)?ve(Q):e(u)?ve(z,1):e(A)&&ve(I,2)})}var L=i(ne,2),ge=i(n(L),2),ee=i(L,4);{var j=ve=>{var Ae=Lf(),Fe=ht(Ae),he=n(Fe);{var re=te=>{var Y=Df();d(te,Y)},we=te=>{var Y=zf();d(te,Y)},Je=te=>{var Y=If(),_e=n(Y);w(me=>y(_e,`✔ Model downloaded and ready ${me!=null?me:""}`),[()=>e(v)?`(${h(e(v))} GPU accelerated)`:"on CPU"]),d(te,Y)},de=te=>{var Y=Of(),_e=i(n(Y),2);N("click",_e,_),d(te,Y)};k(he,te=>{e(c)?te(re):e(u)?te(we,1):e(l)?te(Je,2):te(de,-1)})}var $=i(Fe,2),U=i(n($),2);sa(U,{options:[{value:"semi-formal",label:"Semi-formal (Default)"},{value:"casual",label:"Casual"},{value:"formal",label:"Formal"},{value:"verbatim",label:"Verbatim"},{value:"concise",label:"Concise"}],onchange:r,get value(){return t().engine.s1_mini.styling},set value(te){t(t().engine.s1_mini.styling=te,!0)}}),d(ve,Ae)};k(ee,ve=>{e(A)&&ve(j)})}var V=i(se,2);let oe;var R=i(n(V),2);{var B=ve=>{var Ae=Rf();d(ve,Ae)};k(R,ve=>{e(A)&&ve(B)})}var be=i(R,2),Pe=i(n(be),2),ue=i(be,2),K=i(n(ue),2),J=i(ue,2),Se=i(n(J),2),De=i(V,2),le=i(n(De),2),W=i(n(le),2),ae=i(De,2),O=i(n(ae),4);Fs(O,ve=>ua==null?void 0:ua(ve));var X=i(ae,2);jo(X,{onchange:r,title:"Snippets",hint:"Type a trigger word → it expands to the replacement text.",addLabel:"Add Snippet",keyPlaceholder:"Trigger word",valuePlaceholder:"Expansion text",emptyText:"No snippets defined.",get value(){return t().features.snippets},set value(ve){t(t().features.snippets=ve,!0)}}),w(()=>{oe=Te(V,1,"field-group svelte-1s1a8xn",null,oe,{"disabled-section":e(A)}),Pe.disabled=e(A),K.disabled=e(A),Se.disabled=e(A),sr(O,e(q))}),N("change",ge,x),Xt(ge,()=>t().engine.s1_mini.enabled,ve=>t(t().engine.s1_mini.enabled=ve,!0)),N("change",Pe,r),Xt(Pe,()=>t().features.remove_fillers,ve=>t(t().features.remove_fillers=ve,!0)),N("change",K,r),Xt(K,()=>t().features.spoken_punctuation,ve=>t(t().features.spoken_punctuation=ve,!0)),N("change",Se,r),Xt(Se,()=>t().features.auto_format_lists,ve=>t(t().features.auto_format_lists=ve,!0)),N("change",W,r),Xt(W,()=>t().features.early_command_detection,ve=>t(t().features.early_command_detection=ve,!0)),N("input",O,T),d(s,D),St()}Qt(["change","click","input"]);async function Uo(s,a){await E("plugin:shell|open",{path:s,with:a})}async function Ff(s={}){return typeof s=="object"&&Object.freeze(s),await E("plugin:dialog|save",{options:s})}var Bf=p(""),qf=p(""),jf=p('
            '),Uf=p('
            '),Kf=p(''),Hf=p('

            Building the report…

            '),Wf=p('
             
            '),$f=p('

            Title: · Report ID

            ',1),Gf=p('

            Fill in the summary and description above and the finished report appears here.

            '),Yf=p(''),Jf=p(''),Xf=p(''),Zf=p(''),Qf=p('
            '),e_=p('
            '),t_=p("Send report files it for you — no GitHub account needed.",1),a_=p("This build has no automatic submission set up, so the routes below are the ones to use. Submit bug report opens the pre-filled issue form on GitHub and copies the report to your clipboard so you can submit directly.",1),s_=p('
            Saved to
            '),n_=p(''),i_=p("
            "),r_=p(`

            Report a Bug

            VoxCtrl 0.5.0 added a Windows build, and a Windows GPU build is on its way. Neither has been through anyone's hands but the developer's yet, so if something is broken, this page is the fastest way to say so — and it is the only part of VoxCtrl that ever sends anything about your machine anywhere.

            What gets sent

            ✓ Included
            • What you write below. This is the only text of yours that travels.
            • Version and build — which VoxCtrl, installed how, with which GPU features compiled in.
            • Operating system, kernel or Windows build, and CPU architecture.
            • Hardware — CPU model, core count, total memory, display adapter name.
            • Desktop and session (Linux), and your language, e.g. en.
            • Settings, with everything below stripped out first.
            • Output targets and hotkeys — how many, of which kinds, which keys. Not their names or contents.
            • The tail of VoxCtrl's log, up to 400 lines.
            ✕ Never included
            • Anything you have dictated. The log is written so transcribed text cannot reach it in the first place.
            • API keys and access tokens. Reported only as set or not set.
            • Your name, username, hostname, email or IP address.
            • File paths. A folder setting is reported as "default" or "custom", never as a path.
            • Custom vocabulary, snippets and prompts. Counted, never quoted.
            • Target names, shell commands, URLs and webhook secrets.
            • Audio. No recording, no sample, ever.

            Nothing here happens on its own. There is no telemetry, no background reporting, and nothing @@ -89,68 +89,68 @@ You cannot assign the same Output Command multiple times to a single keybind.`); press Submit there. Save, Copy and Email put the report in your hands to send however you like — attach the saved file to an email to .

            Limits and the ID that enforces them

            Report ID — a random value made on this machine, used only to count reports. It is derived from nothing about you or your - computer, and resetting it starts a fresh count.
            `);function rh(s,a){Tt(a,!0);const t=["Recording / hotkeys","Transcription accuracy or speed","Audio input or devices","Text-to-speech","Output targets / routing","Settings window or overlay","Installing or updating","Crash or freeze","Something else"],r=[{value:"always",label:"Every time"},{value:"sometimes",label:"Sometimes"},{value:"once",label:"It happened once"}];let l=yt({summary:"",description:"",area:t[0],frequency:"always"}),c=S(null),u=S(null),v=S(!1),f=S(null),_=S(!1),b=S(!1),m=S(null),h=S(null),x=S(null),M=S(!1),q=S(!1);const T=ce(()=>l.description.trim().length),z=ce(()=>{var K,g;return(g=(K=e(c))==null?void 0:K.limits.min_description_chars)!=null?g:30}),se=ce(()=>{var K,g;return(g=(K=e(c))==null?void 0:K.limits.max_description_chars)!=null?g:4e3}),ne=ce(()=>l.summary.trim().length>0&&e(T)>=e(z)&&e(T)<=e(se));async function fe(){try{o(c,await C("bug_report_context"),!0)}catch(K){console.error("Failed to read bug report context:",K)}}qt(fe);let Q;pa(()=>{const K={...l};if(!e(ne)){o(u,null);return}return Q&&clearTimeout(Q),Q=setTimeout(()=>D(K),400),()=>{Q&&clearTimeout(Q)}});async function D(K){o(v,!0),o(f,null);try{o(u,await C("preview_bug_report",{statement:K}),!0)}catch(g){o(f,String(g),!0),o(u,null)}finally{o(v,!1)}}async function I(){return e(u)||await D({...l}),e(u)}async function R(){var g,P,Ae,Ue,ie,xe,Ee,He;if(!l.summary.trim()){o(h,{type:"error",message:"Please provide a one-line summary above before submitting."},!0);return}if(e(T)o(M,!1),2500)}catch(P){o(h,{type:"error",message:`Could not copy the report: ${P}`},!0)}}async function V(){var P,Ae;if(!l.summary.trim()||e(T)o(q,!1),3e3),e(c)&&o(c,{...e(c),install_id:K,submissions_last_day:0,submissions_last_month:0},!0)}catch(K){o(f,`Could not reset the report ID: ${K}`)}}var be=ih(),Pe=i(n(be),4),ue=i(n(Pe),4),W=i(n(ue)),J=n(W),Se=i(Pe,2),ze=i(n(Se),2),le=i(n(ze),2),$=i(ze,2),ae=n($),O=i(n(ae),2);pt(O,21,()=>t,ft,(K,g)=>{var P=Ff(),Ae=n(P),Ue={};w(()=>{var ie;y(Ae,e(g)),Ue!==(Ue=e(g))&&(P.value=(ie=P.__value=e(g))!=null?ie:"")}),d(K,P)});var X=i(ae,2),ve=i(n(X),2);pt(ve,21,()=>r,ft,(K,g)=>{var P=Bf(),Ae=n(P),Ue={};w(()=>{var ie;y(Ae,e(g).label),Ue!==(Ue=e(g).value)&&(P.value=(ie=P.__value=e(g).value)!=null?ie:"")}),d(K,P)});var Me=i($,2),Fe=i(n(Me),2);mt(Fe,"placeholder",`1. I pressed my dictation hotkey and spoke for ten seconds. + computer, and resetting it starts a fresh count.
            `);function l_(s,a){Tt(a,!0);const t=["Recording / hotkeys","Transcription accuracy or speed","Audio input or devices","Text-to-speech","Output targets / routing","Settings window or overlay","Installing or updating","Crash or freeze","Something else"],r=[{value:"always",label:"Every time"},{value:"sometimes",label:"Sometimes"},{value:"once",label:"It happened once"}];let l=yt({summary:"",description:"",area:t[0],frequency:"always"}),c=S(null),u=S(null),v=S(!1),f=S(null),h=S(!1),b=S(!1),m=S(null),_=S(null),x=S(null),A=S(!1),q=S(!1);const T=ce(()=>l.description.trim().length),D=ce(()=>{var G,g;return(g=(G=e(c))==null?void 0:G.limits.min_description_chars)!=null?g:30}),se=ce(()=>{var G,g;return(g=(G=e(c))==null?void 0:G.limits.max_description_chars)!=null?g:4e3}),ne=ce(()=>l.summary.trim().length>0&&e(T)>=e(D)&&e(T)<=e(se));async function fe(){try{o(c,await E("bug_report_context"),!0)}catch(G){console.error("Failed to read bug report context:",G)}}qt(fe);let Q;pa(()=>{const G={...l};if(!e(ne)){o(u,null);return}return Q&&clearTimeout(Q),Q=setTimeout(()=>z(G),400),()=>{Q&&clearTimeout(Q)}});async function z(G){o(v,!0),o(f,null);try{o(u,await E("preview_bug_report",{statement:G}),!0)}catch(g){o(f,String(g),!0),o(u,null)}finally{o(v,!1)}}async function I(){return e(u)||await z({...l}),e(u)}async function L(){var g,P,Me,Ue,ie,xe,Ce,He;if(!l.summary.trim()){o(_,{type:"error",message:"Please provide a one-line summary above before submitting."},!0);return}if(e(T)o(A,!1),2500)}catch(P){o(_,{type:"error",message:`Could not copy the report: ${P}`},!0)}}async function V(){var P,Me;if(!l.summary.trim()||e(T)o(q,!1),3e3),e(c)&&o(c,{...e(c),install_id:G,submissions_last_day:0,submissions_last_month:0},!0)}catch(G){o(f,`Could not reset the report ID: ${G}`)}}var be=r_(),Pe=i(n(be),4),ue=i(n(Pe),4),K=i(n(ue)),J=n(K),Se=i(Pe,2),De=i(n(Se),2),le=i(n(De),2),W=i(De,2),ae=n(W),O=i(n(ae),2);pt(O,21,()=>t,ft,(G,g)=>{var P=Bf(),Me=n(P),Ue={};w(()=>{var ie;y(Me,e(g)),Ue!==(Ue=e(g))&&(P.value=(ie=P.__value=e(g))!=null?ie:"")}),d(G,P)});var X=i(ae,2),ve=i(n(X),2);pt(ve,21,()=>r,ft,(G,g)=>{var P=qf(),Me=n(P),Ue={};w(()=>{var ie;y(Me,e(g).label),Ue!==(Ue=e(g).value)&&(P.value=(ie=P.__value=e(g).value)!=null?ie:"")}),d(G,P)});var Ae=i(W,2),Fe=i(n(Ae),2);mt(Fe,"placeholder",`1. I pressed my dictation hotkey and spoke for ten seconds. 2. The overlay appeared but no text arrived. -3. I expected the text to be typed into my editor.`);var _e=i(Fe,2);let re;var we=n(_e),Je=i(we);{var de=K=>{var g=Be();w(()=>{var P;return y(g,`— at least ${(P=e(z))!=null?P:""} please; steps to reproduce are worth more than anything else here`)}),d(K,g)};k(Je,K=>{e(T){var g=qf(),P=n(g);w(()=>y(P,e(f))),d(K,g)};k(G,K=>{e(f)&&K(U)})}var te=i(G,2);{var Y=K=>{var g=jf(),P=n(g);w(()=>y(P,e(u).blocked_reason)),d(K,g)};k(te,K=>{var g;(g=e(u))!=null&&g.blocked_reason&&K(Y)})}var he=i(te,2),me=n(he),pe=i(n(me),2);{var De=K=>{var g=Uf(),P=n(g);w(()=>y(P,e(_)?"Hide":"Show me exactly what will be sent")),N("click",g,()=>o(_,!e(_))),d(K,g)};k(pe,K=>{e(u)&&K(De)})}var Ge=i(me,2);{var st=K=>{var g=Wf();d(K,g)},it=K=>{var g=$f(),P=_t(g),Ae=i(n(P)),Ue=n(Ae),ie=i(Ae,2),xe=n(ie),Ee=i(P,2);{var He=Xe=>{var zt=Hf(),Dt=n(zt);w(()=>y(Dt,e(u).markdown)),d(Xe,zt)};k(Ee,Xe=>{e(_)&&Xe(He)})}w(Xe=>{y(Ue,e(u).title),y(xe,Xe)},[()=>e(u).fingerprint.slice(0,12)]),d(K,g)},H=K=>{var g=Gf();d(K,g)};k(Ge,K=>{e(v)&&!e(u)?K(st):e(u)?K(it,1):K(H,-1)})}var A=i(Ge,2),E=n(A);{var ke=K=>{var g=Kf(),P=n(g);w(()=>{g.disabled=e(b)||e(u)&&!e(u).can_submit,y(P,e(b)?"Sending…":"Send report")}),N("click",g,R),d(K,g)},We=K=>{var g=Yf(),P=n(g);w(()=>{g.disabled=e(b),y(P,e(b)?"Submitting…":"Submit bug report")}),N("click",g,R),d(K,g)};k(E,K=>{var g;(g=e(c))!=null&&g.relay_configured?K(ke):K(We,-1)})}var ye=i(E,2),Ie=i(ye,2),Ye=i(Ie,2),Ze=n(Ye),Ve=i(Ye,2),at=i(A,2);{var et=K=>{var g=Qf(),P=n(g),Ae=n(P),Ue=n(Ae),ie=i(Ae,2);{var xe=Ee=>{var He=Zf(),Xe=n(He);{var zt=$t=>{var Gt=Jf();N("click",Gt,()=>oe(e(h).path)),d($t,Gt)};k(Xe,$t=>{e(h).path&&$t(zt)})}var Dt=i(Xe,2);{var Ft=$t=>{var Gt=Xf();N("click",Gt,()=>L(e(h).url)),d($t,Gt)};k(Dt,$t=>{e(h).url&&$t(Ft)})}d(Ee,He)};k(ie,Ee=>{(e(h).path||e(h).url)&&Ee(xe)})}w(()=>{Te(g,1,Ia(e(h).type==="ok"?"ok-alert":"warning-alert"),"svelte-7vrdzs"),y(Ue,e(h).message)}),d(K,g)};k(at,K=>{e(h)&&K(et)})}var rt=i(at,2),Ce=n(rt);{var Ke=K=>{var g=eh();d(K,g)},ct=K=>{var g=th();d(K,g)};k(Ce,K=>{var g;(g=e(c))!=null&&g.relay_configured?K(Ke):K(ct,-1)})}var vt=i(Ce,10),nt=n(vt),wt=i(rt,2);{var dt=K=>{var g=ah(),P=i(n(g)),Ae=n(P);w(()=>y(Ae,e(x))),d(K,g)};k(wt,K=>{e(x)&&!e(h)&&K(dt)})}var Ct=i(wt,2);{var Wt=K=>{var g=nh();let P;var Ae=n(g),Ue=i(Ae);{var ie=xe=>{var Ee=sh();N("click",Ee,()=>L(e(m).issue_url)),d(xe,Ee)};k(Ue,xe=>{e(m).issue_url&&xe(ie)})}w(()=>{var xe;P=Te(g,1,"svelte-7vrdzs",null,P,{"ok-alert":e(m).ok,"warning-alert":!e(m).ok}),y(Ae,`${(xe=e(m).message)!=null?xe:""} `)}),d(K,g)};k(Ct,K=>{e(m)&&K(Wt)})}var ia=i(he,2),ra=i(n(ia),2),bt=n(ra),ea=i(ra,2),Rt=n(ea),Ht=i(n(Rt)),ta=n(Ht),Oe=i(Rt,2),qe=n(Oe);w((K,g)=>{var P,Ae,Ue,ie,xe,Ee,He,Xe,zt,Dt,Ft,$t,Gt,fa,Yt,ma,Oa,Ya;y(J,(Ae=(P=e(c))==null?void 0:P.log_path)!=null?Ae:"…"),mt(Fe,"maxlength",e(se)),re=Te(_e,1,"counter svelte-7vrdzs",null,re,{short:e(T)>0&&e(T){var g=Be();w(()=>{var P;return y(g,`— at least ${(P=e(D))!=null?P:""} please; steps to reproduce are worth more than anything else here`)}),d(G,g)};k(Je,G=>{e(T){var g=jf(),P=n(g);w(()=>y(P,e(f))),d(G,g)};k($,G=>{e(f)&&G(U)})}var te=i($,2);{var Y=G=>{var g=Uf(),P=n(g);w(()=>y(P,e(u).blocked_reason)),d(G,g)};k(te,G=>{var g;(g=e(u))!=null&&g.blocked_reason&&G(Y)})}var _e=i(te,2),me=n(_e),pe=i(n(me),2);{var ze=G=>{var g=Kf(),P=n(g);w(()=>y(P,e(h)?"Hide":"Show me exactly what will be sent")),N("click",g,()=>o(h,!e(h))),d(G,g)};k(pe,G=>{e(u)&&G(ze)})}var $e=i(me,2);{var st=G=>{var g=Hf();d(G,g)},it=G=>{var g=$f(),P=ht(g),Me=i(n(P)),Ue=n(Me),ie=i(Me,2),xe=n(ie),Ce=i(P,2);{var He=Xe=>{var Dt=Wf(),zt=n(Dt);w(()=>y(zt,e(u).markdown)),d(Xe,Dt)};k(Ce,Xe=>{e(h)&&Xe(He)})}w(Xe=>{y(Ue,e(u).title),y(xe,Xe)},[()=>e(u).fingerprint.slice(0,12)]),d(G,g)},H=G=>{var g=Gf();d(G,g)};k($e,G=>{e(v)&&!e(u)?G(st):e(u)?G(it,1):G(H,-1)})}var M=i($e,2),C=n(M);{var ke=G=>{var g=Yf(),P=n(g);w(()=>{g.disabled=e(b)||e(u)&&!e(u).can_submit,y(P,e(b)?"Sending…":"Send report")}),N("click",g,L),d(G,g)},Ke=G=>{var g=Jf(),P=n(g);w(()=>{g.disabled=e(b),y(P,e(b)?"Submitting…":"Submit bug report")}),N("click",g,L),d(G,g)};k(C,G=>{var g;(g=e(c))!=null&&g.relay_configured?G(ke):G(Ke,-1)})}var ye=i(C,2),Ie=i(ye,2),Ye=i(Ie,2),Ze=n(Ye),Ve=i(Ye,2),at=i(M,2);{var et=G=>{var g=e_(),P=n(g),Me=n(P),Ue=n(Me),ie=i(Me,2);{var xe=Ce=>{var He=Qf(),Xe=n(He);{var Dt=Wt=>{var $t=Xf();N("click",$t,()=>oe(e(_).path)),d(Wt,$t)};k(Xe,Wt=>{e(_).path&&Wt(Dt)})}var zt=i(Xe,2);{var Ft=Wt=>{var $t=Zf();N("click",$t,()=>R(e(_).url)),d(Wt,$t)};k(zt,Wt=>{e(_).url&&Wt(Ft)})}d(Ce,He)};k(ie,Ce=>{(e(_).path||e(_).url)&&Ce(xe)})}w(()=>{Te(g,1,Ia(e(_).type==="ok"?"ok-alert":"warning-alert"),"svelte-7vrdzs"),y(Ue,e(_).message)}),d(G,g)};k(at,G=>{e(_)&&G(et)})}var rt=i(at,2),Ee=n(rt);{var Ge=G=>{var g=t_();d(G,g)},ct=G=>{var g=a_();d(G,g)};k(Ee,G=>{var g;(g=e(c))!=null&&g.relay_configured?G(Ge):G(ct,-1)})}var vt=i(Ee,10),nt=n(vt),wt=i(rt,2);{var dt=G=>{var g=s_(),P=i(n(g)),Me=n(P);w(()=>y(Me,e(x))),d(G,g)};k(wt,G=>{e(x)&&!e(_)&&G(dt)})}var Et=i(wt,2);{var Kt=G=>{var g=i_();let P;var Me=n(g),Ue=i(Me);{var ie=xe=>{var Ce=n_();N("click",Ce,()=>R(e(m).issue_url)),d(xe,Ce)};k(Ue,xe=>{e(m).issue_url&&xe(ie)})}w(()=>{var xe;P=Te(g,1,"svelte-7vrdzs",null,P,{"ok-alert":e(m).ok,"warning-alert":!e(m).ok}),y(Me,`${(xe=e(m).message)!=null?xe:""} `)}),d(G,g)};k(Et,G=>{e(m)&&G(Kt)})}var ia=i(_e,2),ra=i(n(ia),2),bt=n(ra),ea=i(ra,2),Lt=n(ea),Ht=i(n(Lt)),ta=n(Ht),Oe=i(Lt,2),qe=n(Oe);w((G,g)=>{var P,Me,Ue,ie,xe,Ce,He,Xe,Dt,zt,Ft,Wt,$t,fa,Yt,ma,Oa,Ya;y(J,(Me=(P=e(c))==null?void 0:P.log_path)!=null?Me:"…"),mt(Fe,"maxlength",e(se)),re=Te(he,1,"counter svelte-7vrdzs",null,re,{short:e(T)>0&&e(T){var K,g;return Math.round(((g=(K=e(c))==null?void 0:K.limits.cooldown_seconds)!=null?g:120)/60)},()=>{var K,g,P;return(P=(g=(K=e(c))==null?void 0:K.install_id)==null?void 0:g.slice(0,12))!=null?P:"…"}]),$e(le,()=>l.summary,K=>l.summary=K),Tl(O,()=>l.area,K=>l.area=K),Tl(ve,()=>l.frequency,K=>l.frequency=K),$e(Fe,()=>l.description,K=>l.description=K),N("click",ye,ge),N("click",Ie,ee),N("click",Ye,j),N("click",Ve,V),N("click",Oe,B),d(s,be),St()}Qt(["click"]);class Xn extends jd{constructor(a){super(a)}static async new(a,t,r){return C("plugin:image|new",{rgba:Hi(a),width:t,height:r}).then(l=>new Xn(l))}static async fromBytes(a){return C("plugin:image|from_bytes",{bytes:Hi(a)}).then(t=>new Xn(t))}static async fromPath(a){return C("plugin:image|from_path",{path:a}).then(t=>new Xn(t))}async rgba(){return C("plugin:image|rgba",{rid:this.rid}).then(a=>new Uint8Array(a))}async size(){return C("plugin:image|size",{rid:this.rid})}}function Hi(s){return s==null?null:typeof s=="string"?s:s instanceof Xn?s.rid:s}var Pl;(function(s){s.Nsis="nsis",s.Msi="msi",s.Deb="deb",s.Rpm="rpm",s.AppImage="appimage",s.App="app"})(Pl||(Pl={}));async function lh(){return C("plugin:app|version")}const oh="/assets/voxctrl-CDHFw5hI.gif";var ch=p('
            Custom overlays
            '),dh=p('
            Cloned TTS voices
            '),vh=p(`

            About VoxCtrl

            VoxCtrl

            Native, on-device voice-to-text for Linux and Windows. + ${(Yt=(fa=($t=e(c))==null?void 0:$t.submissions_last_day)!=null?fa:0)!=null?Yt:""} in the last day and + ${(Ya=(Oa=(ma=e(c))==null?void 0:ma.submissions_last_month)!=null?Oa:0)!=null?Ya:""} in the last month. Saving to a file is never limited.`),y(ta,g),y(qe,e(q)?"Reset ✓":"Reset ID")},[()=>{var G,g;return Math.round(((g=(G=e(c))==null?void 0:G.limits.cooldown_seconds)!=null?g:120)/60)},()=>{var G,g,P;return(P=(g=(G=e(c))==null?void 0:G.install_id)==null?void 0:g.slice(0,12))!=null?P:"…"}]),We(le,()=>l.summary,G=>l.summary=G),Tl(O,()=>l.area,G=>l.area=G),Tl(ve,()=>l.frequency,G=>l.frequency=G),We(Fe,()=>l.description,G=>l.description=G),N("click",ye,ge),N("click",Ie,ee),N("click",Ye,j),N("click",Ve,V),N("click",Oe,B),d(s,be),St()}Qt(["click"]);class Xn extends jd{constructor(a){super(a)}static async new(a,t,r){return E("plugin:image|new",{rgba:Hi(a),width:t,height:r}).then(l=>new Xn(l))}static async fromBytes(a){return E("plugin:image|from_bytes",{bytes:Hi(a)}).then(t=>new Xn(t))}static async fromPath(a){return E("plugin:image|from_path",{path:a}).then(t=>new Xn(t))}async rgba(){return E("plugin:image|rgba",{rid:this.rid}).then(a=>new Uint8Array(a))}async size(){return E("plugin:image|size",{rid:this.rid})}}function Hi(s){return s==null?null:typeof s=="string"?s:s instanceof Xn?s.rid:s}var Pl;(function(s){s.Nsis="nsis",s.Msi="msi",s.Deb="deb",s.Rpm="rpm",s.AppImage="appimage",s.App="app"})(Pl||(Pl={}));async function o_(){return E("plugin:app|version")}const c_="/assets/voxctrl-CDHFw5hI.gif";var d_=p('

            Custom overlays
            '),v_=p('
            Cloned TTS voices
            '),u_=p(`

            About VoxCtrl

            VoxCtrl

            Native, on-device voice-to-text for Linux and Windows. Uses whisper.cpp, Moonshine, - and NVIDIA Parakeet for offline transcription and routes speech to any destination.

            System

            FrontendSvelte 5 + Tauri 2
            BackendRust (Tokio async)
            Inferencewhisper.cpp, Moonshine & Parakeet TDT
            Config~/.config/voxctrl/
            Models~/.local/share/voxctrl/models/
            MCP socket/tmp/voxctrl-mcp.sock

            Open Source Attributions

            This application is built possible by these outstanding open-source projects:

            Speech recognition

            whisper.cpp MIT License
            ONNX Runtime MIT / Apache 2.0

            Text-to-speech

            Piper TTS MIT License
            audio.cpp Apache 2.0
            ggml MIT License
            Inflect-Micro-v2 Apache 2.0
            Breeze-TTS-2 (BreezeBlue) Non-Commercial License

            Dictation cleanup

            Core framework & runtime

            Tauri Framework MIT / Apache 2.0
            Svelte & Vite MIT License
            whisper-rs Unlicense
            Rust, Tokio & CPAL MIT / Apache 2.0
            `);function uh(s,a){Tt(a,!0);let t=S("0.1.0"),r=S(""),l=S("");qt(async()=>{try{o(t,await lh(),!0)}catch(T){console.error("Failed to fetch app version:",T)}try{o(r,await C("get_custom_overlays_dir"),!0)}catch(T){console.error("Failed to fetch custom overlays directory:",T)}try{o(l,await C("get_cloned_tts_voices_dir"),!0)}catch(T){console.error("Failed to fetch cloned TTS voices directory:",T)}});var c=vh(),u=i(n(c),2),v=n(u),f=i(v,2),_=i(n(f),2),b=n(_),m=i(u,2),h=i(n(m),12);{var x=T=>{var z=ch(),se=i(n(z)),ne=n(se),fe=n(ne);w(()=>y(fe,e(r))),d(T,z)};k(h,T=>{e(r)&&T(x)})}var M=i(h,2);{var q=T=>{var z=dh(),se=i(n(z)),ne=n(se),fe=n(ne);w(()=>y(fe,e(l))),d(T,z)};k(M,T=>{e(l)&&T(q)})}w(()=>{var T;mt(v,"src",oh),y(b,`Version ${(T=e(t))!=null?T:""} — Rust + Tauri Edition`)}),d(s,c),St()}var ph=p(''),fh=p(''),hh=p(' 🛑 Stop',1),_h=p('🎙️ Record'),gh=p('
            Unsaved changes detected
            '),mh=p('
            ');function bh(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",c),r=()=>Zt(ga,"$status",c),l=()=>Zt(Ss,"$configDirty",c),[c,u]=Ca();let v=S("general");const f=[{id:"general",label:"General",icon:"⚙️"},{id:"audio",label:"Audio Input",icon:"🔊"},{id:"engine",label:"Engine",icon:"🧠"},{id:"features",label:"Post-Processing",icon:"✨"},{id:"hotkeys",label:"Hotkeys",icon:"⌨️"},{id:"commands",label:"Output Commands",icon:"🎯"},{id:"visual",label:"Visual Feedback",icon:"🎨"},{id:"tts",label:"TTS",icon:"🗣️"},{id:"openai",label:"OpenAI API",icon:"🤖"},{id:"bugreport",label:"Bug Report",icon:"🐞"},{id:"about",label:"About",icon:"ℹ️"}];async function _(){await nl(t())}async function b(){await C("toggle_recording")}let m="general",h=S(null);pa(()=>{var we,Je;const re=e(v);re!==m&&(m=re,e(h)&&(e(h).scrollTop=0),(Je=(we=t())==null?void 0:we.audio)!=null&&Je.dynamic_stream&&r().recording&&C("stop_recording").catch(de=>{console.error("Failed to stop recording on activeTab change:",de)}))}),qt(()=>{const re=_a("focus-settings-tab",Je=>{const de=Je.payload;f.some(G=>G.id===de)&&o(v,de,!0)});let we;return we=Wi.subscribe(Je=>{if(Je){const de=t();if(de&&de.engine&&de.engine.whisper_cpp){const G=de.engine.whisper_cpp.model_size;de.engine.backend==="whisper-cpp"&&C("check_model_downloaded",{modelSize:G,modelDir:de.engine.whisper_cpp.model_dir||""}).then(async U=>{var te;if(!U&&(o(v,"engine"),(te=de==null?void 0:de.ui)!=null&&te.auto_show_settings))try{const{getCurrentWindow:Y}=await Vd(async()=>{const{getCurrentWindow:me}=await Promise.resolve().then(()=>a_);return{getCurrentWindow:me}},void 0),he=Y();await he.show(),await he.setFocus()}catch(Y){console.error("Failed to programmatically show settings window on startup:",Y)}}).catch(U=>{console.error("Failed to check model download status on startup:",U)})}we?we():setTimeout(()=>we(),0)}}),()=>{re.then(Je=>Je()).catch(()=>{})}});var x=mh(),M=n(x),q=n(M),T=n(q),z=i(q,2);pt(z,21,()=>f,ft,(re,we)=>{var Je=fh();let de;var G=n(Je),U=n(G),te=i(G,2),Y=n(te),he=i(te,2);{var me=pe=>{var De=ph();d(pe,De)};k(he,pe=>{e(v)===e(we).id&&pe(me)})}w(()=>{de=Te(Je,1,"nav-btn svelte-myrvk6",null,de,{active:e(v)===e(we).id}),y(U,e(we).icon),y(Y,e(we).label)}),N("click",Je,()=>o(v,e(we).id,!0)),d(re,Je)});var se=i(z,2),ne=n(se);let fe;var Q=n(ne),D=n(Q),I=i(n(D),2),R=n(I),ge=i(D,2),ee=n(ge),j=i(Q,2);let V;var oe=n(j);{var L=re=>{var we=hh();d(re,we)},B=re=>{var we=_h();d(re,we)};k(oe,re=>{r().recording?re(L):re(B,-1)})}var be=i(M,2),Pe=n(be),ue=n(Pe);{var W=re=>{nv(re,{get cfg(){return Gs(),t()},set cfg(we){$s(Ot,we)}})},J=re=>{Wv(re,{get cfg(){return Gs(),t()},set cfg(we){$s(Ot,we)}})},Se=re=>{Bv(re,{get cfg(){return Gs(),t()},set cfg(we){$s(Ot,we)}})},ze=re=>{Nf(re,{get cfg(){return Gs(),t()},set cfg(we){$s(Ot,we)}})},le=re=>{vp(re,{})},$=re=>{Sp(re,{})},ae=re=>{uv(re,{get cfg(){return Gs(),t()},set cfg(we){$s(Ot,we)}})},O=re=>{mf(re,{get cfg(){return Gs(),t()},set cfg(we){$s(Ot,we)}})},X=re=>{Cf(re,{get cfg(){return Gs(),t()},set cfg(we){$s(Ot,we)}})},ve=re=>{rh(re,{})},Me=re=>{uh(re,{})};k(ue,re=>{e(v)==="general"?re(W):e(v)==="audio"?re(J,1):e(v)==="engine"?re(Se,2):e(v)==="features"?re(ze,3):e(v)==="hotkeys"?re(le,4):e(v)==="commands"?re($,5):e(v)==="visual"?re(ae,6):e(v)==="tts"?re(O,7):e(v)==="openai"?re(X,8):e(v)==="bugreport"?re(ve,9):e(v)==="about"&&re(Me,10)})}sl(Pe,re=>o(h,re),()=>e(h));var Fe=i(Pe,2);{var _e=re=>{var we=gh(),Je=i(n(we),2);N("click",Je,_),d(re,we)};k(Fe,re=>{l()&&re(_e)})}w(()=>{var re;mt(T,"src",nr),fe=Te(ne,1,"status-panel svelte-myrvk6",null,fe,{recording:r().recording,speaking:r().speaking}),y(R,r().recording?"Recording":r().speaking?"Speaking":"Idle"),y(ee,`${(re=r().word_count)!=null?re:""} words`),V=Te(j,1,"btn-record svelte-myrvk6",null,V,{active:r().recording})}),N("click",j,b),d(s,x),St(),u()}Qt(["click"]);function Ws(s){let a=0,t=0,r=!1,l=null;_a("audio-level",u=>{a=Math.min(1,u.payload*100)}).then(u=>{r?u():l=u});let c=requestAnimationFrame(function u(){t+=(a-t)*.35,a*=.86,s(t),c=requestAnimationFrame(u)});return()=>{r=!0,l==null||l(),cancelAnimationFrame(c)}}var yh=p(""),wh=p('
            '),kh=p('
            VOXCTRL VOICE CARD
            TARGET •••• VOX
            ');function xh(s,a){Tt(a,!0);const t=()=>Zt(ga,"$status",r),[r,l]=Ca();let c=Et(a,"recording",3,!1);Et(a,"speaking",3,!1);let u=Et(a,"active",3,!0);const v=20,f=6;let _=S(yt(Array(v).fill(0)));const b=ce(()=>t().audio_ready!==!1),m=ce(()=>t().active_target_label||"Focused Window");qt(()=>{let j=0;const V=new Float32Array(v);return Ws(oe=>{j+=.016;for(let L=0;LV[L]?B:V[L]*.86}o(_,Array.from(V),!0)})});function h(j){return j===0?"red":j<=2?"amber":"green"}var x=kh();let M;var q=n(x);let T;var z=i(n(q),8),se=i(n(z),2);{var ne=j=>{var V=Be("PROC");d(j,V)},fe=j=>{var V=Be("INIT");d(j,V)},Q=j=>{var V=Be("REC");d(j,V)};k(se,j=>{t().processing?j(ne):c()&&!e(b)?j(fe,1):j(Q,-1)})}var D=i(z,2);pt(D,21,()=>e(_),ft,(j,V)=>{var oe=wh();pt(oe,21,()=>Array(f),ft,(L,B,be)=>{var Pe=yh();let ue;w(W=>ue=Te(Pe,1,`dot ${W!=null?W:""}`,"svelte-1pt4ba2",ue,{lit:f-be<=e(V)*f}),[()=>h(be)]),d(L,Pe)}),d(j,oe)});var I=i(D,4),R=n(I);{var ge=j=>{var V=Be("Reading the card…");d(j,V)},ee=j=>{var V=Be();w(()=>y(V,e(m))),d(j,V)};k(R,j=>{t().processing?j(ge):j(ee,-1)})}w(()=>{M=Te(x,1,"card-scene svelte-1pt4ba2",null,M,{on:u()}),T=Te(q,1,"card svelte-1pt4ba2",null,T,{processing:t().processing,initializing:c()&&!e(b)})}),d(s,x),St(),l()}var Th=p('
            '),Sh=p('
            WAVEFORM // OSC-01 TGT ▸
            ');function Ch(s,a){Tt(a,!0);const t=()=>Zt(ga,"$status",r),[r,l]=Ca();let c=Et(a,"recording",3,!1),u=Et(a,"active",3,!0);const v=126,f=500,_=78;let b=S("");const m=ce(()=>t().audio_ready!==!1),h=ce(()=>t().active_target_label||"Focused Window");qt(()=>{const L=new Float32Array(v);let B=0;return Ws(be=>{B+=.016;let Pe=0;if(t().processing)Pe=.55*Math.sin(B*9)*(.6+.4*Math.sin(B*1.7));else if(c()&&t().audio_ready===!1)Pe=.05*(Math.random()*2-1);else if(c()){const W=Math.random()*2-1;Pe=Math.min(1,be*1.5)*(.45*Math.sin(B*24)+.55*W)}L.copyWithin(0,1),L[v-1]=Pe;let ue="";for(let W=0;W{var B=Be("· TRANSCRIBING");d(L,B)},fe=L=>{var B=Be("· CALIBRATING");d(L,B)},Q=L=>{var B=Be("· LIVE TRACE");d(L,B)};k(se,L=>{t().processing?L(ne):c()&&!e(m)?L(fe,1):L(Q,-1)})}var D=i(z,4),I=i(n(D),2),R=n(I),ge=i(T,2),ee=i(n(ge),6);pt(ee,16,()=>[1,2,3,4],ft,(L,B)=>{var be=Th();w(()=>na(be,`left: ${B*20}%`)),d(L,be)});var j=i(ee,2);mt(j,"viewBox","0 0 500 78");var V=n(j),oe=i(V);w(()=>{M=Te(x,1,"scope svelte-xjziu1",null,M,{on:u(),processing:t().processing,initializing:c()&&!e(m)}),y(R,e(h)),mt(V,"d",e(b)),mt(oe,"d",e(b))}),d(s,x),St(),l()}var Eh=p('
            ⌖
            ');function Mh(s,a){Tt(a,!0);const t=()=>Zt(ga,"$status",r),[r,l]=Ca();let c=Et(a,"recording",3,!1),u=Et(a,"active",3,!0),v=S(0);const f=ce(()=>t().audio_ready!==!1),_=ce(()=>t().active_target_label||"Focused Window");qt(()=>Ws(R=>o(v,R,!0)));var b=Eh();let m;var h=i(n(b),2),x=i(n(h),2),M=n(x),q=n(M);{var T=R=>{var ge=Be("PULSE // ANALYZING");d(R,ge)},z=R=>{var ge=Be("PULSE // ACQUIRING");d(R,ge)},se=R=>{var ge=Be("PULSE // TARGET LOCK");d(R,ge)};k(q,R=>{t().processing?R(T):c()&&!e(f)?R(z,1):R(se,-1)})}var ne=i(M,2),fe=n(ne);{var Q=R=>{var ge=Be("Decoding transmission…");d(R,ge)},D=R=>{var ge=Be("Connecting mic…");d(R,ge)},I=R=>{var ge=Be();w(()=>y(ge,e(_))),d(R,ge)};k(fe,R=>{t().processing?R(Q):c()&&!e(f)?R(D,1):R(I,-1)})}w(()=>{var R;m=Te(b,1,"radar svelte-13tl5wx",null,m,{on:u(),processing:t().processing,initializing:c()&&!e(f)}),na(b,`--lvl: ${(R=e(v))!=null?R:""}`)}),d(s,b),St(),l()}var Ah=p('
            '),Ph=p('
            OCEAN WAVE
            ');function zh(s,a){Tt(a,!0);const t=()=>Zt(ga,"$status",r),[r,l]=Ca();let c=Et(a,"recording",3,!1);Et(a,"speaking",3,!1);let u=Et(a,"active",3,!0);const v=380,f=90;let _=S(""),b=S(""),m=S(""),h=S(60);const x=ce(()=>t().audio_ready!==!1),M=ce(()=>t().active_target_label||"Focused Window");function q(W,J,Se,ze){let le=`M 0 ${f} L 0 ${ze.toFixed(1)}`;for(let $=0;$<=v;$+=8){const ae=ze+Math.sin($*J+Se)*W;le+=` L ${$} ${ae.toFixed(1)}`}return le+` L ${v} ${f} Z`}qt(()=>{let W=0;return Ws(J=>{W+=.016;const Se=J,ze=t().processing?4+2.5*Math.sin(W*1.6):0,le=64-Se*20-ze,$=56-Se*24-ze*1.2,ae=47-Se*28-ze*1.4,O=(t().processing?5:2.5)+Se*14,X=(t().processing?6:2)+Se*18,ve=(t().processing?7:1.5)+Se*22;o(_,q(O,.014,W*2.1,le),!0),o(b,q(X,.022,-W*3,$),!0),o(m,q(ve,.018,W*3.9,ae),!0),o(h,38+ae-21+Math.sin(W*2.2)*2.5)})});var T=Ph();let z;var se=i(n(T),4),ne=n(se);{var fe=W=>{var J=Be("deep current — processing");d(W,J)},Q=W=>{var J=Be("low tide — preparing");d(W,J)},D=W=>{var J=Be("high tide — listening");d(W,J)};k(ne,W=>{t().processing?W(fe):c()&&!e(x)?W(Q,1):W(D,-1)})}var I=i(se,2),R=n(I);mt(R,"viewBox","0 0 380 90");var ge=n(R),ee=i(ge),j=i(ee),V=i(I,2);pt(V,16,()=>[0,1,2],ft,(W,J)=>{var Se=Ah();w(()=>na(Se,`left: ${64+J*112}px; animation-delay: ${J*1.4}s;`)),d(W,Se)});var oe=i(V,2),L=i(n(oe),2),B=n(L);{var be=W=>{var J=Be("Sounding the depths…");d(W,J)},Pe=W=>{var J=Be("Casting off…");d(W,J)},ue=W=>{var J=Be();w(()=>y(J,e(M))),d(W,J)};k(B,W=>{t().processing?W(be):c()&&!e(x)?W(Pe,1):W(ue,-1)})}w(()=>{var W;z=Te(T,1,"ocean svelte-1orgnnz",null,z,{on:u(),processing:t().processing}),mt(ge,"d",e(_)),mt(ee,"d",e(b)),mt(j,"d",e(m)),na(oe,`top: ${(W=e(h))!=null?W:""}px;`)}),d(s,T),St(),l()}var Dh=p("
            "),Ih=p('
            ');function Oh(s,a){Tt(a,!0);const t=()=>Zt(ga,"$status",r),[r,l]=Ca();let c=Et(a,"recording",3,!1),u=Et(a,"active",3,!0);const v=5,f=8,_=52;let b=S(yt(Array(v).fill(f)));const m=ce(()=>t().audio_ready!==!1),h=ce(()=>t().active_target_label||"Focused Window");function x(j,V,oe,L,B,be,Pe,ue){const W=(V-1)/2,J=1-Math.abs(j-W)/(W+1)*.4;let Se;if(be)Se=(Math.sin(L*4-j*.85)*.5+.5)*J;else if(B&&!Pe)Se=0;else if(B){const ze=Math.sin(L*3-j*.8);Se=Math.min(1,Math.max(0,oe*J*(.9+.1*ze)*(.85+.3*ue)))}else Se=0;return f+(_-f)*Se}qt(()=>{let j=0;return Ws(V=>{j+=.016;const oe=t().audio_ready!==!1,L=new Array(v);for(let B=0;B{var V=Be("PROCESSING");d(j,V)},D=j=>{var V=Be("STANDBY");d(j,V)},I=j=>{var V=Be("LISTENING");d(j,V)};k(fe,j=>{t().processing?j(Q):c()&&!e(m)?j(D,1):j(I,-1)})}var R=i(T,2);pt(R,21,()=>e(b),ft,(j,V)=>{var oe=Dh();let L;w(()=>{var B;L=Te(oe,1,"bar svelte-12wa5lj",null,L,{dim:c()&&!e(m),processing:t().processing}),na(oe,`height: ${(B=e(V))!=null?B:""}px`)}),d(j,oe)});var ge=i(R,4),ee=n(ge);w(()=>{q=Te(M,1,"mono svelte-12wa5lj",null,q,{on:u()}),se=Te(z,1,"dot svelte-12wa5lj",null,se,{lit:!t().processing&&!(c()&&!e(m)),processing:t().processing,standby:c()&&!e(m)}),y(ee,e(h))}),d(s,M),St(),l()}var Rh=p('
            '),Lh=p('
            SPECTRUM // EQ-16 OUT ▸
            ');function Nh(s,a){Tt(a,!0);const t=()=>Zt(ga,"$status",r),[r,l]=Ca();let c=Et(a,"recording",3,!1),u=Et(a,"active",3,!0);const v=16,f=6,_=96;let b=S(yt(Array(v).fill(f)));const m=ce(()=>t().audio_ready!==!1),h=ce(()=>t().active_target_label||"Focused Window");function x(V,oe,L,B,be,Pe,ue,W){const J=V/(oe-1);let Se;if(Pe)Se=Math.pow(Math.sin(B*2.4-J*6)*.5+.5,1.5);else if(be&&!ue)Se=W*.06;else if(be){const ze=2+J*9,le=V*.7,$=Math.sin(B*ze+le)*.5+.5,ae=1-J*.35;Se=Math.min(1,Math.max(0,L*ae*(.35+.65*$)*(.7+.6*W)))}else Se=0;return f+(_-f)*Se}qt(()=>{let V=0;return Ws(oe=>{V+=.016;const L=t().audio_ready!==!1,B=new Array(v);for(let be=0;be{var oe=Be("· ANALYZING");d(V,oe)},D=V=>{var oe=Be("· WARMING UP");d(V,oe)},I=V=>{var oe=Be("· LIVE");d(V,oe)};k(fe,V=>{t().processing?V(Q):c()&&!e(m)?V(D,1):V(I,-1)})}var R=i(ne,4),ge=i(n(R),2),ee=n(ge),j=i(T,4);pt(j,21,()=>e(b),ft,(V,oe)=>{var L=Rh();w(()=>{var B;return na(L,`height: ${(B=e(oe))!=null?B:""}px; opacity: ${.45+.55*(e(oe)/_)}`)}),d(V,L)}),w(()=>{q=Te(M,1,"spectrum svelte-194vixl",null,q,{on:u()}),se=Te(z,1,"led svelte-194vixl",null,se,{processing:t().processing,standby:c()&&!e(m)}),y(ee,e(h))}),d(s,M),St(),l()}var Vh=p('
            VOXCTRL — /dev/mic0
            ');function Fh(s,a){Tt(a,!0);const t=()=>Zt(ga,"$status",r),[r,l]=Ca();let c=Et(a,"recording",3,!1),u=Et(a,"active",3,!0);const v=20;let f=S(yt("·".repeat(v))),_=S(!1);const b=ce(()=>t().audio_ready!==!1),m=ce(()=>t().active_target_label||"Focused Window");function h(B,be,Pe,ue,W){const J=v;if(ue){const Se=2*J,ze=Math.floor(be*10)%Se,le=zeae===le?"█":"·").join("")}else{if(Pe&&!W)return Array.from({length:J},(Se,ze)=>ze%4===0?"·":" ").join("");if(Pe){const Se=Math.round(Math.min(1,Math.max(0,B))*J);return Array.from({length:J},(ze,le)=>le{let B=0;return Ws(be=>{B+=.016;const Pe=t().audio_ready!==!1;o(f,h(be,B,c(),t().processing,Pe),!0),o(_,Math.sin(B*5.5)>0)})});var x=Vh();let M;var q=i(n(x),2),T=n(q),z=n(T),se=i(T,2);let ne;var fe=n(se);{var Q=B=>{var be=Be("[PROC]");d(B,be)},D=B=>{var be=Be("[INIT]");d(B,be)},I=B=>{var be=Be("[REC ]");d(B,be)};k(fe,B=>{t().processing?B(Q):c()&&!e(b)?B(D,1):B(I,-1)})}var R=i(fe),ge=i(se,2),ee=n(ge);{var j=B=>{var be=Be("transcribing audio stream");d(B,be)},V=B=>{var be=Be("connecting input device");d(B,be)},oe=B=>{var be=Be("streaming to output");d(B,be)};k(ee,B=>{t().processing?B(j):c()&&!e(b)?B(V,1):B(oe,-1)})}var L=i(ee,1,!0);w(()=>{var B,be;M=Te(x,1,"terminal svelte-pvtvge",null,M,{on:u()}),y(z,`$ voxctrl listen --target "${(B=e(m))!=null?B:""}"`),ne=Te(se,1,"line2 svelte-pvtvge",null,ne,{processing:t().processing,standby:c()&&!e(b)}),y(R,` ${(be=e(f))!=null?be:""}`),y(L,e(_)?"_":" ")}),d(s,x),St(),l()}var Bh=p('
            VU
            -20
            0
            +3
            ');function qh(s,a){Tt(a,!0);const t=()=>Zt(ga,"$status",r),[r,l]=Ca();let c=Et(a,"recording",3,!1),u=Et(a,"active",3,!0);const v=144,f=70,_=58,b=-.95,m=.95,h=.016;let x=S(yt(z(b)));const M=ce(()=>t().audio_ready!==!1),q=ce(()=>t().active_target_label||"Focused Window");function T(ue){return b+Math.min(1,Math.max(0,ue))*(m-b)}function z(ue){const W=v+Math.sin(ue)*_,J=f-Math.cos(ue)*_;return`M ${v} ${f} L ${W.toFixed(1)} ${J.toFixed(1)}`}function se(ue,W,J){const le=256*(W-ue.x)-24.96*ue.v;ue.v+=le*J,ue.x+=ue.v*J,Math.abs(ue.x-W)<.001&&Math.abs(ue.v)<.02&&(ue.x=W,ue.v=0)}qt(()=>{let ue=0;const W={x:b,v:0};return Ws(J=>{ue+=h;const Se=t().audio_ready!==!1;let ze;t().processing?ze=T(.3+.25*Math.abs(Math.sin(ue*2))):c()&&Se?ze=T(J):ze=b,se(W,ze,h),o(x,z(W.x),!0)})});var ne=Bh();let fe;var Q=n(ne),D=i(n(Q),2),I=n(D);{var R=ue=>{var W=Be("ANALOG // PROCESSING");d(ue,W)},ge=ue=>{var W=Be("ANALOG // WARMING UP");d(ue,W)},ee=ue=>{var W=Be("ANALOG // INPUT LEVEL");d(ue,W)};k(I,ue=>{t().processing?ue(R):c()&&!e(M)?ue(ge,1):ue(ee,-1)})}var j=i(D,4);let V;var oe=i(Q,2),L=i(n(oe),20),B=n(L),be=i(oe,2),Pe=n(be);w(()=>{fe=Te(ne,1,"vinyl svelte-kq5b5i",null,fe,{on:u()}),V=Te(j,1,"led svelte-kq5b5i",null,V,{processing:t().processing,standby:c()&&!e(M)}),mt(B,"d",e(x)),y(Pe,e(q))}),d(s,ne),St(),l()}var jh=p("
            ",1),Uh=p('
            '),Wh=p('
            ⚡
            '),Hh=p(''),$h=p('
            SYSTEM RESPONDING
            '),Gh=p('
            RECORDING
            '),Kh=p('
            '),Yh=p('
            ');function Jh(s,a){Tt(a,!0);const t=()=>Zt(ga,"$status",v),r=()=>Zt(Gd,"$recording",v),l=()=>Zt(Ot,"$config",v),c=()=>Zt(Kd,"$speaking",v),u=()=>Zt(Yd,"$mcpRecording",v),[v,f]=Ca(),_=new Set(["waveform","pulse","blue_wave","mono_bars","spectrum","terminal","vinyl","voice_card","none"]);let b=S(!0),m=S(void 0);const h=ce(()=>t().active_target_label||"Focused Window"),x=ce(()=>t().active_target_label||"Focused Window");let M=S(!1),q=S(""),T=S(""),z=null,se=null,ne=null,fe=null,Q=ce(()=>r()&&l().ui.show_overlay||c()&&l().tts.enabled&&l().tts.response_overlay||u()&&l().mcp.visual_feedback||e(M)&&l().ui.show_command_overlay),D=ce(()=>c()&&l().tts.enabled&&l().tts.response_overlay&&!r()),I=S(!1),R=S(!1);pa(()=>{!e(I)||e(D)?o(R,!1):r()||t().processing?o(R,!0):e(Q)&&o(R,!1)});let ge=ce(()=>l().ui.overlay_style!=="none"&&l().ui.show_overlay&&e(R)),ee=S(!1),j,V;pa(()=>(e(Q)?(j&&clearTimeout(j),o(I,!0),V&&clearTimeout(V),V=setTimeout(()=>{o(ee,!0)},25),J(l().ui.overlay_style)):(o(ee,!1),j=setTimeout(()=>{o(I,!1)},450)),()=>{j&&clearTimeout(j),V&&clearTimeout(V)}));let oe=ce(()=>e(m)?e(m).html.replace(/\{\{trigger\}\}/g,e(h)).replace(/\{\{target\}\}/g,e(x)):""),L=0,B=S(0),be=null,Pe=null;function ue(){Pe===null&&(Pe=requestAnimationFrame(W))}function W(){if(o(B,e(B)+(L-e(B))*.42),L*=.82,L<5e-4&&(L=0),e(B)<5e-4&&o(B,0),e(m)&&window.dispatchEvent(new CustomEvent("voxctrl-status",{detail:{recording:r(),processing:t().processing,speaking:c(),audio_ready:t().audio_ready!==!1,active_target_label:t().active_target_label||"Focused Window",audio_level:e(B)}})),e(B)===0&&L===0&&!e(I)){Pe=null;return}Pe=requestAnimationFrame(W)}pa(()=>{e(I)&&ue()});function J(ae){if(_.has(ae)){o(m,void 0);return}C("get_custom_overlay",{name:ae}).then(O=>{o(m,O!=null?O:void 0,!0)}).catch(O=>{console.error(`Failed to load custom overlay "${ae}":`,O),o(m,void 0)})}pa(()=>{const ae=l().ui.overlay_style;o(b,!1);const O=setTimeout(()=>{o(b,!0)},25);return J(ae),()=>clearTimeout(O)}),pa(()=>{const ae=document.documentElement;ae.style.setProperty("--voxctrl-audio-level",String(e(B))),ae.style.setProperty("--voxctrl-recording",r()?"1":"0"),ae.style.setProperty("--voxctrl-processing",t().processing?"1":"0"),ae.style.setProperty("--voxctrl-speaking",c()?"1":"0"),ae.style.setProperty("--voxctrl-mcp-recording",u()?"1":"0"),ae.style.setProperty("--voxctrl-audio-ready",t().audio_ready!==!1?"1":"0")}),qt(()=>{document.documentElement.classList.add("overlay-window"),document.body.classList.add("overlay-window"),requestAnimationFrame(()=>{requestAnimationFrame(()=>{C("overlay_content_ready").catch(()=>{})})}),document.documentElement.style.setProperty("background","transparent","important"),document.body.style.setProperty("background","transparent","important");const ae=document.getElementById("app");return ae&&ae.style.setProperty("background","transparent","important"),_a("overlay-style-selected",O=>{J(O.payload)}).then(O=>{fe=O}),_a("audio-level",O=>{L=Math.min(1,O.payload*100),ue(),window.dispatchEvent(new CustomEvent("voxctrl-audio-level",{detail:O.payload}))}).then(O=>{be=O}),_a("command-executed",O=>{if(!l().ui.show_command_overlay)return;o(q,O.payload.command,!0),o(T,O.payload.summary,!0),o(M,!0),z&&clearTimeout(z);const X=(O.payload.duration_secs||l().ui.command_overlay_duration_secs||3)*1e3;z=setTimeout(()=>{o(M,!1)},X)}).then(O=>{se=O}),_a("command-withdrawn",()=>{z&&clearTimeout(z),o(M,!1)}).then(O=>{ne=O}),()=>{document.documentElement.classList.remove("overlay-window"),document.body.classList.remove("overlay-window"),be&&be(),se&&se(),ne&&ne(),fe&&fe(),z&&clearTimeout(z),Pe!==null&&cancelAnimationFrame(Pe)}});function Se(ae){return ae.querySelectorAll("script").forEach(X=>{const ve=document.createElement("script");Array.from(X.attributes).forEach(Me=>{ve.setAttribute(Me.name,Me.value)}),ve.appendChild(document.createTextNode(X.innerHTML)),X.parentNode&&X.parentNode.replaceChild(ve,X)}),{destroy(){window.dispatchEvent(new CustomEvent("voxctrl-cleanup"))}}}var ze=Yh(),le=n(ze);{var $=ae=>{var O=Kh(),X=n(O);{var ve=de=>{var G=Uh(),U=n(G);{var te=H=>{Ch(H,{get recording(){return r()},get active(){return e(ee)}})},Y=H=>{Mh(H,{get recording(){return r()},get active(){return e(ee)}})},he=H=>{zh(H,{get recording(){return r()},get speaking(){return c()},get active(){return e(ee)}})},me=H=>{Oh(H,{get recording(){return r()},get active(){return e(ee)}})},pe=H=>{Nh(H,{get recording(){return r()},get active(){return e(ee)}})},De=H=>{Fh(H,{get recording(){return r()},get active(){return e(ee)}})},Ge=H=>{qh(H,{get recording(){return r()},get active(){return e(ee)}})},st=H=>{var A=jh(),E=_t(A);wl(E,()=>``);var ke=i(E,2);let We;wl(ke,()=>e(oe),!0),Fs(ke,ye=>Se==null?void 0:Se(ye)),w(()=>We=Te(ke,1,"custom-overlay-content svelte-rmqsd6",null,We,{active:e(ee)})),d(H,A)},it=H=>{xh(H,{get recording(){return r()},get speaking(){return c()},get active(){return e(ee)}})};k(U,H=>{l().ui.overlay_style==="waveform"?H(te):l().ui.overlay_style==="pulse"?H(Y,1):l().ui.overlay_style==="blue_wave"?H(he,2):l().ui.overlay_style==="mono_bars"?H(me,3):l().ui.overlay_style==="spectrum"?H(pe,4):l().ui.overlay_style==="terminal"?H(De,5):l().ui.overlay_style==="vinyl"?H(Ge,6):e(m)?H(st,7):l().ui.overlay_style!=="none"&&H(it,8)})}d(de,G)};k(X,de=>{e(ge)&&de(ve)})}var Me=i(X,2);{var Fe=de=>{var G=Wh();let U;var te=i(n(G),2),Y=n(te),he=n(Y),me=i(Y,2),pe=n(me);w(De=>{var Ge;U=Te(G,1,"system-response-box command svelte-rmqsd6",null,U,{on:e(ee)}),y(he,De),y(pe,`▸ ${(Ge=e(T))!=null?Ge:""}`)},[()=>e(q).toUpperCase()]),d(de,G)};k(Me,de=>{e(M)&&l().ui.show_command_overlay&&!e(D)&&de(Fe)})}var _e=i(Me,2);{var re=de=>{var G=$h();let U;var te=n(G);pt(te,20,()=>[0,1,2,3,4],ft,(pe,De)=>{var Ge=Hh();w(()=>na(Ge,`animation-delay: ${De*.13}s`)),d(pe,Ge)});var Y=i(te,2),he=i(n(Y),2),me=n(he);w(()=>{var pe;U=Te(G,1,"system-response-box speaking svelte-rmqsd6",null,U,{on:e(ee)}),y(me,`▸ ${(pe=e(x))!=null?pe:""}`)}),d(de,G)};k(_e,de=>{e(D)&&de(re)})}var we=i(_e,2);{var Je=de=>{var G=Gh();let U;var te=i(n(G),2),Y=i(n(te),2),he=n(Y);w(()=>{var me;U=Te(G,1,"system-response-box mcp svelte-rmqsd6",null,U,{on:e(ee)}),y(he,`▸ ${(me=e(x))!=null?me:""}`)}),d(de,G)};k(we,de=>{u()&&l().mcp.visual_feedback&&de(Je)})}d(ae,O)};k(le,ae=>{e(I)&&e(b)&&ae($)})}w(()=>{mt(ze,"data-recording",r()),mt(ze,"data-speaking",c()),mt(ze,"data-processing",t().processing)}),d(s,ze),St(),f()}class rl{constructor(...a){this.type="Logical",a.length===1?"Logical"in a[0]?(this.width=a[0].Logical.width,this.height=a[0].Logical.height):(this.width=a[0].width,this.height=a[0].height):(this.width=a[0],this.height=a[1])}toPhysical(a){return new js(this.width*a,this.height*a)}[ls](){return{width:this.width,height:this.height}}toJSON(){return this[ls]()}}class js{constructor(...a){this.type="Physical",a.length===1?"Physical"in a[0]?(this.width=a[0].Physical.width,this.height=a[0].Physical.height):(this.width=a[0].width,this.height=a[0].height):(this.width=a[0],this.height=a[1])}toLogical(a){return new rl(this.width/a,this.height/a)}[ls](){return{width:this.width,height:this.height}}toJSON(){return this[ls]()}}class _n{constructor(a){this.size=a}toLogical(a){return this.size instanceof rl?this.size:this.size.toLogical(a)}toPhysical(a){return this.size instanceof js?this.size:this.size.toPhysical(a)}[ls](){return{[`${this.size.type}`]:{width:this.size.width,height:this.size.height}}}toJSON(){return this[ls]()}}class ll{constructor(...a){this.type="Logical",a.length===1?"Logical"in a[0]?(this.x=a[0].Logical.x,this.y=a[0].Logical.y):(this.x=a[0].x,this.y=a[0].y):(this.x=a[0],this.y=a[1])}toPhysical(a){return new as(this.x*a,this.y*a)}[ls](){return{x:this.x,y:this.y}}toJSON(){return this[ls]()}}class as{constructor(...a){this.type="Physical",a.length===1?"Physical"in a[0]?(this.x=a[0].Physical.x,this.y=a[0].Physical.y):(this.x=a[0].x,this.y=a[0].y):(this.x=a[0],this.y=a[1])}toLogical(a){return new ll(this.x/a,this.y/a)}[ls](){return{x:this.x,y:this.y}}toJSON(){return this[ls]()}}class Ei{constructor(a){this.position=a}toLogical(a){return this.position instanceof ll?this.position:this.position.toLogical(a)}toPhysical(a){return this.position instanceof as?this.position:this.position.toPhysical(a)}[ls](){return{[`${this.position.type}`]:{x:this.position.x,y:this.position.y}}}toJSON(){return this[ls]()}}var $i;(function(s){s[s.Critical=1]="Critical",s[s.Informational=2]="Informational"})($i||($i={}));class Wo{constructor(a){this._preventDefault=!1,this.event=a.event,this.id=a.id}preventDefault(){this._preventDefault=!0}isPreventDefault(){return this._preventDefault}}var Fr;(function(s){s.None="none",s.Normal="normal",s.Indeterminate="indeterminate",s.Paused="paused",s.Error="error"})(Fr||(Fr={}));function ol(){return new cl(window.__TAURI_INTERNALS__.metadata.currentWindow.label,{skip:!0})}async function Vi(){return C("plugin:window|get_all_windows").then(s=>s.map(a=>new cl(a,{skip:!0})))}const br=["tauri://created","tauri://error"];class cl{constructor(a,t={}){var r;this.label=a,this.listeners=Object.create(null),t!=null&&t.skip||C("plugin:window|create",{options:{...t,parent:typeof t.parent=="string"?t.parent:(r=t.parent)===null||r===void 0?void 0:r.label,label:a}}).then(async()=>this.emit("tauri://created")).catch(async l=>this.emit("tauri://error",l))}static async getByLabel(a){var t;return(t=(await Vi()).find(r=>r.label===a))!==null&&t!==void 0?t:null}static getCurrent(){return ol()}static async getAll(){return Vi()}static async getFocusedWindow(){for(const a of await Vi())if(await a.isFocused())return a;return null}async listen(a,t){return this._handleTauriEvent(a,t)?()=>{const r=this.listeners[a];r.splice(r.indexOf(t),1)}:_a(a,t,{target:{kind:"Window",label:this.label}})}async once(a,t){return this._handleTauriEvent(a,t)?()=>{const r=this.listeners[a];r.splice(r.indexOf(t),1)}:Ud(a,t,{target:{kind:"Window",label:this.label}})}async emit(a,t){if(br.includes(a)){for(const r of this.listeners[a]||[])r({event:a,id:-1,payload:t});return}return Vo(a,t)}async emitTo(a,t,r){if(br.includes(t)){for(const l of this.listeners[t]||[])l({event:t,id:-1,payload:r});return}return Wd(a,t,r)}_handleTauriEvent(a,t){return br.includes(a)?(a in this.listeners?this.listeners[a].push(t):this.listeners[a]=[t],!0):!1}async scaleFactor(){return C("plugin:window|scale_factor",{label:this.label})}async innerPosition(){return C("plugin:window|inner_position",{label:this.label}).then(a=>new as(a))}async outerPosition(){return C("plugin:window|outer_position",{label:this.label}).then(a=>new as(a))}async innerSize(){return C("plugin:window|inner_size",{label:this.label}).then(a=>new js(a))}async outerSize(){return C("plugin:window|outer_size",{label:this.label}).then(a=>new js(a))}async isFullscreen(){return C("plugin:window|is_fullscreen",{label:this.label})}async isMinimized(){return C("plugin:window|is_minimized",{label:this.label})}async isMaximized(){return C("plugin:window|is_maximized",{label:this.label})}async isFocused(){return C("plugin:window|is_focused",{label:this.label})}async isDecorated(){return C("plugin:window|is_decorated",{label:this.label})}async isResizable(){return C("plugin:window|is_resizable",{label:this.label})}async isMaximizable(){return C("plugin:window|is_maximizable",{label:this.label})}async isMinimizable(){return C("plugin:window|is_minimizable",{label:this.label})}async isClosable(){return C("plugin:window|is_closable",{label:this.label})}async isVisible(){return C("plugin:window|is_visible",{label:this.label})}async title(){return C("plugin:window|title",{label:this.label})}async theme(){return C("plugin:window|theme",{label:this.label})}async isAlwaysOnTop(){return C("plugin:window|is_always_on_top",{label:this.label})}async activityName(){return C("plugin:window|activity_name",{label:this.label})}async sceneIdentifier(){return C("plugin:window|scene_identifier",{label:this.label})}async center(){return C("plugin:window|center",{label:this.label})}async requestUserAttention(a){let t=null;return a&&(a===$i.Critical?t={type:"Critical"}:t={type:"Informational"}),C("plugin:window|request_user_attention",{label:this.label,value:t})}async setResizable(a){return C("plugin:window|set_resizable",{label:this.label,value:a})}async setEnabled(a){return C("plugin:window|set_enabled",{label:this.label,value:a})}async isEnabled(){return C("plugin:window|is_enabled",{label:this.label})}async setMaximizable(a){return C("plugin:window|set_maximizable",{label:this.label,value:a})}async setMinimizable(a){return C("plugin:window|set_minimizable",{label:this.label,value:a})}async setClosable(a){return C("plugin:window|set_closable",{label:this.label,value:a})}async setTitle(a){return C("plugin:window|set_title",{label:this.label,value:a})}async maximize(){return C("plugin:window|maximize",{label:this.label})}async unmaximize(){return C("plugin:window|unmaximize",{label:this.label})}async toggleMaximize(){return C("plugin:window|toggle_maximize",{label:this.label})}async minimize(){return C("plugin:window|minimize",{label:this.label})}async unminimize(){return C("plugin:window|unminimize",{label:this.label})}async show(){return C("plugin:window|show",{label:this.label})}async hide(){return C("plugin:window|hide",{label:this.label})}async close(){return C("plugin:window|close",{label:this.label})}async destroy(){return C("plugin:window|destroy",{label:this.label})}async setDecorations(a){return C("plugin:window|set_decorations",{label:this.label,value:a})}async setShadow(a){return C("plugin:window|set_shadow",{label:this.label,value:a})}async setEffects(a){return C("plugin:window|set_effects",{label:this.label,value:a})}async clearEffects(){return C("plugin:window|set_effects",{label:this.label,value:null})}async setAlwaysOnTop(a){return C("plugin:window|set_always_on_top",{label:this.label,value:a})}async setAlwaysOnBottom(a){return C("plugin:window|set_always_on_bottom",{label:this.label,value:a})}async setContentProtected(a){return C("plugin:window|set_content_protected",{label:this.label,value:a})}async setSize(a){return C("plugin:window|set_size",{label:this.label,value:a instanceof _n?a:new _n(a)})}async setMinSize(a){return C("plugin:window|set_min_size",{label:this.label,value:a instanceof _n?a:a?new _n(a):null})}async setMaxSize(a){return C("plugin:window|set_max_size",{label:this.label,value:a instanceof _n?a:a?new _n(a):null})}async setSizeConstraints(a){function t(r){return r?{Logical:r}:null}return C("plugin:window|set_size_constraints",{label:this.label,value:{minWidth:t(a==null?void 0:a.minWidth),minHeight:t(a==null?void 0:a.minHeight),maxWidth:t(a==null?void 0:a.maxWidth),maxHeight:t(a==null?void 0:a.maxHeight)}})}async setPosition(a){return C("plugin:window|set_position",{label:this.label,value:a instanceof Ei?a:new Ei(a)})}async setFullscreen(a){return C("plugin:window|set_fullscreen",{label:this.label,value:a})}async setSimpleFullscreen(a){return C("plugin:window|set_simple_fullscreen",{label:this.label,value:a})}async setFocus(){return C("plugin:window|set_focus",{label:this.label})}async setFocusable(a){return C("plugin:window|set_focusable",{label:this.label,value:a})}async setIcon(a){return C("plugin:window|set_icon",{label:this.label,value:Hi(a)})}async setSkipTaskbar(a){return C("plugin:window|set_skip_taskbar",{label:this.label,value:a})}async setCursorGrab(a){return C("plugin:window|set_cursor_grab",{label:this.label,value:a})}async setCursorVisible(a){return C("plugin:window|set_cursor_visible",{label:this.label,value:a})}async setCursorIcon(a){return C("plugin:window|set_cursor_icon",{label:this.label,value:a})}async setBackgroundColor(a){return C("plugin:window|set_background_color",{color:a})}async setCursorPosition(a){return C("plugin:window|set_cursor_position",{label:this.label,value:a instanceof Ei?a:new Ei(a)})}async setIgnoreCursorEvents(a){return C("plugin:window|set_ignore_cursor_events",{label:this.label,value:a})}async startDragging(){return C("plugin:window|start_dragging",{label:this.label})}async startResizeDragging(a){return C("plugin:window|start_resize_dragging",{label:this.label,value:a})}async setBadgeCount(a){return C("plugin:window|set_badge_count",{label:this.label,value:a})}async setBadgeLabel(a){return C("plugin:window|set_badge_label",{label:this.label,value:a})}async setOverlayIcon(a){return C("plugin:window|set_overlay_icon",{label:this.label,value:a?Hi(a):void 0})}async setProgressBar(a){return C("plugin:window|set_progress_bar",{label:this.label,value:a})}async setVisibleOnAllWorkspaces(a){return C("plugin:window|set_visible_on_all_workspaces",{label:this.label,value:a})}async setTitleBarStyle(a){return C("plugin:window|set_title_bar_style",{label:this.label,value:a})}async setTheme(a){return C("plugin:window|set_theme",{label:this.label,value:a})}async onResized(a){return this.listen(Ha.WINDOW_RESIZED,t=>{t.payload=new js(t.payload),a(t)})}async onMoved(a){return this.listen(Ha.WINDOW_MOVED,t=>{t.payload=new as(t.payload),a(t)})}async onCloseRequested(a){return this.listen(Ha.WINDOW_CLOSE_REQUESTED,async t=>{const r=new Wo(t);await a(r),r.isPreventDefault()||await this.destroy()})}async onDragDropEvent(a){const t=await this.listen(Ha.DRAG_ENTER,u=>{a({...u,payload:{type:"enter",paths:u.payload.paths,position:new as(u.payload.position)}})}),r=await this.listen(Ha.DRAG_OVER,u=>{a({...u,payload:{type:"over",position:new as(u.payload.position)}})}),l=await this.listen(Ha.DRAG_DROP,u=>{a({...u,payload:{type:"drop",paths:u.payload.paths,position:new as(u.payload.position)}})}),c=await this.listen(Ha.DRAG_LEAVE,u=>{a({...u,payload:{type:"leave"}})});return()=>{t(),l(),r(),c()}}async onFocusChanged(a){const t=await this.listen(Ha.WINDOW_FOCUS,l=>{a({...l,payload:!0})}),r=await this.listen(Ha.WINDOW_BLUR,l=>{a({...l,payload:!1})});return()=>{t(),r()}}async onScaleChanged(a){return this.listen(Ha.WINDOW_SCALE_FACTOR_CHANGED,a)}async onThemeChanged(a){return this.listen(Ha.WINDOW_THEME_CHANGED,a)}}var zl;(function(s){s.Disabled="disabled",s.Throttle="throttle",s.Suspend="suspend"})(zl||(zl={}));var Dl;(function(s){s.Default="default",s.FluentOverlay="fluentOverlay"})(Dl||(Dl={}));var Br;(function(s){s.AppearanceBased="appearanceBased",s.Light="light",s.Dark="dark",s.MediumLight="mediumLight",s.UltraDark="ultraDark",s.Titlebar="titlebar",s.Selection="selection",s.Menu="menu",s.Popover="popover",s.Sidebar="sidebar",s.HeaderView="headerView",s.Sheet="sheet",s.WindowBackground="windowBackground",s.HudWindow="hudWindow",s.FullScreenUI="fullScreenUI",s.Tooltip="tooltip",s.ContentBackground="contentBackground",s.UnderWindowBackground="underWindowBackground",s.UnderPageBackground="underPageBackground",s.Mica="mica",s.Blur="blur",s.Acrylic="acrylic",s.Tabbed="tabbed",s.TabbedDark="tabbedDark",s.TabbedLight="tabbedLight"})(Br||(Br={}));var qr;(function(s){s.FollowsWindowActiveState="followsWindowActiveState",s.Active="active",s.Inactive="inactive"})(qr||(qr={}));function ir(s){return s===null?null:{name:s.name,scaleFactor:s.scaleFactor,position:new as(s.position),size:new js(s.size),workArea:{position:new as(s.workArea.position),size:new js(s.workArea.size)}}}async function Xh(){return C("plugin:window|current_monitor").then(ir)}async function Zh(){return C("plugin:window|primary_monitor").then(ir)}async function Qh(s,a){return C("plugin:window|monitor_from_point",{x:s,y:a}).then(ir)}async function e_(){return C("plugin:window|available_monitors").then(s=>s.map(ir))}async function t_(){return C("plugin:window|cursor_position").then(s=>new as(s))}const a_=Object.freeze(Object.defineProperty({__proto__:null,CloseRequestedEvent:Wo,get Effect(){return Br},get EffectState(){return qr},LogicalPosition:ll,LogicalSize:rl,PhysicalPosition:as,PhysicalSize:js,get ProgressBarStatus(){return Fr},get UserAttentionType(){return $i},Window:cl,availableMonitors:e_,currentMonitor:Xh,cursorPosition:t_,getAllWindows:Vi,getCurrentWindow:ol,monitorFromPoint:Qh,primaryMonitor:Zh},Symbol.toStringTag,{value:"Module"}));var s_=p('
            Installing the helper packages…

            You may be prompted for your administrator password.

            '),n_=p('
            Checking VoxCtrl setup…
            '),i_=p('

            '),r_=p('

            ',1),l_=p(`

            🔒 VoxCtrl asked your desktop to register its shortcuts and is told nothing + and NVIDIA Parakeet for offline transcription and routes speech to any destination.

            System

            FrontendSvelte 5 + Tauri 2
            BackendRust (Tokio async)
            Inferencewhisper.cpp, Moonshine & Parakeet TDT
            Config~/.config/voxctrl/
            Models~/.local/share/voxctrl/models/
            MCP socket/tmp/voxctrl-mcp.sock

            Open Source Attributions

            This application is built possible by these outstanding open-source projects:

            Speech recognition

            whisper.cpp MIT License
            ONNX Runtime MIT / Apache 2.0

            Text-to-speech

            Piper TTS MIT License
            audio.cpp Apache 2.0
            ggml MIT License
            Inflect-Micro-v2 Apache 2.0
            Breeze-TTS-2 (BreezeBlue) Non-Commercial License

            Dictation cleanup

            Core framework & runtime

            Tauri Framework MIT / Apache 2.0
            Svelte & Vite MIT License
            whisper-rs Unlicense
            Rust, Tokio & CPAL MIT / Apache 2.0
            `);function p_(s,a){Tt(a,!0);let t=S("0.1.0"),r=S(""),l=S("");qt(async()=>{try{o(t,await o_(),!0)}catch(T){console.error("Failed to fetch app version:",T)}try{o(r,await E("get_custom_overlays_dir"),!0)}catch(T){console.error("Failed to fetch custom overlays directory:",T)}try{o(l,await E("get_cloned_tts_voices_dir"),!0)}catch(T){console.error("Failed to fetch cloned TTS voices directory:",T)}});var c=u_(),u=i(n(c),2),v=n(u),f=i(v,2),h=i(n(f),2),b=n(h),m=i(u,2),_=i(n(m),12);{var x=T=>{var D=d_(),se=i(n(D)),ne=n(se),fe=n(ne);w(()=>y(fe,e(r))),d(T,D)};k(_,T=>{e(r)&&T(x)})}var A=i(_,2);{var q=T=>{var D=v_(),se=i(n(D)),ne=n(se),fe=n(ne);w(()=>y(fe,e(l))),d(T,D)};k(A,T=>{e(l)&&T(q)})}w(()=>{var T;mt(v,"src",c_),y(b,`Version ${(T=e(t))!=null?T:""} — Rust + Tauri Edition`)}),d(s,c),St()}var f_=p(''),__=p(''),h_=p(' 🛑 Stop',1),g_=p('🎙️ Record'),m_=p('
            Unsaved changes detected
            '),b_=p('
            ');function y_(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",c),r=()=>Zt(ga,"$status",c),l=()=>Zt(Ss,"$configDirty",c),[c,u]=Ea();let v=S("general");const f=[{id:"general",label:"General",icon:"⚙️"},{id:"audio",label:"Audio Input",icon:"🔊"},{id:"engine",label:"Engine",icon:"🧠"},{id:"features",label:"Post-Processing",icon:"✨"},{id:"hotkeys",label:"Hotkeys",icon:"⌨️"},{id:"commands",label:"Output Commands",icon:"🎯"},{id:"visual",label:"Visual Feedback",icon:"🎨"},{id:"tts",label:"TTS",icon:"🗣️"},{id:"openai",label:"OpenAI API",icon:"🤖"},{id:"bugreport",label:"Bug Report",icon:"🐞"},{id:"about",label:"About",icon:"ℹ️"}];async function h(){await nl(t())}async function b(){await E("toggle_recording")}let m="general",_=S(null);pa(()=>{var we,Je;const re=e(v);re!==m&&(m=re,e(_)&&(e(_).scrollTop=0),(Je=(we=t())==null?void 0:we.audio)!=null&&Je.dynamic_stream&&r().recording&&E("stop_recording").catch(de=>{console.error("Failed to stop recording on activeTab change:",de)}))}),qt(()=>{const re=ha("focus-settings-tab",Je=>{const de=Je.payload;f.some($=>$.id===de)&&o(v,de,!0)});let we;return we=Ki.subscribe(Je=>{if(Je){const de=t();if(de&&de.engine&&de.engine.whisper_cpp){const $=de.engine.whisper_cpp.model_size;de.engine.backend==="whisper-cpp"&&E("check_model_downloaded",{modelSize:$,modelDir:de.engine.whisper_cpp.model_dir||""}).then(async U=>{var te;if(!U&&(o(v,"engine"),(te=de==null?void 0:de.ui)!=null&&te.auto_show_settings))try{const{getCurrentWindow:Y}=await Vd(async()=>{const{getCurrentWindow:me}=await Promise.resolve().then(()=>sh);return{getCurrentWindow:me}},void 0),_e=Y();await _e.show(),await _e.setFocus()}catch(Y){console.error("Failed to programmatically show settings window on startup:",Y)}}).catch(U=>{console.error("Failed to check model download status on startup:",U)})}we?we():setTimeout(()=>we(),0)}}),()=>{re.then(Je=>Je()).catch(()=>{})}});var x=b_(),A=n(x),q=n(A),T=n(q),D=i(q,2);pt(D,21,()=>f,ft,(re,we)=>{var Je=__();let de;var $=n(Je),U=n($),te=i($,2),Y=n(te),_e=i(te,2);{var me=pe=>{var ze=f_();d(pe,ze)};k(_e,pe=>{e(v)===e(we).id&&pe(me)})}w(()=>{de=Te(Je,1,"nav-btn svelte-myrvk6",null,de,{active:e(v)===e(we).id}),y(U,e(we).icon),y(Y,e(we).label)}),N("click",Je,()=>o(v,e(we).id,!0)),d(re,Je)});var se=i(D,2),ne=n(se);let fe;var Q=n(ne),z=n(Q),I=i(n(z),2),L=n(I),ge=i(z,2),ee=n(ge),j=i(Q,2);let V;var oe=n(j);{var R=re=>{var we=h_();d(re,we)},B=re=>{var we=g_();d(re,we)};k(oe,re=>{r().recording?re(R):re(B,-1)})}var be=i(A,2),Pe=n(be),ue=n(Pe);{var K=re=>{nv(re,{get cfg(){return $s(),t()},set cfg(we){Ws(Ot,we)}})},J=re=>{Kv(re,{get cfg(){return $s(),t()},set cfg(we){Ws(Ot,we)}})},Se=re=>{Bv(re,{get cfg(){return $s(),t()},set cfg(we){Ws(Ot,we)}})},De=re=>{Vf(re,{get cfg(){return $s(),t()},set cfg(we){Ws(Ot,we)}})},le=re=>{up(re,{})},W=re=>{Ep(re,{})},ae=re=>{uv(re,{get cfg(){return $s(),t()},set cfg(we){Ws(Ot,we)}})},O=re=>{bf(re,{get cfg(){return $s(),t()},set cfg(we){Ws(Ot,we)}})},X=re=>{Cf(re,{get cfg(){return $s(),t()},set cfg(we){Ws(Ot,we)}})},ve=re=>{l_(re,{})},Ae=re=>{p_(re,{})};k(ue,re=>{e(v)==="general"?re(K):e(v)==="audio"?re(J,1):e(v)==="engine"?re(Se,2):e(v)==="features"?re(De,3):e(v)==="hotkeys"?re(le,4):e(v)==="commands"?re(W,5):e(v)==="visual"?re(ae,6):e(v)==="tts"?re(O,7):e(v)==="openai"?re(X,8):e(v)==="bugreport"?re(ve,9):e(v)==="about"&&re(Ae,10)})}sl(Pe,re=>o(_,re),()=>e(_));var Fe=i(Pe,2);{var he=re=>{var we=m_(),Je=i(n(we),2);N("click",Je,h),d(re,we)};k(Fe,re=>{l()&&re(he)})}w(()=>{var re;mt(T,"src",nr),fe=Te(ne,1,"status-panel svelte-myrvk6",null,fe,{recording:r().recording,speaking:r().speaking}),y(L,r().recording?"Recording":r().speaking?"Speaking":"Idle"),y(ee,`${(re=r().word_count)!=null?re:""} words`),V=Te(j,1,"btn-record svelte-myrvk6",null,V,{active:r().recording})}),N("click",j,b),d(s,x),St(),u()}Qt(["click"]);function Ks(s){let a=0,t=0,r=!1,l=null;ha("audio-level",u=>{a=Math.min(1,u.payload*100)}).then(u=>{r?u():l=u});let c=requestAnimationFrame(function u(){t+=(a-t)*.35,a*=.86,s(t),c=requestAnimationFrame(u)});return()=>{r=!0,l==null||l(),cancelAnimationFrame(c)}}var w_=p(""),k_=p('
            '),x_=p('
            VOXCTRL VOICE CARD
            TARGET •••• VOX
            ');function T_(s,a){Tt(a,!0);const t=()=>Zt(ga,"$status",r),[r,l]=Ea();let c=Ct(a,"recording",3,!1);Ct(a,"speaking",3,!1);let u=Ct(a,"active",3,!0);const v=20,f=6;let h=S(yt(Array(v).fill(0)));const b=ce(()=>t().audio_ready!==!1),m=ce(()=>t().active_target_label||"Focused Window");qt(()=>{let j=0;const V=new Float32Array(v);return Ks(oe=>{j+=.016;for(let R=0;RV[R]?B:V[R]*.86}o(h,Array.from(V),!0)})});function _(j){return j===0?"red":j<=2?"amber":"green"}var x=x_();let A;var q=n(x);let T;var D=i(n(q),8),se=i(n(D),2);{var ne=j=>{var V=Be("PROC");d(j,V)},fe=j=>{var V=Be("INIT");d(j,V)},Q=j=>{var V=Be("REC");d(j,V)};k(se,j=>{t().processing?j(ne):c()&&!e(b)?j(fe,1):j(Q,-1)})}var z=i(D,2);pt(z,21,()=>e(h),ft,(j,V)=>{var oe=k_();pt(oe,21,()=>Array(f),ft,(R,B,be)=>{var Pe=w_();let ue;w(K=>ue=Te(Pe,1,`dot ${K!=null?K:""}`,"svelte-1pt4ba2",ue,{lit:f-be<=e(V)*f}),[()=>_(be)]),d(R,Pe)}),d(j,oe)});var I=i(z,4),L=n(I);{var ge=j=>{var V=Be("Reading the card…");d(j,V)},ee=j=>{var V=Be();w(()=>y(V,e(m))),d(j,V)};k(L,j=>{t().processing?j(ge):j(ee,-1)})}w(()=>{A=Te(x,1,"card-scene svelte-1pt4ba2",null,A,{on:u()}),T=Te(q,1,"card svelte-1pt4ba2",null,T,{processing:t().processing,initializing:c()&&!e(b)})}),d(s,x),St(),l()}var S_=p('
            '),E_=p('
            WAVEFORM // OSC-01 TGT ▸
            ');function C_(s,a){Tt(a,!0);const t=()=>Zt(ga,"$status",r),[r,l]=Ea();let c=Ct(a,"recording",3,!1),u=Ct(a,"active",3,!0);const v=126,f=500,h=78;let b=S("");const m=ce(()=>t().audio_ready!==!1),_=ce(()=>t().active_target_label||"Focused Window");qt(()=>{const R=new Float32Array(v);let B=0;return Ks(be=>{B+=.016;let Pe=0;if(t().processing)Pe=.55*Math.sin(B*9)*(.6+.4*Math.sin(B*1.7));else if(c()&&t().audio_ready===!1)Pe=.05*(Math.random()*2-1);else if(c()){const K=Math.random()*2-1;Pe=Math.min(1,be*1.5)*(.45*Math.sin(B*24)+.55*K)}R.copyWithin(0,1),R[v-1]=Pe;let ue="";for(let K=0;K{var B=Be("· TRANSCRIBING");d(R,B)},fe=R=>{var B=Be("· CALIBRATING");d(R,B)},Q=R=>{var B=Be("· LIVE TRACE");d(R,B)};k(se,R=>{t().processing?R(ne):c()&&!e(m)?R(fe,1):R(Q,-1)})}var z=i(D,4),I=i(n(z),2),L=n(I),ge=i(T,2),ee=i(n(ge),6);pt(ee,16,()=>[1,2,3,4],ft,(R,B)=>{var be=S_();w(()=>na(be,`left: ${B*20}%`)),d(R,be)});var j=i(ee,2);mt(j,"viewBox","0 0 500 78");var V=n(j),oe=i(V);w(()=>{A=Te(x,1,"scope svelte-xjziu1",null,A,{on:u(),processing:t().processing,initializing:c()&&!e(m)}),y(L,e(_)),mt(V,"d",e(b)),mt(oe,"d",e(b))}),d(s,x),St(),l()}var A_=p('
            ⌖
            ');function M_(s,a){Tt(a,!0);const t=()=>Zt(ga,"$status",r),[r,l]=Ea();let c=Ct(a,"recording",3,!1),u=Ct(a,"active",3,!0),v=S(0);const f=ce(()=>t().audio_ready!==!1),h=ce(()=>t().active_target_label||"Focused Window");qt(()=>Ks(L=>o(v,L,!0)));var b=A_();let m;var _=i(n(b),2),x=i(n(_),2),A=n(x),q=n(A);{var T=L=>{var ge=Be("PULSE // ANALYZING");d(L,ge)},D=L=>{var ge=Be("PULSE // ACQUIRING");d(L,ge)},se=L=>{var ge=Be("PULSE // TARGET LOCK");d(L,ge)};k(q,L=>{t().processing?L(T):c()&&!e(f)?L(D,1):L(se,-1)})}var ne=i(A,2),fe=n(ne);{var Q=L=>{var ge=Be("Decoding transmission…");d(L,ge)},z=L=>{var ge=Be("Connecting mic…");d(L,ge)},I=L=>{var ge=Be();w(()=>y(ge,e(h))),d(L,ge)};k(fe,L=>{t().processing?L(Q):c()&&!e(f)?L(z,1):L(I,-1)})}w(()=>{var L;m=Te(b,1,"radar svelte-13tl5wx",null,m,{on:u(),processing:t().processing,initializing:c()&&!e(f)}),na(b,`--lvl: ${(L=e(v))!=null?L:""}`)}),d(s,b),St(),l()}var P_=p('
            '),D_=p('
            OCEAN WAVE
            ');function z_(s,a){Tt(a,!0);const t=()=>Zt(ga,"$status",r),[r,l]=Ea();let c=Ct(a,"recording",3,!1);Ct(a,"speaking",3,!1);let u=Ct(a,"active",3,!0);const v=380,f=90;let h=S(""),b=S(""),m=S(""),_=S(60);const x=ce(()=>t().audio_ready!==!1),A=ce(()=>t().active_target_label||"Focused Window");function q(K,J,Se,De){let le=`M 0 ${f} L 0 ${De.toFixed(1)}`;for(let W=0;W<=v;W+=8){const ae=De+Math.sin(W*J+Se)*K;le+=` L ${W} ${ae.toFixed(1)}`}return le+` L ${v} ${f} Z`}qt(()=>{let K=0;return Ks(J=>{K+=.016;const Se=J,De=t().processing?4+2.5*Math.sin(K*1.6):0,le=64-Se*20-De,W=56-Se*24-De*1.2,ae=47-Se*28-De*1.4,O=(t().processing?5:2.5)+Se*14,X=(t().processing?6:2)+Se*18,ve=(t().processing?7:1.5)+Se*22;o(h,q(O,.014,K*2.1,le),!0),o(b,q(X,.022,-K*3,W),!0),o(m,q(ve,.018,K*3.9,ae),!0),o(_,38+ae-21+Math.sin(K*2.2)*2.5)})});var T=D_();let D;var se=i(n(T),4),ne=n(se);{var fe=K=>{var J=Be("deep current — processing");d(K,J)},Q=K=>{var J=Be("low tide — preparing");d(K,J)},z=K=>{var J=Be("high tide — listening");d(K,J)};k(ne,K=>{t().processing?K(fe):c()&&!e(x)?K(Q,1):K(z,-1)})}var I=i(se,2),L=n(I);mt(L,"viewBox","0 0 380 90");var ge=n(L),ee=i(ge),j=i(ee),V=i(I,2);pt(V,16,()=>[0,1,2],ft,(K,J)=>{var Se=P_();w(()=>na(Se,`left: ${64+J*112}px; animation-delay: ${J*1.4}s;`)),d(K,Se)});var oe=i(V,2),R=i(n(oe),2),B=n(R);{var be=K=>{var J=Be("Sounding the depths…");d(K,J)},Pe=K=>{var J=Be("Casting off…");d(K,J)},ue=K=>{var J=Be();w(()=>y(J,e(A))),d(K,J)};k(B,K=>{t().processing?K(be):c()&&!e(x)?K(Pe,1):K(ue,-1)})}w(()=>{var K;D=Te(T,1,"ocean svelte-1orgnnz",null,D,{on:u(),processing:t().processing}),mt(ge,"d",e(h)),mt(ee,"d",e(b)),mt(j,"d",e(m)),na(oe,`top: ${(K=e(_))!=null?K:""}px;`)}),d(s,T),St(),l()}var I_=p("
            "),O_=p('
            ');function L_(s,a){Tt(a,!0);const t=()=>Zt(ga,"$status",r),[r,l]=Ea();let c=Ct(a,"recording",3,!1),u=Ct(a,"active",3,!0);const v=5,f=8,h=52;let b=S(yt(Array(v).fill(f)));const m=ce(()=>t().audio_ready!==!1),_=ce(()=>t().active_target_label||"Focused Window");function x(j,V,oe,R,B,be,Pe,ue){const K=(V-1)/2,J=1-Math.abs(j-K)/(K+1)*.4;let Se;if(be)Se=(Math.sin(R*4-j*.85)*.5+.5)*J;else if(B&&!Pe)Se=0;else if(B){const De=Math.sin(R*3-j*.8);Se=Math.min(1,Math.max(0,oe*J*(.9+.1*De)*(.85+.3*ue)))}else Se=0;return f+(h-f)*Se}qt(()=>{let j=0;return Ks(V=>{j+=.016;const oe=t().audio_ready!==!1,R=new Array(v);for(let B=0;B{var V=Be("PROCESSING");d(j,V)},z=j=>{var V=Be("STANDBY");d(j,V)},I=j=>{var V=Be("LISTENING");d(j,V)};k(fe,j=>{t().processing?j(Q):c()&&!e(m)?j(z,1):j(I,-1)})}var L=i(T,2);pt(L,21,()=>e(b),ft,(j,V)=>{var oe=I_();let R;w(()=>{var B;R=Te(oe,1,"bar svelte-12wa5lj",null,R,{dim:c()&&!e(m),processing:t().processing}),na(oe,`height: ${(B=e(V))!=null?B:""}px`)}),d(j,oe)});var ge=i(L,4),ee=n(ge);w(()=>{q=Te(A,1,"mono svelte-12wa5lj",null,q,{on:u()}),se=Te(D,1,"dot svelte-12wa5lj",null,se,{lit:!t().processing&&!(c()&&!e(m)),processing:t().processing,standby:c()&&!e(m)}),y(ee,e(_))}),d(s,A),St(),l()}var R_=p('
            '),N_=p('
            SPECTRUM // EQ-16 OUT ▸
            ');function V_(s,a){Tt(a,!0);const t=()=>Zt(ga,"$status",r),[r,l]=Ea();let c=Ct(a,"recording",3,!1),u=Ct(a,"active",3,!0);const v=16,f=6,h=96;let b=S(yt(Array(v).fill(f)));const m=ce(()=>t().audio_ready!==!1),_=ce(()=>t().active_target_label||"Focused Window");function x(V,oe,R,B,be,Pe,ue,K){const J=V/(oe-1);let Se;if(Pe)Se=Math.pow(Math.sin(B*2.4-J*6)*.5+.5,1.5);else if(be&&!ue)Se=K*.06;else if(be){const De=2+J*9,le=V*.7,W=Math.sin(B*De+le)*.5+.5,ae=1-J*.35;Se=Math.min(1,Math.max(0,R*ae*(.35+.65*W)*(.7+.6*K)))}else Se=0;return f+(h-f)*Se}qt(()=>{let V=0;return Ks(oe=>{V+=.016;const R=t().audio_ready!==!1,B=new Array(v);for(let be=0;be{var oe=Be("· ANALYZING");d(V,oe)},z=V=>{var oe=Be("· WARMING UP");d(V,oe)},I=V=>{var oe=Be("· LIVE");d(V,oe)};k(fe,V=>{t().processing?V(Q):c()&&!e(m)?V(z,1):V(I,-1)})}var L=i(ne,4),ge=i(n(L),2),ee=n(ge),j=i(T,4);pt(j,21,()=>e(b),ft,(V,oe)=>{var R=R_();w(()=>{var B;return na(R,`height: ${(B=e(oe))!=null?B:""}px; opacity: ${.45+.55*(e(oe)/h)}`)}),d(V,R)}),w(()=>{q=Te(A,1,"spectrum svelte-194vixl",null,q,{on:u()}),se=Te(D,1,"led svelte-194vixl",null,se,{processing:t().processing,standby:c()&&!e(m)}),y(ee,e(_))}),d(s,A),St(),l()}var F_=p('
            VOXCTRL — /dev/mic0
            ');function B_(s,a){Tt(a,!0);const t=()=>Zt(ga,"$status",r),[r,l]=Ea();let c=Ct(a,"recording",3,!1),u=Ct(a,"active",3,!0);const v=20;let f=S(yt("·".repeat(v))),h=S(!1);const b=ce(()=>t().audio_ready!==!1),m=ce(()=>t().active_target_label||"Focused Window");function _(B,be,Pe,ue,K){const J=v;if(ue){const Se=2*J,De=Math.floor(be*10)%Se,le=Deae===le?"█":"·").join("")}else{if(Pe&&!K)return Array.from({length:J},(Se,De)=>De%4===0?"·":" ").join("");if(Pe){const Se=Math.round(Math.min(1,Math.max(0,B))*J);return Array.from({length:J},(De,le)=>le{let B=0;return Ks(be=>{B+=.016;const Pe=t().audio_ready!==!1;o(f,_(be,B,c(),t().processing,Pe),!0),o(h,Math.sin(B*5.5)>0)})});var x=F_();let A;var q=i(n(x),2),T=n(q),D=n(T),se=i(T,2);let ne;var fe=n(se);{var Q=B=>{var be=Be("[PROC]");d(B,be)},z=B=>{var be=Be("[INIT]");d(B,be)},I=B=>{var be=Be("[REC ]");d(B,be)};k(fe,B=>{t().processing?B(Q):c()&&!e(b)?B(z,1):B(I,-1)})}var L=i(fe),ge=i(se,2),ee=n(ge);{var j=B=>{var be=Be("transcribing audio stream");d(B,be)},V=B=>{var be=Be("connecting input device");d(B,be)},oe=B=>{var be=Be("streaming to output");d(B,be)};k(ee,B=>{t().processing?B(j):c()&&!e(b)?B(V,1):B(oe,-1)})}var R=i(ee,1,!0);w(()=>{var B,be;A=Te(x,1,"terminal svelte-pvtvge",null,A,{on:u()}),y(D,`$ voxctrl listen --target "${(B=e(m))!=null?B:""}"`),ne=Te(se,1,"line2 svelte-pvtvge",null,ne,{processing:t().processing,standby:c()&&!e(b)}),y(L,` ${(be=e(f))!=null?be:""}`),y(R,e(h)?"_":" ")}),d(s,x),St(),l()}var q_=p('
            VU
            -20
            0
            +3
            ');function j_(s,a){Tt(a,!0);const t=()=>Zt(ga,"$status",r),[r,l]=Ea();let c=Ct(a,"recording",3,!1),u=Ct(a,"active",3,!0);const v=144,f=70,h=58,b=-.95,m=.95,_=.016;let x=S(yt(D(b)));const A=ce(()=>t().audio_ready!==!1),q=ce(()=>t().active_target_label||"Focused Window");function T(ue){return b+Math.min(1,Math.max(0,ue))*(m-b)}function D(ue){const K=v+Math.sin(ue)*h,J=f-Math.cos(ue)*h;return`M ${v} ${f} L ${K.toFixed(1)} ${J.toFixed(1)}`}function se(ue,K,J){const le=256*(K-ue.x)-24.96*ue.v;ue.v+=le*J,ue.x+=ue.v*J,Math.abs(ue.x-K)<.001&&Math.abs(ue.v)<.02&&(ue.x=K,ue.v=0)}qt(()=>{let ue=0;const K={x:b,v:0};return Ks(J=>{ue+=_;const Se=t().audio_ready!==!1;let De;t().processing?De=T(.3+.25*Math.abs(Math.sin(ue*2))):c()&&Se?De=T(J):De=b,se(K,De,_),o(x,D(K.x),!0)})});var ne=q_();let fe;var Q=n(ne),z=i(n(Q),2),I=n(z);{var L=ue=>{var K=Be("ANALOG // PROCESSING");d(ue,K)},ge=ue=>{var K=Be("ANALOG // WARMING UP");d(ue,K)},ee=ue=>{var K=Be("ANALOG // INPUT LEVEL");d(ue,K)};k(I,ue=>{t().processing?ue(L):c()&&!e(A)?ue(ge,1):ue(ee,-1)})}var j=i(z,4);let V;var oe=i(Q,2),R=i(n(oe),20),B=n(R),be=i(oe,2),Pe=n(be);w(()=>{fe=Te(ne,1,"vinyl svelte-kq5b5i",null,fe,{on:u()}),V=Te(j,1,"led svelte-kq5b5i",null,V,{processing:t().processing,standby:c()&&!e(A)}),mt(B,"d",e(x)),y(Pe,e(q))}),d(s,ne),St(),l()}var U_=p("
            ",1),K_=p('
            '),H_=p('
            ⚡
            '),W_=p(''),$_=p('
            SYSTEM RESPONDING
            '),G_=p('
            RECORDING
            '),Y_=p('
            '),J_=p('
            ');function X_(s,a){Tt(a,!0);const t=()=>Zt(ga,"$status",v),r=()=>Zt($d,"$recording",v),l=()=>Zt(Ot,"$config",v),c=()=>Zt(Gd,"$speaking",v),u=()=>Zt(Yd,"$mcpRecording",v),[v,f]=Ea(),h=new Set(["waveform","pulse","blue_wave","mono_bars","spectrum","terminal","vinyl","voice_card","none"]);let b=S(!0),m=S(void 0);const _=ce(()=>t().active_target_label||"Focused Window"),x=ce(()=>t().active_target_label||"Focused Window");let A=S(!1),q=S(""),T=S(""),D=null,se=null,ne=null,fe=null,Q=ce(()=>r()&&l().ui.show_overlay||c()&&l().tts.enabled&&l().tts.response_overlay||u()&&l().mcp.visual_feedback||e(A)&&l().ui.show_command_overlay),z=ce(()=>c()&&l().tts.enabled&&l().tts.response_overlay&&!r()),I=S(!1),L=S(!1);pa(()=>{!e(I)||e(z)?o(L,!1):r()||t().processing?o(L,!0):e(Q)&&o(L,!1)});let ge=ce(()=>l().ui.overlay_style!=="none"&&l().ui.show_overlay&&e(L)),ee=S(!1),j,V;pa(()=>(e(Q)?(j&&clearTimeout(j),o(I,!0),V&&clearTimeout(V),V=setTimeout(()=>{o(ee,!0)},25),J(l().ui.overlay_style)):(o(ee,!1),j=setTimeout(()=>{o(I,!1)},450)),()=>{j&&clearTimeout(j),V&&clearTimeout(V)}));let oe=ce(()=>e(m)?e(m).html.replace(/\{\{trigger\}\}/g,e(_)).replace(/\{\{target\}\}/g,e(x)):""),R=0,B=S(0),be=null,Pe=null;function ue(){Pe===null&&(Pe=requestAnimationFrame(K))}function K(){if(o(B,e(B)+(R-e(B))*.42),R*=.82,R<5e-4&&(R=0),e(B)<5e-4&&o(B,0),e(m)&&window.dispatchEvent(new CustomEvent("voxctrl-status",{detail:{recording:r(),processing:t().processing,speaking:c(),audio_ready:t().audio_ready!==!1,active_target_label:t().active_target_label||"Focused Window",audio_level:e(B)}})),e(B)===0&&R===0&&!e(I)){Pe=null;return}Pe=requestAnimationFrame(K)}pa(()=>{e(I)&&ue()});function J(ae){if(h.has(ae)){o(m,void 0);return}E("get_custom_overlay",{name:ae}).then(O=>{o(m,O!=null?O:void 0,!0)}).catch(O=>{console.error(`Failed to load custom overlay "${ae}":`,O),o(m,void 0)})}pa(()=>{const ae=l().ui.overlay_style;o(b,!1);const O=setTimeout(()=>{o(b,!0)},25);return J(ae),()=>clearTimeout(O)}),pa(()=>{const ae=document.documentElement;ae.style.setProperty("--voxctrl-audio-level",String(e(B))),ae.style.setProperty("--voxctrl-recording",r()?"1":"0"),ae.style.setProperty("--voxctrl-processing",t().processing?"1":"0"),ae.style.setProperty("--voxctrl-speaking",c()?"1":"0"),ae.style.setProperty("--voxctrl-mcp-recording",u()?"1":"0"),ae.style.setProperty("--voxctrl-audio-ready",t().audio_ready!==!1?"1":"0")}),qt(()=>{document.documentElement.classList.add("overlay-window"),document.body.classList.add("overlay-window"),requestAnimationFrame(()=>{requestAnimationFrame(()=>{E("overlay_content_ready").catch(()=>{})})}),document.documentElement.style.setProperty("background","transparent","important"),document.body.style.setProperty("background","transparent","important");const ae=document.getElementById("app");return ae&&ae.style.setProperty("background","transparent","important"),ha("overlay-style-selected",O=>{J(O.payload)}).then(O=>{fe=O}),ha("audio-level",O=>{R=Math.min(1,O.payload*100),ue(),window.dispatchEvent(new CustomEvent("voxctrl-audio-level",{detail:O.payload}))}).then(O=>{be=O}),ha("command-executed",O=>{if(!l().ui.show_command_overlay)return;o(q,O.payload.command,!0),o(T,O.payload.summary,!0),o(A,!0),D&&clearTimeout(D);const X=(O.payload.duration_secs||l().ui.command_overlay_duration_secs||3)*1e3;D=setTimeout(()=>{o(A,!1)},X)}).then(O=>{se=O}),ha("command-withdrawn",()=>{D&&clearTimeout(D),o(A,!1)}).then(O=>{ne=O}),()=>{document.documentElement.classList.remove("overlay-window"),document.body.classList.remove("overlay-window"),be&&be(),se&&se(),ne&&ne(),fe&&fe(),D&&clearTimeout(D),Pe!==null&&cancelAnimationFrame(Pe)}});function Se(ae){return ae.querySelectorAll("script").forEach(X=>{const ve=document.createElement("script");Array.from(X.attributes).forEach(Ae=>{ve.setAttribute(Ae.name,Ae.value)}),ve.appendChild(document.createTextNode(X.innerHTML)),X.parentNode&&X.parentNode.replaceChild(ve,X)}),{destroy(){window.dispatchEvent(new CustomEvent("voxctrl-cleanup"))}}}var De=J_(),le=n(De);{var W=ae=>{var O=Y_(),X=n(O);{var ve=de=>{var $=K_(),U=n($);{var te=H=>{C_(H,{get recording(){return r()},get active(){return e(ee)}})},Y=H=>{M_(H,{get recording(){return r()},get active(){return e(ee)}})},_e=H=>{z_(H,{get recording(){return r()},get speaking(){return c()},get active(){return e(ee)}})},me=H=>{L_(H,{get recording(){return r()},get active(){return e(ee)}})},pe=H=>{V_(H,{get recording(){return r()},get active(){return e(ee)}})},ze=H=>{B_(H,{get recording(){return r()},get active(){return e(ee)}})},$e=H=>{j_(H,{get recording(){return r()},get active(){return e(ee)}})},st=H=>{var M=U_(),C=ht(M);wl(C,()=>``);var ke=i(C,2);let Ke;wl(ke,()=>e(oe),!0),Fs(ke,ye=>Se==null?void 0:Se(ye)),w(()=>Ke=Te(ke,1,"custom-overlay-content svelte-rmqsd6",null,Ke,{active:e(ee)})),d(H,M)},it=H=>{T_(H,{get recording(){return r()},get speaking(){return c()},get active(){return e(ee)}})};k(U,H=>{l().ui.overlay_style==="waveform"?H(te):l().ui.overlay_style==="pulse"?H(Y,1):l().ui.overlay_style==="blue_wave"?H(_e,2):l().ui.overlay_style==="mono_bars"?H(me,3):l().ui.overlay_style==="spectrum"?H(pe,4):l().ui.overlay_style==="terminal"?H(ze,5):l().ui.overlay_style==="vinyl"?H($e,6):e(m)?H(st,7):l().ui.overlay_style!=="none"&&H(it,8)})}d(de,$)};k(X,de=>{e(ge)&&de(ve)})}var Ae=i(X,2);{var Fe=de=>{var $=H_();let U;var te=i(n($),2),Y=n(te),_e=n(Y),me=i(Y,2),pe=n(me);w(ze=>{var $e;U=Te($,1,"system-response-box command svelte-rmqsd6",null,U,{on:e(ee)}),y(_e,ze),y(pe,`▸ ${($e=e(T))!=null?$e:""}`)},[()=>e(q).toUpperCase()]),d(de,$)};k(Ae,de=>{e(A)&&l().ui.show_command_overlay&&!e(z)&&de(Fe)})}var he=i(Ae,2);{var re=de=>{var $=$_();let U;var te=n($);pt(te,20,()=>[0,1,2,3,4],ft,(pe,ze)=>{var $e=W_();w(()=>na($e,`animation-delay: ${ze*.13}s`)),d(pe,$e)});var Y=i(te,2),_e=i(n(Y),2),me=n(_e);w(()=>{var pe;U=Te($,1,"system-response-box speaking svelte-rmqsd6",null,U,{on:e(ee)}),y(me,`▸ ${(pe=e(x))!=null?pe:""}`)}),d(de,$)};k(he,de=>{e(z)&&de(re)})}var we=i(he,2);{var Je=de=>{var $=G_();let U;var te=i(n($),2),Y=i(n(te),2),_e=n(Y);w(()=>{var me;U=Te($,1,"system-response-box mcp svelte-rmqsd6",null,U,{on:e(ee)}),y(_e,`▸ ${(me=e(x))!=null?me:""}`)}),d(de,$)};k(we,de=>{u()&&l().mcp.visual_feedback&&de(Je)})}d(ae,O)};k(le,ae=>{e(I)&&e(b)&&ae(W)})}w(()=>{mt(De,"data-recording",r()),mt(De,"data-speaking",c()),mt(De,"data-processing",t().processing)}),d(s,De),St(),f()}class rl{constructor(...a){this.type="Logical",a.length===1?"Logical"in a[0]?(this.width=a[0].Logical.width,this.height=a[0].Logical.height):(this.width=a[0].width,this.height=a[0].height):(this.width=a[0],this.height=a[1])}toPhysical(a){return new js(this.width*a,this.height*a)}[ls](){return{width:this.width,height:this.height}}toJSON(){return this[ls]()}}class js{constructor(...a){this.type="Physical",a.length===1?"Physical"in a[0]?(this.width=a[0].Physical.width,this.height=a[0].Physical.height):(this.width=a[0].width,this.height=a[0].height):(this.width=a[0],this.height=a[1])}toLogical(a){return new rl(this.width/a,this.height/a)}[ls](){return{width:this.width,height:this.height}}toJSON(){return this[ls]()}}class hn{constructor(a){this.size=a}toLogical(a){return this.size instanceof rl?this.size:this.size.toLogical(a)}toPhysical(a){return this.size instanceof js?this.size:this.size.toPhysical(a)}[ls](){return{[`${this.size.type}`]:{width:this.size.width,height:this.size.height}}}toJSON(){return this[ls]()}}class ll{constructor(...a){this.type="Logical",a.length===1?"Logical"in a[0]?(this.x=a[0].Logical.x,this.y=a[0].Logical.y):(this.x=a[0].x,this.y=a[0].y):(this.x=a[0],this.y=a[1])}toPhysical(a){return new as(this.x*a,this.y*a)}[ls](){return{x:this.x,y:this.y}}toJSON(){return this[ls]()}}class as{constructor(...a){this.type="Physical",a.length===1?"Physical"in a[0]?(this.x=a[0].Physical.x,this.y=a[0].Physical.y):(this.x=a[0].x,this.y=a[0].y):(this.x=a[0],this.y=a[1])}toLogical(a){return new ll(this.x/a,this.y/a)}[ls](){return{x:this.x,y:this.y}}toJSON(){return this[ls]()}}class Ci{constructor(a){this.position=a}toLogical(a){return this.position instanceof ll?this.position:this.position.toLogical(a)}toPhysical(a){return this.position instanceof as?this.position:this.position.toPhysical(a)}[ls](){return{[`${this.position.type}`]:{x:this.position.x,y:this.position.y}}}toJSON(){return this[ls]()}}var Wi;(function(s){s[s.Critical=1]="Critical",s[s.Informational=2]="Informational"})(Wi||(Wi={}));class Ko{constructor(a){this._preventDefault=!1,this.event=a.event,this.id=a.id}preventDefault(){this._preventDefault=!0}isPreventDefault(){return this._preventDefault}}var Fr;(function(s){s.None="none",s.Normal="normal",s.Indeterminate="indeterminate",s.Paused="paused",s.Error="error"})(Fr||(Fr={}));function ol(){return new cl(window.__TAURI_INTERNALS__.metadata.currentWindow.label,{skip:!0})}async function Vi(){return E("plugin:window|get_all_windows").then(s=>s.map(a=>new cl(a,{skip:!0})))}const br=["tauri://created","tauri://error"];class cl{constructor(a,t={}){var r;this.label=a,this.listeners=Object.create(null),t!=null&&t.skip||E("plugin:window|create",{options:{...t,parent:typeof t.parent=="string"?t.parent:(r=t.parent)===null||r===void 0?void 0:r.label,label:a}}).then(async()=>this.emit("tauri://created")).catch(async l=>this.emit("tauri://error",l))}static async getByLabel(a){var t;return(t=(await Vi()).find(r=>r.label===a))!==null&&t!==void 0?t:null}static getCurrent(){return ol()}static async getAll(){return Vi()}static async getFocusedWindow(){for(const a of await Vi())if(await a.isFocused())return a;return null}async listen(a,t){return this._handleTauriEvent(a,t)?()=>{const r=this.listeners[a];r.splice(r.indexOf(t),1)}:ha(a,t,{target:{kind:"Window",label:this.label}})}async once(a,t){return this._handleTauriEvent(a,t)?()=>{const r=this.listeners[a];r.splice(r.indexOf(t),1)}:Ud(a,t,{target:{kind:"Window",label:this.label}})}async emit(a,t){if(br.includes(a)){for(const r of this.listeners[a]||[])r({event:a,id:-1,payload:t});return}return Vo(a,t)}async emitTo(a,t,r){if(br.includes(t)){for(const l of this.listeners[t]||[])l({event:t,id:-1,payload:r});return}return Kd(a,t,r)}_handleTauriEvent(a,t){return br.includes(a)?(a in this.listeners?this.listeners[a].push(t):this.listeners[a]=[t],!0):!1}async scaleFactor(){return E("plugin:window|scale_factor",{label:this.label})}async innerPosition(){return E("plugin:window|inner_position",{label:this.label}).then(a=>new as(a))}async outerPosition(){return E("plugin:window|outer_position",{label:this.label}).then(a=>new as(a))}async innerSize(){return E("plugin:window|inner_size",{label:this.label}).then(a=>new js(a))}async outerSize(){return E("plugin:window|outer_size",{label:this.label}).then(a=>new js(a))}async isFullscreen(){return E("plugin:window|is_fullscreen",{label:this.label})}async isMinimized(){return E("plugin:window|is_minimized",{label:this.label})}async isMaximized(){return E("plugin:window|is_maximized",{label:this.label})}async isFocused(){return E("plugin:window|is_focused",{label:this.label})}async isDecorated(){return E("plugin:window|is_decorated",{label:this.label})}async isResizable(){return E("plugin:window|is_resizable",{label:this.label})}async isMaximizable(){return E("plugin:window|is_maximizable",{label:this.label})}async isMinimizable(){return E("plugin:window|is_minimizable",{label:this.label})}async isClosable(){return E("plugin:window|is_closable",{label:this.label})}async isVisible(){return E("plugin:window|is_visible",{label:this.label})}async title(){return E("plugin:window|title",{label:this.label})}async theme(){return E("plugin:window|theme",{label:this.label})}async isAlwaysOnTop(){return E("plugin:window|is_always_on_top",{label:this.label})}async activityName(){return E("plugin:window|activity_name",{label:this.label})}async sceneIdentifier(){return E("plugin:window|scene_identifier",{label:this.label})}async center(){return E("plugin:window|center",{label:this.label})}async requestUserAttention(a){let t=null;return a&&(a===Wi.Critical?t={type:"Critical"}:t={type:"Informational"}),E("plugin:window|request_user_attention",{label:this.label,value:t})}async setResizable(a){return E("plugin:window|set_resizable",{label:this.label,value:a})}async setEnabled(a){return E("plugin:window|set_enabled",{label:this.label,value:a})}async isEnabled(){return E("plugin:window|is_enabled",{label:this.label})}async setMaximizable(a){return E("plugin:window|set_maximizable",{label:this.label,value:a})}async setMinimizable(a){return E("plugin:window|set_minimizable",{label:this.label,value:a})}async setClosable(a){return E("plugin:window|set_closable",{label:this.label,value:a})}async setTitle(a){return E("plugin:window|set_title",{label:this.label,value:a})}async maximize(){return E("plugin:window|maximize",{label:this.label})}async unmaximize(){return E("plugin:window|unmaximize",{label:this.label})}async toggleMaximize(){return E("plugin:window|toggle_maximize",{label:this.label})}async minimize(){return E("plugin:window|minimize",{label:this.label})}async unminimize(){return E("plugin:window|unminimize",{label:this.label})}async show(){return E("plugin:window|show",{label:this.label})}async hide(){return E("plugin:window|hide",{label:this.label})}async close(){return E("plugin:window|close",{label:this.label})}async destroy(){return E("plugin:window|destroy",{label:this.label})}async setDecorations(a){return E("plugin:window|set_decorations",{label:this.label,value:a})}async setShadow(a){return E("plugin:window|set_shadow",{label:this.label,value:a})}async setEffects(a){return E("plugin:window|set_effects",{label:this.label,value:a})}async clearEffects(){return E("plugin:window|set_effects",{label:this.label,value:null})}async setAlwaysOnTop(a){return E("plugin:window|set_always_on_top",{label:this.label,value:a})}async setAlwaysOnBottom(a){return E("plugin:window|set_always_on_bottom",{label:this.label,value:a})}async setContentProtected(a){return E("plugin:window|set_content_protected",{label:this.label,value:a})}async setSize(a){return E("plugin:window|set_size",{label:this.label,value:a instanceof hn?a:new hn(a)})}async setMinSize(a){return E("plugin:window|set_min_size",{label:this.label,value:a instanceof hn?a:a?new hn(a):null})}async setMaxSize(a){return E("plugin:window|set_max_size",{label:this.label,value:a instanceof hn?a:a?new hn(a):null})}async setSizeConstraints(a){function t(r){return r?{Logical:r}:null}return E("plugin:window|set_size_constraints",{label:this.label,value:{minWidth:t(a==null?void 0:a.minWidth),minHeight:t(a==null?void 0:a.minHeight),maxWidth:t(a==null?void 0:a.maxWidth),maxHeight:t(a==null?void 0:a.maxHeight)}})}async setPosition(a){return E("plugin:window|set_position",{label:this.label,value:a instanceof Ci?a:new Ci(a)})}async setFullscreen(a){return E("plugin:window|set_fullscreen",{label:this.label,value:a})}async setSimpleFullscreen(a){return E("plugin:window|set_simple_fullscreen",{label:this.label,value:a})}async setFocus(){return E("plugin:window|set_focus",{label:this.label})}async setFocusable(a){return E("plugin:window|set_focusable",{label:this.label,value:a})}async setIcon(a){return E("plugin:window|set_icon",{label:this.label,value:Hi(a)})}async setSkipTaskbar(a){return E("plugin:window|set_skip_taskbar",{label:this.label,value:a})}async setCursorGrab(a){return E("plugin:window|set_cursor_grab",{label:this.label,value:a})}async setCursorVisible(a){return E("plugin:window|set_cursor_visible",{label:this.label,value:a})}async setCursorIcon(a){return E("plugin:window|set_cursor_icon",{label:this.label,value:a})}async setBackgroundColor(a){return E("plugin:window|set_background_color",{color:a})}async setCursorPosition(a){return E("plugin:window|set_cursor_position",{label:this.label,value:a instanceof Ci?a:new Ci(a)})}async setIgnoreCursorEvents(a){return E("plugin:window|set_ignore_cursor_events",{label:this.label,value:a})}async startDragging(){return E("plugin:window|start_dragging",{label:this.label})}async startResizeDragging(a){return E("plugin:window|start_resize_dragging",{label:this.label,value:a})}async setBadgeCount(a){return E("plugin:window|set_badge_count",{label:this.label,value:a})}async setBadgeLabel(a){return E("plugin:window|set_badge_label",{label:this.label,value:a})}async setOverlayIcon(a){return E("plugin:window|set_overlay_icon",{label:this.label,value:a?Hi(a):void 0})}async setProgressBar(a){return E("plugin:window|set_progress_bar",{label:this.label,value:a})}async setVisibleOnAllWorkspaces(a){return E("plugin:window|set_visible_on_all_workspaces",{label:this.label,value:a})}async setTitleBarStyle(a){return E("plugin:window|set_title_bar_style",{label:this.label,value:a})}async setTheme(a){return E("plugin:window|set_theme",{label:this.label,value:a})}async onResized(a){return this.listen(Ha.WINDOW_RESIZED,t=>{t.payload=new js(t.payload),a(t)})}async onMoved(a){return this.listen(Ha.WINDOW_MOVED,t=>{t.payload=new as(t.payload),a(t)})}async onCloseRequested(a){return this.listen(Ha.WINDOW_CLOSE_REQUESTED,async t=>{const r=new Ko(t);await a(r),r.isPreventDefault()||await this.destroy()})}async onDragDropEvent(a){const t=await this.listen(Ha.DRAG_ENTER,u=>{a({...u,payload:{type:"enter",paths:u.payload.paths,position:new as(u.payload.position)}})}),r=await this.listen(Ha.DRAG_OVER,u=>{a({...u,payload:{type:"over",position:new as(u.payload.position)}})}),l=await this.listen(Ha.DRAG_DROP,u=>{a({...u,payload:{type:"drop",paths:u.payload.paths,position:new as(u.payload.position)}})}),c=await this.listen(Ha.DRAG_LEAVE,u=>{a({...u,payload:{type:"leave"}})});return()=>{t(),l(),r(),c()}}async onFocusChanged(a){const t=await this.listen(Ha.WINDOW_FOCUS,l=>{a({...l,payload:!0})}),r=await this.listen(Ha.WINDOW_BLUR,l=>{a({...l,payload:!1})});return()=>{t(),r()}}async onScaleChanged(a){return this.listen(Ha.WINDOW_SCALE_FACTOR_CHANGED,a)}async onThemeChanged(a){return this.listen(Ha.WINDOW_THEME_CHANGED,a)}}var Dl;(function(s){s.Disabled="disabled",s.Throttle="throttle",s.Suspend="suspend"})(Dl||(Dl={}));var zl;(function(s){s.Default="default",s.FluentOverlay="fluentOverlay"})(zl||(zl={}));var Br;(function(s){s.AppearanceBased="appearanceBased",s.Light="light",s.Dark="dark",s.MediumLight="mediumLight",s.UltraDark="ultraDark",s.Titlebar="titlebar",s.Selection="selection",s.Menu="menu",s.Popover="popover",s.Sidebar="sidebar",s.HeaderView="headerView",s.Sheet="sheet",s.WindowBackground="windowBackground",s.HudWindow="hudWindow",s.FullScreenUI="fullScreenUI",s.Tooltip="tooltip",s.ContentBackground="contentBackground",s.UnderWindowBackground="underWindowBackground",s.UnderPageBackground="underPageBackground",s.Mica="mica",s.Blur="blur",s.Acrylic="acrylic",s.Tabbed="tabbed",s.TabbedDark="tabbedDark",s.TabbedLight="tabbedLight"})(Br||(Br={}));var qr;(function(s){s.FollowsWindowActiveState="followsWindowActiveState",s.Active="active",s.Inactive="inactive"})(qr||(qr={}));function ir(s){return s===null?null:{name:s.name,scaleFactor:s.scaleFactor,position:new as(s.position),size:new js(s.size),workArea:{position:new as(s.workArea.position),size:new js(s.workArea.size)}}}async function Z_(){return E("plugin:window|current_monitor").then(ir)}async function Q_(){return E("plugin:window|primary_monitor").then(ir)}async function eh(s,a){return E("plugin:window|monitor_from_point",{x:s,y:a}).then(ir)}async function th(){return E("plugin:window|available_monitors").then(s=>s.map(ir))}async function ah(){return E("plugin:window|cursor_position").then(s=>new as(s))}const sh=Object.freeze(Object.defineProperty({__proto__:null,CloseRequestedEvent:Ko,get Effect(){return Br},get EffectState(){return qr},LogicalPosition:ll,LogicalSize:rl,PhysicalPosition:as,PhysicalSize:js,get ProgressBarStatus(){return Fr},get UserAttentionType(){return Wi},Window:cl,availableMonitors:th,currentMonitor:Z_,cursorPosition:ah,getAllWindows:Vi,getCurrentWindow:ol,monitorFromPoint:eh,primaryMonitor:Q_},Symbol.toStringTag,{value:"Module"}));var nh=p('
            Installing the helper packages…

            You may be prompted for your administrator password.

            '),ih=p('
            Checking VoxCtrl setup…
            '),rh=p('

            '),lh=p('

            ',1),oh=p(`

            🔒 VoxCtrl asked your desktop to register its shortcuts and is told nothing else. It does not read your keyboard, cannot see what you type in other - applications, and needed no special permissions to set up.

            `),o_=p(' '),c_=p('not accepted by your desktop'),d_=p("
          • "),v_=p('
              '),u_=p(`

              Your desktop does not offer the global-shortcuts portal, so VoxCtrl is + applications, and needed no special permissions to set up.

              `),ch=p(' '),dh=p('not accepted by your desktop'),vh=p("
            • "),uh=p('
                '),ph=p(`

                Your desktop does not offer the global-shortcuts portal, so VoxCtrl is reading key events from the X server instead. This needed no permissions and no setup, and every gesture style works — but in this mode every keystroke passes through VoxCtrl. Nothing is stored or sent anywhere; a desktop with portal support (KDE Plasma, GNOME 48+, Hyprland) avoids it - entirely.

                `),p_=p(`

                Your desktop is holding VoxCtrl's shortcuts itself, which is why VoxCtrl + entirely.

                `),fh=p(`

                Your desktop is holding VoxCtrl's shortcuts itself, which is why VoxCtrl cannot read your keyboard here. It also means the desktop only reports the key going down, never coming back up: hold and double-tap styles cannot work on this route, and the Hotkeys tab offers only tap-to-start, - tap-to-stop.

                `),f_=p(`

                Your desktop does not offer the global-shortcuts portal, so VoxCtrl is + tap-to-stop.

                `),_h=p(`

                Your desktop does not offer the global-shortcuts portal, so VoxCtrl is falling back to reading input devices — access this machine already had, which VoxCtrl neither requested nor configured. Shortcuts work, but in this mode every keystroke passes through VoxCtrl. Nothing is stored or sent anywhere; if you would rather it did not happen at all, a desktop with - portal support (KDE Plasma, GNOME 48+, Hyprland) avoids it entirely.

                `),h_=p('

                '),__=p(`

                Global shortcuts require approval from your system. If you closed or cancelled - the desktop keybind prompt without approving, click below to show the prompt again.

                `,1),g_=p('

                '),m_=p('

                Global shortcuts require approval or registration from your system. VoxCtrl will not grant itself keyboard access to work around this.

                ',1),b_=p(' '),y_=p(' '),w_=p(` is missing, so transcriptions cannot be - typed into the focused window.`,1),k_=p(''),x_=p(''),T_=p('
                 
                '),S_=p('
                ',1),C_=p(' is downloaded and ready.',1),E_=p('Downloading in the background — no action needed.',1),M_=p(' is not downloaded yet, so dictation produces no text.',1),A_=p('
                '),P_=p('
                ❌
                '),z_=p(''),D_=p('
                ');function I_(s,a){Tt(a,!0);let t=S(null),r=S(!1),l=S(!1),c=S(null),u=S(!1),v=S(!1),f=S(!1),_=S(null),b=S(!1),m=S(null),h;async function x(){try{o(t,await C("get_setup_status"),!0)}catch(L){console.error("Failed to read setup status:",L)}}qt(()=>{x(),h=setInterval(x,2e3)}),ar(()=>{h&&clearInterval(h)});async function M(){try{await ol().close()}catch(L){console.error("Failed to close window natively:",L)}}async function q(){var L;o(r,!0),o(c,null);try{await C("install_system_integration"),await x()}catch(B){o(c,(L=B==null?void 0:B.toString())!=null?L:"Install failed",!0),o(u,!0)}finally{o(r,!1)}}async function T(){var L;o(l,!0),o(c,null);try{await C("download_configured_model"),await x()}catch(B){o(c,(L=B==null?void 0:B.toString())!=null?L:"Download failed",!0)}finally{o(l,!1)}}async function z(){try{await C("open_settings_tab",{tab:"engine"})}catch(L){console.error("Failed to open the Engine settings tab:",L)}}async function se(){var L;o(f,!0),o(_,null);try{await C("open_shortcut_settings")}catch(B){o(_,(L=B==null?void 0:B.toString())!=null?L:"Could not open shortcut settings.",!0)}finally{o(f,!1)}}async function ne(){var L;o(b,!0),o(m,null);try{await C("approve_shortcuts"),await x()}catch(B){o(m,(L=B==null?void 0:B.toString())!=null?L:"Failed to configure shortcuts for your desktop.",!0),await x()}finally{o(b,!1)}}async function fe(){if(e(t))try{await navigator.clipboard.writeText(e(t).manual_package_commands),o(v,!0),setTimeout(()=>o(v,!1),2e3)}catch(L){console.error("Clipboard write failed:",L)}}const Q=ce(()=>e(t)?e(t).hotkeys.backend==="starting"?"busy":e(t).hotkeys_active?"ok":"todo":"busy"),D=ce(()=>e(t)?e(t).missing_injection_tool?"todo":"ok":"busy"),I=ce(()=>e(t)?e(t).model_ready?"ok":e(t).model_auto_downloads?"busy":"todo":"busy"),R=L=>L==="ok"?"✅":L==="busy"?"⏳":"⚠️";var ge=D_(),ee=n(ge);{var j=L=>{var B=s_();d(L,B)},V=L=>{var B=n_();d(L,B)},oe=L=>{var B=z_(),be=n(B),Pe=n(be),ue=n(Pe),W=i(Pe,2),J=n(W),Se=n(J),ze=i(J,2),le=n(ze),$=i(be,2),ae=n($);let O;var X=n(ae),ve=n(X),Me=i(X,2),Fe=i(n(Me),2),_e=n(Fe),re=i(Fe,2);{var we=Oe=>{var qe=r_(),K=_t(qe),g=n(K),P=i(K,2),Ae=n(P),Ue=n(Ae),ie=i(P,2);{var xe=Ee=>{var He=i_(),Xe=n(He);w(()=>y(Xe,e(_))),d(Ee,He)};k(ie,Ee=>{e(_)&&Ee(xe)})}w(()=>{var Ee;y(g,`🔧 One more step on KDE: ${(Ee=e(t).hotkeys.manual_enable_hint)!=null?Ee:""}`),Ae.disabled=e(f),y(Ue,e(f)?"Opening…":"Open Shortcut Settings")}),N("click",Ae,se),d(Oe,qe)};k(re,Oe=>{e(t).hotkeys.needs_manual_enable&&Oe(we)})}var Je=i(re,2);{var de=Oe=>{var qe=l_();d(Oe,qe)};k(Je,Oe=>{(e(t).hotkeys.backend==="portal"||e(t).hotkeys.backend==="mint_dbus")&&Oe(de)})}var G=i(Je,2);{var U=Oe=>{var qe=v_();pt(qe,21,()=>e(t).hotkeys.shortcuts,ft,(K,g)=>{var P=d_();let Ae;var Ue=n(P);{var ie=Ee=>{var He=o_(),Xe=n(He);w(()=>y(Xe,e(g).trigger_description||e(g).requested||"chosen in your desktop settings")),d(Ee,He)},xe=Ee=>{var He=c_();d(Ee,He)};k(Ue,Ee=>{e(g).bound?Ee(ie):Ee(xe,-1)})}w(()=>Ae=Te(P,1,"svelte-45v8pc",null,Ae,{unbound:!e(g).bound})),d(K,P)}),d(Oe,qe)};k(G,Oe=>{e(t).hotkeys_active&&e(t).hotkeys.shortcuts.length>0&&Oe(U)})}var te=i(G,2);{var Y=Oe=>{var qe=u_();d(Oe,qe)},he=Oe=>{var qe=p_();d(Oe,qe)},me=Oe=>{var qe=f_();d(Oe,qe)},pe=Oe=>{var qe=__(),K=i(_t(qe),2),g=n(K),P=n(g),Ae=i(K,2);{var Ue=ie=>{var xe=h_(),Ee=n(xe);w(()=>y(Ee,e(m))),d(ie,xe)};k(Ae,ie=>{e(m)&&ie(Ue)})}w(()=>{g.disabled=e(b),y(P,e(b)?"Configuring…":"Approve Keybinds")}),N("click",g,ne),d(Oe,qe)},De=Oe=>{var qe=m_(),K=i(_t(qe),2),g=n(K),P=n(g),Ae=i(K,2);{var Ue=ie=>{var xe=g_(),Ee=n(xe);w(()=>y(Ee,e(m))),d(ie,xe)};k(Ae,ie=>{e(m)&&ie(Ue)})}w(()=>{g.disabled=e(b),y(P,e(b)?"Configuring…":"Approve Shortcuts")}),N("click",g,ne),d(Oe,qe)};k(te,Oe=>{e(t).hotkeys.backend==="x11"?Oe(Y):e(t).hotkeys.backend==="mint_dbus"?Oe(he,1):e(t).hotkeys.backend==="evdev"?Oe(me,2):e(t).hotkeys.portal_refused?Oe(pe,3):e(t).hotkeys.backend!=="starting"&&Oe(De,4)})}var Ge=i(te,2);{var st=Oe=>{var qe=b_(),K=n(qe);w(()=>{var g;return y(K,`Portal reported: ${(g=e(t).hotkeys.portal_error)!=null?g:""}`)}),d(Oe,qe)};k(Ge,Oe=>{e(t).hotkeys.portal_error&&e(t).hotkeys.backend!=="portal"&&e(t).hotkeys.backend!=="evdev"&&Oe(st)})}var it=i(Ge,2);{var H=Oe=>{var qe=y_(),K=n(qe);w(()=>{var g;return y(K,`X11 shortcuts: ${(g=e(t).hotkeys.x11_error)!=null?g:""}`)}),d(Oe,qe)};k(it,Oe=>{e(t).hotkeys.x11_error&&e(t).hotkeys.backend!=="x11"&&e(t).hotkeys.backend!=="portal"&&Oe(H)})}var A=i(ae,2);let E;var ke=n(A),We=n(ke),ye=i(ke,2),Ie=i(n(ye),2),Ye=n(Ie);{var Ze=Oe=>{var qe=w_(),K=_t(qe),g=n(K);w(()=>y(g,e(t).missing_injection_tool)),d(Oe,qe)},Ve=Oe=>{var qe=Be("Ready — transcriptions can be typed straight into the focused window.");d(Oe,qe)};k(Ye,Oe=>{e(t).missing_injection_tool?Oe(Ze):Oe(Ve,-1)})}var at=i(Ie,2);{var et=Oe=>{var qe=S_(),K=_t(qe),g=n(K);{var P=Ee=>{var He=k_();N("click",He,q),d(Ee,He)};k(g,Ee=>{e(t).pkexec_available&&e(t).manual_package_commands&&Ee(P)})}var Ae=i(g,2);{var Ue=Ee=>{var He=x_(),Xe=n(He);w(()=>y(Xe,e(u)?"Hide manual commands":"Install it manually")),N("click",He,()=>o(u,!e(u))),d(Ee,He)};k(Ae,Ee=>{e(t).manual_package_commands&&Ee(Ue)})}var ie=i(K,2);{var xe=Ee=>{var He=T_(),Xe=n(He),zt=n(Xe),Dt=i(Xe,2),Ft=n(Dt);w(()=>{y(zt,e(t).manual_package_commands),y(Ft,e(v)?"Copied":"Copy commands")}),N("click",Dt,fe),d(Ee,He)};k(ie,Ee=>{e(u)&&Ee(xe)})}d(Oe,qe)};k(at,Oe=>{e(t).missing_injection_tool&&Oe(et)})}var rt=i(A,2);let Ce;var Ke=n(rt),ct=n(Ke),vt=i(Ke,2),nt=i(n(vt),2),wt=n(nt);{var dt=Oe=>{var qe=C_(),K=_t(qe),g=n(K);w(()=>y(g,e(t).model_size)),d(Oe,qe)},Ct=Oe=>{var qe=E_(),K=i(_t(qe)),g=n(K);w(()=>y(g,e(t).model_size)),d(Oe,qe)},Wt=Oe=>{var qe=M_(),K=_t(qe),g=n(K);w(()=>y(g,e(t).model_size)),d(Oe,qe)};k(wt,Oe=>{e(t).model_ready?Oe(dt):e(t).model_auto_downloads?Oe(Ct,1):Oe(Wt,-1)})}var ia=i(nt,2);{var ra=Oe=>{var qe=A_(),K=n(qe),g=n(K),P=i(K,2);w(()=>{K.disabled=e(l),y(g,e(l)?"Downloading…":`Download ${e(t).model_size}`)}),N("click",K,T),N("click",P,z),d(Oe,qe)};k(ia,Oe=>{!e(t).model_ready&&!e(t).model_auto_downloads&&Oe(ra)})}var bt=i($,2);{var ea=Oe=>{var qe=P_(),K=i(n(qe),2),g=n(K);w(()=>y(g,e(c))),d(Oe,qe)};k(bt,Oe=>{e(c)&&Oe(ea)})}var Rt=i(bt,2),Ht=n(Rt),ta=n(Ht);w((Oe,qe,K)=>{y(ue,e(t).is_complete?"✅":"🛠️"),y(Se,e(t).is_complete?"VoxCtrl is ready":"Finish setting up VoxCtrl"),y(le,e(t).is_complete?"Press your shortcut anywhere to dictate.":"Dictation is not ready yet — the steps below say why."),O=Te(ae,1,"step svelte-45v8pc",null,O,{done:e(Q)==="ok"}),y(ve,Oe),y(_e,e(t).hotkeys.detail),E=Te(A,1,"step svelte-45v8pc",null,E,{done:e(D)==="ok"}),y(We,qe),Ce=Te(rt,1,"step svelte-45v8pc",null,Ce,{done:e(I)==="ok"}),y(ct,K),y(ta,e(t).is_complete?"Close":"Continue anyway")},[()=>R(e(Q)),()=>R(e(D)),()=>R(e(I))]),N("click",Ht,M),d(L,B)};k(ee,L=>{e(r)?L(j):e(t)?L(oe,-1):L(V,1)})}d(s,ge),St()}Qt(["click"]);const O_=[{id:"tiny",mb:75,speed:.96,accuracy:.58},{id:"base",mb:142,speed:.88,accuracy:.68},{id:"small",mb:466,speed:.68,accuracy:.8},{id:"medium",mb:1500,speed:.42,accuracy:.9},{id:"large-v3",mb:3100,speed:.22,accuracy:.97}],R_=[{id:"tiny",mb:100,speed:.98,accuracy:.64},{id:"base",mb:250,speed:.92,accuracy:.77}],L_=[{id:"tdt-0.6b-v3",mb:665,speed:.95,accuracy:.94}],N_=[{id:"remote",mb:0,speed:.95,accuracy:.95}],Mi=[{id:"whisper-cpp",name:"whisper.cpp",glyph:"∇",tagline:"Reference-grade accuracy in quiet spaces. Five model sizes from 75 MB to 3.1 GB. CUDA, Vulkan or CPU.",models:O_,gpu:!0,noiseRetention:.64},{id:"moonshine",name:"Moonshine",glyph:"↯",tagline:"Streaming ONNX model tuned for real rooms — fans, keyboards, traffic. Fast on any CPU, tiny download.",models:R_,gpu:!1,noiseRetention:.93},{id:"parakeet",name:"Parakeet TDT",glyph:"⚡",tagline:"NVIDIA FastConformer TDT 0.6B. Ultra-fast non-autoregressive transcription, SOTA accuracy, no repetition loops.",models:L_,gpu:!0,noiseRetention:.88},{id:"remote-openai",name:"Remote Speech Engine",glyph:"🌐",tagline:"Connect to an OpenAI-compatible speech-to-text server on your network or cloud (Faster-Whisper, vLLM, etc.).",models:N_,gpu:!1,noiseRetention:.92}],xn=[{id:"toggle",name:"Tap to talk",verb:"tap",desc:"Press once to start, press again to stop. Hands stay free while you speak.",key:[[1,1],[8,0],[1,1],[3,0]],mic:[[1,0],[9,1],[4,0]]},{id:"double_tap",name:"Double-tap to talk",verb:"double-tap",desc:"Two quick presses start dictation; one press stops. Hard to trigger by accident.",key:[[1,1],[.7,0],[1,1],[7,0],[1,1],[3,0]],mic:[[2.7,0],[7.3,1],[4,0]]},{id:"hold",name:"Hold to talk",verb:"hold",desc:"Hold the keys down while speaking, release to stop. Like a walkie-talkie.",key:[[1,0],[9,1],[4,0]],mic:[[1,0],[9,1],[4,0]]},{id:"double_tap_hold",name:"Double-tap & hold",verb:"double-tap and hold",desc:"Tap once, then press and hold. Release to stop. Never collides with a plain shortcut.",key:[[1,1],[.7,0],[8.3,1],[4,0]],mic:[[2.7,0],[6.3,1],[4,0]]}],mn=[{id:"blue_wave",name:"Ocean Wave",meta:"default · tide-pool waves",glyph:"⊟"},{id:"voice_card",name:"Voice Card",meta:"20×6 LED VU matrix",glyph:"⊟"},{id:"waveform",name:"Waveform",meta:"scrolling oscilloscope",glyph:"⌇"},{id:"pulse",name:"Pulse Ring",meta:"sonar sweep · target lock",glyph:"◌"},{id:"mono_bars",name:"Mono Bars",meta:"black & white 5-bar meter",glyph:"▥"},{id:"spectrum",name:"Neon Spectrum",meta:"16-band equalizer",glyph:"▦"},{id:"terminal",name:"Retro Terminal",meta:"DOS-blue ASCII meter",glyph:"▸"},{id:"vinyl",name:"Analog VU",meta:"vintage needle meter",glyph:"◔"}],V_=[{id:"top",label:"Top",glyph:"⤒"},{id:"center",label:"Center",glyph:"⊡"},{id:"bottom",label:"Bottom",glyph:"⤓"}],cs=[{id:"vox_cpm_2",name:"VoxCPM2",kind:"neural · 2B autoregressive",quality:.98,speed:.25,mb:2950,note:"2B autoregressive diffusion. SOTA voice realism & cloning. Runs via audio.cpp, best on a Vulkan GPU."},{id:"breeze_tts_2",name:"Breeze-TTS-2",kind:"neural · expressive",quality:.96,speed:.32,mb:5080,note:"Most natural prosody. Runs via audio.cpp, best on a Vulkan GPU or fast CPU.",nonCommercial:!0,licenceUrl:"huggingface.co/BreezeBlue/Breeze-TTS-2"},{id:"pocket_tts",name:"Pocket TTS",kind:"neural · voice cloning",quality:.86,speed:.55,mb:130,note:"Cloned voices, downloaded in-app. Runs via audio.cpp with optional Vulkan acceleration."},{id:"piper",name:"Piper TTS",kind:"onnx · ~11 voices",quality:.72,speed:.8,mb:60,note:"The sweet spot for most machines. Per-voice ~60 MB."},{id:"inflect_micro",name:"Inflect Micro",kind:"compact neural",quality:.55,speed:.92,mb:38,note:"Tiny footprint, still human-ish. Good for laptops."},{id:"espeak",name:"eSpeak-NG",kind:"formant synth",quality:.3,speed:.99,mb:0,note:"Instant, robotic, runs anywhere. Zero download."}],ds=["Welcome","Engine","Hotkey","Overlay","Test","Voice","Done"];function Tn(s){return s<=0?"none":s>=1e3?`${(s/1e3).toFixed(1)} GB`:`${Math.round(s)} MB`}function F_(s,a=cs){const t=Math.max(0,...a.map(r=>r.mb));return t<=0||s<=0?0:Math.min(100,s/t*100)}function Fi(s){return`${Math.round(s*100)}%`}function B_(s){return s>.85?"instant":s>.6?"< 1 s":s>.35?"1–3 s":"3–8 s"}function q_(s){return s>.9?"instant":s>.7?"< 0.5 s":s>.5?"~1 s":"2–4 s"}function Ai(s,a){return Array.from({length:s},(t,r)=>{const l=(r+1)/s;return{h:Math.max(8,Math.round(100*a*(.55+.45*Math.sin(r*1.7+a*5)))),o:l<=a?1:.18}})}function Ho(s){return Array.from({length:s},(a,t)=>({d:(.6+t*7%5*.12).toFixed(2),dl:(t*.07).toFixed(2)}))}const j_={KEY_LEFTCTRL:"Ctrl",KEY_RIGHTCTRL:"Ctrl",KEY_LEFTALT:"Alt",KEY_RIGHTALT:"Alt",KEY_LEFTSHIFT:"Shift",KEY_RIGHTSHIFT:"Shift",KEY_LEFTMETA:"Super",KEY_RIGHTMETA:"Super",KEY_SPACE:"Space",KEY_ESC:"Esc",KEY_ENTER:"Enter",KEY_TAB:"Tab",KEY_BACKSPACE:"Backspace",KEY_DELETE:"Delete"};function dl(s){var a;return(a=j_[s])!=null?a:s.replace(/^KEY_/,"")}const yr="default_hold",$n="command",U_="Command";function W_(s){return{...s,id:$n,label:U_,delivery:"command",command:null}}var li,oi,ci,di,vi,ui,pi,fi,hi,_i,gi;class H_{constructor(){lt(this,li,S(0));lt(this,oi,S(0));lt(this,ci,S(!1));lt(this,di,S("hold"));lt(this,vi,S(null));lt(this,ui,S(!1));lt(this,pi,S(yt([])));lt(this,fi,S(null));lt(this,hi,S(yt([])));lt(this,_i,S(!1));lt(this,gi,S(!1))}get step(){return e(F(this,li))}set step(a){o(F(this,li),a,!0)}get visited(){return e(F(this,oi))}set visited(a){o(F(this,oi),a,!0)}get leaving(){return e(F(this,ci))}set leaving(a){o(F(this,ci),a,!0)}get gesture(){return e(F(this,di))}set gesture(a){o(F(this,di),a,!0)}get combo(){return e(F(this,vi))}set combo(a){o(F(this,vi),a,!0)}get recording(){return e(F(this,ui))}set recording(a){o(F(this,ui),a,!0)}get held(){return e(F(this,pi))}set held(a){o(F(this,pi),a,!0)}get captureHint(){return e(F(this,fi))}set captureHint(a){o(F(this,fi),a,!0)}get issues(){return e(F(this,hi))}set issues(a){o(F(this,hi),a,!0)}get engineChosen(){return e(F(this,_i))}set engineChosen(a){o(F(this,_i),a,!0)}get modelChosen(){return e(F(this,gi))}set modelChosen(a){o(F(this,gi),a,!0)}get gestureInfo(){var a;return(a=xn.find(t=>t.id===this.gesture))!=null?a:xn[2]}get displayKeys(){var a;return this.recording?this.held:(a=this.combo)!=null?a:[]}recordIssue(a){this.issues=[...this.issues.filter(t=>t.id!==a.id),a]}clearIssue(a){this.issues=this.issues.filter(t=>t.id!==a)}goTo(a){a===this.step||this.leaving||a<0||a>=ds.length||(this.leaving=!0,this.recording=!1,setTimeout(()=>{this.step=a,this.visited=Math.max(this.visited,a),this.leaving=!1},200))}async ensureCommandTarget(){var l;const a=await C("get_targets");if(a.some(c=>c.id===$n&&c.delivery==="command"))return $n;const t=(l=a.find(c=>c.delivery==="inject"))!=null?l:a[0];if(!t)return"default";const r=[...a.filter(c=>c.id!==$n),W_(t)];return await C("save_targets",{targets:r}),$n}async saveBinding(){if(!this.combo||this.combo.length===0)return;const a=await this.ensureCommandTarget(),t=await C("get_bindings").catch(()=>[]),r=this.gestureInfo,l={id:yr,label:`Dictate (${r.name})`,keys:[...this.combo],gesture:this.gesture,target_id:a,target_ids:[a],tap_ms:300,hold_threshold_ms:200,disabled:!1,openai_enabled:!1,openai_model:"",openai_mode:"custom",openai_prompt:"",openai_system_prompt:""},c=t.filter(u=>u.id!==yr&&u.id!=="default_toggle"&&u.id!=="__tts_stop__");await C("save_bindings",{bindings:[l,...c]})}async loadBinding(){var a;try{const t=await C("get_bindings"),r=(a=t.find(l=>l.id===yr))!=null?a:t.find(l=>l.id!=="__tts_stop__");r&&r.keys.length>0&&(this.combo=[...r.keys],xn.some(l=>l.id===r.gesture)&&(this.gesture=r.gesture))}catch(t){console.error("Wizard: failed to read existing bindings:",t)}}reset(){this.step=0,this.visited=0,this.leaving=!1,this.gesture="hold",this.combo=null,this.recording=!1,this.held=[],this.captureHint=null,this.issues=[],this.engineChosen=!1,this.modelChosen=!1}}li=new WeakMap,oi=new WeakMap,ci=new WeakMap,di=new WeakMap,vi=new WeakMap,ui=new WeakMap,pi=new WeakMap,fi=new WeakMap,hi=new WeakMap,_i=new WeakMap,gi=new WeakMap;const Ne=new H_;function fs(s){const a={...bn(Ot)};s(a),Ot.set(a)}var $_=p('
                '),G_=p(`
                VoxCtrl
                // welcome

                Speak to anything on your machine.

                A few minutes of setup. Pick a transcription engine, bind a hotkey, choose how VoxCtrl shows - itself, and test it end to end. Everything runs on this device — nothing leaves it.

                ↺ Nothing is permanent — every choice can be changed later in Settings.
                `);function K_(s){const a=[{glyph:"∇",n:"01",title:"Transcription engine",desc:"whisper.cpp or Moonshine, sized to your hardware."},{glyph:"⌁",n:"02",title:"Hotkey",desc:"A gesture and a key combo to start talking."},{glyph:"⌬",n:"03",title:"Overlay",desc:"A visual signal while the mic is live — or none."},{glyph:"◉",n:"04",title:"Live test",desc:"Dictate into a box and watch it land."},{glyph:"⊕",n:"05",title:"Voice output",desc:"Optional: let agents talk back through your speakers."}];var t=G_(),r=n(t),l=n(r),c=i(n(l),4),u=i(r,2);pt(u,5,()=>a,ft,(v,f)=>{var _=$_(),b=n(_),m=n(b),h=n(m),x=i(m,2),M=n(x),q=i(b,2),T=n(q),z=i(q,2),se=n(z);w(()=>{y(h,e(f).glyph),y(M,e(f).n),y(T,e(f).title),y(se,e(f).desc)}),d(v,_)}),w(()=>mt(c,"src",nr)),d(s,t)}var Y_=p(''),J_=p('
                Discovered models from server:
                '),X_=p("
                "),Z_=p('✔ Tested & verified successfully'),Q_=p('⚠️ Test connection required to proceed'),eg=p(``);function tg(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",r),[r,l]=Ca();let c=Et(a,"isOpen",15,!1),u=S(""),v=S(""),f=S("whisper-1"),_=S(""),b=S(30),m=S(!1),h=S(null),x=S(yt([])),M=S(!1),q=!1;pa(()=>{c()&&!q&&Ts(()=>{var R;const I=t().engine.remote_openai;o(u,(I==null?void 0:I.endpoint)||"http://localhost:8000/v1",!0),o(v,(I==null?void 0:I.api_key)||"",!0),o(f,(I==null?void 0:I.model)||"whisper-1",!0),o(_,(I==null?void 0:I.language)||"",!0),o(b,(R=I==null?void 0:I.timeout_secs)!=null?R:30,!0),o(h,null)}),q=c()});function T(){fs(I=>{I.engine.remote_openai?(I.engine.remote_openai.endpoint=e(u).trim()||"http://localhost:8000/v1",I.engine.remote_openai.api_key=e(v).trim()?e(v).trim():null,I.engine.remote_openai.model=e(f).trim()||"whisper-1",I.engine.remote_openai.language=e(_).trim(),I.engine.remote_openai.timeout_secs=Number(e(b))||30):I.engine.remote_openai={endpoint:e(u).trim()||"http://localhost:8000/v1",api_key:e(v).trim()?e(v).trim():null,model:e(f).trim()||"whisper-1",language:e(_).trim(),timeout_secs:Number(e(b))||30}})}async function z(){var I;if(!e(m)){T(),o(m,!0),o(h,null);try{const R=await C("test_remote_stt",{endpoint:e(u).trim()||"http://localhost:8000/v1",apiKey:e(v).trim()?e(v).trim():null,model:e(f).trim()||"whisper-1",timeoutSecs:Number(e(b))||30});o(h,{success:R.success,message:R.message},!0),R.models&&R.models.length>0&&(o(x,R.models,!0),e(f)||(o(f,R.models[0],!0),T())),R.success&&(o(M,!0),T(),(I=a.onSuccess)==null||I.call(a))}catch(R){o(h,{success:!1,message:R.toString()},!0)}finally{o(m,!1)}}}function se(){T(),c(!1)}function ne(I){I.key==="Escape"&&se()}var fe=xi();xs("keydown",Or,ne);var Q=_t(fe);{var D=I=>{var R=eg(),ge=n(R),ee=n(ge),j=i(n(ee),2),V=i(ee,2),oe=i(n(V),2),L=n(oe),B=i(n(L),2),be=i(L,4),Pe=i(n(be),2),ue=i(be,4),W=i(n(ue),2),J=i(ue,2);{var Se=pe=>{var De=J_(),Ge=i(n(De),2);pt(Ge,21,()=>e(x),ft,(st,it)=>{var H=Y_();let A;var E=n(H);w(()=>{A=Te(H,1,"tag-btn svelte-1c9i6zy",null,A,{active:e(f)===e(it)}),y(E,e(it))}),N("click",H,()=>{o(f,e(it),!0),T()}),d(st,H)}),d(pe,De)};k(J,pe=>{e(x).length>0&&pe(Se)})}var ze=i(J,2),le=i(n(ze),2),$=i(ze,4),ae=i(n($),2),O=i($,2),X=n(O),ve=n(X);{var Me=pe=>{var De=Be("⏳ Testing Connection...");d(pe,De)},Fe=pe=>{var De=Be("🧪 Test Connection");d(pe,De)};k(ve,pe=>{e(m)?pe(Me):pe(Fe,-1)})}var _e=i(X,2);{var re=pe=>{var De=X_();let Ge;var st=n(De);{var it=A=>{var E=Be();w(()=>{var ke;return y(E,`✔ ${(ke=e(h).message)!=null?ke:""}`)}),d(A,E)},H=A=>{var E=Be();w(()=>{var ke;return y(E,`⚠️ ${(ke=e(h).message)!=null?ke:""}`)}),d(A,E)};k(st,A=>{e(h).success?A(it):A(H,-1)})}w(()=>Ge=Te(De,1,"status-pill svelte-1c9i6zy",null,Ge,{success:e(h).success,error:!e(h).success})),d(pe,De)};k(_e,pe=>{e(h)&&pe(re)})}var we=i(V,2),Je=n(we),de=n(Je);{var G=pe=>{var De=Z_();d(pe,De)},U=pe=>{var De=Q_();d(pe,De)};k(de,pe=>{e(M)?pe(G):pe(U,-1)})}var te=i(Je,2),Y=n(te),he=i(Y,2),me=n(he);w(()=>{X.disabled=e(m),y(me,e(M)?"Done":"Save & Close")}),N("click",R,pe=>{pe.target===pe.currentTarget&&se()}),N("keydown",R,pe=>{pe.key==="Escape"&&se()}),N("click",j,se),N("change",B,T),$e(B,()=>e(u),pe=>o(u,pe)),N("change",Pe,T),$e(Pe,()=>e(v),pe=>o(v,pe)),N("change",W,T),$e(W,()=>e(f),pe=>o(f,pe)),N("change",le,T),$e(le,()=>e(_),pe=>o(_,pe)),N("change",ae,T),$e(ae,()=>e(b),pe=>o(b,pe)),N("click",X,z),N("click",Y,se),N("click",he,se),d(I,R)};k(Q,I=>{c()&&I(D)})}d(s,fe),St(),l()}Qt(["click","keydown","change"]);var ag=p(`
                This build was compiled without the Moonshine backend — choosing it runs whisper.cpp - with the model above instead.
                `),sg=p(`
                This build was compiled without the Parakeet backend — choosing it runs whisper.cpp - with the model above instead.
                `),ng=p('
                '),ig=p('
                server configuration
                URL
                Model
                Status
                ',1),rg=p(''),lg=p('
                '),og=p('
                model size
                ',1),cg=p('
                '),dg=p('
                '),vg=p('
                ✓
                ◌ quiet room
                ≋ noisy room
                '),ug=p(' '),pg=p(' '),fg=p(' Checking local models…'),hg=p(' '),_g=p('⚠️ Test connection required before continuing'),gg=p(' '),mg=p('◇ Pick an engine and a model size — they download before the next step'),bg=p(' '),yg=p(`
                // 01 · transcription engine

                Which ears should VoxCtrl use?

                Choose between on-device engines (whisper.cpp, Moonshine, Parakeet TDT) or connect to a Remote Speech Engine over your network. - Pick a model size inside each card or configure your remote endpoint to get started.

                `);function wg(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",r),[r,l]=Ca(),c=1;let u=S(!0),v=S(!0),f=S(null),_=S(yt({})),b=S(yt({})),m=S(yt({})),h=S(null),x=S(null),M=S(!1),q=S(!1),T=S(!1);const z=ce(()=>t().engine.backend==="remote-openai"?"remote-openai":t().engine.backend==="parakeet"?"parakeet":t().engine.backend==="moonshine"?"moonshine":"whisper-cpp"),se={cuda:"CUDA",vulkan:"Vulkan",coreml:"CoreML"},ne=ce(()=>!!e(f)&&t().engine.whisper_cpp.device!=="cpu"),fe=ce(()=>{var H;return e(f)?(H=se[e(f)])!=null?H:e(f):""}),Q=ce(()=>{var H;return e(z)==="remote-openai"?((H=t().engine.remote_openai)==null?void 0:H.model)||"whisper-1":e(z)==="parakeet"&&e(v)?t().engine.parakeet.model_size:e(z)==="moonshine"&&e(u)?t().engine.moonshine.model_size:t().engine.whisper_cpp.model_size}),D=ce(()=>e(z)==="remote-openai"?e(T):e(z)==="parakeet"&&e(v)?!!e(m)[e(Q)]:e(z)==="moonshine"&&e(u)?!!e(b)[e(Q)]:!!e(_)[e(Q)]);function I(H,A){var E;return H!==e(z)?!1:A.id===(H==="remote-openai"?((E=t().engine.remote_openai)==null?void 0:E.model)||"whisper-1":H==="parakeet"?t().engine.parakeet.model_size:H==="moonshine"?t().engine.moonshine.model_size:t().engine.whisper_cpp.model_size)}function R(H,A){return H==="remote-openai"?e(T):H==="parakeet"?!!e(m)[A.id]:H==="moonshine"?!!e(b)[A.id]:!!e(_)[A.id]}function ge(H){fs(A=>{A.engine.backend=H,H==="remote-openai"&&!A.engine.remote_openai&&(A.engine.remote_openai={endpoint:"http://localhost:8000/v1",api_key:null,model:"whisper-1",language:"",timeout_secs:30})}),Ne.engineChosen=!0,H==="remote-openai"&&(Ne.modelChosen=!0,o(q,!0))}function ee(H,A){fs(E=>{E.engine.backend=H,H==="parakeet"?E.engine.parakeet.model_size=A.id:H==="moonshine"?E.engine.moonshine.model_size=A.id:H==="remote-openai"?E.engine.remote_openai?E.engine.remote_openai.model=A.id:E.engine.remote_openai={endpoint:"http://localhost:8000/v1",api_key:null,model:A.id,language:"",timeout_secs:30}:E.engine.whisper_cpp.model_size=A.id}),o(x,null),Ne.engineChosen=!0,Ne.modelChosen=!0}function j(){e(f)&&fs(H=>{H.engine.whisper_cpp.device=e(ne)?"cpu":"auto"})}async function V(){const H=t().engine.whisper_cpp.model_dir,A={};for(const E of Mi[0].models)try{A[E.id]=await C("check_model_downloaded",{modelSize:E.id,modelDir:H})}catch(ke){console.error("Wizard: whisper model check failed for",E.id,ke),A[E.id]=!1}o(_,A,!0)}async function oe(){const H={},A=Mi.find(E=>E.id==="moonshine");if(A)for(const E of A.models)try{H[E.id]=await C("check_moonshine_downloaded",{modelSize:E.id})}catch(ke){console.error("Wizard: moonshine model check failed for",E.id,ke),H[E.id]=!1}o(b,H,!0)}async function L(){const H={},A=Mi.find(E=>E.id==="parakeet");if(A)for(const E of A.models)try{H[E.id]=await C("check_parakeet_downloaded",{modelSize:E.id})}catch(ke){console.error("Wizard: parakeet model check failed for",E.id,ke),H[E.id]=!1}o(m,H,!0)}async function B(){if(e(z)==="remote-openai")return e(T)?!0:(a.setBlocker(c,"Test the remote connection successfully to continue."),o(q,!0),!1);if(e(D))return!0;const H=e(z),A=e(Q);o(h,A,!0),o(x,null);try{return H==="parakeet"&&e(v)?(await C("download_parakeet_model",{modelSize:A}),o(m,{...e(m),[A]:!0},!0)):H==="moonshine"&&e(u)?(await C("download_moonshine_model",{modelSize:A}),o(b,{...e(b),[A]:!0},!0)):(await C("download_model",{modelSize:A,modelDir:t().engine.whisper_cpp.model_dir}),o(_,{...e(_),[A]:!0},!0)),Ne.clearIssue("model-download"),!0}catch(E){return o(x,`${E}`),Ne.recordIssue({id:"model-download",step:c,title:`Speech model "${A}" could not be downloaded — dictation will produce no text.`,detail:`engine=${H} model=${A} model_dir=${t().engine.whisper_cpp.model_dir||"(default)"} -${E}`}),!1}finally{o(h,null)}}pa(()=>{e(h)?a.setBlocker(c,`Downloading ${e(h)}…`):e(M)?e(z)==="remote-openai"&&!e(T)?a.setBlocker(c,"Test the remote connection successfully to continue."):e(D)?a.setBlocker(c,null):Ne.engineChosen?Ne.modelChosen?a.setBlocker(c,null):a.setBlocker(c,"Choose a model size to continue."):a.setBlocker(c,"Choose a transcription engine to continue."):a.setBlocker(c,"Checking which models are already on disk…")});async function be(){o(M,!1),await Promise.all([V(),oe(),L()]),o(M,!0)}qt(()=>(a.registerGate(c,B),C("moonshine_available").then(H=>o(u,H,!0)).catch(()=>o(u,!1)),C("parakeet_available").then(H=>o(v,H,!0)).catch(()=>o(v,!1)),C("accelerator_support").then(H=>{var A;return o(f,(A=H==null?void 0:H.whisper_gpu)!=null?A:null,!0)}).catch(()=>o(f,null)),be(),()=>{a.registerGate(c,null),a.setBlocker(c,null)}));function Pe(H){var Ye,Ze;if(H.id==="remote-openai")return{model:{id:((Ye=t().engine.remote_openai)==null?void 0:Ye.model)||"whisper-1",mb:0,speed:.95,accuracy:.95},rows:[{label:"speed",pct:95,value:"network",color:"var(--vx-cyan-0)",dim:!1},{label:"accuracy",pct:95,value:"server",color:"var(--vx-cyan-2)",dim:!1},{label:"RAM",pct:2,value:"offloaded",color:"var(--vx-gold-1)",dim:!1},{label:"VRAM",pct:0,value:"0 MB",color:"var(--vx-gold-0)",dim:!0}],quiet:Ai(12,.95),noisy:Ai(12,.92),quietPct:"server",noisyPct:"server"};const A=H.id==="parakeet"?t().engine.parakeet.model_size:H.id==="moonshine"?t().engine.moonshine.model_size:t().engine.whisper_cpp.model_size,E=(Ze=H.models.find(Ve=>Ve.id===A))!=null?Ze:H.models[0],ke=H.gpu&&e(ne),We=Math.min(1,E.speed+(ke?.3:0)),ye=ke?E.mb*.3:E.mb,Ie=ke?E.mb*1.1:0;return{model:E,rows:[{label:"speed",pct:Math.round(We*100),value:B_(We),color:"var(--vx-cyan-0)",dim:!1},{label:"accuracy",pct:Math.round(E.accuracy*100),value:Fi(E.accuracy),color:"var(--vx-cyan-2)",dim:!1},{label:"RAM",pct:Math.max(2,Math.min(100,Math.round(ye/3400*100))),value:Tn(ye),color:"var(--vx-gold-1)",dim:!1},{label:"VRAM",pct:Ie?Math.max(2,Math.min(100,Math.round(Ie/3400*100))):0,value:Ie?Tn(Ie):H.gpu?"off":"cpu only",color:"var(--vx-gold-0)",dim:!Ie}],quiet:Ai(12,E.accuracy),noisy:Ai(12,E.accuracy*H.noiseRetention),quietPct:Fi(E.accuracy),noisyPct:Fi(E.accuracy*H.noiseRetention)}}var ue=yg(),W=n(ue),J=i(n(W),2);let Se;var ze=n(J);let le;var $=i(ze,2),ae=n($),O=i(n(ae),2);let X;var ve=n(O);{var Me=H=>{var A=Be("UNAVAILABLE · CPU BUILD");d(H,A)},Fe=H=>{var A=Be();w(()=>{var E;return y(A,`ON · ${(E=e(fe))!=null?E:""}`)}),d(H,A)},_e=H=>{var A=Be("OFF · CPU");d(H,A)};k(ve,H=>{e(f)?e(ne)?H(Fe,1):H(_e,-1):H(Me)})}var re=i(ae,2),we=n(re);{var Je=H=>{var A=Be(`Moves whisper.cpp weights from RAM to your GPU: faster, less RAM, uses VRAM. Moonshine is - CPU-native and unaffected.`);d(H,A)},de=H=>{var A=Be(`This build has no GPU backend compiled in, so both engines run on the CPU. The Vulkan - download accelerates whisper.cpp; Moonshine is CPU-native either way.`);d(H,A)};k(we,H=>{e(f)?H(Je):H(de,-1)})}var G=i(W,2);pt(G,21,()=>Mi,ft,(H,A)=>{const E=ce(()=>Pe(e(A))),ke=ce(()=>e(z)===e(A).id);var We=vg();let ye;var Ie=i(n(We),2),Ye=n(Ie),Ze=n(Ye),Ve=n(Ze),at=i(Ze,2),et=n(at),rt=i(Ye,2),Ce=n(rt),Ke=i(rt,2);{var ct=g=>{var P=ag();d(g,P)},vt=g=>{var P=sg();d(g,P)};k(Ke,g=>{e(A).id==="moonshine"&&!e(u)?g(ct):e(A).id==="parakeet"&&!e(v)&&g(vt,1)})}var nt=i(Ie,2),wt=n(nt);{var dt=g=>{var P=ig(),Ae=i(_t(P),2),Ue=n(Ae),ie=i(n(Ue),2),xe=n(ie),Ee=i(Ue,2),He=i(n(Ee),2),Xe=n(He),zt=i(Ee,2),Dt=i(n(zt),2);let Ft;var $t=n(Dt);{var Gt=ut=>{var Mt=Be("✔ Verified");d(ut,Mt)},fa=ut=>{var Mt=Be("⚠️ Untested");d(ut,Mt)};k($t,ut=>{e(T)?ut(Gt):ut(fa,-1)})}var Yt=i(Ae,2),ma=n(Yt);let Oa;var Ya=n(ma);{var tt=ut=>{var Mt=Be("⚙ Configure Server");d(ut,Mt)},gt=ut=>{var Mt=Be("⚡ Setup & Test");d(ut,Mt)};k(Ya,ut=>{e(T)?ut(tt):ut(gt,-1)})}var It=i(Yt,2);pt(It,21,()=>e(E).rows,ft,(ut,Mt)=>{var jt=ng();let wa;var oa=n(jt),Ra=n(oa),ja=n(Ra),Z=i(Ra),Re=n(Z),je=i(oa,2),Le=n(je);let Qe;w(()=>{var Jt;wa=Te(jt,1,"metric svelte-xv54mf",null,wa,{dim:e(Mt).dim}),y(ja,e(Mt).label),y(Re,e(Mt).value),Qe=na(Le,"",Qe,{width:`${(Jt=e(Mt).pct)!=null?Jt:""}%`,background:e(Mt).color})}),d(ut,jt)}),w(()=>{var ut,Mt,jt;mt(ie,"title",((ut=t().engine.remote_openai)==null?void 0:ut.endpoint)||"http://localhost:8000/v1"),y(xe,((Mt=t().engine.remote_openai)==null?void 0:Mt.endpoint)||"http://localhost:8000/v1"),y(Xe,((jt=t().engine.remote_openai)==null?void 0:jt.model)||"whisper-1"),Ft=Te(Dt,1,"remote-v svelte-xv54mf",null,Ft,{"remote-v-ok":e(T),"remote-v-warn":!e(T)}),Oa=Te(ma,1,"vx-btn vx-btn-sm remote-cfg-btn svelte-xv54mf",null,Oa,{"vx-primary":!e(T)})}),N("click",ma,ut=>{ut.stopPropagation(),ge("remote-openai"),o(q,!0)}),d(g,P)},Ct=g=>{var P=og(),Ae=i(_t(P),2);pt(Ae,21,()=>e(A).models,ft,(ie,xe)=>{var Ee=rg();let He;var Xe=n(Ee),zt=n(Xe),Dt=i(Xe,2),Ft=n(Dt);w(($t,Gt,fa)=>{He=Te(Ee,1,"size svelte-xv54mf",null,He,$t),y(zt,e(xe).id),y(Ft,`${Gt!=null?Gt:""}${fa!=null?fa:""}`)},[()=>({on:I(e(A).id,e(xe))}),()=>Tn(e(xe).mb),()=>R(e(A).id,e(xe))?" ✔":""]),N("click",Ee,$t=>{$t.stopPropagation(),ee(e(A).id,e(xe))}),d(ie,Ee)});var Ue=i(Ae,2);pt(Ue,21,()=>e(E).rows,ft,(ie,xe)=>{var Ee=lg();let He;var Xe=n(Ee),zt=n(Xe),Dt=n(zt),Ft=i(zt),$t=n(Ft),Gt=i(Xe,2),fa=n(Gt);let Yt;w(()=>{var ma;He=Te(Ee,1,"metric svelte-xv54mf",null,He,{dim:e(xe).dim}),y(Dt,e(xe).label),y($t,e(xe).value),Yt=na(fa,"",Yt,{width:`${(ma=e(xe).pct)!=null?ma:""}%`,background:e(xe).color})}),d(ie,Ee)}),d(g,P)};k(wt,g=>{e(A).id==="remote-openai"?g(dt):g(Ct,-1)})}var Wt=i(nt,2),ia=n(Wt),ra=n(ia),bt=i(n(ra)),ea=n(bt),Rt=i(ra,2);pt(Rt,21,()=>e(E).quiet,ft,(g,P)=>{var Ae=cg();let Ue;w(()=>{var ie;return Ue=na(Ae,"",Ue,{height:`${(ie=e(P).h)!=null?ie:""}%`,opacity:e(P).o})}),d(g,Ae)});var Ht=i(ia,2),ta=n(Ht),Oe=i(n(ta)),qe=n(Oe),K=i(ta,2);pt(K,21,()=>e(E).noisy,ft,(g,P)=>{var Ae=dg();let Ue;w(()=>{var ie;return Ue=na(Ae,"",Ue,{height:`${(ie=e(P).h)!=null?ie:""}%`,opacity:e(P).o})}),d(g,Ae)}),w(()=>{ye=Te(We,1,"vx-card engine-card svelte-xv54mf",null,ye,{"vx-on":e(ke)}),mt(We,"aria-checked",e(ke)),y(Ve,e(A).glyph),y(et,e(A).name),y(Ce,e(A).tagline),y(ea,e(E).quietPct),y(qe,e(E).noisyPct)}),N("click",We,()=>{ge(e(A).id),e(A).id==="remote-openai"&&o(q,!0)}),N("keydown",We,g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),ge(e(A).id),e(A).id==="remote-openai"&&o(q,!0))}),d(H,We)});var U=i(G,2),te=n(U);{var Y=H=>{var A=ug(),E=i(n(A));w(()=>{var ke;return y(E,` Downloading ${(ke=e(h))!=null?ke:""} — this can take a few minutes`)}),d(H,A)},he=H=>{var A=pg(),E=n(A);w(()=>{var ke;return y(E,`✕ Download failed: ${(ke=e(x))!=null?ke:""}`)}),d(H,A)},me=H=>{var A=fg();d(H,A)},pe=H=>{var A=xi(),E=_t(A);{var ke=ye=>{var Ie=hg(),Ye=n(Ie);w(()=>{var Ze;return y(Ye,`✓ Remote engine connected (${(Ze=e(Q))!=null?Ze:""})`)}),d(ye,Ie)},We=ye=>{var Ie=_g();d(ye,Ie)};k(E,ye=>{e(T)?ye(ke):ye(We,-1)})}d(H,A)},De=H=>{var A=gg(),E=n(A);w(()=>{var ke;return y(E,`✓ ${(ke=e(Q))!=null?ke:""} is on disk and ready`)}),d(H,A)},Ge=H=>{var A=mg();d(H,A)},st=H=>{var A=bg(),E=n(A);w(()=>{var ke;return y(E,`↓ ${(ke=e(Q))!=null?ke:""} will download when you continue`)}),d(H,A)};k(te,H=>{e(h)?H(Y):e(x)?H(he,1):e(M)?e(z)==="remote-openai"?H(pe,3):e(D)?H(De,4):!Ne.engineChosen||!Ne.modelChosen?H(Ge,5):H(st,-1):H(me,2)})}var it=i(U,2);tg(it,{onSuccess:()=>{o(T,!0)},get isOpen(){return e(q)},set isOpen(H){o(q,H,!0)}}),w(()=>{Se=Te(J,1,"vx-card gpu-toggle svelte-xv54mf",null,Se,{"vx-on":e(ne)}),J.disabled=!e(f),le=Te(ze,1,"switch svelte-xv54mf",null,le,{on:e(ne)}),X=Te(O,1,"state svelte-xv54mf",null,X,{on:e(ne)})}),N("click",J,j),d(s,ue),St(),l()}Qt(["click","keydown"]);var kg=p("
                "),xg=p("
                "),Tg=p(''),Sg=p('
                '),Cg=p('
                '),Eg=p('+'),Mg=p("
                ",1),Ag=p('
                '),Pg=p(' Asking…',1),zg=p('
                '),Dg=p('
                '),Ig=p(`
                // 02 · first key binding

                How do you want to start talking?

                Pick a gesture, then record the keys. Taps keep your hands free while speaking; holds can't be - left running by accident. Double-taps avoid clashes with shortcuts you already use.

                `);function Og(s,a){Tt(a,!0);const t=2;let r=S(null),l=S(!1),c=S(null);const u=ce(()=>{var $,ae;return(ae=($=e(r))==null?void 0:$.supported_gestures)!=null&&ae.length?xn.filter(O=>e(r).supported_gestures.includes(O.id)):xn}),v=ce(()=>xn.length-e(u).length),f=ce(()=>{var $;return(($=e(r))==null?void 0:$.is_active)===!0}),_=ce(()=>!!Ne.combo&&Ne.combo.length>0&&e(r)!==null&&!e(r).is_active),b=ce(()=>Ne.recording&&Vr(Ne.held)?"Keep holding and add a regular key — modifiers alone cannot be a shortcut.":null);async function m(){try{o(r,await C("check_hotkey_status"),!0),e(r).is_active&&Ne.clearIssue("shortcut-register")}catch($){console.error("Wizard: failed to read hotkey status:",$)}}function h(){Ne.recording=!0,Ne.held=[],Ne.captureHint=null,C("set_hotkeys_inhibited",{inhibited:!0}).catch(()=>{})}function x(){Ne.recording=!1,Ne.held=[],C("set_hotkeys_inhibited",{inhibited:!1}).catch(()=>{})}async function M($){var O;if($.length===0)return;let ae;try{ae=await C("check_hotkey_keys",{keys:$})}catch(X){console.error("Wizard: hotkey validation failed:",X),Ne.combo=[...$];return}ae.accepted?(Ne.combo=[...$],Ne.captureHint=null,await z()):Ne.captureHint=(O=ae.message)!=null?O:"This key combination cannot be used as a shortcut. Try another."}function q($){if(!Ne.recording)return;$.preventDefault(),$.stopPropagation();const ae=il($.key,$.code);if($.key==="Escape"&&Ne.held.length===0){x();return}Ne.held.includes(ae)||(Ne.held=[...Ne.held,ae])}function T($){if(!Ne.recording)return;$.preventDefault(),$.stopPropagation();const ae=[...Ne.held];x(),M(ae)}async function z(){var $;try{await Ne.saveBinding()}catch(ae){console.error("Wizard: failed to save binding:",ae),o(c,`Could not save the binding: ${ae}`),Ne.recordIssue({id:"binding-save",step:t,title:"The hotkey binding could not be written — no shortcut will start dictation.",detail:`keys=${(($=Ne.combo)!=null?$:[]).join("+")} gesture=${Ne.gesture} -${ae}`});return}Ne.clearIssue("binding-save"),await m()}async function se(){var $,ae,O,X,ve,Me;o(l,!0),o(c,null);try{o(r,await C("approve_shortcuts"),!0)}catch(Fe){o(c,`${Fe}`),Ne.recordIssue({id:"shortcut-register",step:t,title:"Your desktop refused to register the global shortcut.",detail:`backend=${(ae=($=e(r))==null?void 0:$.backend)!=null?ae:"unknown"} portal_refused=${(X=(O=e(r))==null?void 0:O.portal_refused)!=null?X:"?"} -portal_error=${(Me=(ve=e(r))==null?void 0:ve.portal_error)!=null?Me:"(none)"} -${Fe}`}),await m()}finally{o(l,!1)}}async function ne(){try{await C("open_shortcut_settings")}catch($){o(c,`${$}`)}}pa(()=>{let $=null;Ne.recording?$="Press the keys you want to use.":!Ne.combo||Ne.combo.length===0?$="Record a key combination first.":e(_)&&($="Register the shortcut with your desktop to continue."),a.setBlocker(t,$)}),pa(()=>{const $=e(u);$.length>0&&!$.some(ae=>ae.id===Ne.gesture)&&(Ne.gesture=$[0].id)}),qt(()=>{a.registerGate(t,async()=>{var O;return await z(),((O=e(r))==null?void 0:O.is_active)!==!1}),Ne.loadBinding(),m();const $=_a("setup-status-changed",()=>void m()),ae=setInterval(()=>{Ne.recording||m()},3e3);return window.addEventListener("keydown",q,!0),window.addEventListener("keyup",T,!0),()=>{clearInterval(ae),$.then(O=>O()).catch(()=>{}),window.removeEventListener("keydown",q,!0),window.removeEventListener("keyup",T,!0),Ne.recording&&x(),a.registerGate(t,null),a.setBlocker(t,null)}});const fe=ce(()=>{var $,ae,O,X;return Ne.recording?{label:"listening for keys",hint:(ae=($=Ne.captureHint)!=null?$:e(b))!=null?ae:"Hold one or more modifiers, then press a key. Esc to cancel.",tone:"rec"}:Ne.combo&&Ne.combo.length>0?{label:"binding captured",hint:(O=Ne.captureHint)!=null?O:"Click anywhere in this area to record a different combination.",tone:"done"}:{label:"click to record",hint:(X=Ne.captureHint)!=null?X:"Needs at least one modifier (Ctrl, Alt, Shift or Super) plus a regular key — e.g. Super + Space.",tone:"idle"}});var Q=Ig(),D=i(n(Q),2),I=n(D),R=n(I);pt(R,17,()=>e(u),ft,($,ae)=>{const O=ce(()=>Ne.gesture===e(ae).id);var X=Tg();let ve;var Me=n(X),Fe=n(Me),_e=n(Fe),re=i(Fe,2),we=n(re),Je=i(Me,2),de=n(Je),G=i(n(de),2);pt(G,21,()=>e(ae).key,ft,(Y,he)=>{var me=ce(()=>pl(e(he),2));let pe=()=>e(me)[0],De=()=>e(me)[1];var Ge=kg();let st,it;w(()=>{st=Te(Ge,1,"svelte-1fbfhk3",null,st,{on:De()&&e(O),lit:De()}),it=na(Ge,"",it,{flex:pe()})}),d(Y,Ge)});var U=i(de,2),te=i(n(U),2);pt(te,21,()=>e(ae).mic,ft,(Y,he)=>{var me=ce(()=>pl(e(he),2));let pe=()=>e(me)[0],De=()=>e(me)[1];var Ge=xg();let st,it;w(()=>{st=Te(Ge,1,"svelte-1fbfhk3",null,st,{on:De()&&e(O),lit:De()}),it=na(Ge,"",it,{flex:pe()})}),d(Y,Ge)}),w(()=>{ve=Te(X,1,"vx-card gesture svelte-1fbfhk3",null,ve,{"vx-on":e(O)}),y(_e,e(ae).name),y(we,e(ae).desc)}),N("click",X,()=>Ne.gesture=e(ae).id),d($,X)});var ge=i(R,2);{var ee=$=>{var ae=Sg(),O=n(ae);w(()=>{var X;return y(O,`${(X=e(v))!=null?X:""} gesture${e(v)===1?"":"s"} hidden — this desktop's shortcut - backend only tells VoxCtrl that a shortcut fired, so it cannot time a hold.`)}),d($,ae)};k(ge,$=>{e(v)>0&&$(ee)})}var j=i(I,2),V=n(j);let oe;var L=n(V);{var B=$=>{var ae=Cg();d($,ae)};k(L,$=>{Ne.recording&&$(B)})}var be=i(L,2),Pe=i(n(be),1,!0),ue=i(be,2);pt(ue,21,()=>Ne.displayKeys,ft,($,ae,O)=>{var X=Mg(),ve=_t(X);let Me;var Fe=n(ve),_e=i(ve,2);{var re=we=>{var Je=Eg();d(we,Je)};k(_e,we=>{O{Me=Te(ve,1,"vx-keycap",null,Me,{"vx-hot":Ne.recording||e(fe).tone==="done"}),y(Fe,we)},[()=>dl(e(ae))]),d($,X)});var W=i(ue,2);let J;var Se=n(W),ze=i(V,2);{var le=$=>{var ae=Dg();let O;var X=n(ae),ve=n(X),Me=i(X,2),Fe=n(Me),_e=n(Fe),re=i(Fe,2),we=n(re);{var Je=me=>{var pe=Be("The binding is registered system-wide. Continue to choose an overlay.");d(me,pe)},de=me=>{var pe=Be();w(()=>y(pe,e(r).portal_error)),d(me,pe)},G=me=>{var pe=Be(`Wayland desktops ask you to confirm global shortcuts. Click below and approve the - dialog your desktop shows — you come straight back here.`);d(me,pe)};k(we,me=>{var pe;e(f)?me(Je):(pe=e(r))!=null&&pe.portal_error?me(de,1):me(G,-1)})}var U=i(re,2);{var te=me=>{var pe=Ag(),De=n(pe);w(()=>y(De,e(c))),d(me,pe)};k(U,me=>{e(c)&&me(te)})}var Y=i(Me,2);{var he=me=>{var pe=zg(),De=n(pe),Ge=i(De,2),st=n(Ge);{var it=A=>{var E=Pg();d(A,E)},H=A=>{var E=Be("Register →");d(A,E)};k(st,A=>{e(l)?A(it):A(H,-1)})}w(()=>Ge.disabled=e(l)),N("click",De,ne),N("click",Ge,se),d(me,pe)};k(Y,me=>{e(f)||me(he)})}w(()=>{var me,pe;O=Te(ae,1,"sys svelte-1fbfhk3",null,O,{ok:e(f)}),y(ve,e(f)?"✓":"⌬"),y(_e,e(f)?`Shortcuts are live (${(pe=(me=e(r))==null?void 0:me.backend)!=null?pe:"ready"})`:"Your desktop still needs to approve the shortcut")}),d($,ae)};k(ze,$=>{Ne.combo&&Ne.combo.length>0&&$(le)})}w(()=>{oe=Te(V,1,"recorder svelte-1fbfhk3",null,oe,{rec:e(fe).tone==="rec",done:e(fe).tone==="done"}),y(Pe,e(fe).label),J=Te(W,1,"rec-hint svelte-1fbfhk3",null,J,{bad:!!Ne.captureHint}),y(Se,e(fe).hint)}),N("click",V,()=>Ne.recording?x():h()),d(s,Q),St()}Qt(["click"]);const Rg="/assets/blue_wave-DGfyQFFo.webm",Lg="/assets/mono_bars-1wA0h3Fz.webm",Ng="/assets/pulse-Cdnh-rAb.webm",Vg="/assets/spectrum-CLEHMZrI.webm",Fg="/assets/terminal-CvV88uWw.webm",Bg="/assets/vinyl-BG1f8NO1.webm",qg="/assets/voice_card-BZZeHAB9.webm",jg="/assets/waveform-DUI2x_EP.webm",Ug="/assets/blue_wave-OqjJ-fxD.webp",Wg="/assets/mono_bars-CPLx02Ku.webp",Hg="/assets/pulse-ESYJH4j2.webp",$g="/assets/spectrum-DV9agKUG.webp",Gg="/assets/terminal-DhrByqCl.webp",Kg="/assets/vinyl-BfHn3C6g.webp",Yg="/assets/voice_card-QnCU8RiM.webp",Jg="/assets/waveform-B5-owbWT.webp";var Xg=p('
                '),Zg=p('
                '),Qg=Oo(''),em=p('
                '),tm=p('
                '),am=p('
                '),sm=p('
                > listening
                '),nm=p(''),im=p('',2),rm=p("
                ",1);function Il(s,a){Tt(a,!0);let t=Et(a,"seed",3,1),r=Et(a,"showClip",3,!0);const l=Object.assign({"../../assets/overlays/blue_wave.webm":Rg,"../../assets/overlays/mono_bars.webm":Lg,"../../assets/overlays/pulse.webm":Ng,"../../assets/overlays/spectrum.webm":Vg,"../../assets/overlays/terminal.webm":Fg,"../../assets/overlays/vinyl.webm":Bg,"../../assets/overlays/voice_card.webm":qg,"../../assets/overlays/waveform.webm":jg}),c=Object.assign({"../../assets/overlays/blue_wave.webp":Ug,"../../assets/overlays/mono_bars.webp":Wg,"../../assets/overlays/pulse.webp":Hg,"../../assets/overlays/spectrum.webp":$g,"../../assets/overlays/terminal.webp":Gg,"../../assets/overlays/vinyl.webp":Kg,"../../assets/overlays/voice_card.webp":Yg,"../../assets/overlays/waveform.webp":Jg});function u(j,V){var L;const oe=Object.entries(j).find(([B])=>B.endsWith(`/${V}`));return(L=oe==null?void 0:oe[1])!=null?L:null}const v=(()=>{if(typeof document>"u")return!0;const j=document.createElement("video");return j.canPlayType('video/webm; codecs="av01.0.05M.08"')!==""||j.canPlayType("video/webm")!==""})(),f=ce(()=>r()&&v?u(l,`${a.styleId}.webm`):null),_=ce(()=>u(c,`${a.styleId}.webp`));let b=S(!1);pa(()=>{e(f),o(b,!1)});const m=ce(()=>Array.from({length:14},(j,V)=>{const oe=.3+.7*Math.abs(Math.sin(t()*2.3+V*1.3));return{h:Math.round(oe*100),delay:((V*.11+t()*.07)%1.1).toFixed(2),dur:(.9+V*5%4*.15).toFixed(2)}})),h=ce(()=>a.styleId==="pulse"?"ring":a.styleId==="vinyl"?"needle":a.styleId==="terminal"?"terminal":a.styleId==="waveform"||a.styleId==="blue_wave"?"wave":"bars"),x=ce(()=>a.styleId==="mono_bars");var M=rm(),q=_t(M);let T;var z=n(q);{var se=j=>{var V=Zg();pt(V,21,()=>e(m).slice(0,a.styleId==="mono_bars"?5:14),ft,(oe,L)=>{var B=Xg();let be;w(()=>{var Pe,ue,W;return be=na(B,"",be,{height:`${(Pe=e(L).h)!=null?Pe:""}%`,"animation-delay":`${(ue=e(L).delay)!=null?ue:""}s`,"animation-duration":`${(W=e(L).dur)!=null?W:""}s`})}),d(oe,B)}),d(j,V)},ne=j=>{var V=Qg();d(j,V)},fe=j=>{var V=em();d(j,V)},Q=j=>{var V=tm();d(j,V)},D=j=>{var V=sm(),oe=i(n(V),2);pt(oe,21,()=>e(m).slice(0,10),ft,(L,B)=>{var be=am();let Pe;w(()=>{var ue;return Pe=na(be,"",Pe,{"animation-delay":`${(ue=e(B).delay)!=null?ue:""}s`})}),d(L,be)}),d(j,V)};k(z,j=>{e(h)==="bars"?j(se):e(h)==="wave"?j(ne,1):e(h)==="ring"?j(fe,2):e(h)==="needle"?j(Q,3):j(D,-1)})}var I=i(q,2);{var R=j=>{var V=nm();w(()=>mt(V,"src",e(_))),d(j,V)};k(I,j=>{e(_)&&j(R)})}var ge=i(I,2);{var ee=j=>{var V=im();let oe;V.muted=!0,w(()=>{var L;oe=Te(V,1,"clip svelte-y6l73v",null,oe,{ready:e(b)}),mt(V,"src",e(f)),mt(V,"poster",(L=e(_))!=null?L:void 0)}),xs("playing",V,()=>o(b,!0)),xs("error",V,()=>o(b,!1)),d(j,V)};k(ge,j=>{e(f)&&j(ee)})}w(()=>T=Te(q,1,"preview svelte-y6l73v",null,T,{mono:e(x)})),d(s,M),St()}var lm=p(''),om=p(''),cm=p(`
                // 03 · on-screen overlay

                Show a signal while listening?

                The overlay appears the moment your hotkey fires and shows live mic level plus the active + portal support (KDE Plasma, GNOME 48+, Hyprland) avoids it entirely.

                `),hh=p('

                '),gh=p(`

                Global shortcuts require approval from your system. If you closed or cancelled + the desktop keybind prompt without approving, click below to show the prompt again.

                `,1),mh=p('

                '),bh=p('

                Global shortcuts require approval or registration from your system. VoxCtrl will not grant itself keyboard access to work around this.

                ',1),yh=p(' '),wh=p(' '),kh=p(` is missing, so transcriptions cannot be + typed into the focused window.`,1),xh=p(''),Th=p(''),Sh=p('
                 
                '),Eh=p('
                ',1),Ch=p(' is downloaded and ready.',1),Ah=p('Downloading in the background — no action needed.',1),Mh=p(' is not downloaded yet, so dictation produces no text.',1),Ph=p('
                '),Dh=p('
                ❌
                '),zh=p(''),Ih=p('
                ');function Oh(s,a){Tt(a,!0);let t=S(null),r=S(!1),l=S(!1),c=S(null),u=S(!1),v=S(!1),f=S(!1),h=S(null),b=S(!1),m=S(null),_;async function x(){try{o(t,await E("get_setup_status"),!0)}catch(R){console.error("Failed to read setup status:",R)}}qt(()=>{x(),_=setInterval(x,2e3)}),ar(()=>{_&&clearInterval(_)});async function A(){try{await ol().close()}catch(R){console.error("Failed to close window natively:",R)}}async function q(){var R;o(r,!0),o(c,null);try{await E("install_system_integration"),await x()}catch(B){o(c,(R=B==null?void 0:B.toString())!=null?R:"Install failed",!0),o(u,!0)}finally{o(r,!1)}}async function T(){var R;o(l,!0),o(c,null);try{await E("download_configured_model"),await x()}catch(B){o(c,(R=B==null?void 0:B.toString())!=null?R:"Download failed",!0)}finally{o(l,!1)}}async function D(){try{await E("open_settings_tab",{tab:"engine"})}catch(R){console.error("Failed to open the Engine settings tab:",R)}}async function se(){var R;o(f,!0),o(h,null);try{await E("open_shortcut_settings")}catch(B){o(h,(R=B==null?void 0:B.toString())!=null?R:"Could not open shortcut settings.",!0)}finally{o(f,!1)}}async function ne(){var R;o(b,!0),o(m,null);try{await E("approve_shortcuts"),await x()}catch(B){o(m,(R=B==null?void 0:B.toString())!=null?R:"Failed to configure shortcuts for your desktop.",!0),await x()}finally{o(b,!1)}}async function fe(){if(e(t))try{await navigator.clipboard.writeText(e(t).manual_package_commands),o(v,!0),setTimeout(()=>o(v,!1),2e3)}catch(R){console.error("Clipboard write failed:",R)}}const Q=ce(()=>e(t)?e(t).hotkeys.backend==="starting"?"busy":e(t).hotkeys_active?"ok":"todo":"busy"),z=ce(()=>e(t)?e(t).missing_injection_tool?"todo":"ok":"busy"),I=ce(()=>e(t)?e(t).model_ready?"ok":e(t).model_auto_downloads?"busy":"todo":"busy"),L=R=>R==="ok"?"✅":R==="busy"?"⏳":"⚠️";var ge=Ih(),ee=n(ge);{var j=R=>{var B=nh();d(R,B)},V=R=>{var B=ih();d(R,B)},oe=R=>{var B=zh(),be=n(B),Pe=n(be),ue=n(Pe),K=i(Pe,2),J=n(K),Se=n(J),De=i(J,2),le=n(De),W=i(be,2),ae=n(W);let O;var X=n(ae),ve=n(X),Ae=i(X,2),Fe=i(n(Ae),2),he=n(Fe),re=i(Fe,2);{var we=Oe=>{var qe=lh(),G=ht(qe),g=n(G),P=i(G,2),Me=n(P),Ue=n(Me),ie=i(P,2);{var xe=Ce=>{var He=rh(),Xe=n(He);w(()=>y(Xe,e(h))),d(Ce,He)};k(ie,Ce=>{e(h)&&Ce(xe)})}w(()=>{var Ce;y(g,`🔧 One more step on KDE: ${(Ce=e(t).hotkeys.manual_enable_hint)!=null?Ce:""}`),Me.disabled=e(f),y(Ue,e(f)?"Opening…":"Open Shortcut Settings")}),N("click",Me,se),d(Oe,qe)};k(re,Oe=>{e(t).hotkeys.needs_manual_enable&&Oe(we)})}var Je=i(re,2);{var de=Oe=>{var qe=oh();d(Oe,qe)};k(Je,Oe=>{(e(t).hotkeys.backend==="portal"||e(t).hotkeys.backend==="mint_dbus")&&Oe(de)})}var $=i(Je,2);{var U=Oe=>{var qe=uh();pt(qe,21,()=>e(t).hotkeys.shortcuts,ft,(G,g)=>{var P=vh();let Me;var Ue=n(P);{var ie=Ce=>{var He=ch(),Xe=n(He);w(()=>y(Xe,e(g).trigger_description||e(g).requested||"chosen in your desktop settings")),d(Ce,He)},xe=Ce=>{var He=dh();d(Ce,He)};k(Ue,Ce=>{e(g).bound?Ce(ie):Ce(xe,-1)})}w(()=>Me=Te(P,1,"svelte-45v8pc",null,Me,{unbound:!e(g).bound})),d(G,P)}),d(Oe,qe)};k($,Oe=>{e(t).hotkeys_active&&e(t).hotkeys.shortcuts.length>0&&Oe(U)})}var te=i($,2);{var Y=Oe=>{var qe=ph();d(Oe,qe)},_e=Oe=>{var qe=fh();d(Oe,qe)},me=Oe=>{var qe=_h();d(Oe,qe)},pe=Oe=>{var qe=gh(),G=i(ht(qe),2),g=n(G),P=n(g),Me=i(G,2);{var Ue=ie=>{var xe=hh(),Ce=n(xe);w(()=>y(Ce,e(m))),d(ie,xe)};k(Me,ie=>{e(m)&&ie(Ue)})}w(()=>{g.disabled=e(b),y(P,e(b)?"Configuring…":"Approve Keybinds")}),N("click",g,ne),d(Oe,qe)},ze=Oe=>{var qe=bh(),G=i(ht(qe),2),g=n(G),P=n(g),Me=i(G,2);{var Ue=ie=>{var xe=mh(),Ce=n(xe);w(()=>y(Ce,e(m))),d(ie,xe)};k(Me,ie=>{e(m)&&ie(Ue)})}w(()=>{g.disabled=e(b),y(P,e(b)?"Configuring…":"Approve Shortcuts")}),N("click",g,ne),d(Oe,qe)};k(te,Oe=>{e(t).hotkeys.backend==="x11"?Oe(Y):e(t).hotkeys.backend==="mint_dbus"?Oe(_e,1):e(t).hotkeys.backend==="evdev"?Oe(me,2):e(t).hotkeys.portal_refused?Oe(pe,3):e(t).hotkeys.backend!=="starting"&&Oe(ze,4)})}var $e=i(te,2);{var st=Oe=>{var qe=yh(),G=n(qe);w(()=>{var g;return y(G,`Portal reported: ${(g=e(t).hotkeys.portal_error)!=null?g:""}`)}),d(Oe,qe)};k($e,Oe=>{e(t).hotkeys.portal_error&&e(t).hotkeys.backend!=="portal"&&e(t).hotkeys.backend!=="evdev"&&Oe(st)})}var it=i($e,2);{var H=Oe=>{var qe=wh(),G=n(qe);w(()=>{var g;return y(G,`X11 shortcuts: ${(g=e(t).hotkeys.x11_error)!=null?g:""}`)}),d(Oe,qe)};k(it,Oe=>{e(t).hotkeys.x11_error&&e(t).hotkeys.backend!=="x11"&&e(t).hotkeys.backend!=="portal"&&Oe(H)})}var M=i(ae,2);let C;var ke=n(M),Ke=n(ke),ye=i(ke,2),Ie=i(n(ye),2),Ye=n(Ie);{var Ze=Oe=>{var qe=kh(),G=ht(qe),g=n(G);w(()=>y(g,e(t).missing_injection_tool)),d(Oe,qe)},Ve=Oe=>{var qe=Be("Ready — transcriptions can be typed straight into the focused window.");d(Oe,qe)};k(Ye,Oe=>{e(t).missing_injection_tool?Oe(Ze):Oe(Ve,-1)})}var at=i(Ie,2);{var et=Oe=>{var qe=Eh(),G=ht(qe),g=n(G);{var P=Ce=>{var He=xh();N("click",He,q),d(Ce,He)};k(g,Ce=>{e(t).pkexec_available&&e(t).manual_package_commands&&Ce(P)})}var Me=i(g,2);{var Ue=Ce=>{var He=Th(),Xe=n(He);w(()=>y(Xe,e(u)?"Hide manual commands":"Install it manually")),N("click",He,()=>o(u,!e(u))),d(Ce,He)};k(Me,Ce=>{e(t).manual_package_commands&&Ce(Ue)})}var ie=i(G,2);{var xe=Ce=>{var He=Sh(),Xe=n(He),Dt=n(Xe),zt=i(Xe,2),Ft=n(zt);w(()=>{y(Dt,e(t).manual_package_commands),y(Ft,e(v)?"Copied":"Copy commands")}),N("click",zt,fe),d(Ce,He)};k(ie,Ce=>{e(u)&&Ce(xe)})}d(Oe,qe)};k(at,Oe=>{e(t).missing_injection_tool&&Oe(et)})}var rt=i(M,2);let Ee;var Ge=n(rt),ct=n(Ge),vt=i(Ge,2),nt=i(n(vt),2),wt=n(nt);{var dt=Oe=>{var qe=Ch(),G=ht(qe),g=n(G);w(()=>y(g,e(t).model_size)),d(Oe,qe)},Et=Oe=>{var qe=Ah(),G=i(ht(qe)),g=n(G);w(()=>y(g,e(t).model_size)),d(Oe,qe)},Kt=Oe=>{var qe=Mh(),G=ht(qe),g=n(G);w(()=>y(g,e(t).model_size)),d(Oe,qe)};k(wt,Oe=>{e(t).model_ready?Oe(dt):e(t).model_auto_downloads?Oe(Et,1):Oe(Kt,-1)})}var ia=i(nt,2);{var ra=Oe=>{var qe=Ph(),G=n(qe),g=n(G),P=i(G,2);w(()=>{G.disabled=e(l),y(g,e(l)?"Downloading…":`Download ${e(t).model_size}`)}),N("click",G,T),N("click",P,D),d(Oe,qe)};k(ia,Oe=>{!e(t).model_ready&&!e(t).model_auto_downloads&&Oe(ra)})}var bt=i(W,2);{var ea=Oe=>{var qe=Dh(),G=i(n(qe),2),g=n(G);w(()=>y(g,e(c))),d(Oe,qe)};k(bt,Oe=>{e(c)&&Oe(ea)})}var Lt=i(bt,2),Ht=n(Lt),ta=n(Ht);w((Oe,qe,G)=>{y(ue,e(t).is_complete?"✅":"🛠️"),y(Se,e(t).is_complete?"VoxCtrl is ready":"Finish setting up VoxCtrl"),y(le,e(t).is_complete?"Press your shortcut anywhere to dictate.":"Dictation is not ready yet — the steps below say why."),O=Te(ae,1,"step svelte-45v8pc",null,O,{done:e(Q)==="ok"}),y(ve,Oe),y(he,e(t).hotkeys.detail),C=Te(M,1,"step svelte-45v8pc",null,C,{done:e(z)==="ok"}),y(Ke,qe),Ee=Te(rt,1,"step svelte-45v8pc",null,Ee,{done:e(I)==="ok"}),y(ct,G),y(ta,e(t).is_complete?"Close":"Continue anyway")},[()=>L(e(Q)),()=>L(e(z)),()=>L(e(I))]),N("click",Ht,A),d(R,B)};k(ee,R=>{e(r)?R(j):e(t)?R(oe,-1):R(V,1)})}d(s,ge),St()}Qt(["click"]);const Lh=[{id:"tiny",mb:75,speed:.96,accuracy:.58},{id:"base",mb:142,speed:.88,accuracy:.68},{id:"small",mb:466,speed:.68,accuracy:.8},{id:"medium",mb:1500,speed:.42,accuracy:.9},{id:"large-v3",mb:3100,speed:.22,accuracy:.97}],Rh=[{id:"tiny",mb:100,speed:.98,accuracy:.64},{id:"base",mb:250,speed:.92,accuracy:.77}],Nh=[{id:"tdt-0.6b-v3",mb:665,speed:.95,accuracy:.94}],Vh=[{id:"remote",mb:0,speed:.95,accuracy:.95}],Ai=[{id:"whisper-cpp",name:"whisper.cpp",glyph:"∇",tagline:"Reference-grade accuracy in quiet spaces. Five model sizes from 75 MB to 3.1 GB. CUDA, Vulkan or CPU.",models:Lh,gpu:!0,noiseRetention:.64},{id:"moonshine",name:"Moonshine",glyph:"↯",tagline:"Streaming ONNX model tuned for real rooms — fans, keyboards, traffic. Fast on any CPU, tiny download.",models:Rh,gpu:!1,noiseRetention:.93},{id:"parakeet",name:"Parakeet TDT",glyph:"⚡",tagline:"NVIDIA FastConformer TDT 0.6B. Ultra-fast non-autoregressive transcription, SOTA accuracy, no repetition loops.",models:Nh,gpu:!0,noiseRetention:.88},{id:"remote-openai",name:"Remote Speech Engine",glyph:"🌐",tagline:"Connect to an OpenAI-compatible speech-to-text server on your network or cloud (Faster-Whisper, vLLM, etc.).",models:Vh,gpu:!1,noiseRetention:.92}],xn=[{id:"toggle",name:"Tap to talk",verb:"tap",desc:"Press once to start, press again to stop. Hands stay free while you speak.",key:[[1,1],[8,0],[1,1],[3,0]],mic:[[1,0],[9,1],[4,0]]},{id:"double_tap",name:"Double-tap to talk",verb:"double-tap",desc:"Two quick presses start dictation; one press stops. Hard to trigger by accident.",key:[[1,1],[.7,0],[1,1],[7,0],[1,1],[3,0]],mic:[[2.7,0],[7.3,1],[4,0]]},{id:"hold",name:"Hold to talk",verb:"hold",desc:"Hold the keys down while speaking, release to stop. Like a walkie-talkie.",key:[[1,0],[9,1],[4,0]],mic:[[1,0],[9,1],[4,0]]},{id:"double_tap_hold",name:"Double-tap & hold",verb:"double-tap and hold",desc:"Tap once, then press and hold. Release to stop. Never collides with a plain shortcut.",key:[[1,1],[.7,0],[8.3,1],[4,0]],mic:[[2.7,0],[6.3,1],[4,0]]}],mn=[{id:"blue_wave",name:"Ocean Wave",meta:"default · tide-pool waves",glyph:"⊟"},{id:"voice_card",name:"Voice Card",meta:"20×6 LED VU matrix",glyph:"⊟"},{id:"waveform",name:"Waveform",meta:"scrolling oscilloscope",glyph:"⌇"},{id:"pulse",name:"Pulse Ring",meta:"sonar sweep · target lock",glyph:"◌"},{id:"mono_bars",name:"Mono Bars",meta:"black & white 5-bar meter",glyph:"▥"},{id:"spectrum",name:"Neon Spectrum",meta:"16-band equalizer",glyph:"▦"},{id:"terminal",name:"Retro Terminal",meta:"DOS-blue ASCII meter",glyph:"▸"},{id:"vinyl",name:"Analog VU",meta:"vintage needle meter",glyph:"◔"}],Fh=[{id:"top",label:"Top",glyph:"⤒"},{id:"center",label:"Center",glyph:"⊡"},{id:"bottom",label:"Bottom",glyph:"⤓"}],cs=[{id:"vox_cpm_2",name:"VoxCPM2",kind:"neural · 2B autoregressive",quality:.98,speed:.25,mb:2950,note:"2B autoregressive diffusion. SOTA voice realism & cloning. Runs via audio.cpp, best on a Vulkan GPU."},{id:"breeze_tts_2",name:"Breeze-TTS-2",kind:"neural · expressive",quality:.96,speed:.32,mb:5080,note:"Most natural prosody. Runs via audio.cpp, best on a Vulkan GPU or fast CPU.",nonCommercial:!0,licenceUrl:"huggingface.co/BreezeBlue/Breeze-TTS-2"},{id:"pocket_tts",name:"Pocket TTS",kind:"neural · voice cloning",quality:.86,speed:.55,mb:130,note:"Cloned voices, downloaded in-app. Runs via audio.cpp with optional Vulkan acceleration."},{id:"piper",name:"Piper TTS",kind:"onnx · ~11 voices",quality:.72,speed:.8,mb:60,note:"The sweet spot for most machines. Per-voice ~60 MB."},{id:"inflect_micro",name:"Inflect Micro",kind:"compact neural",quality:.55,speed:.92,mb:38,note:"Tiny footprint, still human-ish. Good for laptops."},{id:"espeak",name:"eSpeak-NG",kind:"formant synth",quality:.3,speed:.99,mb:0,note:"Instant, robotic, runs anywhere. Zero download."}],ds=["Welcome","Engine","Hotkey","Overlay","Test","Voice","Done"];function Tn(s){return s<=0?"none":s>=1e3?`${(s/1e3).toFixed(1)} GB`:`${Math.round(s)} MB`}function Bh(s,a=cs){const t=Math.max(0,...a.map(r=>r.mb));return t<=0||s<=0?0:Math.min(100,s/t*100)}function Fi(s){return`${Math.round(s*100)}%`}function qh(s){return s>.85?"instant":s>.6?"< 1 s":s>.35?"1–3 s":"3–8 s"}function jh(s){return s>.9?"instant":s>.7?"< 0.5 s":s>.5?"~1 s":"2–4 s"}function Mi(s,a){return Array.from({length:s},(t,r)=>{const l=(r+1)/s;return{h:Math.max(8,Math.round(100*a*(.55+.45*Math.sin(r*1.7+a*5)))),o:l<=a?1:.18}})}function Ho(s){return Array.from({length:s},(a,t)=>({d:(.6+t*7%5*.12).toFixed(2),dl:(t*.07).toFixed(2)}))}const Uh={KEY_LEFTCTRL:"Ctrl",KEY_RIGHTCTRL:"Ctrl",KEY_LEFTALT:"Alt",KEY_RIGHTALT:"Alt",KEY_LEFTSHIFT:"Shift",KEY_RIGHTSHIFT:"Shift",KEY_LEFTMETA:"Super",KEY_RIGHTMETA:"Super",KEY_SPACE:"Space",KEY_ESC:"Esc",KEY_ENTER:"Enter",KEY_TAB:"Tab",KEY_BACKSPACE:"Backspace",KEY_DELETE:"Delete",KEY_MINUS:"-",KEY_EQUAL:"=",KEY_LEFTBRACE:"[",KEY_RIGHTBRACE:"]",KEY_BACKSLASH:"\\",KEY_SEMICOLON:";",KEY_APOSTROPHE:"'",KEY_GRAVE:"`",KEY_COMMA:",",KEY_DOT:".",KEY_SLASH:"/",KEY_KPPLUS:"Num +",KEY_KPMINUS:"Num -",KEY_KPASTERISK:"Num *",KEY_KPSLASH:"Num /",KEY_KPDOT:"Num .",KEY_KPENTER:"Num Enter",KEY_KPEQUAL:"Num ="};function dl(s){var t;const a=/^KEY_KP(\d)$/.exec(s);return a?`Num ${a[1]}`:(t=Uh[s])!=null?t:s.replace(/^KEY_/,"")}const yr="default_hold",Wn="command",Kh="Command";function Hh(s){return{...s,id:Wn,label:Kh,delivery:"command",command:null}}var li,oi,ci,di,vi,ui,pi,fi,_i,hi,gi;class Wh{constructor(){lt(this,li,S(0));lt(this,oi,S(0));lt(this,ci,S(!1));lt(this,di,S("hold"));lt(this,vi,S(null));lt(this,ui,S(!1));lt(this,pi,S(yt([])));lt(this,fi,S(null));lt(this,_i,S(yt([])));lt(this,hi,S(!1));lt(this,gi,S(!1))}get step(){return e(F(this,li))}set step(a){o(F(this,li),a,!0)}get visited(){return e(F(this,oi))}set visited(a){o(F(this,oi),a,!0)}get leaving(){return e(F(this,ci))}set leaving(a){o(F(this,ci),a,!0)}get gesture(){return e(F(this,di))}set gesture(a){o(F(this,di),a,!0)}get combo(){return e(F(this,vi))}set combo(a){o(F(this,vi),a,!0)}get recording(){return e(F(this,ui))}set recording(a){o(F(this,ui),a,!0)}get held(){return e(F(this,pi))}set held(a){o(F(this,pi),a,!0)}get captureHint(){return e(F(this,fi))}set captureHint(a){o(F(this,fi),a,!0)}get issues(){return e(F(this,_i))}set issues(a){o(F(this,_i),a,!0)}get engineChosen(){return e(F(this,hi))}set engineChosen(a){o(F(this,hi),a,!0)}get modelChosen(){return e(F(this,gi))}set modelChosen(a){o(F(this,gi),a,!0)}get gestureInfo(){var a;return(a=xn.find(t=>t.id===this.gesture))!=null?a:xn[2]}get displayKeys(){var a;return this.recording?this.held:(a=this.combo)!=null?a:[]}recordIssue(a){this.issues=[...this.issues.filter(t=>t.id!==a.id),a]}clearIssue(a){this.issues=this.issues.filter(t=>t.id!==a)}goTo(a){a===this.step||this.leaving||a<0||a>=ds.length||(this.leaving=!0,this.recording=!1,setTimeout(()=>{this.step=a,this.visited=Math.max(this.visited,a),this.leaving=!1},200))}async ensureCommandTarget(){var l;const a=await E("get_targets");if(a.some(c=>c.id===Wn&&c.delivery==="command"))return Wn;const t=(l=a.find(c=>c.delivery==="inject"))!=null?l:a[0];if(!t)return"default";const r=[...a.filter(c=>c.id!==Wn),Hh(t)];return await E("save_targets",{targets:r}),Wn}async saveBinding(){if(!this.combo||this.combo.length===0)return;const a=await this.ensureCommandTarget(),t=await E("get_bindings").catch(()=>[]),r=this.gestureInfo,l={id:yr,label:`Dictate (${r.name})`,keys:[...this.combo],gesture:this.gesture,target_id:a,target_ids:[a],tap_ms:300,hold_threshold_ms:200,disabled:!1,openai_enabled:!1,openai_model:"",openai_mode:"custom",openai_prompt:"",openai_system_prompt:""},c=t.filter(u=>u.id!==yr&&u.id!=="default_toggle"&&u.id!=="__tts_stop__");await E("save_bindings",{bindings:[l,...c]})}async loadBinding(){var a;try{const t=await E("get_bindings"),r=(a=t.find(l=>l.id===yr))!=null?a:t.find(l=>l.id!=="__tts_stop__");r&&r.keys.length>0&&(this.combo=[...r.keys],xn.some(l=>l.id===r.gesture)&&(this.gesture=r.gesture))}catch(t){console.error("Wizard: failed to read existing bindings:",t)}}reset(){this.step=0,this.visited=0,this.leaving=!1,this.gesture="hold",this.combo=null,this.recording=!1,this.held=[],this.captureHint=null,this.issues=[],this.engineChosen=!1,this.modelChosen=!1}}li=new WeakMap,oi=new WeakMap,ci=new WeakMap,di=new WeakMap,vi=new WeakMap,ui=new WeakMap,pi=new WeakMap,fi=new WeakMap,_i=new WeakMap,hi=new WeakMap,gi=new WeakMap;const Ne=new Wh;function fs(s){const a={...bn(Ot)};s(a),Ot.set(a)}var $h=p('
                '),Gh=p(`
                VoxCtrl
                // welcome

                Speak to anything on your machine.

                A few minutes of setup. Pick a transcription engine, bind a hotkey, choose how VoxCtrl shows + itself, and test it end to end. Everything runs on this device — nothing leaves it.

                ↺ Nothing is permanent — every choice can be changed later in Settings.
                `);function Yh(s){const a=[{glyph:"∇",n:"01",title:"Transcription engine",desc:"whisper.cpp or Moonshine, sized to your hardware."},{glyph:"⌁",n:"02",title:"Hotkey",desc:"A gesture and a key combo to start talking."},{glyph:"⌬",n:"03",title:"Overlay",desc:"A visual signal while the mic is live — or none."},{glyph:"◉",n:"04",title:"Live test",desc:"Dictate into a box and watch it land."},{glyph:"⊕",n:"05",title:"Voice output",desc:"Optional: let agents talk back through your speakers."}];var t=Gh(),r=n(t),l=n(r),c=i(n(l),4),u=i(r,2);pt(u,5,()=>a,ft,(v,f)=>{var h=$h(),b=n(h),m=n(b),_=n(m),x=i(m,2),A=n(x),q=i(b,2),T=n(q),D=i(q,2),se=n(D);w(()=>{y(_,e(f).glyph),y(A,e(f).n),y(T,e(f).title),y(se,e(f).desc)}),d(v,h)}),w(()=>mt(c,"src",nr)),d(s,t)}var Jh=p(''),Xh=p('
                Discovered models from server:
                '),Zh=p("
                "),Qh=p('✔ Tested & verified successfully'),eg=p('⚠️ Test connection required to proceed'),tg=p(``);function ag(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",r),[r,l]=Ea();let c=Ct(a,"isOpen",15,!1),u=S(""),v=S(""),f=S("whisper-1"),h=S(""),b=S(30),m=S(!1),_=S(null),x=S(yt([])),A=S(!1),q=!1;pa(()=>{c()&&!q&&Ts(()=>{var L;const I=t().engine.remote_openai;o(u,(I==null?void 0:I.endpoint)||"http://localhost:8000/v1",!0),o(v,(I==null?void 0:I.api_key)||"",!0),o(f,(I==null?void 0:I.model)||"whisper-1",!0),o(h,(I==null?void 0:I.language)||"",!0),o(b,(L=I==null?void 0:I.timeout_secs)!=null?L:30,!0),o(_,null)}),q=c()});function T(){fs(I=>{I.engine.remote_openai?(I.engine.remote_openai.endpoint=e(u).trim()||"http://localhost:8000/v1",I.engine.remote_openai.api_key=e(v).trim()?e(v).trim():null,I.engine.remote_openai.model=e(f).trim()||"whisper-1",I.engine.remote_openai.language=e(h).trim(),I.engine.remote_openai.timeout_secs=Number(e(b))||30):I.engine.remote_openai={endpoint:e(u).trim()||"http://localhost:8000/v1",api_key:e(v).trim()?e(v).trim():null,model:e(f).trim()||"whisper-1",language:e(h).trim(),timeout_secs:Number(e(b))||30}})}async function D(){var I;if(!e(m)){T(),o(m,!0),o(_,null);try{const L=await E("test_remote_stt",{endpoint:e(u).trim()||"http://localhost:8000/v1",apiKey:e(v).trim()?e(v).trim():null,model:e(f).trim()||"whisper-1",timeoutSecs:Number(e(b))||30});o(_,{success:L.success,message:L.message},!0),L.models&&L.models.length>0&&(o(x,L.models,!0),e(f)||(o(f,L.models[0],!0),T())),L.success&&(o(A,!0),T(),(I=a.onSuccess)==null||I.call(a))}catch(L){o(_,{success:!1,message:L.toString()},!0)}finally{o(m,!1)}}}function se(){T(),c(!1)}function ne(I){I.key==="Escape"&&se()}var fe=xi();xs("keydown",Or,ne);var Q=ht(fe);{var z=I=>{var L=tg(),ge=n(L),ee=n(ge),j=i(n(ee),2),V=i(ee,2),oe=i(n(V),2),R=n(oe),B=i(n(R),2),be=i(R,4),Pe=i(n(be),2),ue=i(be,4),K=i(n(ue),2),J=i(ue,2);{var Se=pe=>{var ze=Xh(),$e=i(n(ze),2);pt($e,21,()=>e(x),ft,(st,it)=>{var H=Jh();let M;var C=n(H);w(()=>{M=Te(H,1,"tag-btn svelte-1c9i6zy",null,M,{active:e(f)===e(it)}),y(C,e(it))}),N("click",H,()=>{o(f,e(it),!0),T()}),d(st,H)}),d(pe,ze)};k(J,pe=>{e(x).length>0&&pe(Se)})}var De=i(J,2),le=i(n(De),2),W=i(De,4),ae=i(n(W),2),O=i(W,2),X=n(O),ve=n(X);{var Ae=pe=>{var ze=Be("⏳ Testing Connection...");d(pe,ze)},Fe=pe=>{var ze=Be("🧪 Test Connection");d(pe,ze)};k(ve,pe=>{e(m)?pe(Ae):pe(Fe,-1)})}var he=i(X,2);{var re=pe=>{var ze=Zh();let $e;var st=n(ze);{var it=M=>{var C=Be();w(()=>{var ke;return y(C,`✔ ${(ke=e(_).message)!=null?ke:""}`)}),d(M,C)},H=M=>{var C=Be();w(()=>{var ke;return y(C,`⚠️ ${(ke=e(_).message)!=null?ke:""}`)}),d(M,C)};k(st,M=>{e(_).success?M(it):M(H,-1)})}w(()=>$e=Te(ze,1,"status-pill svelte-1c9i6zy",null,$e,{success:e(_).success,error:!e(_).success})),d(pe,ze)};k(he,pe=>{e(_)&&pe(re)})}var we=i(V,2),Je=n(we),de=n(Je);{var $=pe=>{var ze=Qh();d(pe,ze)},U=pe=>{var ze=eg();d(pe,ze)};k(de,pe=>{e(A)?pe($):pe(U,-1)})}var te=i(Je,2),Y=n(te),_e=i(Y,2),me=n(_e);w(()=>{X.disabled=e(m),y(me,e(A)?"Done":"Save & Close")}),N("click",L,pe=>{pe.target===pe.currentTarget&&se()}),N("keydown",L,pe=>{pe.key==="Escape"&&se()}),N("click",j,se),N("change",B,T),We(B,()=>e(u),pe=>o(u,pe)),N("change",Pe,T),We(Pe,()=>e(v),pe=>o(v,pe)),N("change",K,T),We(K,()=>e(f),pe=>o(f,pe)),N("change",le,T),We(le,()=>e(h),pe=>o(h,pe)),N("change",ae,T),We(ae,()=>e(b),pe=>o(b,pe)),N("click",X,D),N("click",Y,se),N("click",_e,se),d(I,L)};k(Q,I=>{c()&&I(z)})}d(s,fe),St(),l()}Qt(["click","keydown","change"]);var sg=p(`
                This build was compiled without the Moonshine backend — choosing it runs whisper.cpp + with the model above instead.
                `),ng=p(`
                This build was compiled without the Parakeet backend — choosing it runs whisper.cpp + with the model above instead.
                `),ig=p('
                '),rg=p('
                server configuration
                URL
                Model
                Status
                ',1),lg=p(''),og=p('
                '),cg=p('
                model size
                ',1),dg=p('
                '),vg=p('
                '),ug=p('
                ✓
                ◌ quiet room
                ≋ noisy room
                '),pg=p(' '),fg=p(' '),_g=p(' Checking local models…'),hg=p(' '),gg=p('⚠️ Test connection required before continuing'),mg=p(' '),bg=p('◇ Pick an engine and a model size — they download before the next step'),yg=p(' '),wg=p(`
                // 01 · transcription engine

                Which ears should VoxCtrl use?

                Choose between on-device engines (whisper.cpp, Moonshine, Parakeet TDT) or connect to a Remote Speech Engine over your network. + Pick a model size inside each card or configure your remote endpoint to get started.

                `);function kg(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",r),[r,l]=Ea(),c=1;let u=S(!0),v=S(!0),f=S(null),h=S(yt({})),b=S(yt({})),m=S(yt({})),_=S(null),x=S(null),A=S(!1),q=S(!1),T=S(!1);const D=ce(()=>t().engine.backend==="remote-openai"?"remote-openai":t().engine.backend==="parakeet"?"parakeet":t().engine.backend==="moonshine"?"moonshine":"whisper-cpp"),se={cuda:"CUDA",vulkan:"Vulkan",coreml:"CoreML"},ne=ce(()=>!!e(f)&&t().engine.whisper_cpp.device!=="cpu"),fe=ce(()=>{var H;return e(f)?(H=se[e(f)])!=null?H:e(f):""}),Q=ce(()=>{var H;return e(D)==="remote-openai"?((H=t().engine.remote_openai)==null?void 0:H.model)||"whisper-1":e(D)==="parakeet"&&e(v)?t().engine.parakeet.model_size:e(D)==="moonshine"&&e(u)?t().engine.moonshine.model_size:t().engine.whisper_cpp.model_size}),z=ce(()=>e(D)==="remote-openai"?e(T):e(D)==="parakeet"&&e(v)?!!e(m)[e(Q)]:e(D)==="moonshine"&&e(u)?!!e(b)[e(Q)]:!!e(h)[e(Q)]);function I(H,M){var C;return H!==e(D)?!1:M.id===(H==="remote-openai"?((C=t().engine.remote_openai)==null?void 0:C.model)||"whisper-1":H==="parakeet"?t().engine.parakeet.model_size:H==="moonshine"?t().engine.moonshine.model_size:t().engine.whisper_cpp.model_size)}function L(H,M){return H==="remote-openai"?e(T):H==="parakeet"?!!e(m)[M.id]:H==="moonshine"?!!e(b)[M.id]:!!e(h)[M.id]}function ge(H){fs(M=>{M.engine.backend=H,H==="remote-openai"&&!M.engine.remote_openai&&(M.engine.remote_openai={endpoint:"http://localhost:8000/v1",api_key:null,model:"whisper-1",language:"",timeout_secs:30})}),Ne.engineChosen=!0,H==="remote-openai"&&(Ne.modelChosen=!0,o(q,!0))}function ee(H,M){fs(C=>{C.engine.backend=H,H==="parakeet"?C.engine.parakeet.model_size=M.id:H==="moonshine"?C.engine.moonshine.model_size=M.id:H==="remote-openai"?C.engine.remote_openai?C.engine.remote_openai.model=M.id:C.engine.remote_openai={endpoint:"http://localhost:8000/v1",api_key:null,model:M.id,language:"",timeout_secs:30}:C.engine.whisper_cpp.model_size=M.id}),o(x,null),Ne.engineChosen=!0,Ne.modelChosen=!0}function j(){e(f)&&fs(H=>{H.engine.whisper_cpp.device=e(ne)?"cpu":"auto"})}async function V(){const H=t().engine.whisper_cpp.model_dir,M={};for(const C of Ai[0].models)try{M[C.id]=await E("check_model_downloaded",{modelSize:C.id,modelDir:H})}catch(ke){console.error("Wizard: whisper model check failed for",C.id,ke),M[C.id]=!1}o(h,M,!0)}async function oe(){const H={},M=Ai.find(C=>C.id==="moonshine");if(M)for(const C of M.models)try{H[C.id]=await E("check_moonshine_downloaded",{modelSize:C.id})}catch(ke){console.error("Wizard: moonshine model check failed for",C.id,ke),H[C.id]=!1}o(b,H,!0)}async function R(){const H={},M=Ai.find(C=>C.id==="parakeet");if(M)for(const C of M.models)try{H[C.id]=await E("check_parakeet_downloaded",{modelSize:C.id})}catch(ke){console.error("Wizard: parakeet model check failed for",C.id,ke),H[C.id]=!1}o(m,H,!0)}async function B(){if(e(D)==="remote-openai")return e(T)?!0:(a.setBlocker(c,"Test the remote connection successfully to continue."),o(q,!0),!1);if(e(z))return!0;const H=e(D),M=e(Q);o(_,M,!0),o(x,null);try{return H==="parakeet"&&e(v)?(await E("download_parakeet_model",{modelSize:M}),o(m,{...e(m),[M]:!0},!0)):H==="moonshine"&&e(u)?(await E("download_moonshine_model",{modelSize:M}),o(b,{...e(b),[M]:!0},!0)):(await E("download_model",{modelSize:M,modelDir:t().engine.whisper_cpp.model_dir}),o(h,{...e(h),[M]:!0},!0)),Ne.clearIssue("model-download"),!0}catch(C){return o(x,`${C}`),Ne.recordIssue({id:"model-download",step:c,title:`Speech model "${M}" could not be downloaded — dictation will produce no text.`,detail:`engine=${H} model=${M} model_dir=${t().engine.whisper_cpp.model_dir||"(default)"} +${C}`}),!1}finally{o(_,null)}}pa(()=>{e(_)?a.setBlocker(c,`Downloading ${e(_)}…`):e(A)?e(D)==="remote-openai"&&!e(T)?a.setBlocker(c,"Test the remote connection successfully to continue."):e(z)?a.setBlocker(c,null):Ne.engineChosen?Ne.modelChosen?a.setBlocker(c,null):a.setBlocker(c,"Choose a model size to continue."):a.setBlocker(c,"Choose a transcription engine to continue."):a.setBlocker(c,"Checking which models are already on disk…")});async function be(){o(A,!1),await Promise.all([V(),oe(),R()]),o(A,!0)}qt(()=>(a.registerGate(c,B),E("moonshine_available").then(H=>o(u,H,!0)).catch(()=>o(u,!1)),E("parakeet_available").then(H=>o(v,H,!0)).catch(()=>o(v,!1)),E("accelerator_support").then(H=>{var M;return o(f,(M=H==null?void 0:H.whisper_gpu)!=null?M:null,!0)}).catch(()=>o(f,null)),be(),()=>{a.registerGate(c,null),a.setBlocker(c,null)}));function Pe(H){var Ye,Ze;if(H.id==="remote-openai")return{model:{id:((Ye=t().engine.remote_openai)==null?void 0:Ye.model)||"whisper-1",mb:0,speed:.95,accuracy:.95},rows:[{label:"speed",pct:95,value:"network",color:"var(--vx-cyan-0)",dim:!1},{label:"accuracy",pct:95,value:"server",color:"var(--vx-cyan-2)",dim:!1},{label:"RAM",pct:2,value:"offloaded",color:"var(--vx-gold-1)",dim:!1},{label:"VRAM",pct:0,value:"0 MB",color:"var(--vx-gold-0)",dim:!0}],quiet:Mi(12,.95),noisy:Mi(12,.92),quietPct:"server",noisyPct:"server"};const M=H.id==="parakeet"?t().engine.parakeet.model_size:H.id==="moonshine"?t().engine.moonshine.model_size:t().engine.whisper_cpp.model_size,C=(Ze=H.models.find(Ve=>Ve.id===M))!=null?Ze:H.models[0],ke=H.gpu&&e(ne),Ke=Math.min(1,C.speed+(ke?.3:0)),ye=ke?C.mb*.3:C.mb,Ie=ke?C.mb*1.1:0;return{model:C,rows:[{label:"speed",pct:Math.round(Ke*100),value:qh(Ke),color:"var(--vx-cyan-0)",dim:!1},{label:"accuracy",pct:Math.round(C.accuracy*100),value:Fi(C.accuracy),color:"var(--vx-cyan-2)",dim:!1},{label:"RAM",pct:Math.max(2,Math.min(100,Math.round(ye/3400*100))),value:Tn(ye),color:"var(--vx-gold-1)",dim:!1},{label:"VRAM",pct:Ie?Math.max(2,Math.min(100,Math.round(Ie/3400*100))):0,value:Ie?Tn(Ie):H.gpu?"off":"cpu only",color:"var(--vx-gold-0)",dim:!Ie}],quiet:Mi(12,C.accuracy),noisy:Mi(12,C.accuracy*H.noiseRetention),quietPct:Fi(C.accuracy),noisyPct:Fi(C.accuracy*H.noiseRetention)}}var ue=wg(),K=n(ue),J=i(n(K),2);let Se;var De=n(J);let le;var W=i(De,2),ae=n(W),O=i(n(ae),2);let X;var ve=n(O);{var Ae=H=>{var M=Be("UNAVAILABLE · CPU BUILD");d(H,M)},Fe=H=>{var M=Be();w(()=>{var C;return y(M,`ON · ${(C=e(fe))!=null?C:""}`)}),d(H,M)},he=H=>{var M=Be("OFF · CPU");d(H,M)};k(ve,H=>{e(f)?e(ne)?H(Fe,1):H(he,-1):H(Ae)})}var re=i(ae,2),we=n(re);{var Je=H=>{var M=Be(`Moves whisper.cpp weights from RAM to your GPU: faster, less RAM, uses VRAM. Moonshine is + CPU-native and unaffected.`);d(H,M)},de=H=>{var M=Be(`This build has no GPU backend compiled in, so both engines run on the CPU. The Vulkan + download accelerates whisper.cpp; Moonshine is CPU-native either way.`);d(H,M)};k(we,H=>{e(f)?H(Je):H(de,-1)})}var $=i(K,2);pt($,21,()=>Ai,ft,(H,M)=>{const C=ce(()=>Pe(e(M))),ke=ce(()=>e(D)===e(M).id);var Ke=ug();let ye;var Ie=i(n(Ke),2),Ye=n(Ie),Ze=n(Ye),Ve=n(Ze),at=i(Ze,2),et=n(at),rt=i(Ye,2),Ee=n(rt),Ge=i(rt,2);{var ct=g=>{var P=sg();d(g,P)},vt=g=>{var P=ng();d(g,P)};k(Ge,g=>{e(M).id==="moonshine"&&!e(u)?g(ct):e(M).id==="parakeet"&&!e(v)&&g(vt,1)})}var nt=i(Ie,2),wt=n(nt);{var dt=g=>{var P=rg(),Me=i(ht(P),2),Ue=n(Me),ie=i(n(Ue),2),xe=n(ie),Ce=i(Ue,2),He=i(n(Ce),2),Xe=n(He),Dt=i(Ce,2),zt=i(n(Dt),2);let Ft;var Wt=n(zt);{var $t=ut=>{var At=Be("✔ Verified");d(ut,At)},fa=ut=>{var At=Be("⚠️ Untested");d(ut,At)};k(Wt,ut=>{e(T)?ut($t):ut(fa,-1)})}var Yt=i(Me,2),ma=n(Yt);let Oa;var Ya=n(ma);{var tt=ut=>{var At=Be("⚙ Configure Server");d(ut,At)},gt=ut=>{var At=Be("⚡ Setup & Test");d(ut,At)};k(Ya,ut=>{e(T)?ut(tt):ut(gt,-1)})}var It=i(Yt,2);pt(It,21,()=>e(C).rows,ft,(ut,At)=>{var jt=ig();let wa;var oa=n(jt),La=n(oa),ja=n(La),Z=i(La),Le=n(Z),je=i(oa,2),Re=n(je);let Qe;w(()=>{var Jt;wa=Te(jt,1,"metric svelte-xv54mf",null,wa,{dim:e(At).dim}),y(ja,e(At).label),y(Le,e(At).value),Qe=na(Re,"",Qe,{width:`${(Jt=e(At).pct)!=null?Jt:""}%`,background:e(At).color})}),d(ut,jt)}),w(()=>{var ut,At,jt;mt(ie,"title",((ut=t().engine.remote_openai)==null?void 0:ut.endpoint)||"http://localhost:8000/v1"),y(xe,((At=t().engine.remote_openai)==null?void 0:At.endpoint)||"http://localhost:8000/v1"),y(Xe,((jt=t().engine.remote_openai)==null?void 0:jt.model)||"whisper-1"),Ft=Te(zt,1,"remote-v svelte-xv54mf",null,Ft,{"remote-v-ok":e(T),"remote-v-warn":!e(T)}),Oa=Te(ma,1,"vx-btn vx-btn-sm remote-cfg-btn svelte-xv54mf",null,Oa,{"vx-primary":!e(T)})}),N("click",ma,ut=>{ut.stopPropagation(),ge("remote-openai"),o(q,!0)}),d(g,P)},Et=g=>{var P=cg(),Me=i(ht(P),2);pt(Me,21,()=>e(M).models,ft,(ie,xe)=>{var Ce=lg();let He;var Xe=n(Ce),Dt=n(Xe),zt=i(Xe,2),Ft=n(zt);w((Wt,$t,fa)=>{He=Te(Ce,1,"size svelte-xv54mf",null,He,Wt),y(Dt,e(xe).id),y(Ft,`${$t!=null?$t:""}${fa!=null?fa:""}`)},[()=>({on:I(e(M).id,e(xe))}),()=>Tn(e(xe).mb),()=>L(e(M).id,e(xe))?" ✔":""]),N("click",Ce,Wt=>{Wt.stopPropagation(),ee(e(M).id,e(xe))}),d(ie,Ce)});var Ue=i(Me,2);pt(Ue,21,()=>e(C).rows,ft,(ie,xe)=>{var Ce=og();let He;var Xe=n(Ce),Dt=n(Xe),zt=n(Dt),Ft=i(Dt),Wt=n(Ft),$t=i(Xe,2),fa=n($t);let Yt;w(()=>{var ma;He=Te(Ce,1,"metric svelte-xv54mf",null,He,{dim:e(xe).dim}),y(zt,e(xe).label),y(Wt,e(xe).value),Yt=na(fa,"",Yt,{width:`${(ma=e(xe).pct)!=null?ma:""}%`,background:e(xe).color})}),d(ie,Ce)}),d(g,P)};k(wt,g=>{e(M).id==="remote-openai"?g(dt):g(Et,-1)})}var Kt=i(nt,2),ia=n(Kt),ra=n(ia),bt=i(n(ra)),ea=n(bt),Lt=i(ra,2);pt(Lt,21,()=>e(C).quiet,ft,(g,P)=>{var Me=dg();let Ue;w(()=>{var ie;return Ue=na(Me,"",Ue,{height:`${(ie=e(P).h)!=null?ie:""}%`,opacity:e(P).o})}),d(g,Me)});var Ht=i(ia,2),ta=n(Ht),Oe=i(n(ta)),qe=n(Oe),G=i(ta,2);pt(G,21,()=>e(C).noisy,ft,(g,P)=>{var Me=vg();let Ue;w(()=>{var ie;return Ue=na(Me,"",Ue,{height:`${(ie=e(P).h)!=null?ie:""}%`,opacity:e(P).o})}),d(g,Me)}),w(()=>{ye=Te(Ke,1,"vx-card engine-card svelte-xv54mf",null,ye,{"vx-on":e(ke)}),mt(Ke,"aria-checked",e(ke)),y(Ve,e(M).glyph),y(et,e(M).name),y(Ee,e(M).tagline),y(ea,e(C).quietPct),y(qe,e(C).noisyPct)}),N("click",Ke,()=>{ge(e(M).id),e(M).id==="remote-openai"&&o(q,!0)}),N("keydown",Ke,g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),ge(e(M).id),e(M).id==="remote-openai"&&o(q,!0))}),d(H,Ke)});var U=i($,2),te=n(U);{var Y=H=>{var M=pg(),C=i(n(M));w(()=>{var ke;return y(C,` Downloading ${(ke=e(_))!=null?ke:""} — this can take a few minutes`)}),d(H,M)},_e=H=>{var M=fg(),C=n(M);w(()=>{var ke;return y(C,`✕ Download failed: ${(ke=e(x))!=null?ke:""}`)}),d(H,M)},me=H=>{var M=_g();d(H,M)},pe=H=>{var M=xi(),C=ht(M);{var ke=ye=>{var Ie=hg(),Ye=n(Ie);w(()=>{var Ze;return y(Ye,`✓ Remote engine connected (${(Ze=e(Q))!=null?Ze:""})`)}),d(ye,Ie)},Ke=ye=>{var Ie=gg();d(ye,Ie)};k(C,ye=>{e(T)?ye(ke):ye(Ke,-1)})}d(H,M)},ze=H=>{var M=mg(),C=n(M);w(()=>{var ke;return y(C,`✓ ${(ke=e(Q))!=null?ke:""} is on disk and ready`)}),d(H,M)},$e=H=>{var M=bg();d(H,M)},st=H=>{var M=yg(),C=n(M);w(()=>{var ke;return y(C,`↓ ${(ke=e(Q))!=null?ke:""} will download when you continue`)}),d(H,M)};k(te,H=>{e(_)?H(Y):e(x)?H(_e,1):e(A)?e(D)==="remote-openai"?H(pe,3):e(z)?H(ze,4):!Ne.engineChosen||!Ne.modelChosen?H($e,5):H(st,-1):H(me,2)})}var it=i(U,2);ag(it,{onSuccess:()=>{o(T,!0)},get isOpen(){return e(q)},set isOpen(H){o(q,H,!0)}}),w(()=>{Se=Te(J,1,"vx-card gpu-toggle svelte-xv54mf",null,Se,{"vx-on":e(ne)}),J.disabled=!e(f),le=Te(De,1,"switch svelte-xv54mf",null,le,{on:e(ne)}),X=Te(O,1,"state svelte-xv54mf",null,X,{on:e(ne)})}),N("click",J,j),d(s,ue),St(),l()}Qt(["click","keydown"]);var xg=p("
                "),Tg=p("
                "),Sg=p(''),Eg=p('
                '),Cg=p('
                '),Ag=p('+'),Mg=p("
                ",1),Pg=p('
                '),Dg=p(' Asking…',1),zg=p('
                '),Ig=p('
                '),Og=p(`
                // 02 · first key binding

                How do you want to start talking?

                Pick a gesture, then record the keys. Taps keep your hands free while speaking; holds can't be + left running by accident. Double-taps avoid clashes with shortcuts you already use.

                `);function Lg(s,a){Tt(a,!0);const t=2;let r=S(null),l=S(!1),c=S(null);const u=ce(()=>{var W,ae;return(ae=(W=e(r))==null?void 0:W.supported_gestures)!=null&&ae.length?xn.filter(O=>e(r).supported_gestures.includes(O.id)):xn}),v=ce(()=>xn.length-e(u).length),f=ce(()=>{var W;return((W=e(r))==null?void 0:W.is_active)===!0}),h=ce(()=>!!Ne.combo&&Ne.combo.length>0&&e(r)!==null&&!e(r).is_active),b=ce(()=>Ne.recording&&Vr(Ne.held)?"Keep holding and add a regular key — modifiers alone cannot be a shortcut.":null);async function m(){try{o(r,await E("check_hotkey_status"),!0),e(r).is_active&&Ne.clearIssue("shortcut-register")}catch(W){console.error("Wizard: failed to read hotkey status:",W)}}function _(){Ne.recording=!0,Ne.held=[],Ne.captureHint=null,E("set_hotkeys_inhibited",{inhibited:!0}).catch(()=>{})}function x(){Ne.recording=!1,Ne.held=[],E("set_hotkeys_inhibited",{inhibited:!1}).catch(()=>{})}async function A(W){var O;if(W.length===0)return;let ae;try{ae=await E("check_hotkey_keys",{keys:W})}catch(X){console.error("Wizard: hotkey validation failed:",X),Ne.combo=[...W];return}ae.accepted?(Ne.combo=[...W],Ne.captureHint=null,await D()):Ne.captureHint=(O=ae.message)!=null?O:"This key combination cannot be used as a shortcut. Try another."}function q(W){if(!Ne.recording)return;W.preventDefault(),W.stopPropagation();const ae=il(W.key,W.code);if(W.key==="Escape"&&Ne.held.length===0){x();return}Ne.held.includes(ae)||(Ne.held=[...Ne.held,ae])}function T(W){if(!Ne.recording)return;W.preventDefault(),W.stopPropagation();const ae=[...Ne.held];x(),A(ae)}async function D(){var W;try{await Ne.saveBinding()}catch(ae){console.error("Wizard: failed to save binding:",ae),o(c,`Could not save the binding: ${ae}`),Ne.recordIssue({id:"binding-save",step:t,title:"The hotkey binding could not be written — no shortcut will start dictation.",detail:`keys=${((W=Ne.combo)!=null?W:[]).join("+")} gesture=${Ne.gesture} +${ae}`});return}Ne.clearIssue("binding-save"),await m()}async function se(){var W,ae,O,X,ve,Ae;o(l,!0),o(c,null);try{o(r,await E("approve_shortcuts"),!0)}catch(Fe){o(c,`${Fe}`),Ne.recordIssue({id:"shortcut-register",step:t,title:"Your desktop refused to register the global shortcut.",detail:`backend=${(ae=(W=e(r))==null?void 0:W.backend)!=null?ae:"unknown"} portal_refused=${(X=(O=e(r))==null?void 0:O.portal_refused)!=null?X:"?"} +portal_error=${(Ae=(ve=e(r))==null?void 0:ve.portal_error)!=null?Ae:"(none)"} +${Fe}`}),await m()}finally{o(l,!1)}}async function ne(){try{await E("open_shortcut_settings")}catch(W){o(c,`${W}`)}}pa(()=>{let W=null;Ne.recording?W="Press the keys you want to use.":!Ne.combo||Ne.combo.length===0?W="Record a key combination first.":e(h)&&(W="Register the shortcut with your desktop to continue."),a.setBlocker(t,W)}),pa(()=>{const W=e(u);W.length>0&&!W.some(ae=>ae.id===Ne.gesture)&&(Ne.gesture=W[0].id)}),qt(()=>{a.registerGate(t,async()=>{var O;return await D(),((O=e(r))==null?void 0:O.is_active)!==!1}),Ne.loadBinding(),m();const W=ha("setup-status-changed",()=>void m()),ae=setInterval(()=>{Ne.recording||m()},3e3);return window.addEventListener("keydown",q,!0),window.addEventListener("keyup",T,!0),()=>{clearInterval(ae),W.then(O=>O()).catch(()=>{}),window.removeEventListener("keydown",q,!0),window.removeEventListener("keyup",T,!0),Ne.recording&&x(),a.registerGate(t,null),a.setBlocker(t,null)}});const fe=ce(()=>{var W,ae,O,X;return Ne.recording?{label:"listening for keys",hint:(ae=(W=Ne.captureHint)!=null?W:e(b))!=null?ae:"Hold one or more modifiers, then press a key. Esc to cancel.",tone:"rec"}:Ne.combo&&Ne.combo.length>0?{label:"binding captured",hint:(O=Ne.captureHint)!=null?O:"Click anywhere in this area to record a different combination.",tone:"done"}:{label:"click to record",hint:(X=Ne.captureHint)!=null?X:"Needs at least one modifier (Ctrl, Alt, Shift or Super) plus a regular key — e.g. Super + Space.",tone:"idle"}});var Q=Og(),z=i(n(Q),2),I=n(z),L=n(I);pt(L,17,()=>e(u),ft,(W,ae)=>{const O=ce(()=>Ne.gesture===e(ae).id);var X=Sg();let ve;var Ae=n(X),Fe=n(Ae),he=n(Fe),re=i(Fe,2),we=n(re),Je=i(Ae,2),de=n(Je),$=i(n(de),2);pt($,21,()=>e(ae).key,ft,(Y,_e)=>{var me=ce(()=>pl(e(_e),2));let pe=()=>e(me)[0],ze=()=>e(me)[1];var $e=xg();let st,it;w(()=>{st=Te($e,1,"svelte-1fbfhk3",null,st,{on:ze()&&e(O),lit:ze()}),it=na($e,"",it,{flex:pe()})}),d(Y,$e)});var U=i(de,2),te=i(n(U),2);pt(te,21,()=>e(ae).mic,ft,(Y,_e)=>{var me=ce(()=>pl(e(_e),2));let pe=()=>e(me)[0],ze=()=>e(me)[1];var $e=Tg();let st,it;w(()=>{st=Te($e,1,"svelte-1fbfhk3",null,st,{on:ze()&&e(O),lit:ze()}),it=na($e,"",it,{flex:pe()})}),d(Y,$e)}),w(()=>{ve=Te(X,1,"vx-card gesture svelte-1fbfhk3",null,ve,{"vx-on":e(O)}),y(he,e(ae).name),y(we,e(ae).desc)}),N("click",X,()=>Ne.gesture=e(ae).id),d(W,X)});var ge=i(L,2);{var ee=W=>{var ae=Eg(),O=n(ae);w(()=>{var X;return y(O,`${(X=e(v))!=null?X:""} gesture${e(v)===1?"":"s"} hidden — this desktop's shortcut + backend only tells VoxCtrl that a shortcut fired, so it cannot time a hold.`)}),d(W,ae)};k(ge,W=>{e(v)>0&&W(ee)})}var j=i(I,2),V=n(j);let oe;var R=n(V);{var B=W=>{var ae=Cg();d(W,ae)};k(R,W=>{Ne.recording&&W(B)})}var be=i(R,2),Pe=i(n(be),1,!0),ue=i(be,2);pt(ue,21,()=>Ne.displayKeys,ft,(W,ae,O)=>{var X=Mg(),ve=ht(X);let Ae;var Fe=n(ve),he=i(ve,2);{var re=we=>{var Je=Ag();d(we,Je)};k(he,we=>{O{Ae=Te(ve,1,"vx-keycap",null,Ae,{"vx-hot":Ne.recording||e(fe).tone==="done"}),y(Fe,we)},[()=>dl(e(ae))]),d(W,X)});var K=i(ue,2);let J;var Se=n(K),De=i(V,2);{var le=W=>{var ae=Ig();let O;var X=n(ae),ve=n(X),Ae=i(X,2),Fe=n(Ae),he=n(Fe),re=i(Fe,2),we=n(re);{var Je=me=>{var pe=Be("The binding is registered system-wide. Continue to choose an overlay.");d(me,pe)},de=me=>{var pe=Be();w(()=>y(pe,e(r).portal_error)),d(me,pe)},$=me=>{var pe=Be(`Wayland desktops ask you to confirm global shortcuts. Click below and approve the + dialog your desktop shows — you come straight back here.`);d(me,pe)};k(we,me=>{var pe;e(f)?me(Je):(pe=e(r))!=null&&pe.portal_error?me(de,1):me($,-1)})}var U=i(re,2);{var te=me=>{var pe=Pg(),ze=n(pe);w(()=>y(ze,e(c))),d(me,pe)};k(U,me=>{e(c)&&me(te)})}var Y=i(Ae,2);{var _e=me=>{var pe=zg(),ze=n(pe),$e=i(ze,2),st=n($e);{var it=M=>{var C=Dg();d(M,C)},H=M=>{var C=Be("Register →");d(M,C)};k(st,M=>{e(l)?M(it):M(H,-1)})}w(()=>$e.disabled=e(l)),N("click",ze,ne),N("click",$e,se),d(me,pe)};k(Y,me=>{e(f)||me(_e)})}w(()=>{var me,pe;O=Te(ae,1,"sys svelte-1fbfhk3",null,O,{ok:e(f)}),y(ve,e(f)?"✓":"⌬"),y(he,e(f)?`Shortcuts are live (${(pe=(me=e(r))==null?void 0:me.backend)!=null?pe:"ready"})`:"Your desktop still needs to approve the shortcut")}),d(W,ae)};k(De,W=>{Ne.combo&&Ne.combo.length>0&&W(le)})}w(()=>{oe=Te(V,1,"recorder svelte-1fbfhk3",null,oe,{rec:e(fe).tone==="rec",done:e(fe).tone==="done"}),y(Pe,e(fe).label),J=Te(K,1,"rec-hint svelte-1fbfhk3",null,J,{bad:!!Ne.captureHint}),y(Se,e(fe).hint)}),N("click",V,()=>Ne.recording?x():_()),d(s,Q),St()}Qt(["click"]);const Rg="/assets/blue_wave-DGfyQFFo.webm",Ng="/assets/mono_bars-1wA0h3Fz.webm",Vg="/assets/pulse-Cdnh-rAb.webm",Fg="/assets/spectrum-CLEHMZrI.webm",Bg="/assets/terminal-CvV88uWw.webm",qg="/assets/vinyl-BG1f8NO1.webm",jg="/assets/voice_card-BZZeHAB9.webm",Ug="/assets/waveform-DUI2x_EP.webm",Kg="/assets/blue_wave-OqjJ-fxD.webp",Hg="/assets/mono_bars-CPLx02Ku.webp",Wg="/assets/pulse-ESYJH4j2.webp",$g="/assets/spectrum-DV9agKUG.webp",Gg="/assets/terminal-DhrByqCl.webp",Yg="/assets/vinyl-BfHn3C6g.webp",Jg="/assets/voice_card-QnCU8RiM.webp",Xg="/assets/waveform-B5-owbWT.webp";var Zg=p('
                '),Qg=p('
                '),em=Oo(''),tm=p('
                '),am=p('
                '),sm=p('
                '),nm=p('
                > listening
                '),im=p(''),rm=p('',2),lm=p("
                ",1);function Il(s,a){Tt(a,!0);let t=Ct(a,"seed",3,1),r=Ct(a,"showClip",3,!0);const l=Object.assign({"../../assets/overlays/blue_wave.webm":Rg,"../../assets/overlays/mono_bars.webm":Ng,"../../assets/overlays/pulse.webm":Vg,"../../assets/overlays/spectrum.webm":Fg,"../../assets/overlays/terminal.webm":Bg,"../../assets/overlays/vinyl.webm":qg,"../../assets/overlays/voice_card.webm":jg,"../../assets/overlays/waveform.webm":Ug}),c=Object.assign({"../../assets/overlays/blue_wave.webp":Kg,"../../assets/overlays/mono_bars.webp":Hg,"../../assets/overlays/pulse.webp":Wg,"../../assets/overlays/spectrum.webp":$g,"../../assets/overlays/terminal.webp":Gg,"../../assets/overlays/vinyl.webp":Yg,"../../assets/overlays/voice_card.webp":Jg,"../../assets/overlays/waveform.webp":Xg});function u(j,V){var R;const oe=Object.entries(j).find(([B])=>B.endsWith(`/${V}`));return(R=oe==null?void 0:oe[1])!=null?R:null}const v=(()=>{if(typeof document>"u")return!0;const j=document.createElement("video");return j.canPlayType('video/webm; codecs="av01.0.05M.08"')!==""||j.canPlayType("video/webm")!==""})(),f=ce(()=>r()&&v?u(l,`${a.styleId}.webm`):null),h=ce(()=>u(c,`${a.styleId}.webp`));let b=S(!1);pa(()=>{e(f),o(b,!1)});const m=ce(()=>Array.from({length:14},(j,V)=>{const oe=.3+.7*Math.abs(Math.sin(t()*2.3+V*1.3));return{h:Math.round(oe*100),delay:((V*.11+t()*.07)%1.1).toFixed(2),dur:(.9+V*5%4*.15).toFixed(2)}})),_=ce(()=>a.styleId==="pulse"?"ring":a.styleId==="vinyl"?"needle":a.styleId==="terminal"?"terminal":a.styleId==="waveform"||a.styleId==="blue_wave"?"wave":"bars"),x=ce(()=>a.styleId==="mono_bars");var A=lm(),q=ht(A);let T;var D=n(q);{var se=j=>{var V=Qg();pt(V,21,()=>e(m).slice(0,a.styleId==="mono_bars"?5:14),ft,(oe,R)=>{var B=Zg();let be;w(()=>{var Pe,ue,K;return be=na(B,"",be,{height:`${(Pe=e(R).h)!=null?Pe:""}%`,"animation-delay":`${(ue=e(R).delay)!=null?ue:""}s`,"animation-duration":`${(K=e(R).dur)!=null?K:""}s`})}),d(oe,B)}),d(j,V)},ne=j=>{var V=em();d(j,V)},fe=j=>{var V=tm();d(j,V)},Q=j=>{var V=am();d(j,V)},z=j=>{var V=nm(),oe=i(n(V),2);pt(oe,21,()=>e(m).slice(0,10),ft,(R,B)=>{var be=sm();let Pe;w(()=>{var ue;return Pe=na(be,"",Pe,{"animation-delay":`${(ue=e(B).delay)!=null?ue:""}s`})}),d(R,be)}),d(j,V)};k(D,j=>{e(_)==="bars"?j(se):e(_)==="wave"?j(ne,1):e(_)==="ring"?j(fe,2):e(_)==="needle"?j(Q,3):j(z,-1)})}var I=i(q,2);{var L=j=>{var V=im();w(()=>mt(V,"src",e(h))),d(j,V)};k(I,j=>{e(h)&&j(L)})}var ge=i(I,2);{var ee=j=>{var V=rm();let oe;V.muted=!0,w(()=>{var R;oe=Te(V,1,"clip svelte-y6l73v",null,oe,{ready:e(b)}),mt(V,"src",e(f)),mt(V,"poster",(R=e(h))!=null?R:void 0)}),xs("playing",V,()=>o(b,!0)),xs("error",V,()=>o(b,!1)),d(j,V)};k(ge,j=>{e(f)&&j(ee)})}w(()=>T=Te(q,1,"preview svelte-y6l73v",null,T,{mono:e(x)})),d(s,A),St()}var om=p(''),cm=p(''),dm=p(`
                // 03 · on-screen overlay

                Show a signal while listening?

                The overlay appears the moment your hotkey fires and shows live mic level plus the active target — so you know VoxCtrl is hearing you, and where the words are going. Turn it off for - a silent setup.

                `);function dm(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",r),[r,l]=Ca(),c=ce(()=>t().ui.show_overlay),u=ce(()=>t().ui.overlay_style),v=ce(()=>t().ui.overlay_position),f=ce(()=>{var ue;return(ue=mn.find(W=>W.id===e(u)))!=null?ue:mn[0]}),_=ce(()=>{var ue;return(ue={top:16,center:46,bottom:76}[e(v)])!=null?ue:46});function b(ue){fs(W=>{W.ui.show_overlay=ue})}function m(ue){fs(W=>{W.ui.overlay_style=ue,W.ui.show_overlay=!0})}function h(ue){fs(W=>{W.ui.overlay_position=ue})}var x=cm(),M=n(x),q=i(n(M),2),T=n(q);let z;var se=i(T,2);let ne;var fe=i(M,2);let Q;var D=n(fe),I=n(D),R=n(I),ge=i(I,2);pt(ge,21,()=>mn,ft,(ue,W,J)=>{var Se=lm();let ze;var le=n(Se),$=n(le);{let Je=ce(()=>e(W).id===e(u));Il($,{seed:J+1,get styleId(){return e(W).id},get showClip(){return e(Je)}})}var ae=i(le,2),O=n(ae),X=n(O),ve=n(X),Me=i(X,2),Fe=n(Me),_e=i(O,2);let re;var we=n(_e);w(()=>{ze=Te(Se,1,"vx-card style-card svelte-ek86vh",null,ze,{"vx-on":e(W).id===e(u)}),y(ve,e(W).name),y(Fe,e(W).meta),re=Te(_e,1,"style-glyph svelte-ek86vh",null,re,{on:e(W).id===e(u)}),y(we,e(W).glyph)}),N("click",Se,()=>m(e(W).id)),d(ue,Se)});var ee=i(D,2),j=n(ee),V=n(j),oe=i(j,2),L=i(n(oe),4);let B;var be=n(L);{let ue=ce(()=>mn.indexOf(e(f))+1);Il(be,{get seed(){return e(ue)},get styleId(){return e(f).id},showClip:!0})}var Pe=i(oe,2);pt(Pe,21,()=>V_,ft,(ue,W)=>{var J=om();let Se;var ze=n(J),le=n(ze),$=i(ze,1,!0);w(()=>{Se=Te(J,1,"pos svelte-ek86vh",null,Se,{on:e(W).id===e(v)}),y(le,e(W).glyph),y($,e(W).label)}),N("click",J,()=>h(e(W).id)),d(ue,J)}),w(()=>{var ue,W,J;z=Te(T,1,"vx-card mode svelte-ek86vh",null,z,{"vx-on":e(c)}),ne=Te(se,1,"vx-card mode svelte-ek86vh",null,ne,{"off-on":!e(c)}),Q=Te(fe,1,"body svelte-ek86vh",null,Q,{muted:!e(c)}),y(R,`style · ${(ue=mn.length)!=null?ue:""} built in`),y(V,`position · ${(W=e(v))!=null?W:""}`),B=na(L,"",B,{top:`${(J=e(_))!=null?J:""}%`})}),N("click",T,()=>b(!0)),N("click",se,()=>b(!1)),d(s,x),St(),l()}Qt(["click"]);var vm=p('+'),um=p('
                ',1),pm=p('
                '),fm=p('
                '),hm=p('
                ✓
                It works.
                '),_m=p(`
                // 04 · live test

                Say something.

                Click into the box, then your binding and speak. Your words land where + a silent setup.

                `);function vm(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",r),[r,l]=Ea(),c=ce(()=>t().ui.show_overlay),u=ce(()=>t().ui.overlay_style),v=ce(()=>t().ui.overlay_position),f=ce(()=>{var ue;return(ue=mn.find(K=>K.id===e(u)))!=null?ue:mn[0]}),h=ce(()=>{var ue;return(ue={top:16,center:46,bottom:76}[e(v)])!=null?ue:46});function b(ue){fs(K=>{K.ui.show_overlay=ue})}function m(ue){fs(K=>{K.ui.overlay_style=ue,K.ui.show_overlay=!0})}function _(ue){fs(K=>{K.ui.overlay_position=ue})}var x=dm(),A=n(x),q=i(n(A),2),T=n(q);let D;var se=i(T,2);let ne;var fe=i(A,2);let Q;var z=n(fe),I=n(z),L=n(I),ge=i(I,2);pt(ge,21,()=>mn,ft,(ue,K,J)=>{var Se=om();let De;var le=n(Se),W=n(le);{let Je=ce(()=>e(K).id===e(u));Il(W,{seed:J+1,get styleId(){return e(K).id},get showClip(){return e(Je)}})}var ae=i(le,2),O=n(ae),X=n(O),ve=n(X),Ae=i(X,2),Fe=n(Ae),he=i(O,2);let re;var we=n(he);w(()=>{De=Te(Se,1,"vx-card style-card svelte-ek86vh",null,De,{"vx-on":e(K).id===e(u)}),y(ve,e(K).name),y(Fe,e(K).meta),re=Te(he,1,"style-glyph svelte-ek86vh",null,re,{on:e(K).id===e(u)}),y(we,e(K).glyph)}),N("click",Se,()=>m(e(K).id)),d(ue,Se)});var ee=i(z,2),j=n(ee),V=n(j),oe=i(j,2),R=i(n(oe),4);let B;var be=n(R);{let ue=ce(()=>mn.indexOf(e(f))+1);Il(be,{get seed(){return e(ue)},get styleId(){return e(f).id},showClip:!0})}var Pe=i(oe,2);pt(Pe,21,()=>Fh,ft,(ue,K)=>{var J=cm();let Se;var De=n(J),le=n(De),W=i(De,1,!0);w(()=>{Se=Te(J,1,"pos svelte-ek86vh",null,Se,{on:e(K).id===e(v)}),y(le,e(K).glyph),y(W,e(K).label)}),N("click",J,()=>_(e(K).id)),d(ue,J)}),w(()=>{var ue,K,J;D=Te(T,1,"vx-card mode svelte-ek86vh",null,D,{"vx-on":e(c)}),ne=Te(se,1,"vx-card mode svelte-ek86vh",null,ne,{"off-on":!e(c)}),Q=Te(fe,1,"body svelte-ek86vh",null,Q,{muted:!e(c)}),y(L,`style · ${(ue=mn.length)!=null?ue:""} built in`),y(V,`position · ${(K=e(v))!=null?K:""}`),B=na(R,"",B,{top:`${(J=e(h))!=null?J:""}%`})}),N("click",T,()=>b(!0)),N("click",se,()=>b(!1)),d(s,x),St(),l()}Qt(["click"]);var um=p('+'),pm=p('
                ',1),fm=p('
                '),_m=p('
                '),hm=p('
                ✓
                It works.
                '),gm=p(`
                // 04 · live test

                Say something.

                Click into the box, then your binding and speak. Your words land where the cursor is.

                ▸ test.txt
                Nothing happening? The overlay and tray icon show whether VoxCtrl heard the key. You can - continue and come back to this from Settings → Hotkeys at any time.
                `);function gm(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",l),r=()=>Zt(ga,"$status",l),[l,c]=Ca();let u=S(null),v=S(""),f=S(0),_=S("idle"),b=0,m=0;const h=Ho(28),x=ce(()=>Ne.gestureInfo),M=ce(()=>{var X;return(X=Ne.combo)!=null?X:[]}),q=ce(()=>{var X;return t().engine.backend==="remote-openai"?`Remote Speech Engine · ${((X=t().engine.remote_openai)==null?void 0:X.model)||"whisper-1"}`:t().engine.backend==="parakeet"?`Parakeet TDT · ${t().engine.parakeet.model_size}`:t().engine.backend==="moonshine"?`Moonshine · ${t().engine.moonshine.model_size}`:`whisper.cpp · ${t().engine.whisper_cpp.model_size} · ${t().engine.whisper_cpp.device==="cpu"?"cpu":"gpu/auto"}`}),T=ce(()=>({idle:"waiting for hotkey",recording:"recording",transcribing:"transcribing",success:"delivered"})[e(_)]);let z=!1;pa(()=>{const X=r();X.recording&&!z?(o(_,"recording"),b=performance.now(),m=e(v).length):!X.recording&&X.processing&&e(_)==="recording"&&o(_,"transcribing"),z=X.recording});function se(){if(!e(u))return;const X=e(u).value,ve=X.length>m&&X.trim().length>0;o(v,X,!0),ve&&(e(_)==="recording"||e(_)==="transcribing")&&(o(f,Math.max(1,Math.round(performance.now()-b)),!0),o(_,"success"))}function ne(){o(_,"idle"),o(v,""),m=0,e(u)&&(e(u).value="",e(u).focus())}qt(()=>{setTimeout(()=>{var X;return(X=e(u))==null?void 0:X.focus()},60)});var fe=_m(),Q=n(fe),D=n(Q),I=i(n(D),4),R=i(n(I)),ge=n(R),ee=i(D,2),j=n(ee);pt(j,17,()=>e(M),ft,(X,ve,Me)=>{var Fe=um(),_e=_t(Fe),re=n(_e),we=i(_e,2);{var Je=de=>{var G=vm();d(de,G)};k(we,de=>{Mey(re,de),[()=>dl(e(ve))]),d(X,Fe)});var V=i(j,2),oe=n(V),L=i(Q,2);let B;var be=n(L),Pe=i(n(be),2),ue=i(n(Pe),1,!0),W=i(be,2);sl(W,X=>o(u,X),()=>e(u));var J=i(W,2);{var Se=X=>{var ve=fm();pt(ve,21,()=>h,ft,(Me,Fe)=>{var _e=pm();let re;w(()=>{var we,Je;return re=na(_e,"",re,{"animation-duration":`${(we=e(Fe).d)!=null?we:""}s`,"animation-delay":`${(Je=e(Fe).dl)!=null?Je:""}s`})}),d(Me,_e)}),d(X,ve)};k(J,X=>{(e(_)==="recording"||e(_)==="transcribing")&&X(Se)})}var ze=i(J,2);{var le=X=>{var ve=hm(),Me=n(ve),Fe=i(n(Me),4),_e=n(Fe),re=i(Fe,2);w(()=>{var we;return y(_e,`Transcribed${t().engine.backend==="remote-openai"?" via Remote Speech Engine":" on-device"} in ${(we=e(f))!=null?we:""} ms · delivered via inject`)}),N("click",re,ne),d(X,ve)};k(ze,X=>{e(_)==="success"&&X(le)})}var $=i(L,2),ae=i(n($),2),O=n(ae);w(()=>{var X;y(ge,e(x).verb),y(oe,e(x).name),B=Te(L,1,"box svelte-oqvphh",null,B,{live:e(_)==="recording"||e(_)==="transcribing",won:e(_)==="success"}),Te(Pe,1,`state ${(X=e(_))!=null?X:""}`,"svelte-oqvphh"),y(ue,e(T)),y(O,e(q))}),N("input",W,se),d(s,fe),St(),c()}Qt(["input","click"]);var mm=p('
                '),bm=p('■ Stop ',1),ym=p('▶ play sample',1),wm=p('Speaking sample aloud…'),km=p('Downloading voice…'),xm=p('Locked (token required)'),Tm=p('Ready for playback'),Sm=p('Download voice first'),Cm=p('
                ⚠ Non-commercial license:
                '),Em=p(''),Mm=p('
                bundled · zero download
                '),Am=p(''),Pm=p('
                '),zm=p(''),Dm=p('
                '),Im=p('Needs a HuggingFace access token — enter one above to unlock this voice.'),Om=p(' '),Rm=p(`Already downloaded — the token is only needed to fetch the weights, so this voice - works without one.`),Lm=p('This build was compiled without the `inflect-micro` feature, so this engine cannot\n synthesize.'),Nm=p('
                '),Vm=p('
                '),Fm=p(`
                // 05 · text to speech · optional

                Should VoxCtrl talk back?

                Agents can stream replies back through a response pipe and VoxCtrl speaks them aloud. Richer - voices need bigger models and more time per sentence; lighter engines answer instantly.

                HuggingFace access token optional — speeds up downloads if you have one
                `);function Bm(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",r),[r,l]=Ca(),c=5,u=ce(()=>t().tts.enabled),v=ce(()=>t().tts.engine),f=ce(()=>{var g;return(g=cs.find(P=>P.id===e(v)))!=null?g:cs[0]});let _=S(yt({espeak:!0})),b=S(yt({})),m=S(null),h=S(yt({})),x=S(!0),M=S(null);const q=ce(()=>!!e(M)),T=ce(()=>{var g,P;return(P=e(M))!=null?P:((g=t().tts.hf_token)!=null?g:"").trim()}),z=ce(()=>e(T).length>0),se=cs.filter(g=>g.needsHfToken);function ne(g){e(q)||(o(Q,!1),fs(P=>{P.tts.hf_token=g.trim()?g.trim():null}))}function fe(g){const P=cs.find(Ae=>Ae.id===g);return!!(P!=null&&P.needsHfToken)&&!e(z)&&!e(_)[g]}let Q=S(!1);const D="hf-token-rejected";function I(g){return`${g}`.toLowerCase().includes(D)}let R=S(null),ge=S(null);const ee=Ho(12);let j=null,V=null,oe=0,L=!1;const B=300,be=1500,Pe=3e4;function ue(){j&&(clearTimeout(j),j=null),V&&(clearInterval(V),V=null)}function W(){o(R,null),ue()}async function J(){if(!e(R))return;let g;try{g=await C("get_status")}catch(P){console.error("Wizard: status poll failed:",P);return}if(g&&ga.set(g),g!=null&&g.speaking){L=!0;return}(L||Date.now()-oe>be)&&W()}function Se(g,P){const Ae={...e(h)};P?Ae[g]=P:delete Ae[g],o(h,Ae,!0)}async function ze(g){var Ae,Ue,ie,xe,Ee,He;const P=bn(Ot);try{switch(g){case"espeak":return!0;case"piper":return await C("check_voice_downloaded",{voiceName:P.tts.voice,voiceDir:P.tts.voice_dir});case"pocket_tts":return await C("check_pocket_tts_ready",{voice:P.tts.pocket_tts.voice,voiceDir:P.tts.pocket_tts.voice_dir});case"inflect_micro":return await C("check_inflect_micro_downloaded",{modelDir:(Ue=(Ae=P.tts.inflect_micro)==null?void 0:Ae.model_dir)!=null?Ue:""});case"breeze_tts_2":return await C("check_breeze_tts_2_ready",{modelDir:(xe=(ie=P.tts.breeze_tts_2)==null?void 0:ie.model_dir)!=null?xe:""});case"vox_cpm_2":return await C("check_vox_cpm_2_ready",{modelDir:(He=(Ee=P.tts.vox_cpm_2)==null?void 0:Ee.model_dir)!=null?He:""})}}catch(Xe){return console.error("Wizard: TTS readiness check failed for",g,Xe),!1}}async function le(){await Promise.all(cs.map(async g=>{o(b,{...e(b),[g.id]:!0},!0);const P=await ze(g.id);o(_,{...e(_),[g.id]:P},!0),o(b,{...e(b),[g.id]:!1},!0)}))}async function $(g){var Ae,Ue,ie,xe,Ee,He,Xe,zt,Dt,Ft,$t,Gt;if(e(m))return;o(m,g,!0),Se(g,null);const P=bn(Ot);try{switch(g){case"piper":await C("download_voice",{voiceName:P.tts.voice,voiceDir:P.tts.voice_dir});break;case"pocket_tts":await C("download_pocket_tts",{voice:(Ae=P.tts.pocket_tts)==null?void 0:Ae.voice,voiceDir:(Ue=P.tts.pocket_tts)==null?void 0:Ue.voice_dir,hfToken:P.tts.hf_token});break;case"inflect_micro":await C("download_inflect_micro",{modelDir:(xe=(ie=P.tts.inflect_micro)==null?void 0:ie.model_dir)!=null?xe:""});break;case"breeze_tts_2":await C("download_breeze_tts_2",{modelDir:(He=(Ee=P.tts.breeze_tts_2)==null?void 0:Ee.model_dir)!=null?He:"",hfToken:P.tts.hf_token});break;case"vox_cpm_2":await C("download_vox_cpm_2",{modelDir:(zt=(Xe=P.tts.vox_cpm_2)==null?void 0:Xe.model_dir)!=null?zt:"",hfToken:P.tts.hf_token});break;case"espeak":break}o(Q,!1),o(_,{...e(_),[g]:!0},!0),Ne.clearIssue(`tts-download-${g}`)}catch(fa){const Yt=cs.find(Oa=>Oa.id===g),ma=I(fa);ma&&o(Q,!0),Se(g,ma?`HuggingFace did not accept that access token, so ${(Dt=Yt==null?void 0:Yt.name)!=null?Dt:g} could not be downloaded. Check the token is a valid read token, and that the same account has accepted the licence at ${(Ft=Yt==null?void 0:Yt.licenceUrl)!=null?Ft:"huggingface.co"}.`:`${fa}`),Ne.recordIssue({id:`tts-download-${g}`,step:c,title:ma?`${($t=Yt==null?void 0:Yt.name)!=null?$t:g} could not be downloaded — HuggingFace did not accept the access token.`:`${(Gt=Yt==null?void 0:Yt.name)!=null?Gt:g} could not be downloaded — speech output will stay silent.`,detail:`engine=${g} -${fa}`})}finally{o(m,null)}}const ae=["pocket_tts","breeze_tts_2","vox_cpm_2"],O=ce(()=>ae.includes(e(v))),X=ce(()=>e(v)==="pocket_tts"?t().tts.pocket_tts.gpu:e(v)==="breeze_tts_2"?t().tts.breeze_tts_2.gpu:e(v)==="vox_cpm_2"?t().tts.vox_cpm_2.gpu:!1);function ve(g){fs(P=>{e(v)==="pocket_tts"?P.tts.pocket_tts.gpu=g:e(v)==="breeze_tts_2"?P.tts.breeze_tts_2.gpu=g:e(v)==="vox_cpm_2"&&(P.tts.vox_cpm_2.gpu=g)})}function Me(g){fe(g)||fs(P=>{P.tts.enabled=!0,P.tts.engine=g})}function Fe(g){fs(P=>{P.tts.enabled=g})}async function _e(g){if(e(R)){W(),C("stop_tts").catch(()=>{});return}Me(g),o(ge,null),o(R,g,!0),oe=Date.now(),L=!1,ue(),V=setInterval(()=>void J(),B),j=setTimeout(()=>{W(),o(ge,"The sample never finished playing. The engine may have failed silently — check Settings → TTS, or try another voice.")},Pe);const P=bn(Ot),Ae=cs.find(ie=>ie.id===g),Ue=g==="piper"?P.tts.voice:g==="pocket_tts"?P.tts.pocket_tts.voice:null;try{await C("save_config",{newConfig:P}),await C("speak_text",{text:`Hi this is ${Ae.name} speaking from VoxCtrl`,voice:Ue})}catch(ie){o(ge,`${ie}`),W(),Ne.recordIssue({id:`tts-speak-${g}`,step:c,title:`${Ae.name} failed to speak the sample.`,detail:`engine=${g} voice=${Ue!=null?Ue:"(fixed)"} -${ie}`})}}pa(()=>{var g;if(!e(u)){a.setBlocker(c,null);return}if(e(m)){a.setBlocker(c,`Downloading ${(g=cs.find(P=>P.id===e(m)))==null?void 0:g.name}…`);return}if(fe(e(v))){a.setBlocker(c,"Enter a HuggingFace access token, or pick a voice that does not need one.");return}if(e(v)==="inflect_micro"&&!e(x)){a.setBlocker(c,"This build has no Inflect Micro engine — pick another voice or skip.");return}a.setBlocker(c,e(_)[e(v)]?null:"Download the voice you picked, or turn speech output off to continue.")}),qt(()=>{le(),C("hf_token_env").then(P=>o(M,P&&P.trim()?P.trim():null,!0)).catch(()=>o(M,null)),C("inflect_micro_available").then(P=>o(x,P,!0)).catch(()=>o(x,!1));const g=[_a("tts-playback-end",()=>W()),_a("tts-error",P=>{o(ge,P.payload,!0),W(),Ne.recordIssue({id:"tts-runtime",step:c,title:"The text-to-speech engine reported an error while speaking.",detail:`engine=${bn(Ot).tts.engine} -${P.payload}`})})];return()=>{a.setBlocker(c,null),ue();for(const P of g)P.then(Ae=>Ae()).catch(()=>{});C("stop_tts").catch(()=>{})}});const re=ce(()=>!!e(_)[e(v)]),we=ce(()=>fe(e(v))),Je=ce(()=>e(v)==="inflect_micro"&&!e(x)),de=ce(()=>e(re)&&!e(Je)&&!e(we)&&!e(m));var G=Fm(),U=n(G),te=i(n(U),2),Y=n(te);let he;var me=i(Y,2);let pe;var De=i(U,2),Ge=n(De),st=n(Ge);let it;var H=n(st);{var A=g=>{var P=bm(),Ae=i(_t(P),4);pt(Ae,21,()=>ee,ft,(Ue,ie)=>{var xe=mm();let Ee;w(()=>{var He,Xe;return Ee=na(xe,"",Ee,{"animation-duration":`${(He=e(ie).d)!=null?He:""}s`,"animation-delay":`${(Xe=e(ie).dl)!=null?Xe:""}s`})}),d(Ue,xe)}),d(g,P)},E=g=>{var P=ym();d(g,P)};k(H,g=>{e(R)?g(A):g(E,-1)})}var ke=i(st,2),We=n(ke),ye=n(We),Ie=i(We,2),Ye=n(Ie);{var Ze=g=>{var P=wm();d(g,P)},Ve=g=>{var P=km();d(g,P)},at=g=>{var P=xm();d(g,P)},et=g=>{var P=Tm();d(g,P)},rt=g=>{var P=Sm();d(g,P)};k(Ye,g=>{e(R)?g(Ze):e(m)?g(Ve,1):e(we)?g(at,2):e(re)?g(et,3):g(rt,-1)})}var Ce=i(Ge,2);let Ke;var ct=i(n(Ce),2),vt=n(ct),nt=i(vt,2);let wt;var dt=n(nt);{var Ct=g=>{var P=Be("did not accept this token");d(g,P)},Wt=g=>{var P=Be("HF_TOKEN environment variable");d(g,P)},ia=g=>{var P=Be("✓ token saved");d(g,P)},ra=g=>{var P=Be("token required for gated voices");d(g,P)};k(dt,g=>{e(Q)?g(Ct):e(q)?g(Wt,1):e(z)?g(ia,2):g(ra,-1)})}var bt=i(De,2);{var ea=g=>{var P=Cm(),Ae=i(n(P));w(()=>{var Ue;return y(Ae,` ${(Ue=e(f).name)!=null?Ue:""} weights are released under a research/non-commercial license. Commercial - use requires a separate license from the model's publisher.`)}),d(g,P)};k(bt,g=>{e(u)&&e(f).nonCommercial&&!e(_)[e(v)]&&g(ea)})}var Rt=i(bt,2);{var Ht=g=>{var P=Em(),Ae=n(P),Ue=i(Ae,2),ie=n(Ue);w(()=>{var xe;Od(Ae,e(X)),y(ie,`Vulkan GPU acceleration for ${(xe=e(f).name)!=null?xe:""}`)}),N("change",Ae,xe=>ve(xe.currentTarget.checked)),d(g,P)};k(Rt,g=>{e(u)&&e(O)&&g(Ht)})}var ta=i(Rt,2);let Oe;pt(ta,21,()=>cs,ft,(g,P)=>{const Ae=ce(()=>e(u)&&e(v)===e(P).id),Ue=ce(()=>!!e(_)[e(P).id]),ie=ce(()=>e(m)===e(P).id),xe=ce(()=>e(P).id==="inflect_micro"&&!e(x)),Ee=ce(()=>fe(e(P).id));var He=Nm();let Xe;var zt=n(He),Dt=n(zt),Ft=n(Dt),$t=n(Ft),Gt=i(Ft,2),fa=n(Gt),Yt=i(Dt,2),ma=n(Yt),Oa=n(ma),Ya=i(zt,2),tt=n(Ya);{var gt=Le=>{var Qe=Mm();d(Le,Qe)},It=Le=>{var Qe=Am();d(Le,Qe)},ut=Le=>{var Qe=Pm(),Jt=n(Qe);w(Kt=>y(Jt,`✓ Downloaded (${Kt!=null?Kt:""})`),[()=>Tn(e(P).mb)]),d(Le,Qe)},Mt=Le=>{var Qe=zm(),Jt=n(Qe);w(Kt=>{Qe.disabled=!!e(m)||e(xe)||e(Ee),y(Jt,`↓ Download ${Kt!=null?Kt:""}`)},[()=>Tn(e(P).mb)]),N("click",Qe,Kt=>{Kt.stopPropagation(),$(e(P).id)}),d(Le,Qe)};k(tt,Le=>{e(P).mb===0?Le(gt):e(ie)?Le(It,1):e(Ue)?Le(ut,2):Le(Mt,-1)})}var jt=i(Ya,2);pt(jt,21,()=>[{label:"quality",pct:Math.round(e(P).quality*100),value:Fi(e(P).quality),color:"var(--vx-cyan-0)"},{label:"speed",pct:Math.round(e(P).speed*100),value:q_(e(P).speed),color:"var(--vx-cyan-2)"},{label:"model size",pct:F_(e(P).mb),value:Tn(e(P).mb),color:"var(--vx-gold-1)"}],ft,(Le,Qe)=>{var Jt=Dm(),Kt=n(Jt),ka=n(Kt),xa=n(ka),Ta=i(ka),la=n(Ta),ha=i(Kt,2),Pa=n(ha);let Ea;w(()=>{var Ut;y(xa,e(Qe).label),y(la,e(Qe).value),Ea=na(Pa,"",Ea,{width:`${(Ut=e(Qe).pct)!=null?Ut:""}%`,background:e(Qe).color})}),d(Le,Jt)});var wa=i(jt,2),oa=n(wa);{var Ra=Le=>{var Qe=Im();d(Le,Qe)},ja=Le=>{var Qe=Om(),Jt=n(Qe);w(()=>y(Jt,e(h)[e(P).id])),d(Le,Qe)},Z=Le=>{var Qe=Rm();d(Le,Qe)},Re=Le=>{var Qe=Lm();d(Le,Qe)},je=Le=>{var Qe=Be();w(()=>y(Qe,e(P).note)),d(Le,Qe)};k(oa,Le=>{e(Ee)?Le(Ra):e(h)[e(P).id]?Le(ja,1):e(P).needsHfToken&&!e(z)&&e(Ue)?Le(Z,2):e(xe)?Le(Re,3):Le(je,-1)})}w(()=>{Xe=Te(He,1,"vx-card card svelte-1yghr3b",null,Xe,{"vx-on":e(Ae),locked:e(Ee)}),mt(He,"aria-disabled",e(Ee)),mt(He,"aria-checked",e(Ae)),y($t,e(P).name),y(fa,e(P).kind),y(Oa,e(Ae)?"✓":"")}),N("click",He,()=>Me(e(P).id)),N("keydown",He,Le=>{(Le.key==="Enter"||Le.key===" ")&&(Le.preventDefault(),Me(e(P).id))}),d(g,He)});var qe=i(ta,2);{var K=g=>{var P=Vm(),Ae=n(P);w(()=>{var Ue;return y(Ae,`⚠ ${(Ue=e(ge))!=null?Ue:""}`)}),d(g,P)};k(qe,g=>{e(ge)&&g(K)})}w(g=>{var P;he=Te(Y,1,"vx-card mode svelte-1yghr3b",null,he,{"vx-on":e(u)}),pe=Te(me,1,"vx-card mode svelte-1yghr3b",null,pe,{"off-on":!e(u)}),it=Te(st,1,"vx-btn audition-btn svelte-1yghr3b",null,it,{playing:!!e(R)}),st.disabled=!e(de)&&!e(R),mt(st,"title",e(R)?"Stop":e(re)?"Play a sample":e(we)?"Needs a HuggingFace access token":"Download this voice first"),y(ye,`Audition: ${(P=e(f).name)!=null?P:""}`),Ke=Te(Ce,1,"hf-bar svelte-1yghr3b",null,Ke,g),vt.readOnly=e(q),mt(vt,"title",e(q)?"Set by the HF_TOKEN environment variable":"Enter a HuggingFace read token for gated models"),sr(vt,e(T)),wt=Te(nt,1,"hf-state svelte-1yghr3b",null,wt,{ok:e(z)&&!e(Q),bad:e(Q)}),Oe=Te(ta,1,"grid svelte-1yghr3b",null,Oe,{muted:!e(u)})},[()=>({needed:e(u)&&(e(Q)||se.some(g=>fe(g.id)))})]),N("click",Y,()=>Fe(!0)),N("click",me,()=>Fe(!1)),N("click",st,()=>{e(R)?(W(),C("stop_tts").catch(()=>{})):_e(e(v))}),N("input",vt,g=>ne(g.currentTarget.value)),d(s,G),St(),l()}Qt(["click","input","change","keydown"]);const qm="/assets/record_off-DqBdWxcg.png";var jm=p('VoxCtrl is ready.',1),Um=p('Setup is incomplete.',1),Wm=p('
                '),Hm=Oo(''),$m=p('
                '),Gm=p('
                click me ↓
                '),Km=p(`
                where everything lives
                Every choice is editable
                Nothing you picked here is locked in. Settings holds the same options plus the ones the - wizard skipped — output targets, per-binding LLM cleanup, audio devices and the MCP server.
                • ⌁ Hotkeys gestures & bindings
                • ∇ Engine model & device
                • ⌬ Visual overlay style & position
                • ⊕ TTS voice output
                • ⊳ Output Commands where text goes
                `),Ym=p(''),Jm=p('
                 
                '),Xm=p(''),Zm=p('
                '),Qm=p('
                What still needs fixing
                '),eb=p('

                system tray
                Find VoxCtrl in the tray
                Click the icon to open Settings, diagnostics, or toggle TTS memory. Try it:
                📶 🔊 ᛒ
                ⌃
                ');function tb(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",r),[r,l]=Ca();let c=S(!1),u=S(!1),v=S(!0),f=S(!1),_=S(null),b=S(null),m=S(!1);async function h(){o(m,!0);try{o(b,await C("get_setup_status"),!0)}catch(U){console.error("Wizard: could not read setup status:",U),o(b,null)}finally{o(m,!1)}}const x=ce(()=>{var te;if(!e(b))return[];const U=[];return e(b).hotkeys_active||U.push({id:"sys-hotkeys",step:2,title:"No global shortcut is active — pressing your hotkey will do nothing.",detail:`backend=${e(b).hotkeys.backend} portal_refused=${e(b).hotkeys.portal_refused} + continue and come back to this from Settings → Hotkeys at any time.
                `);function mm(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",l),r=()=>Zt(ga,"$status",l),[l,c]=Ea();let u=S(null),v=S(""),f=S(0),h=S("idle"),b=0,m=0;const _=Ho(28),x=ce(()=>Ne.gestureInfo),A=ce(()=>{var X;return(X=Ne.combo)!=null?X:[]}),q=ce(()=>{var X;return t().engine.backend==="remote-openai"?`Remote Speech Engine · ${((X=t().engine.remote_openai)==null?void 0:X.model)||"whisper-1"}`:t().engine.backend==="parakeet"?`Parakeet TDT · ${t().engine.parakeet.model_size}`:t().engine.backend==="moonshine"?`Moonshine · ${t().engine.moonshine.model_size}`:`whisper.cpp · ${t().engine.whisper_cpp.model_size} · ${t().engine.whisper_cpp.device==="cpu"?"cpu":"gpu/auto"}`}),T=ce(()=>({idle:"waiting for hotkey",recording:"recording",transcribing:"transcribing",success:"delivered"})[e(h)]);let D=!1;pa(()=>{const X=r();X.recording&&!D?(o(h,"recording"),b=performance.now(),m=e(v).length):!X.recording&&X.processing&&e(h)==="recording"&&o(h,"transcribing"),D=X.recording});function se(){if(!e(u))return;const X=e(u).value,ve=X.length>m&&X.trim().length>0;o(v,X,!0),ve&&(e(h)==="recording"||e(h)==="transcribing")&&(o(f,Math.max(1,Math.round(performance.now()-b)),!0),o(h,"success"))}function ne(){o(h,"idle"),o(v,""),m=0,e(u)&&(e(u).value="",e(u).focus())}qt(()=>{setTimeout(()=>{var X;return(X=e(u))==null?void 0:X.focus()},60)});var fe=gm(),Q=n(fe),z=n(Q),I=i(n(z),4),L=i(n(I)),ge=n(L),ee=i(z,2),j=n(ee);pt(j,17,()=>e(A),ft,(X,ve,Ae)=>{var Fe=pm(),he=ht(Fe),re=n(he),we=i(he,2);{var Je=de=>{var $=um();d(de,$)};k(we,de=>{Aey(re,de),[()=>dl(e(ve))]),d(X,Fe)});var V=i(j,2),oe=n(V),R=i(Q,2);let B;var be=n(R),Pe=i(n(be),2),ue=i(n(Pe),1,!0),K=i(be,2);sl(K,X=>o(u,X),()=>e(u));var J=i(K,2);{var Se=X=>{var ve=_m();pt(ve,21,()=>_,ft,(Ae,Fe)=>{var he=fm();let re;w(()=>{var we,Je;return re=na(he,"",re,{"animation-duration":`${(we=e(Fe).d)!=null?we:""}s`,"animation-delay":`${(Je=e(Fe).dl)!=null?Je:""}s`})}),d(Ae,he)}),d(X,ve)};k(J,X=>{(e(h)==="recording"||e(h)==="transcribing")&&X(Se)})}var De=i(J,2);{var le=X=>{var ve=hm(),Ae=n(ve),Fe=i(n(Ae),4),he=n(Fe),re=i(Fe,2);w(()=>{var we;return y(he,`Transcribed${t().engine.backend==="remote-openai"?" via Remote Speech Engine":" on-device"} in ${(we=e(f))!=null?we:""} ms · delivered via inject`)}),N("click",re,ne),d(X,ve)};k(De,X=>{e(h)==="success"&&X(le)})}var W=i(R,2),ae=i(n(W),2),O=n(ae);w(()=>{var X;y(ge,e(x).verb),y(oe,e(x).name),B=Te(R,1,"box svelte-oqvphh",null,B,{live:e(h)==="recording"||e(h)==="transcribing",won:e(h)==="success"}),Te(Pe,1,`state ${(X=e(h))!=null?X:""}`,"svelte-oqvphh"),y(ue,e(T)),y(O,e(q))}),N("input",K,se),d(s,fe),St(),c()}Qt(["input","click"]);var bm=p('
                '),ym=p('■ Stop ',1),wm=p('▶ play sample',1),km=p('Speaking sample aloud…'),xm=p('Downloading voice…'),Tm=p('Locked (token required)'),Sm=p('Ready for playback'),Em=p('Download voice first'),Cm=p('
                ⚠ Non-commercial license:
                '),Am=p(''),Mm=p('
                bundled · zero download
                '),Pm=p(''),Dm=p('
                '),zm=p(''),Im=p('
                '),Om=p('Needs a HuggingFace access token — enter one above to unlock this voice.'),Lm=p(' '),Rm=p(`Already downloaded — the token is only needed to fetch the weights, so this voice + works without one.`),Nm=p('This build was compiled without the `inflect-micro` feature, so this engine cannot\n synthesize.'),Vm=p('
                '),Fm=p('
                '),Bm=p(`
                // 05 · text to speech · optional

                Should VoxCtrl talk back?

                Agents can stream replies back through a response pipe and VoxCtrl speaks them aloud. Richer + voices need bigger models and more time per sentence; lighter engines answer instantly.

                HuggingFace access token optional — speeds up downloads if you have one
                `);function qm(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",r),[r,l]=Ea(),c=5,u=ce(()=>t().tts.enabled),v=ce(()=>t().tts.engine),f=ce(()=>{var g;return(g=cs.find(P=>P.id===e(v)))!=null?g:cs[0]});let h=S(yt({espeak:!0})),b=S(yt({})),m=S(null),_=S(yt({})),x=S(!0),A=S(null);const q=ce(()=>!!e(A)),T=ce(()=>{var g,P;return(P=e(A))!=null?P:((g=t().tts.hf_token)!=null?g:"").trim()}),D=ce(()=>e(T).length>0),se=cs.filter(g=>g.needsHfToken);function ne(g){e(q)||(o(Q,!1),fs(P=>{P.tts.hf_token=g.trim()?g.trim():null}))}function fe(g){const P=cs.find(Me=>Me.id===g);return!!(P!=null&&P.needsHfToken)&&!e(D)&&!e(h)[g]}let Q=S(!1);const z="hf-token-rejected";function I(g){return`${g}`.toLowerCase().includes(z)}let L=S(null),ge=S(null);const ee=Ho(12);let j=null,V=null,oe=0,R=!1;const B=300,be=1500,Pe=3e4;function ue(){j&&(clearTimeout(j),j=null),V&&(clearInterval(V),V=null)}function K(){o(L,null),ue()}async function J(){if(!e(L))return;let g;try{g=await E("get_status")}catch(P){console.error("Wizard: status poll failed:",P);return}if(g&&ga.set(g),g!=null&&g.speaking){R=!0;return}(R||Date.now()-oe>be)&&K()}function Se(g,P){const Me={...e(_)};P?Me[g]=P:delete Me[g],o(_,Me,!0)}async function De(g){var Me,Ue,ie,xe,Ce,He;const P=bn(Ot);try{switch(g){case"espeak":return!0;case"piper":return await E("check_voice_downloaded",{voiceName:P.tts.voice,voiceDir:P.tts.voice_dir});case"pocket_tts":return await E("check_pocket_tts_ready",{voice:P.tts.pocket_tts.voice,voiceDir:P.tts.pocket_tts.voice_dir});case"inflect_micro":return await E("check_inflect_micro_downloaded",{modelDir:(Ue=(Me=P.tts.inflect_micro)==null?void 0:Me.model_dir)!=null?Ue:""});case"breeze_tts_2":return await E("check_breeze_tts_2_ready",{modelDir:(xe=(ie=P.tts.breeze_tts_2)==null?void 0:ie.model_dir)!=null?xe:""});case"vox_cpm_2":return await E("check_vox_cpm_2_ready",{modelDir:(He=(Ce=P.tts.vox_cpm_2)==null?void 0:Ce.model_dir)!=null?He:""})}}catch(Xe){return console.error("Wizard: TTS readiness check failed for",g,Xe),!1}}async function le(){await Promise.all(cs.map(async g=>{o(b,{...e(b),[g.id]:!0},!0);const P=await De(g.id);o(h,{...e(h),[g.id]:P},!0),o(b,{...e(b),[g.id]:!1},!0)}))}async function W(g){var Me,Ue,ie,xe,Ce,He,Xe,Dt,zt,Ft,Wt,$t;if(e(m))return;o(m,g,!0),Se(g,null);const P=bn(Ot);try{switch(g){case"piper":await E("download_voice",{voiceName:P.tts.voice,voiceDir:P.tts.voice_dir});break;case"pocket_tts":await E("download_pocket_tts",{voice:(Me=P.tts.pocket_tts)==null?void 0:Me.voice,voiceDir:(Ue=P.tts.pocket_tts)==null?void 0:Ue.voice_dir,hfToken:P.tts.hf_token});break;case"inflect_micro":await E("download_inflect_micro",{modelDir:(xe=(ie=P.tts.inflect_micro)==null?void 0:ie.model_dir)!=null?xe:""});break;case"breeze_tts_2":await E("download_breeze_tts_2",{modelDir:(He=(Ce=P.tts.breeze_tts_2)==null?void 0:Ce.model_dir)!=null?He:"",hfToken:P.tts.hf_token});break;case"vox_cpm_2":await E("download_vox_cpm_2",{modelDir:(Dt=(Xe=P.tts.vox_cpm_2)==null?void 0:Xe.model_dir)!=null?Dt:"",hfToken:P.tts.hf_token});break;case"espeak":break}o(Q,!1),o(h,{...e(h),[g]:!0},!0),Ne.clearIssue(`tts-download-${g}`)}catch(fa){const Yt=cs.find(Oa=>Oa.id===g),ma=I(fa);ma&&o(Q,!0),Se(g,ma?`HuggingFace did not accept that access token, so ${(zt=Yt==null?void 0:Yt.name)!=null?zt:g} could not be downloaded. Check the token is a valid read token, and that the same account has accepted the licence at ${(Ft=Yt==null?void 0:Yt.licenceUrl)!=null?Ft:"huggingface.co"}.`:`${fa}`),Ne.recordIssue({id:`tts-download-${g}`,step:c,title:ma?`${(Wt=Yt==null?void 0:Yt.name)!=null?Wt:g} could not be downloaded — HuggingFace did not accept the access token.`:`${($t=Yt==null?void 0:Yt.name)!=null?$t:g} could not be downloaded — speech output will stay silent.`,detail:`engine=${g} +${fa}`})}finally{o(m,null)}}const ae=["pocket_tts","breeze_tts_2","vox_cpm_2"],O=ce(()=>ae.includes(e(v))),X=ce(()=>e(v)==="pocket_tts"?t().tts.pocket_tts.gpu:e(v)==="breeze_tts_2"?t().tts.breeze_tts_2.gpu:e(v)==="vox_cpm_2"?t().tts.vox_cpm_2.gpu:!1);function ve(g){fs(P=>{e(v)==="pocket_tts"?P.tts.pocket_tts.gpu=g:e(v)==="breeze_tts_2"?P.tts.breeze_tts_2.gpu=g:e(v)==="vox_cpm_2"&&(P.tts.vox_cpm_2.gpu=g)})}function Ae(g){fe(g)||fs(P=>{P.tts.enabled=!0,P.tts.engine=g})}function Fe(g){fs(P=>{P.tts.enabled=g})}async function he(g){if(e(L)){K(),E("stop_tts").catch(()=>{});return}Ae(g),o(ge,null),o(L,g,!0),oe=Date.now(),R=!1,ue(),V=setInterval(()=>void J(),B),j=setTimeout(()=>{K(),o(ge,"The sample never finished playing. The engine may have failed silently — check Settings → TTS, or try another voice.")},Pe);const P=bn(Ot),Me=cs.find(ie=>ie.id===g),Ue=g==="piper"?P.tts.voice:g==="pocket_tts"?P.tts.pocket_tts.voice:null;try{await E("save_config",{newConfig:P}),await E("speak_text",{text:`Hi this is ${Me.name} speaking from VoxCtrl`,voice:Ue})}catch(ie){o(ge,`${ie}`),K(),Ne.recordIssue({id:`tts-speak-${g}`,step:c,title:`${Me.name} failed to speak the sample.`,detail:`engine=${g} voice=${Ue!=null?Ue:"(fixed)"} +${ie}`})}}pa(()=>{var g;if(!e(u)){a.setBlocker(c,null);return}if(e(m)){a.setBlocker(c,`Downloading ${(g=cs.find(P=>P.id===e(m)))==null?void 0:g.name}…`);return}if(fe(e(v))){a.setBlocker(c,"Enter a HuggingFace access token, or pick a voice that does not need one.");return}if(e(v)==="inflect_micro"&&!e(x)){a.setBlocker(c,"This build has no Inflect Micro engine — pick another voice or skip.");return}a.setBlocker(c,e(h)[e(v)]?null:"Download the voice you picked, or turn speech output off to continue.")}),qt(()=>{le(),E("hf_token_env").then(P=>o(A,P&&P.trim()?P.trim():null,!0)).catch(()=>o(A,null)),E("inflect_micro_available").then(P=>o(x,P,!0)).catch(()=>o(x,!1));const g=[ha("tts-playback-end",()=>K()),ha("tts-error",P=>{o(ge,P.payload,!0),K(),Ne.recordIssue({id:"tts-runtime",step:c,title:"The text-to-speech engine reported an error while speaking.",detail:`engine=${bn(Ot).tts.engine} +${P.payload}`})})];return()=>{a.setBlocker(c,null),ue();for(const P of g)P.then(Me=>Me()).catch(()=>{});E("stop_tts").catch(()=>{})}});const re=ce(()=>!!e(h)[e(v)]),we=ce(()=>fe(e(v))),Je=ce(()=>e(v)==="inflect_micro"&&!e(x)),de=ce(()=>e(re)&&!e(Je)&&!e(we)&&!e(m));var $=Bm(),U=n($),te=i(n(U),2),Y=n(te);let _e;var me=i(Y,2);let pe;var ze=i(U,2),$e=n(ze),st=n($e);let it;var H=n(st);{var M=g=>{var P=ym(),Me=i(ht(P),4);pt(Me,21,()=>ee,ft,(Ue,ie)=>{var xe=bm();let Ce;w(()=>{var He,Xe;return Ce=na(xe,"",Ce,{"animation-duration":`${(He=e(ie).d)!=null?He:""}s`,"animation-delay":`${(Xe=e(ie).dl)!=null?Xe:""}s`})}),d(Ue,xe)}),d(g,P)},C=g=>{var P=wm();d(g,P)};k(H,g=>{e(L)?g(M):g(C,-1)})}var ke=i(st,2),Ke=n(ke),ye=n(Ke),Ie=i(Ke,2),Ye=n(Ie);{var Ze=g=>{var P=km();d(g,P)},Ve=g=>{var P=xm();d(g,P)},at=g=>{var P=Tm();d(g,P)},et=g=>{var P=Sm();d(g,P)},rt=g=>{var P=Em();d(g,P)};k(Ye,g=>{e(L)?g(Ze):e(m)?g(Ve,1):e(we)?g(at,2):e(re)?g(et,3):g(rt,-1)})}var Ee=i($e,2);let Ge;var ct=i(n(Ee),2),vt=n(ct),nt=i(vt,2);let wt;var dt=n(nt);{var Et=g=>{var P=Be("did not accept this token");d(g,P)},Kt=g=>{var P=Be("HF_TOKEN environment variable");d(g,P)},ia=g=>{var P=Be("✓ token saved");d(g,P)},ra=g=>{var P=Be("token required for gated voices");d(g,P)};k(dt,g=>{e(Q)?g(Et):e(q)?g(Kt,1):e(D)?g(ia,2):g(ra,-1)})}var bt=i(ze,2);{var ea=g=>{var P=Cm(),Me=i(n(P));w(()=>{var Ue;return y(Me,` ${(Ue=e(f).name)!=null?Ue:""} weights are released under a research/non-commercial license. Commercial + use requires a separate license from the model's publisher.`)}),d(g,P)};k(bt,g=>{e(u)&&e(f).nonCommercial&&!e(h)[e(v)]&&g(ea)})}var Lt=i(bt,2);{var Ht=g=>{var P=Am(),Me=n(P),Ue=i(Me,2),ie=n(Ue);w(()=>{var xe;Od(Me,e(X)),y(ie,`Vulkan GPU acceleration for ${(xe=e(f).name)!=null?xe:""}`)}),N("change",Me,xe=>ve(xe.currentTarget.checked)),d(g,P)};k(Lt,g=>{e(u)&&e(O)&&g(Ht)})}var ta=i(Lt,2);let Oe;pt(ta,21,()=>cs,ft,(g,P)=>{const Me=ce(()=>e(u)&&e(v)===e(P).id),Ue=ce(()=>!!e(h)[e(P).id]),ie=ce(()=>e(m)===e(P).id),xe=ce(()=>e(P).id==="inflect_micro"&&!e(x)),Ce=ce(()=>fe(e(P).id));var He=Vm();let Xe;var Dt=n(He),zt=n(Dt),Ft=n(zt),Wt=n(Ft),$t=i(Ft,2),fa=n($t),Yt=i(zt,2),ma=n(Yt),Oa=n(ma),Ya=i(Dt,2),tt=n(Ya);{var gt=Re=>{var Qe=Mm();d(Re,Qe)},It=Re=>{var Qe=Pm();d(Re,Qe)},ut=Re=>{var Qe=Dm(),Jt=n(Qe);w(Gt=>y(Jt,`✓ Downloaded (${Gt!=null?Gt:""})`),[()=>Tn(e(P).mb)]),d(Re,Qe)},At=Re=>{var Qe=zm(),Jt=n(Qe);w(Gt=>{Qe.disabled=!!e(m)||e(xe)||e(Ce),y(Jt,`↓ Download ${Gt!=null?Gt:""}`)},[()=>Tn(e(P).mb)]),N("click",Qe,Gt=>{Gt.stopPropagation(),W(e(P).id)}),d(Re,Qe)};k(tt,Re=>{e(P).mb===0?Re(gt):e(ie)?Re(It,1):e(Ue)?Re(ut,2):Re(At,-1)})}var jt=i(Ya,2);pt(jt,21,()=>[{label:"quality",pct:Math.round(e(P).quality*100),value:Fi(e(P).quality),color:"var(--vx-cyan-0)"},{label:"speed",pct:Math.round(e(P).speed*100),value:jh(e(P).speed),color:"var(--vx-cyan-2)"},{label:"model size",pct:Bh(e(P).mb),value:Tn(e(P).mb),color:"var(--vx-gold-1)"}],ft,(Re,Qe)=>{var Jt=Im(),Gt=n(Jt),ka=n(Gt),xa=n(ka),Ta=i(ka),la=n(Ta),_a=i(Gt,2),Pa=n(_a);let Ca;w(()=>{var Ut;y(xa,e(Qe).label),y(la,e(Qe).value),Ca=na(Pa,"",Ca,{width:`${(Ut=e(Qe).pct)!=null?Ut:""}%`,background:e(Qe).color})}),d(Re,Jt)});var wa=i(jt,2),oa=n(wa);{var La=Re=>{var Qe=Om();d(Re,Qe)},ja=Re=>{var Qe=Lm(),Jt=n(Qe);w(()=>y(Jt,e(_)[e(P).id])),d(Re,Qe)},Z=Re=>{var Qe=Rm();d(Re,Qe)},Le=Re=>{var Qe=Nm();d(Re,Qe)},je=Re=>{var Qe=Be();w(()=>y(Qe,e(P).note)),d(Re,Qe)};k(oa,Re=>{e(Ce)?Re(La):e(_)[e(P).id]?Re(ja,1):e(P).needsHfToken&&!e(D)&&e(Ue)?Re(Z,2):e(xe)?Re(Le,3):Re(je,-1)})}w(()=>{Xe=Te(He,1,"vx-card card svelte-1yghr3b",null,Xe,{"vx-on":e(Me),locked:e(Ce)}),mt(He,"aria-disabled",e(Ce)),mt(He,"aria-checked",e(Me)),y(Wt,e(P).name),y(fa,e(P).kind),y(Oa,e(Me)?"✓":"")}),N("click",He,()=>Ae(e(P).id)),N("keydown",He,Re=>{(Re.key==="Enter"||Re.key===" ")&&(Re.preventDefault(),Ae(e(P).id))}),d(g,He)});var qe=i(ta,2);{var G=g=>{var P=Fm(),Me=n(P);w(()=>{var Ue;return y(Me,`⚠ ${(Ue=e(ge))!=null?Ue:""}`)}),d(g,P)};k(qe,g=>{e(ge)&&g(G)})}w(g=>{var P;_e=Te(Y,1,"vx-card mode svelte-1yghr3b",null,_e,{"vx-on":e(u)}),pe=Te(me,1,"vx-card mode svelte-1yghr3b",null,pe,{"off-on":!e(u)}),it=Te(st,1,"vx-btn audition-btn svelte-1yghr3b",null,it,{playing:!!e(L)}),st.disabled=!e(de)&&!e(L),mt(st,"title",e(L)?"Stop":e(re)?"Play a sample":e(we)?"Needs a HuggingFace access token":"Download this voice first"),y(ye,`Audition: ${(P=e(f).name)!=null?P:""}`),Ge=Te(Ee,1,"hf-bar svelte-1yghr3b",null,Ge,g),vt.readOnly=e(q),mt(vt,"title",e(q)?"Set by the HF_TOKEN environment variable":"Enter a HuggingFace read token for gated models"),sr(vt,e(T)),wt=Te(nt,1,"hf-state svelte-1yghr3b",null,wt,{ok:e(D)&&!e(Q),bad:e(Q)}),Oe=Te(ta,1,"grid svelte-1yghr3b",null,Oe,{muted:!e(u)})},[()=>({needed:e(u)&&(e(Q)||se.some(g=>fe(g.id)))})]),N("click",Y,()=>Fe(!0)),N("click",me,()=>Fe(!1)),N("click",st,()=>{e(L)?(K(),E("stop_tts").catch(()=>{})):he(e(v))}),N("input",vt,g=>ne(g.currentTarget.value)),d(s,$),St(),l()}Qt(["click","input","change","keydown"]);const jm="/assets/record_off-DqBdWxcg.png";var Um=p('VoxCtrl is ready.',1),Km=p('Setup is incomplete.',1),Hm=p('
                '),Wm=Oo(''),$m=p('
                '),Gm=p('
                click me ↓
                '),Ym=p(`
                where everything lives
                Every choice is editable
                Nothing you picked here is locked in. Settings holds the same options plus the ones the + wizard skipped — output targets, per-binding LLM cleanup, audio devices and the MCP server.
                • ⌁ Hotkeys gestures & bindings
                • ∇ Engine model & device
                • ⌬ Visual overlay style & position
                • ⊕ TTS voice output
                • ⊳ Output Commands where text goes
                `),Jm=p(''),Xm=p('
                 
                '),Zm=p(''),Qm=p('
                '),eb=p('
                What still needs fixing
                '),tb=p('

                system tray
                Find VoxCtrl in the tray
                Click the icon to open Settings, diagnostics, or toggle TTS memory. Try it:
                📶 🔊 ᛒ
                ⌃
                ');function ab(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",r),[r,l]=Ea();let c=S(!1),u=S(!1),v=S(!0),f=S(!1),h=S(null),b=S(null),m=S(!1);async function _(){o(m,!0);try{o(b,await E("get_setup_status"),!0)}catch(U){console.error("Wizard: could not read setup status:",U),o(b,null)}finally{o(m,!1)}}const x=ce(()=>{var te;if(!e(b))return[];const U=[];return e(b).hotkeys_active||U.push({id:"sys-hotkeys",step:2,title:"No global shortcut is active — pressing your hotkey will do nothing.",detail:`backend=${e(b).hotkeys.backend} portal_refused=${e(b).hotkeys.portal_refused} portal_error=${(te=e(b).hotkeys.portal_error)!=null?te:"(none)"}`}),!e(b).model_ready&&!e(b).model_auto_downloads&&U.push({id:"sys-model",step:1,title:`Speech model "${e(b).model_size}" is not on disk — dictation will record but produce no text.`,detail:`model_size=${e(b).model_size} model_ready=false auto_downloads=${e(b).model_auto_downloads}`}),e(b).missing_injection_tool&&U.push({id:"sys-inject",step:4,title:`"${e(b).missing_injection_tool}" is not installed — VoxCtrl cannot type text into other windows.`,detail:`missing_injection_tool=${e(b).missing_injection_tool} -install with: ${e(b).manual_package_commands||"(unknown package manager)"}`}),U}),M=ce(()=>{const U=new Set(Ne.issues.map(te=>te.id));return[...Ne.issues,...e(x).filter(te=>!U.has(te.id))]}),q=ce(()=>e(M).length===0),T=ce(()=>{var U;return((U=Ne.combo)!=null?U:[]).map(dl).join(" + ")||"not set"}),z=ce(()=>{var U,te,Y,he,me;return[{k:"engine",v:t().engine.backend==="remote-openai"?`Remote Speech Engine · ${((U=t().engine.remote_openai)==null?void 0:U.model)||"whisper-1"}`:t().engine.backend==="parakeet"?`Parakeet TDT · ${t().engine.parakeet.model_size}`:t().engine.backend==="moonshine"?`Moonshine · ${t().engine.moonshine.model_size}`:`whisper.cpp · ${t().engine.whisper_cpp.model_size}`},{k:"hotkey",v:`${e(T)} · ${Ne.gestureInfo.name}`},{k:"overlay",v:t().ui.show_overlay?`${(Y=(te=mn.find(pe=>pe.id===t().ui.overlay_style))==null?void 0:te.name)!=null?Y:t().ui.overlay_style} · ${t().ui.overlay_position}`:"off"},{k:"voice output",v:t().tts.enabled?(me=(he=cs.find(pe=>pe.id===t().tts.engine))==null?void 0:he.name)!=null?me:t().tts.engine:"off"}]}),se=ce(()=>{var U,te,Y;return["VoxCtrl setup report",`engine: ${t().engine.backend} / ${t().engine.backend==="remote-openai"?((U=t().engine.remote_openai)==null?void 0:U.model)||"whisper-1":t().engine.backend==="parakeet"?t().engine.parakeet.model_size:t().engine.backend==="moonshine"?t().engine.moonshine.model_size:t().engine.whisper_cpp.model_size}`,`device: ${t().engine.whisper_cpp.device}`,`hotkey: ${e(T)} (${Ne.gesture})`,`overlay: ${t().ui.show_overlay?`${t().ui.overlay_style} / ${t().ui.overlay_position}`:"off"}`,`tts: ${t().tts.enabled?t().tts.engine:"off"}`,`shortcut backend: ${(Y=(te=e(b))==null?void 0:te.hotkeys.backend)!=null?Y:"unknown"}`,"",...e(M).map(he=>{var me;return`[${(me=ds[he.step])!=null?me:"setup"}] ${he.title} -${he.detail} +install with: ${e(b).manual_package_commands||"(unknown package manager)"}`}),U}),A=ce(()=>{const U=new Set(Ne.issues.map(te=>te.id));return[...Ne.issues,...e(x).filter(te=>!U.has(te.id))]}),q=ce(()=>e(A).length===0),T=ce(()=>{var U;return((U=Ne.combo)!=null?U:[]).map(dl).join(" + ")||"not set"}),D=ce(()=>{var U,te,Y,_e,me;return[{k:"engine",v:t().engine.backend==="remote-openai"?`Remote Speech Engine · ${((U=t().engine.remote_openai)==null?void 0:U.model)||"whisper-1"}`:t().engine.backend==="parakeet"?`Parakeet TDT · ${t().engine.parakeet.model_size}`:t().engine.backend==="moonshine"?`Moonshine · ${t().engine.moonshine.model_size}`:`whisper.cpp · ${t().engine.whisper_cpp.model_size}`},{k:"hotkey",v:`${e(T)} · ${Ne.gestureInfo.name}`},{k:"overlay",v:t().ui.show_overlay?`${(Y=(te=mn.find(pe=>pe.id===t().ui.overlay_style))==null?void 0:te.name)!=null?Y:t().ui.overlay_style} · ${t().ui.overlay_position}`:"off"},{k:"voice output",v:t().tts.enabled?(me=(_e=cs.find(pe=>pe.id===t().tts.engine))==null?void 0:_e.name)!=null?me:t().tts.engine:"off"}]}),se=ce(()=>{var U,te,Y;return["VoxCtrl setup report",`engine: ${t().engine.backend} / ${t().engine.backend==="remote-openai"?((U=t().engine.remote_openai)==null?void 0:U.model)||"whisper-1":t().engine.backend==="parakeet"?t().engine.parakeet.model_size:t().engine.backend==="moonshine"?t().engine.moonshine.model_size:t().engine.whisper_cpp.model_size}`,`device: ${t().engine.whisper_cpp.device}`,`hotkey: ${e(T)} (${Ne.gesture})`,`overlay: ${t().ui.show_overlay?`${t().ui.overlay_style} / ${t().ui.overlay_position}`:"off"}`,`tts: ${t().tts.enabled?t().tts.engine:"off"}`,`shortcut backend: ${(Y=(te=e(b))==null?void 0:te.hotkeys.backend)!=null?Y:"unknown"}`,"",...e(A).map(_e=>{var me;return`[${(me=ds[_e.step])!=null?me:"setup"}] ${_e.title} +${_e.detail} `})].join(` -`)});async function ne(){try{await navigator.clipboard.writeText(e(se)),o(u,!0),setTimeout(()=>o(u,!1),2e3)}catch(U){console.error("Wizard: clipboard write failed:",U)}}async function fe(){o(f,!0),o(_,null);try{const U=await C("wizard_failure_log");try{await navigator.clipboard.writeText(U)}catch(me){console.error("Wizard: clipboard write failed:",me)}const te=encodeURIComponent("VoxCtrl Bug Report"),Y=encodeURIComponent(`Paste the log contents below and I will get back to you with a fix ASAP. +`)});async function ne(){try{await navigator.clipboard.writeText(e(se)),o(u,!0),setTimeout(()=>o(u,!1),2e3)}catch(U){console.error("Wizard: clipboard write failed:",U)}}async function fe(){o(f,!0),o(h,null);try{const U=await E("wizard_failure_log");try{await navigator.clipboard.writeText(U)}catch(me){console.error("Wizard: clipboard write failed:",me)}const te=encodeURIComponent("VoxCtrl Bug Report"),Y=encodeURIComponent(`Paste the log contents below and I will get back to you with a fix ASAP. -`),he=`mailto:jrufer@gmail.com?subject=${te}&body=${Y}`;await C("send_bug_report_email",{mailtoUrl:he,attachmentPath:null}),o(_,"Log copied to your clipboard — paste it into the email that just opened.")}catch(U){o(_,`Could not open your email app: ${U}`)}finally{o(f,!1)}}async function Q(){try{await C("open_settings_tab",{tab:"general"})}catch(U){console.error("Wizard: could not open Settings:",U)}}qt(()=>{var U;h(),((U=t().tts)==null?void 0:U.memory_mode)!==void 0&&o(v,t().tts.memory_mode==="on_demand")});function D(){o(v,!e(v)),Ot.update(U=>(U.tts&&(U.tts.memory_mode=e(v)?"on_demand":"always_loaded"),U))}var I=eb(),R=n(I),ge=n(R);let ee;var j=n(ge),V=i(ge,2),oe=n(V),L=i(V,2),B=n(L);{var be=U=>{var te=jm();d(U,te)},Pe=U=>{var te=Um();d(U,te)};k(B,U=>{e(q)?U(be):U(Pe,-1)})}var ue=i(L,2),W=n(ue);{var J=U=>{var te=Be(`This window can close. VoxCtrl keeps running quietly in your system tray and listens for - your hotkey in any app.`);d(U,te)},Se=U=>{var te=Be();w(()=>{var Y;return y(te,`Sorry about that — ${(Y=e(M).length)!=null?Y:""} problem${e(M).length===1?"":"s"} came up during setup +`),_e=`mailto:jrufer@gmail.com?subject=${te}&body=${Y}`;await E("send_bug_report_email",{mailtoUrl:_e,attachmentPath:null}),o(h,"Log copied to your clipboard — paste it into the email that just opened.")}catch(U){o(h,`Could not open your email app: ${U}`)}finally{o(f,!1)}}async function Q(){try{await E("open_settings_tab",{tab:"general"})}catch(U){console.error("Wizard: could not open Settings:",U)}}qt(()=>{var U;_(),((U=t().tts)==null?void 0:U.memory_mode)!==void 0&&o(v,t().tts.memory_mode==="on_demand")});function z(){o(v,!e(v)),Ot.update(U=>(U.tts&&(U.tts.memory_mode=e(v)?"on_demand":"always_loaded"),U))}var I=tb(),L=n(I),ge=n(L);let ee;var j=n(ge),V=i(ge,2),oe=n(V),R=i(V,2),B=n(R);{var be=U=>{var te=Um();d(U,te)},Pe=U=>{var te=Km();d(U,te)};k(B,U=>{e(q)?U(be):U(Pe,-1)})}var ue=i(R,2),K=n(ue);{var J=U=>{var te=Be(`This window can close. VoxCtrl keeps running quietly in your system tray and listens for + your hotkey in any app.`);d(U,te)},Se=U=>{var te=Be();w(()=>{var Y;return y(te,`Sorry about that — ${(Y=e(A).length)!=null?Y:""} problem${e(A).length===1?"":"s"} came up during setup and will stop VoxCtrl working end to end. Your choices are still saved. The details are on - the right — fix them here or in Settings, or send us the log and we'll take it from there.`)}),d(U,te)};k(W,U=>{e(q)?U(J):U(Se,-1)})}var ze=i(ue,2);pt(ze,21,()=>e(z),ft,(U,te)=>{var Y=Wm(),he=n(Y),me=n(he),pe=i(he,2),De=n(pe);w(()=>{y(me,e(te).k),y(De,e(te).v)}),d(U,Y)});var le=i(R,2),$=i(n(le),6),ae=n($);{var O=U=>{var te=$m(),Y=n(te),he=i(Y,2),me=i(he,2),pe=n(me),De=n(pe);let Ge;var st=n(De);{var it=A=>{var E=Hm();d(A,E)};k(st,A=>{e(v)&&A(it)})}var H=i(me,4);w(()=>Ge=Te(De,1,"chk svelte-ujy0nl",null,Ge,{on:e(v)})),N("click",Y,Q),N("click",he,()=>{o(c,!1),h()}),N("click",me,D),N("click",H,()=>o(c,!1)),d(U,te)};k(ae,U=>{e(c)&&U(O)})}var X=i(ae,2),ve=i(n(X),6),Me=n(ve);let Fe;var _e=n(Me),re=i(Me,2);{var we=U=>{var te=Gm();d(U,te)};k(re,U=>{e(c)||U(we)})}var Je=i(le,2);{var de=U=>{var te=Km(),Y=i(n(te),8);N("click",Y,Q),d(U,te)},G=U=>{var te=Qm(),Y=n(te),he=n(Y),me=n(he),pe=n(me),De=i(he,2),Ge=n(De);{var st=Ve=>{var at=Ym();d(Ve,at)};k(Ge,Ve=>{e(m)&&Ve(st)})}var it=i(Y,2);pt(it,21,()=>e(M),Ve=>Ve.id,(Ve,at)=>{var et=Jm(),rt=n(et),Ce=n(rt),Ke=n(Ce),ct=i(Ce,2),vt=n(ct),nt=i(rt,2),wt=n(nt);w(()=>{var dt;y(Ke,(dt=ds[e(at).step])!=null?dt:"setup"),y(vt,e(at).title),y(wt,e(at).detail)}),d(Ve,et)});var H=i(it,2),A=n(H),E=n(A),ke=i(A,2),We=i(ke,2),ye=n(We);{var Ie=Ve=>{var at=Xm();d(Ve,at)};k(ye,Ve=>{e(f)&&Ve(Ie)})}var Ye=i(H,2);{var Ze=Ve=>{var at=Zm(),et=n(at);w(()=>y(et,e(_))),d(Ve,at)};k(Ye,Ve=>{e(_)&&Ve(Ze)})}w(()=>{var Ve;y(pe,`problems · ${(Ve=e(M).length)!=null?Ve:""}`),De.disabled=e(m),y(E,e(u)?"✓ Copied":"Copy diagnostics"),We.disabled=e(f)}),N("click",De,h),N("click",A,ne),N("click",ke,Q),N("click",We,fe),d(U,te)};k(Je,U=>{e(q)?U(de):U(G,-1)})}w(()=>{ee=Te(ge,1,"tick svelte-ujy0nl",null,ee,{warn:!e(q)}),y(j,e(q)?"✓":"!"),y(oe,e(q)?"// configured":"// finished with problems"),Fe=Te(Me,1,"tray-btn svelte-ujy0nl",null,Fe,{on:e(c)}),mt(_e,"src",qm)}),N("click",Me,()=>o(c,!e(c))),d(s,I),St(),l()}Qt(["click"]);var ab=p('
                Loading your settings…
                '),sb=p(''),nb=p(''),ib=p('
                '),rb=p('
                '),lb=p(' '),ob=p(' Working…',1),cb=p('
                '),db=p('
                voxctrl // setup
                ');function vb(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",l),r=()=>Zt(Wi,"$configLoaded",l),[l,c]=Ca();let u={};function v(G,U){U?u[G]=U:delete u[G]}let f=S(yt({}));function _(G,U){var te;((te=e(f)[G])!=null?te:null)!==U&&o(f,{...e(f),[G]:U},!0)}let b=S(!1),m=S(null);const h=ce(()=>Ne.step),x=ce(()=>{var G;return(G=e(f)[e(h)])!=null?G:null}),M=ce(()=>e(h)===0?"Get started →":e(h)===5&&!t().tts.enabled?"Skip →":e(h)===ds.length-1?Ne.issues.length>0?"Finish anyway":"Finish":"Continue →");async function q(){if(e(b))return;if(o(m,null),e(h)===ds.length-1){await se();return}const G=u[e(h)];if(G){o(b,!0);try{if(!await G())return}catch(U){o(m,`${U}`);return}finally{o(b,!1)}}Ne.goTo(e(h)+1)}function T(){e(b)||(o(m,null),Ne.goTo(e(h)-1))}let z=S(!1);async function se(){if(!e(z)){o(z,!0);try{await C("save_config",{newConfig:t()}),await C("finish_setup_wizard",{openSettings:!1})}catch(G){o(m,`Could not finish setup: ${G}`),o(z,!1)}}}async function ne(){await se()}function fe(G){Ne.recordIssue({id:`uncaught-${Ne.issues.filter(U=>U.id.startsWith("uncaught-")).length}`,step:Ne.step,title:"Something went wrong during setup that the wizard did not expect.",detail:G})}qt(()=>{const G=te=>{var Y;fe(((Y=te.error)==null?void 0:Y.stack)||te.message||String(te))},U=te=>{var Y,he;fe(((Y=te.reason)==null?void 0:Y.stack)||((he=te.reason)==null?void 0:he.message)||String(te.reason))};return window.addEventListener("error",G),window.addEventListener("unhandledrejection",U),C("wizard_error_test_active").then(te=>{te&&(Ne.recordIssue({id:"simulated-test-failure",step:4,title:"Simulated failure (--simulate-wizard-error) — the live test did not detect any transcribed audio.",detail:"This is a test fixture, not a real failure: it exists so the wizard's error screen (apology, log capture, copy-to-clipboard, email-us) can be verified without needing a genuinely broken hotkey or microphone."}),Ne.visited=ds.length-1,Ne.step=ds.length-1)}).catch(te=>console.error("Wizard: could not check for the error-test flag:",te)),()=>{window.removeEventListener("error",G),window.removeEventListener("unhandledrejection",U)}});var Q=db(),D=n(Q),I=n(D),R=i(I,8),ge=n(R),ee=i(D,2);let j;var V=n(ee);{var oe=G=>{var U=ab();d(G,U)},L=G=>{K_(G)},B=G=>{wg(G,{registerGate:v,setBlocker:_})},be=G=>{Og(G,{registerGate:v,setBlocker:_})},Pe=G=>{dm(G,{})},ue=G=>{gm(G,{})},W=G=>{Bm(G,{setBlocker:_})},J=G=>{tb(G,{})};k(V,G=>{r()?e(h)===0?G(L,1):e(h)===1?G(B,2):e(h)===2?G(be,3):e(h)===3?G(Pe,4):e(h)===4?G(ue,5):e(h)===5?G(W,6):G(J,-1):G(oe)})}var Se=i(ee,2),ze=n(Se),le=n(ze);{var $=G=>{var U=sb();w(()=>U.disabled=e(b)),N("click",U,T),d(G,U)},ae=G=>{var U=nb();w(()=>U.disabled=e(z)),N("click",U,ne),d(G,U)};k(le,G=>{e(h)>0?G($):G(ae,-1)})}var O=i(ze,2);pt(O,21,()=>ds,ft,(G,U,te)=>{var Y=rb();let he;var me=n(Y);let pe;var De=n(me),Ge=n(De),st=i(De,2),it=n(st),H=i(me,2);{var A=E=>{var ke=ib(),We=n(ke);let ye;w(()=>ye=na(We,"",ye,{width:te{te{he=na(Y,"",he,{flex:teNe.visited||e(b),y(Ge,E),y(it,e(U))},[()=>teNe.goTo(te)),d(G,Y)});var X=i(O,2),ve=n(X);{var Me=G=>{var U=lb(),te=n(U);w(()=>{mt(U,"title",e(x)),y(te,e(x))}),d(G,U)};k(ve,G=>{e(x)&&!e(b)&&G(Me)})}var Fe=i(ve,2),_e=n(Fe);{var re=G=>{var U=ob();d(G,U)},we=G=>{var U=Be();w(()=>y(U,e(M))),d(G,U)};k(_e,G=>{e(b)||e(z)?G(re):G(we,-1)})}var Je=i(Se,2);{var de=G=>{var U=cb(),te=n(U),Y=n(te),he=i(te,2);w(()=>{var me;return y(Y,`⚠ ${(me=e(m))!=null?me:""}`)}),N("click",he,()=>o(m,null)),d(G,U)};k(Je,G=>{e(m)&&G(de)})}w(()=>{var G;mt(I,"src",nr),y(ge,`step ${e(h)+1} / ${(G=ds.length)!=null?G:""} · every choice editable later in Settings`),j=Te(ee,1,"vx-screen svelte-18pn5kx",null,j,{"vx-leaving":Ne.leaving}),Fe.disabled=e(b)||e(z)||!!e(x)}),N("click",Fe,q),d(s,Q),St(),c()}Qt(["click"]);function Ol(s){if(!s||s<0)return"";if(s<1024)return`${s} B`;const a=["KB","MB","GB"];let t=s/1024,r=0;for(;t>=1024&&r

                '),fb=p('

                '),hb=p('

                Asking GitHub for the latest release…

                '),_b=p('

                Nothing to install. Check again any time from Settings → General.

                '),gb=p(`

                What's new

                 
                `),mb=p('

                '),bb=p('

                VoxCtrl keeps running until the download is verified. Nothing is replaced before then.

                '),yb=p('

                The new version is installed. VoxCtrl is closing and will start again in a moment.

                '),wb=p('

                '),kb=p('

                Your current version is untouched and still working.

                ',1),xb=p(" ",1),Tb=p('

                '),Sb=p(''),Cb=p(''),Eb=p(''),Mb=p(''),Ab=p('
                ',1),Pb=p(''),zb=p('

                ');function Db(s,a){Tt(a,!0);let t=S("checking"),r=S(null),l=S(""),c=S(null),u=S(null),v=[];const f=ce(()=>ub(e(c)));qt(async()=>{v.push(await _a("update-progress",le=>{o(c,le.payload,!0)})),v.push(await _a("update-installed",()=>{o(t,"installed")})),v.push(await _a("update-failed",le=>{o(t,"failed"),o(u,le.payload,!0)})),await _()}),ar(()=>{v.forEach(le=>le())});async function _(){try{let le=await C("get_pending_update");le.update||(le=await C("check_for_update")),o(l,le.current_version,!0),o(r,le.update,!0),o(t,le.update?"available":"up-to-date",!0)}catch(le){o(t,"failed"),o(u,`${le}`)}}async function b(){var le;if((le=e(r))!=null&&le.can_self_update){o(t,"installing"),o(u,null),o(c,{downloaded:0,total:e(r).download_size},!0);try{await C("install_update")}catch($){o(t,"failed"),o(u,`${$}`)}}}async function m(){await C("dismiss_update")}async function h(){var le,$;try{await Uo(($=(le=e(r))==null?void 0:le.release_url)!=null?$:"https://github.com/JRufer/VoxCtrl/releases/latest")}catch(ae){console.error("Could not open the release page:",ae)}}var x=zb(),M=n(x),q=n(M),T=n(q),z=i(T,2),se=n(z),ne=n(se);{var fe=le=>{var $=Be("VoxCtrl is up to date");d(le,$)},Q=le=>{var $=Be();w(()=>{var ae,O;return y($,`Restarting into ${(O=(ae=e(r))==null?void 0:ae.version)!=null?O:""}`)}),d(le,$)},D=le=>{var $=Be();w(()=>{var ae,O;return y($,`Updating to ${(O=(ae=e(r))==null?void 0:ae.version)!=null?O:""}`)}),d(le,$)},I=le=>{var $=Be();w(()=>{var ae;return y($,`VoxCtrl ${(ae=e(r).version)!=null?ae:""} is available`)}),d(le,$)},R=le=>{var $=Be("Checking for updates…");d(le,$)};k(ne,le=>{e(t)==="up-to-date"?le(fe):e(t)==="installed"?le(Q,1):e(t)==="installing"?le(D,2):e(r)?le(I,3):le(R,-1)})}var ge=i(se,2);{var ee=le=>{var $=pb(),ae=n($);w(()=>{var O,X;return y(ae,`You have ${(O=e(r).current_version)!=null?O:""} — ${(X=e(r).version)!=null?X:""} is the latest release.`)}),d(le,$)},j=le=>{var $=fb(),ae=n($);w(()=>{var O;return y(ae,`Version ${(O=e(l))!=null?O:""} is the latest release.`)}),d(le,$)};k(ge,le=>{e(r)&&e(t)!=="up-to-date"?le(ee):e(t)==="up-to-date"&&le(j,1)})}var V=i(q,2);{var oe=le=>{var $=hb();d(le,$)},L=le=>{var $=_b();d(le,$)},B=le=>{var $=xb(),ae=_t($);{var O=de=>{var G=gb(),U=i(n(G),2),te=n(U);w(()=>y(te,e(r).notes)),d(de,G)};k(ae,de=>{e(r).notes&&de(O)})}var X=i(ae,2);{var ve=de=>{var G=mb(),U=n(G);w(()=>y(U,e(r).unsupported_reason)),d(de,G)};k(X,de=>{!e(r).can_self_update&&e(r).unsupported_reason&&de(ve)})}var Me=i(X,2);{var Fe=de=>{var G=bb(),U=n(G);let te;var Y=n(U),he=i(U,2),me=n(he);{var pe=Ge=>{var st=Be();w(()=>{var it,H;return y(st,`Downloading ${(H=(it=e(r).asset_name)!=null?it:"the update")!=null?H:""}…`)}),d(Ge,st)},De=Ge=>{var st=Be();w(it=>{var H;return y(st,`Downloading — ${(H=e(f))!=null?H:""}% of ${it!=null?it:""}`)},[()=>{var it,H;return Ol((H=(it=e(c))==null?void 0:it.total)!=null?H:e(r).download_size)}]),d(Ge,st)};k(me,Ge=>{e(f)===null?Ge(pe):Ge(De,-1)})}w(()=>{te=Te(U,1,"bar svelte-15mrihi",null,te,{indeterminate:e(f)===null}),na(Y,e(f)===null?"":`width: ${e(f)}%`)}),d(de,G)},_e=de=>{var G=yb();d(de,G)},re=de=>{var G=wb(),U=n(G);w(te=>y(U,`VoxCtrl will download ${te!=null?te:""}, verify it against the checksum + the right — fix them here or in Settings, or send us the log and we'll take it from there.`)}),d(U,te)};k(K,U=>{e(q)?U(J):U(Se,-1)})}var De=i(ue,2);pt(De,21,()=>e(D),ft,(U,te)=>{var Y=Hm(),_e=n(Y),me=n(_e),pe=i(_e,2),ze=n(pe);w(()=>{y(me,e(te).k),y(ze,e(te).v)}),d(U,Y)});var le=i(L,2),W=i(n(le),6),ae=n(W);{var O=U=>{var te=$m(),Y=n(te),_e=i(Y,2),me=i(_e,2),pe=n(me),ze=n(pe);let $e;var st=n(ze);{var it=M=>{var C=Wm();d(M,C)};k(st,M=>{e(v)&&M(it)})}var H=i(me,4);w(()=>$e=Te(ze,1,"chk svelte-ujy0nl",null,$e,{on:e(v)})),N("click",Y,Q),N("click",_e,()=>{o(c,!1),_()}),N("click",me,z),N("click",H,()=>o(c,!1)),d(U,te)};k(ae,U=>{e(c)&&U(O)})}var X=i(ae,2),ve=i(n(X),6),Ae=n(ve);let Fe;var he=n(Ae),re=i(Ae,2);{var we=U=>{var te=Gm();d(U,te)};k(re,U=>{e(c)||U(we)})}var Je=i(le,2);{var de=U=>{var te=Ym(),Y=i(n(te),8);N("click",Y,Q),d(U,te)},$=U=>{var te=eb(),Y=n(te),_e=n(Y),me=n(_e),pe=n(me),ze=i(_e,2),$e=n(ze);{var st=Ve=>{var at=Jm();d(Ve,at)};k($e,Ve=>{e(m)&&Ve(st)})}var it=i(Y,2);pt(it,21,()=>e(A),Ve=>Ve.id,(Ve,at)=>{var et=Xm(),rt=n(et),Ee=n(rt),Ge=n(Ee),ct=i(Ee,2),vt=n(ct),nt=i(rt,2),wt=n(nt);w(()=>{var dt;y(Ge,(dt=ds[e(at).step])!=null?dt:"setup"),y(vt,e(at).title),y(wt,e(at).detail)}),d(Ve,et)});var H=i(it,2),M=n(H),C=n(M),ke=i(M,2),Ke=i(ke,2),ye=n(Ke);{var Ie=Ve=>{var at=Zm();d(Ve,at)};k(ye,Ve=>{e(f)&&Ve(Ie)})}var Ye=i(H,2);{var Ze=Ve=>{var at=Qm(),et=n(at);w(()=>y(et,e(h))),d(Ve,at)};k(Ye,Ve=>{e(h)&&Ve(Ze)})}w(()=>{var Ve;y(pe,`problems · ${(Ve=e(A).length)!=null?Ve:""}`),ze.disabled=e(m),y(C,e(u)?"✓ Copied":"Copy diagnostics"),Ke.disabled=e(f)}),N("click",ze,_),N("click",M,ne),N("click",ke,Q),N("click",Ke,fe),d(U,te)};k(Je,U=>{e(q)?U(de):U($,-1)})}w(()=>{ee=Te(ge,1,"tick svelte-ujy0nl",null,ee,{warn:!e(q)}),y(j,e(q)?"✓":"!"),y(oe,e(q)?"// configured":"// finished with problems"),Fe=Te(Ae,1,"tray-btn svelte-ujy0nl",null,Fe,{on:e(c)}),mt(he,"src",jm)}),N("click",Ae,()=>o(c,!e(c))),d(s,I),St(),l()}Qt(["click"]);var sb=p('
                Loading your settings…
                '),nb=p(''),ib=p(''),rb=p('
                '),lb=p('
                '),ob=p(' '),cb=p(' Working…',1),db=p('
                '),vb=p('
                voxctrl // setup
                ');function ub(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",l),r=()=>Zt(Ki,"$configLoaded",l),[l,c]=Ea();let u={};function v($,U){U?u[$]=U:delete u[$]}let f=S(yt({}));function h($,U){var te;((te=e(f)[$])!=null?te:null)!==U&&o(f,{...e(f),[$]:U},!0)}let b=S(!1),m=S(null);const _=ce(()=>Ne.step),x=ce(()=>{var $;return($=e(f)[e(_)])!=null?$:null}),A=ce(()=>e(_)===0?"Get started →":e(_)===5&&!t().tts.enabled?"Skip →":e(_)===ds.length-1?Ne.issues.length>0?"Finish anyway":"Finish":"Continue →");async function q(){if(e(b))return;if(o(m,null),e(_)===ds.length-1){await se();return}const $=u[e(_)];if($){o(b,!0);try{if(!await $())return}catch(U){o(m,`${U}`);return}finally{o(b,!1)}}Ne.goTo(e(_)+1)}function T(){e(b)||(o(m,null),Ne.goTo(e(_)-1))}let D=S(!1);async function se(){if(!e(D)){o(D,!0);try{await E("save_config",{newConfig:t()}),await E("finish_setup_wizard",{openSettings:!1})}catch($){o(m,`Could not finish setup: ${$}`),o(D,!1)}}}async function ne(){await se()}function fe($){Ne.recordIssue({id:`uncaught-${Ne.issues.filter(U=>U.id.startsWith("uncaught-")).length}`,step:Ne.step,title:"Something went wrong during setup that the wizard did not expect.",detail:$})}qt(()=>{const $=te=>{var Y;fe(((Y=te.error)==null?void 0:Y.stack)||te.message||String(te))},U=te=>{var Y,_e;fe(((Y=te.reason)==null?void 0:Y.stack)||((_e=te.reason)==null?void 0:_e.message)||String(te.reason))};return window.addEventListener("error",$),window.addEventListener("unhandledrejection",U),E("wizard_error_test_active").then(te=>{te&&(Ne.recordIssue({id:"simulated-test-failure",step:4,title:"Simulated failure (--simulate-wizard-error) — the live test did not detect any transcribed audio.",detail:"This is a test fixture, not a real failure: it exists so the wizard's error screen (apology, log capture, copy-to-clipboard, email-us) can be verified without needing a genuinely broken hotkey or microphone."}),Ne.visited=ds.length-1,Ne.step=ds.length-1)}).catch(te=>console.error("Wizard: could not check for the error-test flag:",te)),()=>{window.removeEventListener("error",$),window.removeEventListener("unhandledrejection",U)}});var Q=vb(),z=n(Q),I=n(z),L=i(I,8),ge=n(L),ee=i(z,2);let j;var V=n(ee);{var oe=$=>{var U=sb();d($,U)},R=$=>{Yh($)},B=$=>{kg($,{registerGate:v,setBlocker:h})},be=$=>{Lg($,{registerGate:v,setBlocker:h})},Pe=$=>{vm($,{})},ue=$=>{mm($,{})},K=$=>{qm($,{setBlocker:h})},J=$=>{ab($,{})};k(V,$=>{r()?e(_)===0?$(R,1):e(_)===1?$(B,2):e(_)===2?$(be,3):e(_)===3?$(Pe,4):e(_)===4?$(ue,5):e(_)===5?$(K,6):$(J,-1):$(oe)})}var Se=i(ee,2),De=n(Se),le=n(De);{var W=$=>{var U=nb();w(()=>U.disabled=e(b)),N("click",U,T),d($,U)},ae=$=>{var U=ib();w(()=>U.disabled=e(D)),N("click",U,ne),d($,U)};k(le,$=>{e(_)>0?$(W):$(ae,-1)})}var O=i(De,2);pt(O,21,()=>ds,ft,($,U,te)=>{var Y=lb();let _e;var me=n(Y);let pe;var ze=n(me),$e=n(ze),st=i(ze,2),it=n(st),H=i(me,2);{var M=C=>{var ke=rb(),Ke=n(ke);let ye;w(()=>ye=na(Ke,"",ye,{width:te{te{_e=na(Y,"",_e,{flex:teNe.visited||e(b),y($e,C),y(it,e(U))},[()=>teNe.goTo(te)),d($,Y)});var X=i(O,2),ve=n(X);{var Ae=$=>{var U=ob(),te=n(U);w(()=>{mt(U,"title",e(x)),y(te,e(x))}),d($,U)};k(ve,$=>{e(x)&&!e(b)&&$(Ae)})}var Fe=i(ve,2),he=n(Fe);{var re=$=>{var U=cb();d($,U)},we=$=>{var U=Be();w(()=>y(U,e(A))),d($,U)};k(he,$=>{e(b)||e(D)?$(re):$(we,-1)})}var Je=i(Se,2);{var de=$=>{var U=db(),te=n(U),Y=n(te),_e=i(te,2);w(()=>{var me;return y(Y,`⚠ ${(me=e(m))!=null?me:""}`)}),N("click",_e,()=>o(m,null)),d($,U)};k(Je,$=>{e(m)&&$(de)})}w(()=>{var $;mt(I,"src",nr),y(ge,`step ${e(_)+1} / ${($=ds.length)!=null?$:""} · every choice editable later in Settings`),j=Te(ee,1,"vx-screen svelte-18pn5kx",null,j,{"vx-leaving":Ne.leaving}),Fe.disabled=e(b)||e(D)||!!e(x)}),N("click",Fe,q),d(s,Q),St(),c()}Qt(["click"]);function Ol(s){if(!s||s<0)return"";if(s<1024)return`${s} B`;const a=["KB","MB","GB"];let t=s/1024,r=0;for(;t>=1024&&r

                '),_b=p('

                '),hb=p('

                Asking GitHub for the latest release…

                '),gb=p('

                Nothing to install. Check again any time from Settings → General.

                '),mb=p(`

                What's new

                 
                `),bb=p('

                '),yb=p('

                VoxCtrl keeps running until the download is verified. Nothing is replaced before then.

                '),wb=p('

                The new version is installed. VoxCtrl is closing and will start again in a moment.

                '),kb=p('

                '),xb=p('

                Your current version is untouched and still working.

                ',1),Tb=p(" ",1),Sb=p('

                '),Eb=p(''),Cb=p(''),Ab=p(''),Mb=p(''),Pb=p('
                ',1),Db=p(''),zb=p('

                ');function Ib(s,a){Tt(a,!0);let t=S("checking"),r=S(null),l=S(""),c=S(null),u=S(null),v=[];const f=ce(()=>pb(e(c)));qt(async()=>{v.push(await ha("update-progress",le=>{o(c,le.payload,!0)})),v.push(await ha("update-installed",()=>{o(t,"installed")})),v.push(await ha("update-failed",le=>{o(t,"failed"),o(u,le.payload,!0)})),await h()}),ar(()=>{v.forEach(le=>le())});async function h(){try{let le=await E("get_pending_update");le.update||(le=await E("check_for_update")),o(l,le.current_version,!0),o(r,le.update,!0),o(t,le.update?"available":"up-to-date",!0)}catch(le){o(t,"failed"),o(u,`${le}`)}}async function b(){var le;if((le=e(r))!=null&&le.can_self_update){o(t,"installing"),o(u,null),o(c,{downloaded:0,total:e(r).download_size},!0);try{await E("install_update")}catch(W){o(t,"failed"),o(u,`${W}`)}}}async function m(){await E("dismiss_update")}async function _(){var le,W;try{await Uo((W=(le=e(r))==null?void 0:le.release_url)!=null?W:"https://github.com/JRufer/VoxCtrl/releases/latest")}catch(ae){console.error("Could not open the release page:",ae)}}var x=zb(),A=n(x),q=n(A),T=n(q),D=i(T,2),se=n(D),ne=n(se);{var fe=le=>{var W=Be("VoxCtrl is up to date");d(le,W)},Q=le=>{var W=Be();w(()=>{var ae,O;return y(W,`Restarting into ${(O=(ae=e(r))==null?void 0:ae.version)!=null?O:""}`)}),d(le,W)},z=le=>{var W=Be();w(()=>{var ae,O;return y(W,`Updating to ${(O=(ae=e(r))==null?void 0:ae.version)!=null?O:""}`)}),d(le,W)},I=le=>{var W=Be();w(()=>{var ae;return y(W,`VoxCtrl ${(ae=e(r).version)!=null?ae:""} is available`)}),d(le,W)},L=le=>{var W=Be("Checking for updates…");d(le,W)};k(ne,le=>{e(t)==="up-to-date"?le(fe):e(t)==="installed"?le(Q,1):e(t)==="installing"?le(z,2):e(r)?le(I,3):le(L,-1)})}var ge=i(se,2);{var ee=le=>{var W=fb(),ae=n(W);w(()=>{var O,X;return y(ae,`You have ${(O=e(r).current_version)!=null?O:""} — ${(X=e(r).version)!=null?X:""} is the latest release.`)}),d(le,W)},j=le=>{var W=_b(),ae=n(W);w(()=>{var O;return y(ae,`Version ${(O=e(l))!=null?O:""} is the latest release.`)}),d(le,W)};k(ge,le=>{e(r)&&e(t)!=="up-to-date"?le(ee):e(t)==="up-to-date"&&le(j,1)})}var V=i(q,2);{var oe=le=>{var W=hb();d(le,W)},R=le=>{var W=gb();d(le,W)},B=le=>{var W=Tb(),ae=ht(W);{var O=de=>{var $=mb(),U=i(n($),2),te=n(U);w(()=>y(te,e(r).notes)),d(de,$)};k(ae,de=>{e(r).notes&&de(O)})}var X=i(ae,2);{var ve=de=>{var $=bb(),U=n($);w(()=>y(U,e(r).unsupported_reason)),d(de,$)};k(X,de=>{!e(r).can_self_update&&e(r).unsupported_reason&&de(ve)})}var Ae=i(X,2);{var Fe=de=>{var $=yb(),U=n($);let te;var Y=n(U),_e=i(U,2),me=n(_e);{var pe=$e=>{var st=Be();w(()=>{var it,H;return y(st,`Downloading ${(H=(it=e(r).asset_name)!=null?it:"the update")!=null?H:""}…`)}),d($e,st)},ze=$e=>{var st=Be();w(it=>{var H;return y(st,`Downloading — ${(H=e(f))!=null?H:""}% of ${it!=null?it:""}`)},[()=>{var it,H;return Ol((H=(it=e(c))==null?void 0:it.total)!=null?H:e(r).download_size)}]),d($e,st)};k(me,$e=>{e(f)===null?$e(pe):$e(ze,-1)})}w(()=>{te=Te(U,1,"bar svelte-15mrihi",null,te,{indeterminate:e(f)===null}),na(Y,e(f)===null?"":`width: ${e(f)}%`)}),d(de,$)},he=de=>{var $=wb();d(de,$)},re=de=>{var $=kb(),U=n($);w(te=>y(U,`VoxCtrl will download ${te!=null?te:""}, verify it against the checksum GitHub published, replace itself and restart. Your settings, models and voices are not - touched.`),[()=>Ol(e(r).download_size)]),d(de,G)};k(Me,de=>{e(t)==="installing"?de(Fe):e(t)==="installed"?de(_e,1):e(r).can_self_update&&de(re,2)})}var we=i(Me,2);{var Je=de=>{var G=kb(),U=_t(G),te=n(U);w(()=>y(te,e(u))),d(de,G)};k(we,de=>{e(t)==="failed"&&e(u)&&de(Je)})}d(le,$)},be=le=>{var $=Tb(),ae=n($);w(()=>y(ae,e(u))),d(le,$)};k(V,le=>{e(t)==="checking"?le(oe):e(t)==="up-to-date"?le(L,1):e(r)?le(B,2):e(t)==="failed"&&e(u)&&le(be,3)})}var Pe=i(V,2),ue=n(Pe);{var W=le=>{var $=Sb();w(()=>$.disabled=e(t)==="installing"),N("click",$,m),d(le,$)},J=le=>{var $=Cb();N("click",$,m),d(le,$)},Se=le=>{var $=Ab(),ae=_t($),O=n(ae),X=i(ae,2),ve=n(X),Me=i(ve,2);{var Fe=re=>{var we=Eb();N("click",we,b),d(re,we)},_e=re=>{var we=Mb();N("click",we,h),d(re,we)};k(Me,re=>{e(r).can_self_update?re(Fe):re(_e,-1)})}N("click",O,h),N("click",ve,m),d(le,$)},ze=le=>{var $=Pb();N("click",$,m),d(le,$)};k(ue,le=>{e(t)==="installing"||e(t)==="installed"?le(W):e(t)==="up-to-date"?le(J,1):e(r)?le(Se,2):le(ze,-1)})}w(()=>mt(T,"src",nr)),d(s,x),St()}Qt(["click"]);function Ib(s){const a=window.location.pathname;function t(){return a.startsWith("/overlay")?"overlay":a.startsWith("/udev-warning")?"udev-warning":a.startsWith("/wizard")?"wizard":a.startsWith("/update")?"update":"settings"}const r=t();r==="overlay"&&(document.documentElement.classList.add("overlay-window"),document.body.classList.add("overlay-window"));var l=xi(),c=_t(l);{var u=m=>{Jh(m,{})},v=m=>{I_(m,{})},f=m=>{vb(m,{})},_=m=>{Db(m,{})},b=m=>{bh(m,{})};k(c,m=>{r==="overlay"?m(u):r==="udev-warning"?m(v,1):r==="wizard"?m(f,2):r==="update"?m(_,3):m(b,-1)})}d(s,l)}bd(Ib,{target:document.getElementById("app")}); + touched.`),[()=>Ol(e(r).download_size)]),d(de,$)};k(Ae,de=>{e(t)==="installing"?de(Fe):e(t)==="installed"?de(he,1):e(r).can_self_update&&de(re,2)})}var we=i(Ae,2);{var Je=de=>{var $=xb(),U=ht($),te=n(U);w(()=>y(te,e(u))),d(de,$)};k(we,de=>{e(t)==="failed"&&e(u)&&de(Je)})}d(le,W)},be=le=>{var W=Sb(),ae=n(W);w(()=>y(ae,e(u))),d(le,W)};k(V,le=>{e(t)==="checking"?le(oe):e(t)==="up-to-date"?le(R,1):e(r)?le(B,2):e(t)==="failed"&&e(u)&&le(be,3)})}var Pe=i(V,2),ue=n(Pe);{var K=le=>{var W=Eb();w(()=>W.disabled=e(t)==="installing"),N("click",W,m),d(le,W)},J=le=>{var W=Cb();N("click",W,m),d(le,W)},Se=le=>{var W=Pb(),ae=ht(W),O=n(ae),X=i(ae,2),ve=n(X),Ae=i(ve,2);{var Fe=re=>{var we=Ab();N("click",we,b),d(re,we)},he=re=>{var we=Mb();N("click",we,_),d(re,we)};k(Ae,re=>{e(r).can_self_update?re(Fe):re(he,-1)})}N("click",O,_),N("click",ve,m),d(le,W)},De=le=>{var W=Db();N("click",W,m),d(le,W)};k(ue,le=>{e(t)==="installing"||e(t)==="installed"?le(K):e(t)==="up-to-date"?le(J,1):e(r)?le(Se,2):le(De,-1)})}w(()=>mt(T,"src",nr)),d(s,x),St()}Qt(["click"]);function Ob(s){const a=window.location.pathname;function t(){return a.startsWith("/overlay")?"overlay":a.startsWith("/udev-warning")?"udev-warning":a.startsWith("/wizard")?"wizard":a.startsWith("/update")?"update":"settings"}const r=t();r==="overlay"&&(document.documentElement.classList.add("overlay-window"),document.body.classList.add("overlay-window"));var l=xi(),c=ht(l);{var u=m=>{X_(m,{})},v=m=>{Oh(m,{})},f=m=>{ub(m,{})},h=m=>{Ib(m,{})},b=m=>{y_(m,{})};k(c,m=>{r==="overlay"?m(u):r==="udev-warning"?m(v,1):r==="wizard"?m(f,2):r==="update"?m(h,3):m(b,-1)})}d(s,l)}bd(Ob,{target:document.getElementById("app")}); diff --git a/dist/index.html b/dist/index.html index 4f2cf9a4..f4b89bc9 100644 --- a/dist/index.html +++ b/dist/index.html @@ -16,7 +16,7 @@ - + diff --git a/src/lib/Wizard/wizard-data.ts b/src/lib/Wizard/wizard-data.ts index 77bf7c17..fd592db5 100644 --- a/src/lib/Wizard/wizard-data.ts +++ b/src/lib/Wizard/wizard-data.ts @@ -366,10 +366,30 @@ const KEYCAP_LABELS: Record = { KEY_TAB: "Tab", KEY_BACKSPACE: "Backspace", KEY_DELETE: "Delete", + KEY_MINUS: "-", + KEY_EQUAL: "=", + KEY_LEFTBRACE: "[", + KEY_RIGHTBRACE: "]", + KEY_BACKSLASH: "\\", + KEY_SEMICOLON: ";", + KEY_APOSTROPHE: "'", + KEY_GRAVE: "`", + KEY_COMMA: ",", + KEY_DOT: ".", + KEY_SLASH: "/", + KEY_KPPLUS: "Num +", + KEY_KPMINUS: "Num -", + KEY_KPASTERISK: "Num *", + KEY_KPSLASH: "Num /", + KEY_KPDOT: "Num .", + KEY_KPENTER: "Num Enter", + KEY_KPEQUAL: "Num =", }; /** Human label for an evdev key name, for keycaps and summaries. */ export function keycapLabel(evdev: string): string { + const kpDigit = /^KEY_KP(\d)$/.exec(evdev); + if (kpDigit) return `Num ${kpDigit[1]}`; return KEYCAP_LABELS[evdev] ?? evdev.replace(/^KEY_/, ""); } diff --git a/src/lib/keys.ts b/src/lib/keys.ts index f19da91d..ac17a891 100644 --- a/src/lib/keys.ts +++ b/src/lib/keys.ts @@ -2,6 +2,61 @@ // wizard, Settings → Hotkeys and the TTS stop key in Settings → TTS. One copy, // so a combination recorded in one place is the same combination everywhere. +/** + * Physical keys (by `KeyboardEvent.code`) whose evdev name cannot be derived + * from the code's spelling. These are exactly the names the backends report + * for the key — the evdev and X11 backends via the evdev crate, Windows via + * its scan-code table — and the key matcher compares names exactly, so a + * recorder that saved anything else would save a shortcut that never fires. + * + * Mapped by code rather than by the typed character: the code names the + * physical key regardless of keyboard layout or Shift, which is also what the + * backends see. Modifiers keep their side for the same reason. + */ +const CODE_TO_EVDEV: Record = { + ControlLeft: "KEY_LEFTCTRL", + ControlRight: "KEY_RIGHTCTRL", + AltLeft: "KEY_LEFTALT", + AltRight: "KEY_RIGHTALT", + ShiftLeft: "KEY_LEFTSHIFT", + ShiftRight: "KEY_RIGHTSHIFT", + MetaLeft: "KEY_LEFTMETA", + MetaRight: "KEY_RIGHTMETA", + OSLeft: "KEY_LEFTMETA", + OSRight: "KEY_RIGHTMETA", + + Minus: "KEY_MINUS", + Equal: "KEY_EQUAL", + BracketLeft: "KEY_LEFTBRACE", + BracketRight: "KEY_RIGHTBRACE", + Backslash: "KEY_BACKSLASH", + Semicolon: "KEY_SEMICOLON", + Quote: "KEY_APOSTROPHE", + Backquote: "KEY_GRAVE", + Comma: "KEY_COMMA", + Period: "KEY_DOT", + Slash: "KEY_SLASH", + IntlBackslash: "KEY_102ND", + + Numpad0: "KEY_KP0", + Numpad1: "KEY_KP1", + Numpad2: "KEY_KP2", + Numpad3: "KEY_KP3", + Numpad4: "KEY_KP4", + Numpad5: "KEY_KP5", + Numpad6: "KEY_KP6", + Numpad7: "KEY_KP7", + Numpad8: "KEY_KP8", + Numpad9: "KEY_KP9", + NumpadAdd: "KEY_KPPLUS", + NumpadSubtract: "KEY_KPMINUS", + NumpadMultiply: "KEY_KPASTERISK", + NumpadDivide: "KEY_KPSLASH", + NumpadDecimal: "KEY_KPDOT", + NumpadEnter: "KEY_KPENTER", + NumpadEqual: "KEY_KPEQUAL", +}; + /** * Map a browser key event onto the evdev name VoxCtrl stores in bindings.toml. * @@ -10,6 +65,9 @@ * or the binding they made would appear to have changed by itself. */ export function mapBrowserKeyToEvdev(key: string, code: string): string { + const physical = CODE_TO_EVDEV[code]; + if (physical) return physical; + const codeUpper = code.toUpperCase(); if (key === "Control") return "KEY_LEFTCTRL"; if (key === "Alt") return "KEY_LEFTALT"; diff --git a/tests/svelte/wizard-data.test.ts b/tests/svelte/wizard-data.test.ts index dee7f832..39ef6621 100644 --- a/tests/svelte/wizard-data.test.ts +++ b/tests/svelte/wizard-data.test.ts @@ -195,3 +195,43 @@ describe("wizard tables", () => { expect(STEP_LABELS[STEP_LABELS.length - 1]).toBe("Done"); }); }); + +describe("key mapping for keys whose name is not their character", () => { + // The backends report evdev names, and the key matcher compares names + // exactly: a recorder that saved "KEY_." or the left Ctrl for the right one + // saved a shortcut that never fired. + test("punctuation maps by physical key, whatever Shift or the layout typed", () => { + expect(mapBrowserKeyToEvdev(".", "Period")).toBe("KEY_DOT"); + expect(mapBrowserKeyToEvdev(">", "Period")).toBe("KEY_DOT"); + expect(mapBrowserKeyToEvdev(",", "Comma")).toBe("KEY_COMMA"); + expect(mapBrowserKeyToEvdev("/", "Slash")).toBe("KEY_SLASH"); + expect(mapBrowserKeyToEvdev(";", "Semicolon")).toBe("KEY_SEMICOLON"); + expect(mapBrowserKeyToEvdev("'", "Quote")).toBe("KEY_APOSTROPHE"); + expect(mapBrowserKeyToEvdev("`", "Backquote")).toBe("KEY_GRAVE"); + expect(mapBrowserKeyToEvdev("-", "Minus")).toBe("KEY_MINUS"); + expect(mapBrowserKeyToEvdev("=", "Equal")).toBe("KEY_EQUAL"); + expect(mapBrowserKeyToEvdev("[", "BracketLeft")).toBe("KEY_LEFTBRACE"); + expect(mapBrowserKeyToEvdev("]", "BracketRight")).toBe("KEY_RIGHTBRACE"); + expect(mapBrowserKeyToEvdev("\\", "Backslash")).toBe("KEY_BACKSLASH"); + }); + + test("the numpad is not the top row", () => { + expect(mapBrowserKeyToEvdev("1", "Numpad1")).toBe("KEY_KP1"); + expect(mapBrowserKeyToEvdev("+", "NumpadAdd")).toBe("KEY_KPPLUS"); + expect(mapBrowserKeyToEvdev("Enter", "NumpadEnter")).toBe("KEY_KPENTER"); + expect(mapBrowserKeyToEvdev("1", "Digit1")).toBe("KEY_1"); + }); + + test("right-hand modifiers keep their side", () => { + expect(mapBrowserKeyToEvdev("Control", "ControlRight")).toBe("KEY_RIGHTCTRL"); + expect(mapBrowserKeyToEvdev("Alt", "AltRight")).toBe("KEY_RIGHTALT"); + expect(mapBrowserKeyToEvdev("Shift", "ShiftRight")).toBe("KEY_RIGHTSHIFT"); + expect(mapBrowserKeyToEvdev("Meta", "MetaRight")).toBe("KEY_RIGHTMETA"); + }); + + test("keycaps read naturally", () => { + expect(keycapLabel("KEY_DOT")).toBe("."); + expect(keycapLabel("KEY_KP7")).toBe("Num 7"); + expect(keycapLabel("KEY_RIGHTCTRL")).toBe("Ctrl"); + }); +}); From 8efb8e157241482e3dd95e5811f627fb1c5110b5 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 25 Sep 2026 23:47:35 +0000 Subject: [PATCH 12/14] Define the Settings action button once, in tab.css Five components carried their own scoped copy of .btn-action, and the copies had drifted: - .small text was 10px in the command editor and 11px in the tabs; - :disabled faded to 50% with a not-allowed cursor in the command editor, to 60% with a normal cursor in General, and not at all elsewhere, so the shortcut-banner button did not look disabled while it was opening settings. One definition now lives in the shared Settings stylesheet, using the majority 11px and the conventional 50% / not-allowed disabled state. The compiled CSS differs from before only in those two variants. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_015v84hAqhDBdwy7Q49gAWBR --- dist/assets/index-8Jfs7ziK.css | 1 - dist/assets/index-CAhZLQF6.css | 1 + .../{index-BgZOpe3i.js => index-ywDg7bM0.js} | 16 +++++----- dist/index.html | 4 +-- src/lib/Settings/CommandsTab.svelte | 18 ------------ src/lib/Settings/GeneralTab.svelte | 11 ------- src/lib/Settings/HotkeyBackendBanners.svelte | 14 --------- src/lib/Settings/HotkeysTab.svelte | 27 ----------------- src/lib/Settings/TargetEditorModal.svelte | 22 -------------- src/lib/Settings/tab.css | 29 +++++++++++++++++++ 10 files changed, 40 insertions(+), 103 deletions(-) delete mode 100644 dist/assets/index-8Jfs7ziK.css create mode 100644 dist/assets/index-CAhZLQF6.css rename dist/assets/{index-BgZOpe3i.js => index-ywDg7bM0.js} (95%) diff --git a/dist/assets/index-8Jfs7ziK.css b/dist/assets/index-8Jfs7ziK.css deleted file mode 100644 index df0943e5..00000000 --- a/dist/assets/index-8Jfs7ziK.css +++ /dev/null @@ -1 +0,0 @@ -@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial}}}.btn-action.svelte-da8msw{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-da8msw:hover{border-color:var(--text-muted);background-color:var(--border)}.hint.error.svelte-da8msw{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.svelte-da8msw:disabled{cursor:default;opacity:.6}.link.svelte-da8msw{cursor:pointer;border-style:var(--tw-border-style);padding:calc(var(--spacing,.25rem) * 0);color:inherit;text-underline-offset:2px;background-color:#0000;border-width:0;text-decoration-line:underline}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}.custom-select-wrapper.svelte-1heock4{flex:2;width:100%;min-width:190px;position:relative}.custom-select-trigger.svelte-1heock4{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-right:calc(var(--spacing,.25rem) * 9);text-align:left;--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text);--tw-shadow:0 4px 12px var(--tw-shadow-color,#00000026);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));-webkit-user-select:none;user-select:none;background:var(--surface2) url("data:image/svg+xml;utf8,") no-repeat right 12px center;background-size:10px}.custom-select-trigger.svelte-1heock4:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.custom-select-trigger.svelte-1heock4:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 12%,transparent)}}.custom-select-trigger.svelte-1heock4:hover{background-color:var(--color-obsidian-700)}.custom-select-trigger.svelte-1heock4:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-select-trigger.svelte-1heock4:disabled{cursor:not-allowed;opacity:.5;--tw-translate-y:calc(var(--spacing,.25rem) * 0)!important;translate:var(--tw-translate-x) var(--tw-translate-y)!important}.custom-dropdown-menu.svelte-1heock4{z-index:2000;gap:calc(var(--spacing,.25rem) * .5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 1);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex;overflow-y:auto}.custom-dropdown-item.svelte-1heock4{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);text-align:left;color:var(--text);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;background-color:#0000;border-style:none;font-size:13px;transition-duration:.15s}.custom-dropdown-item.svelte-1heock4:hover{background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.svelte-1heock4:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 4%,transparent)}}.custom-dropdown-item.selected.svelte-1heock4{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.selected.svelte-1heock4{background-color:color-mix(in oklab,var(--accent2) 10%,transparent)}}.custom-dropdown-item.selected.svelte-1heock4{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--accent2)}.custom-dropdown-item.svelte-1heock4:disabled{cursor:not-allowed;opacity:.4}.custom-dropdown-item.svelte-1heock4:disabled:hover{background-color:#0000}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-duration:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-leading:initial}}}.model-status-container.svelte-nfi4ak{margin-bottom:calc(var(--spacing,.25rem) * 3);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);min-height:42px;padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);align-items:center;font-size:13px;display:flex}.status-downloaded.svelte-nfi4ak{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-downloading.svelte-nfi4ak{color:var(--accent2)}.status-checking.svelte-nfi4ak{color:var(--text-muted)}.status-missing-wrapper.svelte-nfi4ak{justify-content:space-between;align-items:center;width:100%;display:flex}.status-missing.svelte-nfi4ak{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-download.svelte-nfi4ak{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}.btn-download.svelte-nfi4ak:hover{background-color:var(--accent2)}.field-input-error.svelte-nfi4ak{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.field-input-error.svelte-nfi4ak:focus{border-color:var(--color-red-500,oklch(63.7% .237 25.331));--tw-shadow:0 0 0 2px var(--tw-shadow-color,#ef444426), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field-error-msg.svelte-nfi4ak{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5);color:var(--color-red-400,oklch(70.4% .191 22.216))}.test-row.svelte-nfi4ak{margin-top:calc(var(--spacing,.25rem) * 4);align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-wrap:wrap;display:flex}.btn-test.svelte-nfi4ak{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding-inline:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}@media (hover:hover){.btn-test.svelte-nfi4ak:hover{background-color:var(--accent2)}}.btn-test.svelte-nfi4ak:disabled{cursor:not-allowed;opacity:.5}.status-pill.svelte-nfi4ak{border-radius:var(--radius);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500)}.status-pill.success.svelte-nfi4ak{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-nfi4ak{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 30%,transparent)}}.status-pill.success.svelte-nfi4ak{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-nfi4ak{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.status-pill.success.svelte-nfi4ak{color:var(--color-emerald-300,oklch(84.5% .143 164.978))}.status-pill.error.svelte-nfi4ak{border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-nfi4ak{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 30%,transparent)}}.status-pill.error.svelte-nfi4ak{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-nfi4ak{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 15%,transparent)}}.status-pill.error.svelte-nfi4ak{color:var(--color-red-300,oklch(80.8% .114 19.571))}.discovered-models.svelte-nfi4ak{margin-bottom:calc(var(--spacing,.25rem) * 3);align-items:center;gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}.model-tags.svelte-nfi4ak{align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);flex-wrap:wrap;display:flex}.tag-btn.svelte-nfi4ak{cursor:pointer;border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));border-radius:.25rem}@media (hover:hover){.tag-btn.svelte-nfi4ak:hover{background-color:var(--border);color:var(--color-white,#fff)}}.tag-btn.active.svelte-nfi4ak{border-color:var(--accent);background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.tag-btn.active.svelte-nfi4ak{background-color:color-mix(in oklab,var(--accent) 10%,transparent)}}.tag-btn.active.svelte-nfi4ak{color:var(--accent)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-tracking:initial;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}.val.svelte-1msnq7i{text-align:right;min-width:36px;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.vu-meter-container.svelte-1msnq7i{margin-block:calc(var(--spacing,.25rem) * 1);margin-bottom:calc(var(--spacing,.25rem) * 3);gap:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 1);flex-direction:column;display:flex}.vu-meter-info.svelte-1msnq7i{align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em);text-transform:uppercase;font-size:10px;display:flex}.vu-label.svelte-1msnq7i{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text-muted)}.vu-status-dot.svelte-1msnq7i{height:calc(var(--spacing,.25rem) * 1.5);width:calc(var(--spacing,.25rem) * 1.5);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));background-color:#444}.vu-status-dot.active.svelte-1msnq7i{--tw-shadow:0 0 8px var(--tw-shadow-color,#39ff14);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#39ff14}.vu-status-text.svelte-1msnq7i{color:var(--text);opacity:.7;margin-left:auto}.vu-meter-bar-wrapper.svelte-1msnq7i{box-sizing:border-box;height:calc(var(--spacing,.25rem) * 3.5);background-color:#0006;width:100%;position:relative}@supports (color:color-mix(in lab,red,red)){.vu-meter-bar-wrapper.svelte-1msnq7i{background-color:color-mix(in oklab,var(--color-black,#000) 40%,transparent)}}.vu-meter-bar-wrapper.svelte-1msnq7i{padding:3px}.vu-meter-bar.svelte-1msnq7i{gap:2px;width:100%;height:100%;display:flex;position:relative}.vu-segment.svelte-1msnq7i{background-color:#ffffff0d;flex:1;height:100%}@supports (color:color-mix(in lab,red,red)){.vu-segment.svelte-1msnq7i{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.vu-segment.svelte-1msnq7i{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:50ms;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:50ms;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.vu-segment.active.svelte-1msnq7i{--tw-shadow:0 0 4px var(--tw-shadow-color,#39ff144d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#39ff14}.vu-segment.active.orange.svelte-1msnq7i{--tw-shadow:0 0 4px var(--tw-shadow-color,#ff6d0080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#ff6d00}.vu-peak-marker.svelte-1msnq7i{pointer-events:none;top:calc(var(--spacing,.25rem) * -.5);bottom:calc(var(--spacing,.25rem) * -.5);--tw-shadow:0 0 6px var(--tw-shadow-color,#ffab00);width:2px;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:left;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:50ms;--tw-ease:linear;background-color:#ffab00;transition-duration:50ms;transition-timing-function:linear;position:absolute}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-leading:initial;--tw-tracking:initial}}}.modal-backdrop.svelte-oc07pw{inset:calc(var(--spacing,.25rem) * 0);z-index:1000;background-color:#0009;justify-content:center;align-items:center;display:flex;position:fixed}@supports (color:color-mix(in lab,red,red)){.modal-backdrop.svelte-oc07pw{background-color:color-mix(in oklab,var(--color-black,#000) 60%,transparent)}}.modal-backdrop.svelte-oc07pw{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.target-modal-backdrop.svelte-oc07pw{z-index:1100!important}.modal.svelte-oc07pw{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);width:90%;max-width:500px;max-height:85vh;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex}.modal-header.svelte-oc07pw{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);justify-content:space-between;align-items:center;display:flex}.modal-header.svelte-oc07pw h3:where(.svelte-oc07pw){margin:calc(var(--spacing,.25rem) * 0);--tw-font-weight:var(--font-weight-bold,700);font-size:15px;font-weight:var(--font-weight-bold,700)}.close-btn.svelte-oc07pw{cursor:pointer;--tw-border-style:none;font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));color:var(--text-muted);background-color:#0000;border-style:none}.close-btn.svelte-oc07pw:hover{color:var(--text)}.modal-body.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 3.5);padding:calc(var(--spacing,.25rem) * 5);flex-direction:column;display:flex;overflow-y:auto}.modal-footer.svelte-oc07pw{justify-content:flex-end;gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);display:flex}.morph-section.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 2.5);border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:1px;border-color:var(--border);background-color:#ffffff05;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.morph-section.svelte-oc07pw{background-color:color-mix(in oklab,var(--color-white,#fff) 2%,transparent)}}.morph-section.svelte-oc07pw{padding:calc(var(--spacing,.25rem) * 3)}.morph-section.svelte-oc07pw h5:where(.svelte-oc07pw),.processing-toggles.svelte-oc07pw h5:where(.svelte-oc07pw){margin:calc(var(--spacing,.25rem) * 0);margin-bottom:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);text-transform:uppercase}.processing-toggles.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding-top:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}.checkbox-field.svelte-oc07pw{cursor:pointer;align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted);display:flex}.checkbox-field.svelte-oc07pw input[type=checkbox]:where(.svelte-oc07pw){cursor:pointer}.checkbox-field.svelte-oc07pw:hover{color:var(--text)}.btn-action.svelte-oc07pw{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-oc07pw:hover{border-color:var(--text-muted);background-color:var(--border)}.btn-action.small.svelte-oc07pw{padding:calc(var(--spacing,.25rem) * 1);padding-inline:calc(var(--spacing,.25rem) * 2);font-size:10px}.btn-action.svelte-oc07pw:disabled{cursor:not-allowed;opacity:.5}.chat-actions.svelte-oc07pw{align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.chat-status.svelte-oc07pw{margin-top:calc(var(--spacing,.25rem) * 1.5);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);display:block}.chat-status.ok.svelte-oc07pw{color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.chat-status.bad.svelte-oc07pw{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.primary.svelte-oc07pw{--tw-border-style:none;background-color:var(--accent);color:var(--color-white,#fff);border-style:none}.btn-action.primary.svelte-oc07pw:hover{opacity:.9}.full-width-input.svelte-oc07pw{width:100%!important}textarea.svelte-oc07pw{resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--text);--tw-shadow:inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}textarea.svelte-oc07pw:hover{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){textarea.svelte-oc07pw:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 15%,transparent)}}textarea.svelte-oc07pw:hover{background-color:var(--color-obsidian-900)}textarea.svelte-oc07pw:focus{border-color:var(--accent2);background-color:var(--color-obsidian-950);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field.col.svelte-oc07pw{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;width:100%}.mcp-container.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 1.5);flex-direction:column;display:flex}.field-label-row.svelte-oc07pw{margin-bottom:calc(var(--spacing,.25rem) * .5);justify-content:space-between;align-items:center;width:100%;display:flex}.field-title.svelte-oc07pw{--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text)}.field-tag.svelte-oc07pw{border-style:var(--tw-border-style);border-width:1px;border-color:var(--accent2);border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-oc07pw{border-color:color-mix(in oklab,var(--accent2) 25%,transparent)}}.field-tag.svelte-oc07pw{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-oc07pw{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.field-tag.svelte-oc07pw{padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-leading:1;--tw-font-weight:var(--font-weight-bold,700);font-size:9px;line-height:1;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em);color:var(--accent2);text-transform:uppercase}p.hint.svelte-oc07pw{margin:calc(var(--spacing,.25rem) * 0);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}p.hint.svelte-oc07pw code:where(.svelte-oc07pw){border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);border-radius:.25rem;font-size:10px}.validation-error-msg.svelte-oc07pw{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-red-400,oklch(70.4% .191 22.216));display:block}.longer-display-label.svelte-oc07pw{min-width:255px!important}.animate-fade-in.svelte-oc07pw{animation:.2s cubic-bezier(.16,1,.3,1) fade-in}@keyframes svelte-oc07pw-fade-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-duration:initial;--tw-leading:initial;--tw-font-weight:initial;--tw-ease:initial}}}.backend-banner.svelte-1hl6idm{margin-bottom:calc(var(--spacing,.25rem) * 1);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.backend-banner.svelte-1hl6idm{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.backend-banner.svelte-1hl6idm{padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;transition-duration:.15s}.backend-banner.private.svelte-1hl6idm{border-color:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.backend-banner.private.svelte-1hl6idm{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 25%,transparent)}}.backend-banner.private.svelte-1hl6idm{background-color:#00bb7f0f}@supports (color:color-mix(in lab,red,red)){.backend-banner.private.svelte-1hl6idm{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 6%,transparent)}}.backend-banner.warn.svelte-1hl6idm{border-color:#f99c0040}@supports (color:color-mix(in lab,red,red)){.backend-banner.warn.svelte-1hl6idm{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.backend-banner.warn.svelte-1hl6idm{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.backend-banner.warn.svelte-1hl6idm{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.backend-banner.broken.svelte-1hl6idm{border-color:#fb2c3640}@supports (color:color-mix(in lab,red,red)){.backend-banner.broken.svelte-1hl6idm{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 25%,transparent)}}.backend-banner.broken.svelte-1hl6idm{background-color:#fb2c360f}@supports (color:color-mix(in lab,red,red)){.backend-banner.broken.svelte-1hl6idm{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 6%,transparent)}}.manual-enable-banner.svelte-1hl6idm{margin-bottom:calc(var(--spacing,.25rem) * 1);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0040;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.manual-enable-banner.svelte-1hl6idm{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.manual-enable-banner.svelte-1hl6idm{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.manual-enable-banner.svelte-1hl6idm{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.manual-enable-banner.svelte-1hl6idm{padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;transition-duration:.15s}.banner-toggle.svelte-1hl6idm{cursor:pointer;align-items:center;gap:calc(var(--spacing,.25rem) * 2.5);--tw-border-style:none;width:100%;padding:calc(var(--spacing,.25rem) * 0);text-align:left;color:var(--text);-webkit-user-select:none;user-select:none;background-color:#0000;border-style:none;display:flex}.banner-title.svelte-1hl6idm{--tw-leading:var(--leading-normal,1.5);font-size:12.5px;line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);flex:1}.banner-chevron.svelte-1hl6idm{height:calc(var(--spacing,.25rem) * 4);width:calc(var(--spacing,.25rem) * 4);color:var(--text-muted);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));flex-shrink:0}.banner-chevron.expanded.svelte-1hl6idm{color:var(--text);rotate:180deg}.banner-content.svelte-1hl6idm{margin-top:calc(var(--spacing,.25rem) * 2);width:100%;min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);border-top-style:var(--tw-border-style);border-color:#ffffff0d;border-top-width:1px;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.banner-content.svelte-1hl6idm{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.banner-content.svelte-1hl6idm{padding-top:calc(var(--spacing,.25rem) * 2);padding-left:calc(var(--spacing,.25rem) * 6.5);font-size:12.5px}.backend-icon.svelte-1hl6idm{font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));--tw-leading:1;flex-shrink:0;line-height:1}.backend-detail.svelte-1hl6idm{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.backend-detail.error.svelte-1hl6idm{color:var(--color-red-400,oklch(70.4% .191 22.216))}.manual-enable-actions.svelte-1hl6idm{margin-top:calc(var(--spacing,.25rem) * 1)}.btn-action.svelte-1hl6idm{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-1hl6idm:hover{border-color:var(--text-muted);background-color:var(--border)}.btn-action.primary.svelte-1hl6idm{--tw-border-style:none;background-color:var(--accent);color:var(--color-white,#fff);border-style:none}.btn-action.primary.svelte-1hl6idm:hover{opacity:.9}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-tracking:initial}}}.keys-rejected.svelte-w4d8v7{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3640;display:flex}@supports (color:color-mix(in lab,red,red)){.keys-rejected.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 25%,transparent)}}.keys-rejected.svelte-w4d8v7{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.keys-rejected.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.keys-rejected.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:var(--color-red-300,oklch(80.8% .114 19.571))}.keys-fragile.svelte-w4d8v7{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0040;display:flex}@supports (color:color-mix(in lab,red,red)){.keys-fragile.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.keys-fragile.svelte-w4d8v7{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.keys-fragile.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.keys-fragile.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:var(--color-amber-200,oklch(92.4% .12 95.746))}.keys-accepted.svelte-w4d8v7{color:#5ee9b5e6;font-size:11.5px}@supports (color:color-mix(in lab,red,red)){.keys-accepted.svelte-w4d8v7{color:color-mix(in oklab,var(--color-emerald-300,oklch(84.5% .143 164.978)) 90%,transparent)}}.keys-accepted.svelte-w4d8v7 code:where(.svelte-w4d8v7){background-color:#ffffff0d;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.keys-accepted.svelte-w4d8v7 code:where(.svelte-w4d8v7){background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.keys-accepted.svelte-w4d8v7 code:where(.svelte-w4d8v7){padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace)}.hotkeys-section.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 5);padding-bottom:calc(var(--spacing,.25rem) * 10);flex-direction:column;display:flex}.section-header.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 2);justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 5);display:flex}.description.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.bindings-list.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.binding-item.svelte-w4d8v7{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));background-color:#1a1f2e66;display:flex}.binding-item.svelte-w4d8v7:hover{border-color:var(--accent2);--tw-shadow:0 4px 20px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.binding-item.disabled.svelte-w4d8v7{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.binding-item.disabled.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.binding-item.disabled.svelte-w4d8v7{opacity:.55;background-image:repeating-linear-gradient(-45deg,#0000,#0000 10px,#00000040 10px 20px)}.binding-content.svelte-w4d8v7{min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex}.binding-header-row.svelte-w4d8v7{justify-content:space-between;align-items:center;width:100%;display:flex}.binding-title.svelte-w4d8v7{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.binding-row2.svelte-w4d8v7{justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.binding-targets.svelte-w4d8v7{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.binding-actions.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);justify-content:flex-end;align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);border-top-style:var(--tw-border-style);border-color:#ffffff0d;border-top-width:1px;display:flex}@supports (color:color-mix(in lab,red,red)){.binding-actions.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.binding-actions.svelte-w4d8v7{padding-top:calc(var(--spacing,.25rem) * 2)}.confirm-label.svelte-w4d8v7{color:var(--text-muted);font-size:11px}kbd.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);--tw-shadow:0 1px 0 var(--tw-shadow-color,#0006);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:.25rem}.empty-state.svelte-w4d8v7{border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:2px;border-color:var(--border);background-color:#00000026;flex-direction:column;grid-column:1/-1;justify-content:center;align-items:center;display:flex}@supports (color:color-mix(in lab,red,red)){.empty-state.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-black,#000) 15%,transparent)}}.empty-state.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 10);text-align:center}.empty-icon.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 2);font-size:32px}.empty-state.svelte-w4d8v7 p:where(.svelte-w4d8v7){margin:calc(var(--spacing,.25rem) * 0);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.btn-action.svelte-w4d8v7{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-w4d8v7:hover{border-color:var(--text-muted);background-color:var(--border)}.btn-action.primary.svelte-w4d8v7{--tw-border-style:none;background-color:var(--accent);color:var(--color-white,#fff);border-style:none}.btn-action.primary.svelte-w4d8v7:hover{opacity:.9}.btn-action.small.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 1);padding-inline:calc(var(--spacing,.25rem) * 2);font-size:11px}.btn-action.danger.svelte-w4d8v7{border-color:#ff656833}@supports (color:color-mix(in lab,red,red)){.btn-action.danger.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 20%,transparent)}}.btn-action.danger.svelte-w4d8v7{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.danger.svelte-w4d8v7:hover{border-color:var(--color-red-400,oklch(70.4% .191 22.216));background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.btn-action.danger.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 10%,transparent)}}.btn-add-wide.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 4);cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent2);width:100%;padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-style:none;display:flex}.btn-add-wide.svelte-w4d8v7:hover{--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-add-wide.svelte-w4d8v7:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.badge.svelte-w4d8v7{border-radius:var(--radius-xl,.75rem);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-semibold,600);font-size:10px;font-weight:var(--font-weight-semibold,600);text-transform:uppercase}.warn-note.svelte-w4d8v7{color:var(--accent-amber,#f0b429);font-size:11px;line-height:1.45}.badge.gesture.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.badge.gesture.svelte-w4d8v7{border-color:color-mix(in oklab,var(--accent2) 30%,transparent)}}.badge.gesture.svelte-w4d8v7{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.badge.gesture.svelte-w4d8v7{background-color:color-mix(in oklab,var(--accent2) 15%,transparent)}}.badge.gesture.svelte-w4d8v7{color:var(--accent2)}.badge.openai.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.badge.openai.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 30%,transparent)}}.badge.openai.svelte-w4d8v7{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.badge.openai.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.badge.openai.svelte-w4d8v7{color:var(--color-emerald-200,oklch(90.5% .093 164.15))}.badge.s1-mini.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.badge.s1-mini.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 30%,transparent)}}.badge.s1-mini.svelte-w4d8v7{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.badge.s1-mini.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.badge.s1-mini.svelte-w4d8v7{color:var(--color-cyan-200,oklch(91.7% .08 205.041))}.modal-backdrop.svelte-w4d8v7{inset:calc(var(--spacing,.25rem) * 0);z-index:1000;background-color:#0009;justify-content:center;align-items:center;display:flex;position:fixed}@supports (color:color-mix(in lab,red,red)){.modal-backdrop.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-black,#000) 60%,transparent)}}.modal-backdrop.svelte-w4d8v7{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.modal.svelte-w4d8v7{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);width:90%;max-width:500px;max-height:85vh;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex}.modal-header.svelte-w4d8v7{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);justify-content:space-between;align-items:center;display:flex}.modal-header.svelte-w4d8v7 h3:where(.svelte-w4d8v7){margin:calc(var(--spacing,.25rem) * 0);--tw-font-weight:var(--font-weight-bold,700);font-size:15px;font-weight:var(--font-weight-bold,700)}.close-btn.svelte-w4d8v7{cursor:pointer;--tw-border-style:none;font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));color:var(--text-muted);background-color:#0000;border-style:none}.close-btn.svelte-w4d8v7:hover{color:var(--text)}.modal-body.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 3.5);padding:calc(var(--spacing,.25rem) * 5);flex-direction:column;display:flex;overflow-y:auto}.modal-footer.svelte-w4d8v7{justify-content:flex-end;gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);display:flex}.morph-section.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 2.5);border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:1px;border-color:var(--border);background-color:#ffffff05;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.morph-section.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-white,#fff) 2%,transparent)}}.morph-section.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 3)}.processing-toggles.svelte-w4d8v7 h5:where(.svelte-w4d8v7){margin:calc(var(--spacing,.25rem) * 0);margin-bottom:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);text-transform:uppercase}.processing-toggles.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding-top:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}.checkbox-field.svelte-w4d8v7{cursor:pointer;align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted);display:flex}.checkbox-field.svelte-w4d8v7 input[type=checkbox]:where(.svelte-w4d8v7){cursor:pointer}.checkbox-field.svelte-w4d8v7:hover{color:var(--text)}.btn-add-inline.svelte-w4d8v7{cursor:pointer;--tw-border-style:none;padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));background-color:#0000;border-style:none;border-radius:.25rem}.btn-add-inline.svelte-w4d8v7:hover{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.btn-add-inline.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.btn-add-inline.svelte-w4d8v7:hover{color:var(--color-white,#fff)}.target-selects-list.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;width:100%;display:flex}.target-select-row.svelte-w4d8v7{align-items:center;gap:calc(var(--spacing,.25rem) * 2);width:100%;display:flex}.btn-remove-inline.svelte-w4d8v7{box-sizing:border-box;cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3633;justify-content:center;align-items:center;height:34px;display:flex}@supports (color:color-mix(in lab,red,red)){.btn-remove-inline.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.btn-remove-inline.svelte-w4d8v7{background-color:#fb2c3614}@supports (color:color-mix(in lab,red,red)){.btn-remove-inline.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 8%,transparent)}}.btn-remove-inline.svelte-w4d8v7{padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-red-400,oklch(70.4% .191 22.216));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-remove-inline.svelte-w4d8v7:hover{border-color:var(--color-red-500,oklch(63.7% .237 25.331));background-color:var(--color-red-500,oklch(63.7% .237 25.331));color:var(--color-white,#fff);--tw-shadow:0 2px 8px var(--tw-shadow-color,#ef444440);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.longer-display-label.svelte-w4d8v7{min-width:255px!important}.openai-target-settings.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 2.5);margin-bottom:calc(var(--spacing,.25rem) * 3.5);margin-left:calc(var(--spacing,.25rem) * 2.5);gap:calc(var(--spacing,.25rem) * 2);border-left-style:var(--tw-border-style);border-left-width:2px;border-color:var(--accent);padding-left:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}textarea.svelte-w4d8v7{resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--text);--tw-shadow:inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}textarea.svelte-w4d8v7:hover{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){textarea.svelte-w4d8v7:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 15%,transparent)}}textarea.svelte-w4d8v7:hover{background-color:var(--color-obsidian-900)}textarea.svelte-w4d8v7:focus{border-color:var(--accent2);background-color:var(--color-obsidian-950);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field.col.svelte-w4d8v7{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;width:100%}.field-label-row.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * .5);justify-content:space-between;align-items:center;width:100%;display:flex}.field-title.svelte-w4d8v7{--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text)}.field-tag.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:var(--accent2);border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-w4d8v7{border-color:color-mix(in oklab,var(--accent2) 25%,transparent)}}.field-tag.svelte-w4d8v7{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-w4d8v7{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.field-tag.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-leading:1;--tw-font-weight:var(--font-weight-bold,700);font-size:9px;line-height:1;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em);color:var(--accent2);text-transform:uppercase}p.hint.svelte-w4d8v7{margin:calc(var(--spacing,.25rem) * 0);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}p.hint.svelte-w4d8v7 code:where(.svelte-w4d8v7){border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);border-radius:.25rem;font-size:10px}.validation-error-msg.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-red-400,oklch(70.4% .191 22.216));display:block}.binding-item.has-conflict.svelte-w4d8v7{border-color:#f99c0073!important}@supports (color:color-mix(in lab,red,red)){.binding-item.has-conflict.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 45%,transparent)!important}}.binding-item.active-conflict.svelte-w4d8v7{background-color:#f99c000f;position:relative}@supports (color:color-mix(in lab,red,red)){.binding-item.active-conflict.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.binding-item.active-conflict.svelte-w4d8v7:hover{border-color:#f99c00b3!important}@supports (color:color-mix(in lab,red,red)){.binding-item.active-conflict.svelte-w4d8v7:hover{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 70%,transparent)!important}}.binding-item.active-conflict.svelte-w4d8v7:hover{--tw-shadow:0 4px 20px var(--tw-shadow-color,#fbbf2426);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.binding-title.has-conflict.svelte-w4d8v7{padding-right:75px}.conflict-marker.svelte-w4d8v7{top:calc(var(--spacing,.25rem) * 2.5);right:calc(var(--spacing,.25rem) * 3.5);background-color:var(--color-amber-400,oklch(82.8% .189 84.429));padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-extrabold,800);font-size:9px;font-weight:var(--font-weight-extrabold,800);color:var(--color-neutral-900,oklch(20.5% 0 0));--tw-shadow:0 2px 6px var(--tw-shadow-color,#fbbf2440);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:.25rem;position:absolute}.conflict-alert-banner.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 3);align-items:center;gap:calc(var(--spacing,.25rem) * 2.5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0040;display:flex}@supports (color:color-mix(in lab,red,red)){.conflict-alert-banner.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.conflict-alert-banner.svelte-w4d8v7{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.conflict-alert-banner.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.conflict-alert-banner.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);color:var(--color-amber-400,oklch(82.8% .189 84.429))}.warning-icon.svelte-w4d8v7{font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));flex-shrink:0}.animate-fade-in.svelte-w4d8v7{animation:.2s cubic-bezier(.16,1,.3,1) fade-in}@keyframes svelte-w4d8v7-fade-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}.custom-select-wrapper.svelte-w4d8v7{flex:1;min-width:190px;position:relative}.custom-select-trigger.svelte-w4d8v7{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-right:calc(var(--spacing,.25rem) * 9);text-align:left;--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text);--tw-shadow:0 4px 12px var(--tw-shadow-color,#00000026);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));-webkit-user-select:none;user-select:none;background:var(--surface2) url("data:image/svg+xml;utf8,") no-repeat right 12px center;background-size:10px}.custom-select-trigger.svelte-w4d8v7:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.custom-select-trigger.svelte-w4d8v7:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 12%,transparent)}}.custom-select-trigger.svelte-w4d8v7:hover{background-color:var(--color-obsidian-700)}.custom-select-trigger.svelte-w4d8v7:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-select-backdrop.svelte-w4d8v7{inset:calc(var(--spacing,.25rem) * 0);z-index:199;position:fixed}.custom-dropdown-menu.svelte-w4d8v7{right:calc(var(--spacing,.25rem) * 0);left:calc(var(--spacing,.25rem) * 0);z-index:200;margin-top:calc(var(--spacing,.25rem) * 1);max-height:calc(var(--spacing,.25rem) * 60);gap:calc(var(--spacing,.25rem) * .5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 1);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex;position:absolute;overflow-y:auto}.custom-dropdown-item.svelte-w4d8v7{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);text-align:left;color:var(--text);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;background-color:#0000;border-style:none;font-size:13px;transition-duration:.15s}.custom-dropdown-item.svelte-w4d8v7:hover{background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 4%,transparent)}}.custom-dropdown-item.svelte-w4d8v7:disabled{cursor:not-allowed;opacity:.4}.custom-dropdown-item.svelte-w4d8v7:disabled:hover{background-color:#0000}.custom-dropdown-item.create-new.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f40;margin-top:calc(var(--spacing,.25rem) * 1)!important}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.create-new.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 25%,transparent)}}.custom-dropdown-item.create-new.svelte-w4d8v7{background-color:#002c22cc}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.create-new.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-emerald-950,oklch(26.2% .051 172.552)) 80%,transparent)}}.custom-dropdown-item.create-new.svelte-w4d8v7{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.custom-dropdown-item.create-new.svelte-w4d8v7:hover{background-color:#004e3be6!important}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.create-new.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--color-emerald-900,oklch(37.8% .077 168.94)) 90%,transparent)!important}}.custom-dropdown-item.create-new.svelte-w4d8v7 .plus-icon:where(.svelte-w4d8v7){margin-right:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800);color:var(--color-emerald-300,oklch(84.5% .143 164.978))}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.targets-section.svelte-134kctg{gap:calc(var(--spacing,.25rem) * 5);padding-bottom:calc(var(--spacing,.25rem) * 10);flex-direction:column;display:flex}.section-header.svelte-134kctg{margin-bottom:calc(var(--spacing,.25rem) * 2);justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 5);display:flex}.description.svelte-134kctg{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.usage-note.svelte-134kctg{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.usage-note.svelte-134kctg{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.usage-note.svelte-134kctg{padding:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.usage-note.svelte-134kctg strong:where(.svelte-134kctg){--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.usage-note.svelte-134kctg em:where(.svelte-134kctg){font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);font-style:normal}.bindings-list.svelte-134kctg{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.binding-item.svelte-134kctg{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));background-color:#1a1f2e66;display:flex}.binding-item.svelte-134kctg:hover{border-color:var(--accent2);--tw-shadow:0 4px 20px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.binding-content.svelte-134kctg{min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex}.binding-row2.svelte-134kctg{justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.binding-title.svelte-134kctg{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.badge.svelte-134kctg{border-radius:var(--radius-xl,.75rem);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-semibold,600);font-size:10px;font-weight:var(--font-weight-semibold,600);text-transform:uppercase}.badge.delivery.svelte-134kctg{border-style:var(--tw-border-style);border-width:1px;border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.badge.delivery.svelte-134kctg{border-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 30%,transparent)}}.badge.delivery.svelte-134kctg{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.badge.delivery.svelte-134kctg{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.badge.delivery.svelte-134kctg{color:var(--color-cyan-300,oklch(86.5% .127 207.078))}.binding-targets.svelte-134kctg{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.binding-actions.svelte-134kctg{margin-top:calc(var(--spacing,.25rem) * 1);justify-content:flex-end;align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);border-top-style:var(--tw-border-style);border-color:#ffffff0d;border-top-width:1px;display:flex}@supports (color:color-mix(in lab,red,red)){.binding-actions.svelte-134kctg{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.binding-actions.svelte-134kctg{padding-top:calc(var(--spacing,.25rem) * 2)}.confirm-label.svelte-134kctg{color:var(--text-muted);font-size:11px}.btn-action.svelte-134kctg{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action.svelte-134kctg:hover{border-color:var(--text-muted);background-color:var(--border)}.btn-action.small.svelte-134kctg{padding:calc(var(--spacing,.25rem) * 1);padding-inline:calc(var(--spacing,.25rem) * 2);font-size:11px}.btn-action.danger.svelte-134kctg{border-color:#ff656833}@supports (color:color-mix(in lab,red,red)){.btn-action.danger.svelte-134kctg{border-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 20%,transparent)}}.btn-action.danger.svelte-134kctg{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.danger.svelte-134kctg:hover{border-color:var(--color-red-400,oklch(70.4% .191 22.216));background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.btn-action.danger.svelte-134kctg:hover{background-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 10%,transparent)}}.btn-add-wide.svelte-134kctg{margin-bottom:calc(var(--spacing,.25rem) * 4);cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent2);width:100%;padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-style:none;display:flex}.btn-add-wide.svelte-134kctg:hover{--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-add-wide.svelte-134kctg:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.empty-state.svelte-134kctg{border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:2px;border-color:var(--border);background-color:#00000026;flex-direction:column;grid-column:1/-1;justify-content:center;align-items:center;display:flex}@supports (color:color-mix(in lab,red,red)){.empty-state.svelte-134kctg{background-color:color-mix(in oklab,var(--color-black,#000) 15%,transparent)}}.empty-state.svelte-134kctg{padding:calc(var(--spacing,.25rem) * 10);text-align:center}.empty-icon.svelte-134kctg{margin-bottom:calc(var(--spacing,.25rem) * 2);font-size:32px}.empty-state.svelte-134kctg p:where(.svelte-134kctg){margin:calc(var(--spacing,.25rem) * 0);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-leading:initial}}}.row.svelte-1q9seip{margin-top:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 2);display:flex}.btn-preview.svelte-1q9seip{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-preview.svelte-1q9seip:hover:not(:disabled){background-color:var(--border);color:var(--accent)}.btn-preview.svelte-1q9seip:disabled{cursor:not-allowed;opacity:.4}.idle-minutes-input.svelte-1q9seip{width:calc(var(--spacing,.25rem) * 20);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 2.5);text-align:right;color:var(--text);font-size:13px}.voice-status-container.svelte-1q9seip{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);min-height:42px;padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);align-items:center;font-size:13px;display:flex}.status-downloaded.svelte-1q9seip{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-downloading.svelte-1q9seip{color:var(--accent2)}.status-checking.svelte-1q9seip{color:var(--text-muted)}.status-missing-wrapper.svelte-1q9seip{justify-content:space-between;align-items:center;width:100%;display:flex}.status-missing.svelte-1q9seip{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-download.svelte-1q9seip{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}.btn-download.svelte-1q9seip:hover:not(:disabled){background-color:var(--accent2)}.btn-download.svelte-1q9seip:disabled{cursor:not-allowed;border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);color:var(--text-muted);opacity:.5}.field-input-error.svelte-1q9seip{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.field-input-error.svelte-1q9seip:focus{border-color:var(--color-red-500,oklch(63.7% .237 25.331));--tw-shadow:0 0 0 2px var(--tw-shadow-color,#ef444426), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field-error-msg.svelte-1q9seip{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5);color:var(--color-red-400,oklch(70.4% .191 22.216))}.range-input.svelte-1q9seip{width:100%;accent-color:var(--accent)}.tts-test-row.svelte-1q9seip{justify-content:space-between;align-items:center;width:100%;display:flex}.tts-error-msg.svelte-1q9seip{overflow-wrap:break-word;width:100%}.run-speed-container.svelte-1q9seip{border:1px solid var(--border);border-radius:var(--radius);background:#ffffff05;align-items:center;gap:8px;padding:6px 12px;font-size:12px;font-weight:500;display:flex}.run-speed-label.svelte-1q9seip{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;font-size:10px}.run-speed-value.svelte-1q9seip{color:var(--accent);font-family:JetBrains Mono,monospace;font-weight:600}.run-speed-value.counting.svelte-1q9seip{color:var(--accent2);text-shadow:0 0 8px #38bdf84d}.non-commercial-warning.svelte-1q9seip{margin-bottom:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 1.5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0066;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.non-commercial-warning.svelte-1q9seip{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 40%,transparent)}}.non-commercial-warning.svelte-1q9seip{background-color:#4619014d}@supports (color:color-mix(in lab,red,red)){.non-commercial-warning.svelte-1q9seip{background-color:color-mix(in oklab,var(--color-amber-950,oklch(27.9% .077 45.635)) 30%,transparent)}}.non-commercial-warning.svelte-1q9seip{padding:calc(var(--spacing,.25rem) * 3)}.warning-header.svelte-1q9seip{align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-amber-400,oklch(82.8% .189 84.429));display:flex}.warning-icon.svelte-1q9seip{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)))}.warning-text.svelte-1q9seip{margin:calc(var(--spacing,.25rem) * 0);--tw-leading:var(--leading-relaxed,1.625);max-width:none;font-size:12px;line-height:var(--leading-relaxed,1.625);color:#fee685cc}@supports (color:color-mix(in lab,red,red)){.warning-text.svelte-1q9seip{color:color-mix(in oklab,var(--color-amber-200,oklch(92.4% .12 95.746)) 80%,transparent)}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.hint.svelte-1bvctpo{margin-bottom:calc(var(--spacing,.25rem) * 4);max-width:520px;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-300)}.field.col.svelte-1bvctpo{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1.5);flex-direction:column}textarea.svelte-1bvctpo{resize:vertical;border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;padding:calc(var(--spacing,.25rem) * 2);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--text);border-radius:.25rem;font-size:13px}textarea.invalid.svelte-1bvctpo{border-color:var(--color-red-500,oklch(63.7% .237 25.331));--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){textarea.invalid.svelte-1bvctpo{--tw-ring-color:color-mix(in oklab, var(--color-red-500,oklch(63.7% .237 25.331)) 20%, transparent)}}textarea.locked.svelte-1bvctpo{cursor:not-allowed;background-color:#0003}@supports (color:color-mix(in lab,red,red)){textarea.locked.svelte-1bvctpo{background-color:color-mix(in oklab,var(--color-black,#000) 20%,transparent)}}textarea.locked.svelte-1bvctpo{opacity:.6}.validation-error.svelte-1bvctpo{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-red-400,oklch(70.4% .191 22.216))}.field-hint.svelte-1bvctpo{color:var(--color-obsidian-300);font-size:11px}code.svelte-1bvctpo{background-color:#ffffff0d;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){code.svelte-1bvctpo{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}code.svelte-1bvctpo{padding-inline:calc(var(--spacing,.25rem) * 1);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue)}.action-row.svelte-1bvctpo{margin-top:calc(var(--spacing,.25rem) * 3.5);align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding-top:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}.btn-test.svelte-1bvctpo{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);width:100%;padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-style:none}.btn-test.svelte-1bvctpo:hover:not(:disabled){--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-test.svelte-1bvctpo:active:not(:disabled){--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.btn-test.svelte-1bvctpo:disabled{cursor:not-allowed;opacity:.6}.status-msg.svelte-1bvctpo{text-align:center;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600)}.status-msg.success.svelte-1bvctpo{color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-msg.error.svelte-1bvctpo{color:var(--color-red-400,oklch(70.4% .191 22.216))}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-leading:initial}}}.custom-vocab-input.svelte-1s1a8xn{margin-top:calc(var(--spacing,.25rem) * 2);box-sizing:border-box;resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;min-height:80px;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}.custom-vocab-input.svelte-1s1a8xn:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#4fc3f733);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-vocab-input.svelte-1s1a8xn::placeholder{color:var(--text-muted);opacity:.5}.model-status-container.svelte-1s1a8xn{margin-bottom:calc(var(--spacing,.25rem) * 3);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);min-height:42px;padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);align-items:center;font-size:13px;display:flex}.status-downloaded.svelte-1s1a8xn{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-downloading.svelte-1s1a8xn{color:var(--accent2)}.status-checking.svelte-1s1a8xn{color:var(--text-muted)}.status-missing-wrapper.svelte-1s1a8xn{justify-content:space-between;align-items:center;width:100%;display:flex}.status-missing.svelte-1s1a8xn{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-download.svelte-1s1a8xn{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}.btn-download.svelte-1s1a8xn:hover{background-color:var(--accent2)}.status-pill.svelte-1s1a8xn{border-radius:var(--radius);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500)}.status-pill.success.svelte-1s1a8xn{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-1s1a8xn{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 30%,transparent)}}.status-pill.success.svelte-1s1a8xn{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-1s1a8xn{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.status-pill.success.svelte-1s1a8xn{color:var(--color-emerald-300,oklch(84.5% .143 164.978))}.status-pill.error.svelte-1s1a8xn{border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-1s1a8xn{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 30%,transparent)}}.status-pill.error.svelte-1s1a8xn{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-1s1a8xn{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 15%,transparent)}}.status-pill.error.svelte-1s1a8xn{color:var(--color-red-300,oklch(80.8% .114 19.571))}.status-pill.downloading.svelte-1s1a8xn{border-style:var(--tw-border-style);border-width:1px;border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.status-pill.downloading.svelte-1s1a8xn{border-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 30%,transparent)}}.status-pill.downloading.svelte-1s1a8xn{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.status-pill.downloading.svelte-1s1a8xn{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.status-pill.downloading.svelte-1s1a8xn{color:var(--color-cyan-300,oklch(86.5% .127 207.078))}.field-title-col.svelte-1s1a8xn{margin-right:calc(var(--spacing,.25rem) * 4);flex-direction:column;flex:1;display:flex}.field-title-col.svelte-1s1a8xn span:where(.svelte-1s1a8xn){--tw-font-weight:var(--font-weight-medium,500);font-size:13px;font-weight:var(--font-weight-medium,500);color:var(--color-obsidian-100)}.field-title-col.svelte-1s1a8xn .hint:where(.svelte-1s1a8xn){margin-top:calc(var(--spacing,.25rem) * .5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.s1-mini-note.svelte-1s1a8xn{margin-top:calc(var(--spacing,.25rem) * -1);--tw-font-weight:var(--font-weight-medium,500);font-size:11.5px;font-weight:var(--font-weight-medium,500);color:var(--color-accent-blue);opacity:.9}.disabled-section.svelte-1s1a8xn{pointer-events:none;opacity:.5}.disabled-note.svelte-1s1a8xn{color:var(--color-accent-blue);opacity:.9}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.lede.svelte-7vrdzs{--tw-leading:var(--leading-relaxed,1.625);font-size:13px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.disclosure.svelte-7vrdzs{border-color:#38bdf840}@supports (color:color-mix(in lab,red,red)){.disclosure.svelte-7vrdzs{border-color:color-mix(in oklab,var(--color-accent-blue) 25%,transparent)}}.disclosure.svelte-7vrdzs{background-color:#38bdf80a}.ledger.svelte-7vrdzs{gap:calc(var(--spacing,.25rem) * 4);grid-template-columns:repeat(auto-fit,minmax(240px,1fr));display:grid}.ledger-col.svelte-7vrdzs ul:where(.svelte-7vrdzs){margin-top:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 1.5);--tw-leading:var(--leading-relaxed,1.625);font-size:11.5px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted);flex-direction:column;display:flex}.ledger-col.svelte-7vrdzs li:where(.svelte-7vrdzs){border-left-style:var(--tw-border-style);padding-left:calc(var(--spacing,.25rem) * 3);border-left-width:1px}.ledger-head.svelte-7vrdzs{--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em);text-transform:uppercase}.included.svelte-7vrdzs .ledger-head:where(.svelte-7vrdzs){color:var(--color-accent-green)}.included.svelte-7vrdzs li:where(.svelte-7vrdzs){border-color:#10b9814d}.excluded.svelte-7vrdzs .ledger-head:where(.svelte-7vrdzs){color:#f87171}.excluded.svelte-7vrdzs li:where(.svelte-7vrdzs){border-color:#f871714d}.ledger-col.svelte-7vrdzs strong{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.field-caption.svelte-7vrdzs{--tw-font-weight:var(--font-weight-medium,500);font-size:13px;font-weight:var(--font-weight-medium,500);color:var(--text)}.two-up.svelte-7vrdzs{gap:calc(var(--spacing,.25rem) * 4);grid-template-columns:repeat(auto-fit,minmax(200px,1fr));display:grid}.text-input.svelte-7vrdzs{box-sizing:border-box;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}.text-input.svelte-7vrdzs:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#4fc3f733);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.description.svelte-7vrdzs{resize:vertical;--tw-leading:var(--leading-relaxed,1.625);min-height:150px;line-height:var(--leading-relaxed,1.625)}.counter.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--text-muted);font-size:11px}.counter.short.svelte-7vrdzs{color:#f59e0b}.preview.svelte-7vrdzs{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);width:100%;max-height:340px;padding:calc(var(--spacing,.25rem) * 3);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word;white-space:pre-wrap;color:var(--text-muted);overflow:auto}.actions.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}.btn-primary.svelte-7vrdzs{border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 10px var(--tw-shadow-color,#38bdf840);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-primary.svelte-7vrdzs:hover:not(:disabled){--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 14px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-primary.svelte-7vrdzs:disabled{cursor:not-allowed;opacity:.4;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.btn-secondary.svelte-7vrdzs{border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;flex-shrink:0}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-7vrdzs{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.btn-secondary.svelte-7vrdzs{padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-secondary.svelte-7vrdzs:hover{border-color:#38bdf866}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-7vrdzs:hover{border-color:color-mix(in oklab,var(--color-accent-blue) 40%,transparent)}}.btn-secondary.svelte-7vrdzs:hover{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-7vrdzs:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 8%,transparent)}}.link-button.svelte-7vrdzs{margin-left:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);text-decoration-line:underline}.alert-body.svelte-7vrdzs{gap:calc(var(--spacing,.25rem) * 1.5);flex-direction:column;width:100%;display:flex}.alert-msg.svelte-7vrdzs{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625)}.alert-actions.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-wrap:wrap;display:flex}.ok-alert.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:#10b981;border-radius:var(--radius);background-color:#10b9811a;border:1px solid #10b98140;padding:10px 14px;display:flex}code.svelte-7vrdzs{background-color:var(--color-obsidian-950);color:var(--color-accent-blue);border:1px solid var(--border);border-radius:4px;padding:2px 6px;font-family:monospace;font-size:10px}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-font-weight:initial;--tw-leading:initial;--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial}}}.about-card.svelte-4mufsx{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 5);flex-direction:row!important}.logo.svelte-4mufsx{height:calc(var(--spacing,.25rem) * 16);width:calc(var(--spacing,.25rem) * 16);border-radius:var(--radius-xl,.75rem);object-fit:contain;--tw-drop-shadow-size:drop-shadow(0 4px 24px var(--tw-drop-shadow-color,#38bdf859));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.app-name.svelte-4mufsx{margin-bottom:calc(var(--spacing,.25rem) * 1);font-size:var(--text-2xl,1.5rem);line-height:var(--tw-leading,var(--text-2xl--line-height,calc(2 / 1.5)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700)}.app-version.svelte-4mufsx{margin-bottom:calc(var(--spacing,.25rem) * 2.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}p.svelte-4mufsx{--tw-leading:var(--leading-relaxed,1.625);max-width:400px;font-size:13px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}a.svelte-4mufsx{color:var(--accent2);font-size:13px;text-decoration-line:none}a.svelte-4mufsx:hover{text-decoration-line:underline}.kv.svelte-4mufsx{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding-block:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));justify-content:space-between;display:flex}.kv.svelte-4mufsx span:where(.svelte-4mufsx):first-child{color:var(--text-muted)}.credits-hint.svelte-4mufsx{margin-bottom:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.credits-list.svelte-4mufsx{margin-top:calc(var(--spacing,.25rem) * 1);gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.credit-item.svelte-4mufsx{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding-block:calc(var(--spacing,.25rem) * 1.5);justify-content:space-between;align-items:center;display:flex}.credit-item.svelte-4mufsx:last-child{--tw-border-style:none;border-style:none}.credit-name-link.svelte-4mufsx{--tw-font-weight:var(--font-weight-normal,400);font-size:13px;font-weight:var(--font-weight-normal,400);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));text-decoration-line:none}.credit-name-link.svelte-4mufsx:hover{color:var(--color-accent-blue);text-decoration-line:underline}.credit-license.svelte-4mufsx{border-style:var(--tw-border-style);border-width:1px;border-color:#38bdf826;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.credit-license.svelte-4mufsx{border-color:color-mix(in oklab,var(--color-accent-blue) 15%,transparent)}}.credit-license.svelte-4mufsx{background-color:#38bdf814}@supports (color:color-mix(in lab,red,red)){.credit-license.svelte-4mufsx{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.credit-license.svelte-4mufsx{padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-normal,400);font-size:10px;font-weight:var(--font-weight-normal,400);color:var(--color-accent-blue)}.credit-license.non-commercial.svelte-4mufsx{border-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.credit-license.non-commercial.svelte-4mufsx{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 30%,transparent)}}.credit-license.non-commercial.svelte-4mufsx{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.credit-license.non-commercial.svelte-4mufsx{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.credit-license.non-commercial.svelte-4mufsx{color:var(--color-amber-400,oklch(82.8% .189 84.429))}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}.settings-root.svelte-myrvk6{background-color:var(--bg);width:100vw;height:100vh;color:var(--text);display:flex;overflow:hidden}.sidebar.svelte-myrvk6{z-index:10;border-right-style:var(--tw-border-style);border-right-width:1px;border-color:var(--border);background-color:var(--color-obsidian-900);width:fit-content;min-width:135px;padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * 5);--tw-shadow:4px 0 24px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);flex-direction:column;flex-shrink:0;display:flex}.brand.svelte-myrvk6{margin-bottom:calc(var(--spacing,.25rem) * 4);align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-bottom-style:var(--tw-border-style);border-color:#ffffff08;border-bottom-width:1px;display:flex}@supports (color:color-mix(in lab,red,red)){.brand.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.brand.svelte-myrvk6{padding-inline:calc(var(--spacing,.25rem) * 1);padding-block:calc(var(--spacing,.25rem) * 1.5);padding-bottom:calc(var(--spacing,.25rem) * 4);white-space:nowrap}.brand-logo.svelte-myrvk6{height:calc(var(--spacing,.25rem) * 5);width:calc(var(--spacing,.25rem) * 5);object-fit:contain;--tw-drop-shadow-size:drop-shadow(0 2px 8px var(--tw-drop-shadow-color,#38bdf84d));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);flex-shrink:0;animation:4s ease-in-out infinite floating}@keyframes svelte-myrvk6-floating{0%,to{transform:translateY(0)rotate(0)}50%{transform:translateY(-3px)rotate(3deg)}}.brand-text.svelte-myrvk6{white-space:nowrap;flex-direction:column;display:flex;overflow:hidden}.brand-name.svelte-myrvk6{--tw-leading:1.1;--tw-font-weight:850;--tw-tracking:-.5px;letter-spacing:-.5px;white-space:nowrap;color:var(--color-white,#fff);font-size:15px;font-weight:850;line-height:1.1}.brand-tag.svelte-myrvk6{margin-top:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-bold,700);font-size:7px;font-weight:var(--font-weight-bold,700);--tw-tracking:.12em;letter-spacing:.12em;white-space:nowrap;color:var(--color-accent-blue)}.sidebar-nav.svelte-myrvk6{gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex;overflow-y:auto}.nav-btn.svelte-myrvk6{align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 2);text-align:left;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);white-space:nowrap;color:var(--color-obsidian-300);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));display:flex;position:relative}.nav-btn.svelte-myrvk6:hover{--tw-translate-x:2px;translate:var(--tw-translate-x) var(--tw-translate-y);background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.nav-btn.svelte-myrvk6:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.nav-btn.svelte-myrvk6:hover{color:var(--color-white,#fff)}.nav-btn.active.svelte-myrvk6{--tw-translate-x:2px;translate:var(--tw-translate-x) var(--tw-translate-y);background-color:#38bdf814;scale:1.01}@supports (color:color-mix(in lab,red,red)){.nav-btn.active.svelte-myrvk6{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.nav-btn.active.svelte-myrvk6{color:var(--color-accent-blue)}.nav-btn.svelte-myrvk6:active{--tw-translate-x:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y);scale:.97}.nav-icon.svelte-myrvk6{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.nav-btn.svelte-myrvk6:hover .nav-icon:where(.svelte-myrvk6){rotate:5deg;scale:1.18}.nav-active-pill.svelte-myrvk6{top:15%;right:calc(var(--spacing,.25rem) * 0);background-color:var(--color-accent-blue);--tw-shadow:-2px 0 8px var(--tw-shadow-color,var(--color-accent-blue));width:3px;height:70%;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:99px 0 0 99px;position:absolute}.sidebar-footer.svelte-myrvk6{border-top-style:var(--tw-border-style);border-color:#ffffff08;border-top-width:1px}@supports (color:color-mix(in lab,red,red)){.sidebar-footer.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.sidebar-footer.svelte-myrvk6{padding-top:calc(var(--spacing,.25rem) * 4)}.status-panel.svelte-myrvk6{gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-shadow:inset 0 2px 6px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.25s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.25s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));flex-direction:column;display:flex}.status-panel.recording.svelte-myrvk6{border-color:#38bdf840}@supports (color:color-mix(in lab,red,red)){.status-panel.recording.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-accent-blue) 25%,transparent)}}.status-panel.recording.svelte-myrvk6{--tw-shadow:0 4px 20px var(--tw-shadow-color,#38bdf81a), inset 0 2px 6px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.status-header.svelte-myrvk6{align-items:flex-start;gap:calc(var(--spacing,.25rem) * .5);white-space:nowrap;flex-direction:column;display:flex}.status-indicator.svelte-myrvk6{align-items:center;gap:calc(var(--spacing,.25rem) * 1);white-space:nowrap;display:flex}.status-dot.svelte-myrvk6{background-color:var(--color-obsidian-300);width:5px;height:5px;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-radius:3.40282e38px}.status-panel.recording.svelte-myrvk6 .status-dot:where(.svelte-myrvk6){background-color:var(--color-accent-blue);--tw-shadow:0 0 8px var(--tw-shadow-color,var(--color-accent-blue));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);animation:1.2s infinite heartBeat}.status-panel.speaking.svelte-myrvk6 .status-dot:where(.svelte-myrvk6){background-color:var(--color-accent-green);--tw-shadow:0 0 8px var(--tw-shadow-color,var(--color-accent-green));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@keyframes svelte-myrvk6-heartBeat{0%,to{transform:scale(1)}50%{transform:scale(1.4)}}.status-label.svelte-myrvk6{--tw-font-weight:var(--font-weight-bold,700);font-size:10px;font-weight:var(--font-weight-bold,700);white-space:nowrap;color:var(--color-obsidian-300)}.status-panel.recording.svelte-myrvk6 .status-label:where(.svelte-myrvk6){color:var(--color-accent-blue)}.word-count.svelte-myrvk6{--tw-font-weight:var(--font-weight-semibold,600);font-size:9px;font-weight:var(--font-weight-semibold,600);white-space:nowrap;color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.word-count.svelte-myrvk6{color:color-mix(in oklab,var(--color-white,#fff) 30%,transparent)}}.btn-record.svelte-myrvk6{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#38bdf833;width:100%;position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.btn-record.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-accent-blue) 20%,transparent)}}.btn-record.svelte-myrvk6{background-color:#38bdf814}@supports (color:color-mix(in lab,red,red)){.btn-record.svelte-myrvk6{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.btn-record.svelte-myrvk6{padding-inline:calc(var(--spacing,.25rem) * 1);padding-block:calc(var(--spacing,.25rem) * 1.5);text-align:center;--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);white-space:nowrap;color:var(--color-accent-blue);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf80d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-record.svelte-myrvk6:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);border-color:var(--color-accent-blue);background-color:var(--color-accent-blue);color:var(--color-white,#fff);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf840);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.btn-record.svelte-myrvk6:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y);scale:.97}.btn-record.active.svelte-myrvk6{border-color:var(--color-accent-blue);background-color:var(--color-accent-blue);color:var(--color-white,#fff);--tw-shadow:0 4px 16px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pulse-ring.svelte-myrvk6{pointer-events:none;top:calc(var(--spacing,.25rem) * 0);left:calc(var(--spacing,.25rem) * 0);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-accent-blue);opacity:0;width:100%;height:100%;animation:1.6s ease-out infinite ripple;position:absolute}@keyframes svelte-myrvk6-ripple{0%{opacity:.5;transform:scale(1)}to{opacity:0;transform:scale(1.15,1.3)}}.btn-text.svelte-myrvk6{z-index:2;position:relative}.content-container.svelte-myrvk6{z-index:1;background-color:var(--bg);flex-direction:column;flex:1;display:flex;position:relative;overflow:hidden}.content-container.svelte-myrvk6:has(.modal-backdrop){z-index:100}.tab-content.svelte-myrvk6{z-index:1;flex:1;padding:30px;overflow-y:auto}.floating-save-container.svelte-myrvk6{right:calc(var(--spacing,.25rem) * 6);bottom:calc(var(--spacing,.25rem) * 6);z-index:100;align-items:center;gap:calc(var(--spacing,.25rem) * 3.5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-accent-blue);background-color:var(--color-obsidian-900);padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 4);--tw-shadow:0 10px 30px var(--tw-shadow-color,#0006), 0 0 12px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);animation:.3s cubic-bezier(.175,.885,.32,1.275) forwards popUp;display:flex;position:absolute}@keyframes svelte-myrvk6-popUp{0%{opacity:0;transform:translateY(20px)scale(.9)}to{opacity:1;transform:translateY(0)scale(1)}}.save-hint.svelte-myrvk6{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-300)}.btn-save.svelte-myrvk6{border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 10px var(--tw-shadow-color,#38bdf840);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-save.svelte-myrvk6:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 14px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);scale:1.02}.btn-save.svelte-myrvk6:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y);scale:.97}.card-scene.svelte-1pt4ba2{perspective:900px;pointer-events:none;-webkit-user-select:none;user-select:none}.card.svelte-1pt4ba2{position:relative;width:340px;height:152px;border-radius:16px;overflow:hidden;background:linear-gradient(135deg,#181b24,#0b0d12 55%,#141925);border:1px solid rgba(255,255,255,.12);box-shadow:0 18px 44px #0009;font-family:Outfit,Inter,sans-serif;transform:rotateY(88deg);opacity:0;transition:transform .38s cubic-bezier(.175,.885,.32,1.2),opacity .3s ease,border-color .3s ease}.on.svelte-1pt4ba2 .card:where(.svelte-1pt4ba2){transform:rotateY(0);opacity:1}.card.processing.svelte-1pt4ba2{border-color:#38bdf866}.sheen.svelte-1pt4ba2{position:absolute;top:-20px;bottom:-20px;width:64px;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.06) 50%,transparent 100%);animation:svelte-1pt4ba2-sheen-drift 6.5s linear infinite}@keyframes svelte-1pt4ba2-sheen-drift{0%{left:-70px}to{left:410px}}.chip.svelte-1pt4ba2{position:absolute;left:20px;top:18px;width:38px;height:28px;border-radius:6px;background:linear-gradient(160deg,#f6d27a,#d9a946 55%,#b9842b)}.chip-line.svelte-1pt4ba2{position:absolute;background:#462d0073}.chip-line.h1.svelte-1pt4ba2{left:0;right:0;top:9px;height:1.5px}.chip-line.h2.svelte-1pt4ba2{left:0;right:0;top:18px;height:1.5px}.chip-line.v.svelte-1pt4ba2{top:0;bottom:0;left:18px;width:1.5px}.brand.svelte-1pt4ba2{position:absolute;left:68px;top:16px;color:#f3f4f6;font-size:14px;font-weight:850;letter-spacing:.08em}.brand-sub.svelte-1pt4ba2{position:absolute;left:68px;top:34px;color:#ffffff61;font-size:7.5px;font-weight:800;letter-spacing:.4em}.stamp.svelte-1pt4ba2{position:absolute;right:20px;top:18px;display:inline-flex;align-items:center;gap:5px;height:20px;padding:0 9px;border-radius:5px;border:1px solid rgba(244,63,94,.5);background:#f43f5e14;color:#f43f5e;font-size:8.5px;font-weight:850;letter-spacing:.18em}.initializing.svelte-1pt4ba2 .stamp:where(.svelte-1pt4ba2){border-color:#f59e0b80;background:#f59e0b14;color:#f59e0b}.processing.svelte-1pt4ba2 .stamp:where(.svelte-1pt4ba2){border-color:#38bdf880;background:#38bdf814;color:#38bdf8}.stamp-dot.svelte-1pt4ba2{width:6px;height:6px;border-radius:50%;background:currentColor;animation:svelte-1pt4ba2-stamp-blink 1.15s ease-in-out infinite}@keyframes svelte-1pt4ba2-stamp-blink{0%,to{opacity:.35}50%{opacity:1}}.matrix.svelte-1pt4ba2{position:absolute;left:22px;top:56px;width:296px;height:51px;display:flex;gap:4px}.col.svelte-1pt4ba2{display:flex;flex-direction:column;gap:3px}.dot.svelte-1pt4ba2{width:11px;height:6px;border-radius:2px;opacity:.1;transition:opacity .05s linear}.dot.lit.svelte-1pt4ba2{opacity:.95}.dot.red.svelte-1pt4ba2{background:#f43f5e}.dot.amber.svelte-1pt4ba2{background:#fbbf24}.dot.green.svelte-1pt4ba2{background:#34d399}.processing.svelte-1pt4ba2 .dot:where(.svelte-1pt4ba2){background:#22d3ee}.field-label.svelte-1pt4ba2{position:absolute;left:22px;top:118px;color:#ffffff4d;font-size:7px;font-weight:800;letter-spacing:.36em}.field-value.svelte-1pt4ba2{position:absolute;left:22px;top:128px;max-width:200px;color:#e5e7eb;font-size:11.5px;font-weight:750;letter-spacing:.04em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.card-number.svelte-1pt4ba2{position:absolute;right:22px;top:128px;color:#ffffff38;font-size:11px;font-weight:700;letter-spacing:.18em}.scope.svelte-xjziu1{width:540px;height:124px;background:linear-gradient(180deg,#07140c,#030a07);border:1px solid rgba(74,222,128,.25);border-radius:10px;box-shadow:0 10px 36px #0009,0 0 18px #22c55e24;overflow:hidden;pointer-events:none;-webkit-user-select:none;user-select:none;transform:scaleY(.04);opacity:0;transition:transform .32s cubic-bezier(.175,.885,.32,1.2),opacity .28s ease}.scope.on.svelte-xjziu1{transform:scaleY(1);opacity:1}.scope-inner.svelte-xjziu1{width:100%;height:100%;padding:10px 20px 12px;display:flex;flex-direction:column;gap:8px}.header.svelte-xjziu1{display:flex;align-items:center;gap:8px;height:18px;font-family:Outfit,Inter,sans-serif}.led.svelte-xjziu1{width:7px;height:7px;border-radius:50%;background:#4ade80;box-shadow:0 0 7px #4ade80;animation:svelte-xjziu1-led-blink 1.1s ease-in-out infinite;flex-shrink:0}.initializing.svelte-xjziu1 .led:where(.svelte-xjziu1){background:#f59e0b;box-shadow:0 0 7px #f59e0b}.processing.svelte-xjziu1 .led:where(.svelte-xjziu1){background:#38bdf8;box-shadow:0 0 7px #38bdf8}@keyframes svelte-xjziu1-led-blink{0%,to{opacity:.4}50%{opacity:1}}.title.svelte-xjziu1{color:#bbf7d0;font-size:10px;font-weight:800;letter-spacing:.12em}.subtitle.svelte-xjziu1{color:#bbf7d059;font-size:9px;font-weight:500;letter-spacing:.1em}.spacer.svelte-xjziu1{flex:1}.target-chip.svelte-xjziu1{display:inline-flex;align-items:center;gap:5px;background:#4ade800f;border:1px solid rgba(74,222,128,.3);border-radius:4px;padding:2px 8px}.tgt.svelte-xjziu1{color:#4ade80;font-size:8.5px;font-weight:800;letter-spacing:.1em}.tgt-label.svelte-xjziu1{color:#d1fae5;font-size:8.5px;font-weight:700;letter-spacing:.06em;max-width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stage.svelte-xjziu1{position:relative;flex:1}.grid-h.svelte-xjziu1{position:absolute;left:0;right:0;height:1px;background:#4ade8012}.g1.svelte-xjziu1{top:25%}.g2.svelte-xjziu1{top:50%;background:#4ade8024}.g3.svelte-xjziu1{top:75%}.grid-v.svelte-xjziu1{position:absolute;top:0;bottom:0;width:1px;background:#4ade800d}svg.svelte-xjziu1{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.trace.svelte-xjziu1{fill:none;stroke:#a7f3d0;stroke-width:1.8;vector-effect:non-scaling-stroke}.glow.svelte-xjziu1{fill:none;stroke:#4ade80;stroke-width:6;opacity:.16;vector-effect:non-scaling-stroke}.initializing.svelte-xjziu1 .trace:where(.svelte-xjziu1){stroke:#fcd34d}.initializing.svelte-xjziu1 .glow:where(.svelte-xjziu1){stroke:#f59e0b}.processing.svelte-xjziu1 .trace:where(.svelte-xjziu1){stroke:#7dd3fc}.processing.svelte-xjziu1 .glow:where(.svelte-xjziu1){stroke:#38bdf8}.radar.svelte-13tl5wx{--tone: #ff6b35;--tone-soft: rgba(255, 107, 53, .4);display:flex;align-items:center;gap:24px;pointer-events:none;-webkit-user-select:none;user-select:none}.radar.initializing.svelte-13tl5wx{--tone: #f59e0b;--tone-soft: rgba(245, 158, 11, .4)}.radar.processing.svelte-13tl5wx{--tone: #38bdf8;--tone-soft: rgba(56, 189, 248, .4)}.dial.svelte-13tl5wx{position:relative;width:124px;height:124px;border-radius:50%;background:radial-gradient(circle,#10181c,#06090b 85%,#04070a);border:1.2px solid var(--tone-soft);box-shadow:0 12px 34px #0000008c,0 0 22px color-mix(in srgb,var(--tone) 20%,transparent);overflow:hidden;transform:translateY(30px) scale(.85);opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.25),opacity .28s ease}.on.svelte-13tl5wx .dial:where(.svelte-13tl5wx){transform:translateY(0) scale(1);opacity:1}.range-ring.svelte-13tl5wx{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);border-radius:50%;border:1px solid rgba(255,255,255,.1)}.r1.svelte-13tl5wx{width:92px;height:92px}.r2.svelte-13tl5wx{width:56px;height:56px;border-color:#ffffff24}.axis.svelte-13tl5wx{position:absolute;background:#ffffff12}.axis.h.svelte-13tl5wx{left:0;right:0;top:50%;height:1px}.axis.v.svelte-13tl5wx{top:0;bottom:0;left:50%;width:1px}.sweep.svelte-13tl5wx{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;background:conic-gradient(from 0deg,transparent 0deg,transparent 300deg,color-mix(in srgb,var(--tone) 35%,transparent) 350deg,var(--tone) 360deg);animation:svelte-13tl5wx-sweep-rotate 1.5s linear infinite;opacity:.7}@keyframes svelte-13tl5wx-sweep-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.pulse-ring.svelte-13tl5wx{position:absolute;top:50%;left:50%;width:118px;height:118px;margin:-59px 0 0 -59px;border-radius:50%;border:1.5px solid var(--tone);opacity:0;animation:svelte-13tl5wx-ring-expand 1.4s cubic-bezier(.1,.7,.3,1) infinite}.p2.svelte-13tl5wx{animation-delay:.7s}@keyframes svelte-13tl5wx-ring-expand{0%{transform:scale(.18);opacity:calc(.25 + var(--lvl) * .65)}to{transform:scale(1);opacity:0}}.blip.svelte-13tl5wx{position:absolute;border-radius:50%;background:color-mix(in srgb,var(--tone) 60%,#ffffff);animation:svelte-13tl5wx-blip-flash 1.5s linear infinite}.b1.svelte-13tl5wx{left:88px;top:42px;width:5px;height:5px}.b2.svelte-13tl5wx{left:36px;top:86px;width:4px;height:4px;animation-delay:.55s}@keyframes svelte-13tl5wx-blip-flash{0%{opacity:1}55%{opacity:.05}to{opacity:.05}}.core.svelte-13tl5wx{position:absolute;top:50%;left:50%;width:12px;height:12px;margin:-6px 0 0 -6px;border-radius:50%;background:var(--tone);box-shadow:0 0 14px var(--tone);transform:scale(calc(1 + var(--lvl) * 1.6));transition:transform .05s linear}.plate.svelte-13tl5wx{display:flex;align-items:center;gap:10px;width:200px;height:52px;padding:0 12px;background:#0a0c10f0;border:1px solid rgba(255,255,255,.08);border-radius:10px;position:relative;transform:translate(-22px);opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.25) .06s,opacity .28s ease .06s}.on.svelte-13tl5wx .plate:where(.svelte-13tl5wx){transform:translate(0);opacity:1}.plate.svelte-13tl5wx:after{content:"";position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;border-radius:10px;border:1px solid var(--tone);animation:svelte-13tl5wx-lock-pulse 1.15s ease-in-out infinite;pointer-events:none}@keyframes svelte-13tl5wx-lock-pulse{0%,to{opacity:.25}50%{opacity:.85}}.reticle.svelte-13tl5wx{color:var(--tone);font-size:22px;line-height:1;animation:svelte-13tl5wx-lock-pulse 1.15s ease-in-out infinite}.plate-text.svelte-13tl5wx{display:flex;flex-direction:column;gap:2px;min-width:0;font-family:Outfit,Inter,sans-serif}.caption.svelte-13tl5wx{color:#ffffff59;font-size:7.5px;font-weight:800;letter-spacing:.18em}.label.svelte-13tl5wx{color:#e5e7eb;font-size:12px;font-weight:750;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ocean.svelte-1orgnnz{position:relative;width:380px;height:128px;border-radius:24px;overflow:hidden;background:linear-gradient(180deg,#081220f5,#030912f7);border:1.2px solid rgba(34,211,238,.25);box-shadow:0 14px 40px #0009,0 0 24px #0891b238;pointer-events:none;-webkit-user-select:none;user-select:none;font-family:Outfit,Inter,sans-serif;opacity:0;transform:translateY(16px);transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .3s ease}.ocean.on.svelte-1orgnnz{opacity:1;transform:translateY(0)}.ocean.processing.svelte-1orgnnz{border-color:#38bdf859}.moon.svelte-1orgnnz{position:absolute;top:10px;right:62px;width:22px;height:22px;border-radius:50%;background:#e0f2fed9;box-shadow:0 0 16px #bae6fd99;animation:svelte-1orgnnz-moon-glow 2.4s ease-in-out infinite}@keyframes svelte-1orgnnz-moon-glow{0%,to{opacity:.55}50%{opacity:.8}}.title.svelte-1orgnnz{position:absolute;left:18px;top:12px;color:#bae6fd8c;font-size:9.5px;font-weight:800;letter-spacing:.22em}.subtitle.svelte-1orgnnz{position:absolute;left:18px;top:25px;color:#7dd3fc59;font-size:8px;font-weight:500;letter-spacing:.08em}.water.svelte-1orgnnz{position:absolute;left:0;right:0;top:38px;height:90px;transform:translateY(92px);transition:transform .45s cubic-bezier(.22,1,.36,1)}.on.svelte-1orgnnz .water:where(.svelte-1orgnnz){transform:translateY(0)}svg.svelte-1orgnnz{display:block;width:100%;height:100%}.w1.svelte-1orgnnz{fill:#0284c759;stroke:#0284c733;stroke-width:1}.w2.svelte-1orgnnz{fill:#06b6d473;stroke:#06b6d440;stroke-width:1}.w3.svelte-1orgnnz{fill:#22d3ee99;stroke:#a5f3fc8c;stroke-width:1.5}.processing.svelte-1orgnnz .w1:where(.svelte-1orgnnz){fill:#1e40af66}.processing.svelte-1orgnnz .w2:where(.svelte-1orgnnz){fill:#3b82f673}.processing.svelte-1orgnnz .w3:where(.svelte-1orgnnz){fill:#60a5fa8c;stroke:#93c5fd99}.bubble.svelte-1orgnnz{position:absolute;bottom:-8px;width:5px;height:5px;border-radius:50%;border:1px solid rgba(165,243,252,.7);background:#a5f3fc1f;animation:svelte-1orgnnz-bubble-rise 4.2s linear infinite;opacity:0}@keyframes svelte-1orgnnz-bubble-rise{0%{transform:translateY(0);opacity:0}12%{opacity:.55}85%{opacity:.25}to{transform:translateY(-78px);opacity:0}}.buoy.svelte-1orgnnz{position:absolute;left:50%;transform:translate(-50%);display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 12px 0 10px;border-radius:12px;background:#082f49eb;border:1px solid rgba(125,211,252,.5);opacity:0;transition:opacity .3s ease .2s}.on.svelte-1orgnnz .buoy:where(.svelte-1orgnnz){opacity:1}.buoy-dot.svelte-1orgnnz{width:7px;height:7px;border-radius:50%;background:#22d3ee;animation:svelte-1orgnnz-moon-glow 1.15s ease-in-out infinite;flex-shrink:0}.processing.svelte-1orgnnz .buoy-dot:where(.svelte-1orgnnz){background:#60a5fa}.buoy-label.svelte-1orgnnz{color:#e0f2fe;font-size:10px;font-weight:700;max-width:130px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mono.svelte-12wa5lj{width:190px;height:112px;background:#000;border:1px solid rgba(255,255,255,.16);border-radius:6px;position:relative;font-family:Outfit,Inter,sans-serif;pointer-events:none;-webkit-user-select:none;user-select:none;opacity:0;transition:opacity .28s ease}.mono.on.svelte-12wa5lj{opacity:1}.status.svelte-12wa5lj{position:absolute;left:18px;top:14px;display:flex;align-items:center;gap:6px}.dot.svelte-12wa5lj{width:6px;height:6px;border-radius:3px;border:1px solid rgba(245,245,245,.7);background:transparent}.dot.lit.svelte-12wa5lj{background:#f5f5f5;animation:svelte-12wa5lj-mono-blink 1.2s ease-in-out infinite}.dot.processing.svelte-12wa5lj{animation:svelte-12wa5lj-mono-blink-dim 1.2s ease-in-out infinite}.dot.standby.svelte-12wa5lj{opacity:.35}@keyframes svelte-12wa5lj-mono-blink{0%,to{opacity:.5}50%{opacity:1}}@keyframes svelte-12wa5lj-mono-blink-dim{0%,to{opacity:.3}50%{opacity:1}}.status-text.svelte-12wa5lj{color:#ffffff8c;font-size:8px;font-weight:700;letter-spacing:.25em}.bars.svelte-12wa5lj{position:absolute;left:18px;bottom:28px;width:154px;height:52px;display:flex;align-items:flex-end;justify-content:center;gap:14px}.bar.svelte-12wa5lj{width:12px;background:#f5f5f5;border-radius:6px;opacity:1;transition:height .05s linear,opacity .2s ease}.bar.dim.svelte-12wa5lj{opacity:.3}.bar.processing.svelte-12wa5lj{opacity:.55}.baseline.svelte-12wa5lj{position:absolute;left:18px;bottom:28px;width:154px;height:1px;background:#ffffff1f}.target.svelte-12wa5lj{position:absolute;left:18px;bottom:6px;width:154px;text-align:center;color:#fff6;font-size:8.5px;font-weight:600;letter-spacing:.03em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.spectrum.svelte-194vixl{width:440px;height:132px;background:linear-gradient(160deg,#1b0c2e,#0a0614);border:1px solid rgba(232,121,249,.25);border-radius:16px;box-shadow:0 0 26px #c084fc38;position:relative;overflow:hidden;pointer-events:none;-webkit-user-select:none;user-select:none;transform:scaleY(.04);transform-origin:bottom center;opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .16s ease}.spectrum.on.svelte-194vixl{transform:scaleY(1);opacity:1}.header.svelte-194vixl{position:absolute;left:20px;top:12px;right:20px;height:16px;display:flex;align-items:center;gap:8px;font-family:Outfit,Inter,sans-serif}.led.svelte-194vixl{width:7px;height:7px;border-radius:50%;background:#e879f9;box-shadow:0 0 6px #e879f9;animation:svelte-194vixl-spectrum-blink 1.2s ease-in-out infinite;flex-shrink:0}.led.standby.svelte-194vixl{background:#f59e0b;box-shadow:0 0 6px #f59e0b}.led.processing.svelte-194vixl{background:#38bdf8;box-shadow:0 0 6px #38bdf8}@keyframes svelte-194vixl-spectrum-blink{0%,to{opacity:.4}50%{opacity:1}}.title.svelte-194vixl{color:#f5d0fe;font-size:10px;font-weight:800;letter-spacing:.15em}.subtitle.svelte-194vixl{color:#f5d0fe59;font-size:9px;font-weight:500;letter-spacing:.1em}.spacer.svelte-194vixl{flex:1}.chip.svelte-194vixl{display:inline-flex;align-items:center;gap:5px;background:#e879f914;border:1px solid rgba(232,121,249,.3);border-radius:4px;padding:2px 8px}.tgt.svelte-194vixl{color:#e879f9;font-size:8.5px;font-weight:800;letter-spacing:.1em}.tgt-label.svelte-194vixl{color:#fae8ff;font-size:8.5px;font-weight:700;letter-spacing:.06em;max-width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bars.svelte-194vixl{position:absolute;left:20px;right:20px;bottom:16px;display:flex;gap:6.5px;align-items:flex-end;height:96px}.bar.svelte-194vixl{width:19px;border-radius:3px;background:linear-gradient(180deg,#f0abfc,#c084fc 45%,#38bdf8);transition:height .05s linear}.floor.svelte-194vixl{position:absolute;left:20px;right:20px;bottom:16px;height:1px;background:#e879f926}.terminal.svelte-pvtvge{width:380px;height:130px;background:#0d1b4c;border:1.5px solid rgba(125,211,252,.35);border-radius:8px;box-shadow:0 0 20px #080f3099;overflow:hidden;pointer-events:none;-webkit-user-select:none;user-select:none;transform:scaleY(.04);transform-origin:top center;opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .16s ease}.terminal.on.svelte-pvtvge{transform:scaleY(1);opacity:1}.titlebar.svelte-pvtvge{height:24px;background:#ffffff0f;display:flex;align-items:center;gap:6px;padding:0 12px;font-family:Outfit,Inter,sans-serif}.dot.svelte-pvtvge{width:8px;height:8px;border-radius:50%;background:#ffffff38}.titletext.svelte-pvtvge{color:#e0f2fe8c;font-size:9px;font-weight:700;letter-spacing:.1em}.body.svelte-pvtvge{padding:12px 16px;display:flex;flex-direction:column;gap:8px}.line1.svelte-pvtvge{color:#bae6fdb3;font-size:10px;font-weight:600;font-family:SF Mono,Menlo,Consolas,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.line2.svelte-pvtvge{color:#fff;font-size:11px;font-weight:700;letter-spacing:.05em;font-family:SF Mono,Menlo,Consolas,monospace}.line2.standby.svelte-pvtvge{color:#fcd34d}.line2.processing.svelte-pvtvge{color:#7dd3fc}.line3.svelte-pvtvge{color:#bae6fd73;font-size:9.5px;font-weight:500;font-family:SF Mono,Menlo,Consolas,monospace}.vinyl.svelte-kq5b5i{width:320px;height:132px;background:linear-gradient(180deg,#f7ecd9,#e7d6b8);border:1.5px solid rgba(120,89,53,.35);border-radius:14px;box-shadow:0 0 22px #00000059;position:relative;pointer-events:none;-webkit-user-select:none;user-select:none;transform:translateY(16px);opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .28s ease}.vinyl.on.svelte-kq5b5i{transform:translateY(0);opacity:1}.header.svelte-kq5b5i{position:absolute;left:16px;top:12px;right:16px;height:14px;display:flex;align-items:center;gap:8px;font-family:Outfit,Inter,sans-serif}.vu-label.svelte-kq5b5i{color:#5b4530;font-size:12px;font-weight:900;letter-spacing:.17em}.subtitle.svelte-kq5b5i{color:#5b45308c;font-size:8px;font-weight:700;letter-spacing:.19em}.spacer.svelte-kq5b5i{flex:1}.led.svelte-kq5b5i{width:8px;height:8px;border-radius:50%;background:#dc2626;box-shadow:0 0 6px #dc2626;animation:svelte-kq5b5i-vinyl-blink 1.2s ease-in-out infinite;flex-shrink:0}.led.standby.svelte-kq5b5i{background:#f59e0b;box-shadow:0 0 6px #f59e0b}.led.processing.svelte-kq5b5i{background:#38bdf8;box-shadow:0 0 6px #38bdf8}@keyframes svelte-kq5b5i-vinyl-blink{0%,to{opacity:.4}50%{opacity:1}}.face.svelte-kq5b5i{position:absolute;left:16px;top:30px;width:288px;height:72px;background:#fffcf48c;border:1px solid rgba(120,89,53,.25);border-radius:8px}.tick.svelte-kq5b5i{position:absolute;top:14px;width:1.5px;height:22px;background:#5b453066}.tick.red.svelte-kq5b5i{background:#dc2626;height:30px}.scale-label.svelte-kq5b5i{position:absolute;color:#5b453080;font-size:7px;font-family:Outfit,Inter,sans-serif}.scale-label.red.svelte-kq5b5i{color:#dc2626;font-weight:800}.needle-svg.svelte-kq5b5i{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.needle.svelte-kq5b5i{fill:none;stroke:#292524;stroke-width:2px;vector-effect:non-scaling-stroke}.pivot.svelte-kq5b5i{position:absolute;left:138px;top:64px;width:12px;height:12px;border-radius:50%;background:#292524}.target.svelte-kq5b5i{position:absolute;left:16px;bottom:12px;width:288px;color:#5b4530a6;font-size:9.5px;font-weight:700;font-family:Outfit,Inter,sans-serif;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}html,body,#app{background:transparent!important;background-color:transparent!important;box-shadow:none!important;border:none!important;outline:none!important;overflow:hidden!important;will-change:transform,opacity;backface-visibility:hidden}*:focus{outline:none!important;box-shadow:none!important}.overlay-root.svelte-rmqsd6{width:100%;height:100%;background:transparent!important;display:flex;align-items:center;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;overflow:hidden!important}.overlay-stack.svelte-rmqsd6{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;max-width:100%;max-height:100%;pointer-events:none}.visualizer-container.svelte-rmqsd6{display:flex;align-items:center;justify-content:center;pointer-events:none;min-height:0;flex-shrink:1;overflow:hidden}.system-response-box.svelte-rmqsd6{position:relative;z-index:10;display:flex;align-items:center;gap:10px;height:46px;padding:0 20px;border-radius:23px;font-family:Outfit,Inter,system-ui,sans-serif;opacity:0;transform:translateY(10px);transition:transform .34s cubic-bezier(.175,.885,.32,1.25),opacity .28s ease;pointer-events:none;flex-shrink:0}.system-response-box.on.svelte-rmqsd6{opacity:1;transform:translateY(0)}.system-response-box.speaking.svelte-rmqsd6{background:#042f24f0;border:1.2px solid rgba(16,185,129,.55);box-shadow:0 10px 28px #00000080,0 0 18px #10b98140;color:#a7f3d0}.system-response-box.command.svelte-rmqsd6{background:#1e103cf0;border:1.2px solid rgba(168,85,247,.65);box-shadow:0 10px 28px #00000080,0 0 18px #a855f74d;color:#e9d5ff}.system-response-box.mcp.svelte-rmqsd6{background:#4c0519f0;border:1.2px solid rgba(244,63,94,.55);box-shadow:0 10px 28px #00000080,0 0 18px #f43f5e40;color:#fecdd3}.cmd-icon.svelte-rmqsd6{font-size:16px;line-height:1;color:#c084fc;animation:svelte-rmqsd6-flash 1.5s infinite ease-in-out}.mini-eq.svelte-rmqsd6{display:flex;align-items:center;gap:2.5px;height:22px}.eq-bar.svelte-rmqsd6{width:3px;height:8px;border-radius:1.5px;background:#34d399;animation:svelte-rmqsd6-eq-bounce .8s ease-in-out infinite alternate}@keyframes svelte-rmqsd6-eq-bounce{0%{height:7px}to{height:21px}}.pill-text.svelte-rmqsd6{display:flex;flex-direction:column;gap:1px;min-width:0}.pill-title.svelte-rmqsd6{font-size:10px;font-weight:850;letter-spacing:.15em}.pill-target.svelte-rmqsd6{font-size:8.5px;font-weight:600;opacity:.55;max-width:180px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pulse-dot.svelte-rmqsd6{width:10px;height:10px;background-color:#f43f5e;border-radius:50%;animation:svelte-rmqsd6-flash 1.2s infinite ease-in-out}@keyframes svelte-rmqsd6-flash{0%,to{opacity:.3;transform:scale(.9)}50%{opacity:1;transform:scale(1.15)}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.diagnostic-window.svelte-45v8pc{background-color:var(--color-obsidian-950);width:100vw;height:100vh;padding:calc(var(--spacing,.25rem) * 5);color:var(--text);justify-content:center;align-items:flex-start;display:flex;overflow-y:auto}.modal-card.svelte-45v8pc{width:100%;max-width:520px;animation:.3s cubic-bezier(.175,.885,.32,1.2) forwards scaleUp}.head.svelte-45v8pc{margin-bottom:calc(var(--spacing,.25rem) * 5);align-items:flex-start;gap:calc(var(--spacing,.25rem) * 3);display:flex}.head-icon.svelte-45v8pc{--tw-leading:1;flex-shrink:0;font-size:32px;line-height:1}.title.svelte-45v8pc{font-size:var(--text-xl,1.25rem);line-height:var(--tw-leading,var(--text-xl--line-height,calc(1.75 / 1.25)));--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800);--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em);color:var(--color-white,#fff)}.subtitle.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--color-obsidian-400);font-size:12.5px}.steps.svelte-45v8pc{margin:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 2.5);padding:calc(var(--spacing,.25rem) * 0);flex-direction:column;list-style-type:none;display:flex}.step.svelte-45v8pc{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 3);border-radius:var(--radius-lg,.5rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;display:flex}@supports (color:color-mix(in lab,red,red)){.step.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.step.svelte-45v8pc{padding:calc(var(--spacing,.25rem) * 3)}.step.done.svelte-45v8pc{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.step.done.svelte-45v8pc{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.step.done.svelte-45v8pc{background-color:#0000}.step-icon.svelte-45v8pc{--tw-leading:calc(var(--spacing,.25rem) * 6);font-size:16px;line-height:calc(var(--spacing,.25rem) * 6);flex-shrink:0}.step-body.svelte-45v8pc{min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex}.step-title.svelte-45v8pc{--tw-font-weight:var(--font-weight-bold,700);font-size:13.5px;font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff)}.step-detail.svelte-45v8pc{--tw-leading:var(--leading-relaxed,1.625);font-size:12.5px;line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-300)}.step-detail.svelte-45v8pc code:where(.svelte-45v8pc){background-color:#ffffff0d;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.step-detail.svelte-45v8pc code:where(.svelte-45v8pc){background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.step-detail.svelte-45v8pc code:where(.svelte-45v8pc){padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue)}.warn-note.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.warn-note.svelte-45v8pc{color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.privacy-note.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:#5ee9b5e6}@supports (color:color-mix(in lab,red,red)){.privacy-note.svelte-45v8pc{color:color-mix(in oklab,var(--color-emerald-300,oklch(84.5% .143 164.978)) 90%,transparent)}}.muted.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--color-obsidian-400);font-size:11px}.shortcut-list.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 1.5);padding:calc(var(--spacing,.25rem) * 0);flex-wrap:wrap;list-style-type:none;display:flex}.shortcut-keys.svelte-45v8pc{background-color:#ffffff0d;border-radius:.25rem;display:inline-block}@supports (color:color-mix(in lab,red,red)){.shortcut-keys.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.shortcut-keys.svelte-45v8pc{padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);font-size:11px}.shortcut-list.svelte-45v8pc li.unbound:where(.svelte-45v8pc) .shortcut-keys:where(.svelte-45v8pc){color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.shortcut-list.svelte-45v8pc li.unbound:where(.svelte-45v8pc) .shortcut-keys:where(.svelte-45v8pc){color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.step-actions.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 2);align-items:center;gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}.manual.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#0006}@supports (color:color-mix(in lab,red,red)){.manual.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-black,#000) 40%,transparent)}}.manual.svelte-45v8pc{padding:calc(var(--spacing,.25rem) * 2.5)}.manual.svelte-45v8pc pre:where(.svelte-45v8pc){margin:calc(var(--spacing,.25rem) * 0);max-height:180px;font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);word-break:break-all;white-space:pre-wrap;color:var(--color-obsidian-200);overflow-y:auto}.error-container.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 4);align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3633;border-radius:.25rem;width:100%;display:flex}@supports (color:color-mix(in lab,red,red)){.error-container.svelte-45v8pc{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.error-container.svelte-45v8pc{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.error-container.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.error-container.svelte-45v8pc{padding:calc(var(--spacing,.25rem) * 3);text-align:left;color:var(--color-red-400,oklch(70.4% .191 22.216));font-size:12px}.error-icon.svelte-45v8pc{flex-shrink:0}.error-msg.svelte-45v8pc{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word}.modal-actions.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 5);justify-content:flex-end;display:flex}.btn-primary.svelte-45v8pc{cursor:pointer;border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-bold,700);font-size:12.5px;font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 14px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-primary.svelte-45v8pc:hover:not(:disabled){--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 18px var(--tw-shadow-color,#38bdf873);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-primary.svelte-45v8pc:disabled{cursor:default;opacity:.6;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.btn-secondary.svelte-45v8pc{cursor:pointer;border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-800);padding-inline:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-semibold,600);font-size:12.5px;font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-300);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-secondary.svelte-45v8pc:hover{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-45v8pc:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 10%,transparent)}}.btn-secondary.svelte-45v8pc:hover{background-color:var(--color-obsidian-700);color:var(--color-white,#fff)}.btn-link.svelte-45v8pc{cursor:pointer;border-style:var(--tw-border-style);padding:calc(var(--spacing,.25rem) * 0);--tw-font-weight:var(--font-weight-semibold,600);font-size:12px;font-weight:var(--font-weight-semibold,600);color:var(--color-accent-blue);text-underline-offset:2px;background-color:#0000;border-width:0;text-decoration-line:underline}.loading-container.svelte-45v8pc{justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-direction:column;width:100%;height:100%;display:flex}.loading-label.svelte-45v8pc{text-align:center;--tw-font-weight:var(--font-weight-semibold,600);font-size:13.5px;font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-200)}.hint.svelte-45v8pc{text-align:center;max-width:280px;color:var(--color-obsidian-400);font-size:11.5px}.spinner.svelte-45v8pc{height:calc(var(--spacing,.25rem) * 7);width:calc(var(--spacing,.25rem) * 7);animation:var(--animate-spin,spin 1s linear infinite);border-style:var(--tw-border-style);border-width:2.5px;border-color:#ffffff0d;border-radius:3.40282e38px}@supports (color:color-mix(in lab,red,red)){.spinner.svelte-45v8pc{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.spinner.svelte-45v8pc{border-top-color:var(--color-accent-blue)}@keyframes svelte-45v8pc-scaleUp{0%{opacity:0;transform:scale(.98)}to{opacity:1;transform:none}}.vx-wizard{--vx-bg-0: #0e1116;--vx-bg-1: #14181f;--vx-bg-2: #1a1f28;--vx-bg-3: #232a35;--vx-bg-4: #2d3540;--vx-line: #2a313c;--vx-line-2: #3a4350;--vx-txt-0: #e8edf3;--vx-txt-1: #b6bfcb;--vx-txt-2: #7e8896;--vx-txt-3: #555f6c;--vx-cyan-0: #22d4ef;--vx-cyan-1: #7ae8f8;--vx-cyan-2: #5cc4d8;--vx-cyan-d: #0d8ea3;--vx-cyan-b: rgba(34, 212, 239, .45);--vx-gold-0: #e8a019;--vx-gold-1: #f5c842;--vx-gold-glow: rgba(232, 160, 25, .3);--vx-good: #6ad48a;--vx-warn: #ffb454;--vx-bad: #f4636e;--vx-mono: ui-monospace, "JetBrains Mono", SFMono-Regular, Consolas, monospace;--vx-ease: cubic-bezier(.21, .6, .35, 1);--vx-sel-bg: linear-gradient(180deg, rgba(34, 212, 239, .07), rgba(34, 212, 239, .01)), var(--vx-bg-1);--vx-sel-shadow: 0 18px 40px -20px rgba(34, 212, 239, .35), 0 0 0 1px rgba(34, 212, 239, .15);--vx-panel-shadow: 0 12px 36px rgba(0, 0, 0, .5), 0 0 0 1px var(--vx-line);--vx-btn-shadow: 0 6px 24px rgba(34, 212, 239, .25), 0 0 0 1px rgba(34, 212, 239, .4) inset;color:var(--vx-txt-0);background:var(--vx-bg-0)}.vx-wizard .vx-eyebrow{font-family:var(--vx-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--vx-cyan-2)}.vx-wizard .vx-label{font-family:var(--vx-mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--vx-txt-3)}.vx-wizard h2.vx-title{margin:8px 0 6px;font-size:30px;letter-spacing:-.03em;line-height:1.05;font-weight:600}.vx-wizard p.vx-lede{margin:0;font-size:14px;line-height:1.5;color:var(--vx-txt-1)}.vx-wizard p.vx-lede b{color:var(--vx-txt-0);font-weight:600}.vx-wizard .vx-card{border:1px solid var(--vx-line);border-radius:14px;background:var(--vx-bg-1);cursor:pointer;text-align:left;color:inherit;font:inherit;transition:border-color .28s var(--vx-ease),background .28s var(--vx-ease),box-shadow .28s var(--vx-ease)}.vx-wizard .vx-card:hover:not(.vx-on){border-color:var(--vx-line-2)}.vx-wizard .vx-card.vx-on{border-color:var(--vx-cyan-b);background:var(--vx-sel-bg);box-shadow:var(--vx-sel-shadow)}.vx-wizard .vx-check{width:24px;height:24px;flex:none;border-radius:50%;border:1px solid var(--vx-line-2);background:transparent;display:grid;place-items:center;font-family:var(--vx-mono);font-size:12px;color:#00222a;transition:all .25s}.vx-wizard .vx-card.vx-on .vx-check{border-color:var(--vx-cyan-0);background:var(--vx-cyan-0)}.vx-wizard .vx-check>span{opacity:0;transition:opacity .2s}.vx-wizard .vx-card.vx-on .vx-check>span{opacity:1}.vx-wizard .vx-btn{height:44px;padding:0 18px;border-radius:10px;border:1px solid var(--vx-line);background:#ffffff08;color:var(--vx-txt-0);font:inherit;font-size:13.5px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:8px;transition:all .2s}.vx-wizard .vx-btn:hover:not(:disabled){border-color:var(--vx-line-2);background:#ffffff0f}.vx-wizard .vx-btn.vx-primary{border-color:#fff3;background:linear-gradient(180deg,var(--vx-cyan-0),var(--vx-cyan-d));color:#00222a;box-shadow:var(--vx-btn-shadow)}.vx-wizard .vx-btn.vx-primary:hover:not(:disabled){background:linear-gradient(180deg,var(--vx-cyan-1),var(--vx-cyan-0))}.vx-wizard .vx-btn.vx-ghost{border-color:transparent;background:transparent;color:var(--vx-txt-1)}.vx-wizard .vx-btn.vx-ghost:hover:not(:disabled){background:#ffffff0a;color:var(--vx-txt-0)}.vx-wizard .vx-btn:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}.vx-wizard .vx-meter{height:8px;border-radius:999px;background:var(--vx-bg-4);overflow:hidden}.vx-wizard .vx-meter>div{height:100%;border-radius:999px;transition:width .6s var(--vx-ease),background .4s}.vx-wizard .vx-keycap{min-width:56px;height:56px;padding:0 16px;border-radius:12px;display:grid;place-items:center;font-family:var(--vx-mono);font-size:16px;font-weight:500;background:linear-gradient(180deg,var(--vx-bg-3),var(--vx-bg-2));color:var(--vx-txt-0);border:1px solid var(--vx-line-2);box-shadow:0 4px 0 var(--vx-bg-0),inset 0 1px #ffffff14;transition:all .25s}.vx-wizard .vx-keycap.vx-hot{background:linear-gradient(180deg,#22d4ef40,#22d4ef14);color:var(--vx-cyan-1);border-color:var(--vx-cyan-b);box-shadow:0 4px #0d8ea399,inset 0 1px #ffffff14}.vx-wizard .vx-plus{font-family:var(--vx-mono);color:var(--vx-txt-3);font-size:18px}.vx-wizard .vx-pill{display:inline-flex;align-items:center;gap:8px;padding:7px 13px;border-radius:999px;border:1px solid var(--vx-line);background:#ffffff05;font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-txt-2)}.vx-wizard .vx-pill.vx-ok{border-color:#6ad48a66;color:var(--vx-good)}.vx-wizard .vx-pill.vx-busy{border-color:var(--vx-cyan-b);color:var(--vx-cyan-1)}.vx-wizard .vx-pill.vx-err{border-color:#f4636e73;color:var(--vx-bad)}@keyframes vxPulse{0%,to{opacity:1}50%{opacity:.35}}@keyframes vxPop{0%{opacity:0;transform:translateY(6px) scale(.98)}to{opacity:1;transform:none}}@keyframes vxRing{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:none}}@keyframes vxScan{0%{transform:translate(-100%)}to{transform:translate(100%)}}@keyframes vxBar{0%,to{transform:scaleY(.35)}50%{transform:scaleY(1)}}@keyframes vxSpin{to{transform:rotate(360deg)}}.vx-wizard .vx-spinner{width:13px;height:13px;border-radius:50%;border:2px solid rgba(34,212,239,.25);border-top-color:var(--vx-cyan-0);animation:vxSpin .7s linear infinite;flex:none}.welcome.svelte-1gicu21{flex:1;min-height:0;display:grid;grid-template-columns:1.1fr 1fr;gap:48px;align-items:center}.halo.svelte-1gicu21{position:relative;width:96px;height:96px;display:grid;place-items:center;margin-bottom:22px}.ring.svelte-1gicu21{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;border:1px solid rgba(34,212,239,.25);animation:vxPulse 2.4s infinite}.ring.inner.svelte-1gicu21{top:12px;right:12px;bottom:12px;left:12px;border-color:#22d4ef26;animation-delay:.6s}.halo.svelte-1gicu21 img:where(.svelte-1gicu21){width:52px;height:52px;border-radius:12px;box-shadow:0 0 16px #22d4ef66}h1.svelte-1gicu21{margin:12px 0 14px;font-size:clamp(30px,4vw,50px);line-height:1.02;letter-spacing:-.035em;font-weight:600}h1.svelte-1gicu21 span:where(.svelte-1gicu21){color:var(--vx-gold-1)}.intro.svelte-1gicu21 p:where(.svelte-1gicu21){margin:0;max-width:560px;font-size:15px;line-height:1.55;color:var(--vx-txt-1)}.reassure.svelte-1gicu21{margin-top:22px;display:inline-flex;align-items:center;gap:10px;padding:9px 14px;border:1px solid rgba(34,212,239,.25);border-radius:999px;background:#22d4ef0a;font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-cyan-2)}.reassure.svelte-1gicu21 span:where(.svelte-1gicu21){color:var(--vx-gold-1)}.cards.svelte-1gicu21{display:grid;grid-template-columns:1fr 1fr;gap:12px}.step-card.svelte-1gicu21{padding:16px 18px;background:linear-gradient(180deg,#ffffff05,#fff0);cursor:default}.head.svelte-1gicu21{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.glyph.svelte-1gicu21{font-family:var(--vx-mono);font-size:20px;color:var(--vx-cyan-1)}.num.svelte-1gicu21{font-family:var(--vx-mono);font-size:11px;color:var(--vx-txt-3)}.title.svelte-1gicu21{font-weight:600;font-size:14.5px;margin-bottom:4px}.desc.svelte-1gicu21{font-size:12.5px;line-height:1.45;color:var(--vx-txt-2)}@media (max-width: 1000px){.welcome.svelte-1gicu21{grid-template-columns:1fr;gap:24px;align-content:start}}.modal-backdrop.svelte-1c9i6zy{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b8;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);display:flex;align-items:center;justify-content:center;z-index:1200;padding:20px;animation:svelte-1c9i6zy-fadeIn .2s ease-out}@keyframes svelte-1c9i6zy-fadeIn{0%{opacity:0}to{opacity:1}}.modal-card.svelte-1c9i6zy{width:100%;max-width:580px;max-height:90vh;background:var(--vx-bg-1);border:1px solid var(--vx-line-2);border-radius:18px;box-shadow:0 24px 60px #000000b3,0 0 0 1px #22d4ef33;display:flex;flex-direction:column;overflow:hidden;color:var(--vx-txt-0)}.modal-header.svelte-1c9i6zy{display:flex;align-items:center;justify-content:space-between;padding:16px 22px;border-bottom:1px solid var(--vx-line);background:var(--vx-bg-2)}.modal-title-row.svelte-1c9i6zy{display:flex;align-items:center;gap:10px}.modal-glyph.svelte-1c9i6zy{font-size:20px}.modal-header.svelte-1c9i6zy h3:where(.svelte-1c9i6zy){margin:0;font-size:16px;font-weight:600;letter-spacing:-.01em;color:var(--vx-txt-0)}.close-btn.svelte-1c9i6zy{background:transparent;border:none;color:var(--vx-txt-2);font-size:16px;cursor:pointer;padding:6px;border-radius:8px;transition:all .2s;line-height:1}.close-btn.svelte-1c9i6zy:hover{color:var(--vx-txt-0);background:#ffffff14}.modal-body.svelte-1c9i6zy{padding:20px 22px;overflow-y:auto;display:flex;flex-direction:column;gap:16px}.modal-hint.svelte-1c9i6zy{margin:0;font-size:12.5px;line-height:1.5;color:var(--vx-txt-2)}.modal-hint.svelte-1c9i6zy code:where(.svelte-1c9i6zy),.field-hint.svelte-1c9i6zy code:where(.svelte-1c9i6zy){background:var(--vx-bg-4);color:var(--vx-cyan-1);padding:2px 5px;border-radius:4px;font-family:var(--vx-mono);font-size:11px;border:1px solid var(--vx-line)}.field-group.svelte-1c9i6zy{display:flex;flex-direction:column;gap:12px;background:#ffffff05;border:1px solid var(--vx-line);border-radius:14px;padding:16px 18px}.field.svelte-1c9i6zy{display:flex;flex-direction:column;gap:6px}.field-title.svelte-1c9i6zy{font-size:12.5px;font-weight:500;color:var(--vx-txt-1)}.vx-input.svelte-1c9i6zy{width:100%;height:38px;padding:0 12px;background:var(--vx-bg-0);border:1px solid var(--vx-line-2);border-radius:8px;color:var(--vx-txt-0);font-family:inherit;font-size:13px;outline:none;transition:border-color .2s,box-shadow .2s;box-sizing:border-box}.vx-input.svelte-1c9i6zy:focus{border-color:var(--vx-cyan-0);box-shadow:0 0 0 2px var(--vx-cyan-b)}.vx-input.svelte-1c9i6zy::placeholder{color:var(--vx-txt-3)}.field-hint.svelte-1c9i6zy{margin:-4px 0 4px;font-size:11px;line-height:1.45;color:var(--vx-txt-3)}.discovered-models.svelte-1c9i6zy{display:flex;flex-direction:column;gap:6px;margin-top:-4px}.model-tags.svelte-1c9i6zy{display:flex;flex-wrap:wrap;gap:6px}.tag-btn.svelte-1c9i6zy{font-size:11.5px;padding:3px 9px;border-radius:6px;background:var(--vx-bg-3);border:1px solid var(--vx-line-2);color:var(--vx-txt-2);cursor:pointer;transition:all .2s}.tag-btn.svelte-1c9i6zy:hover{color:var(--vx-txt-0);border-color:var(--vx-cyan-0)}.tag-btn.active.svelte-1c9i6zy{background:#22d4ef26;border-color:var(--vx-cyan-0);color:var(--vx-cyan-1);font-weight:600}.test-row.svelte-1c9i6zy{display:flex;align-items:center;gap:12px;margin-top:8px;flex-wrap:wrap}.btn-test.svelte-1c9i6zy{height:36px;padding:0 16px;border-radius:8px;background:var(--vx-bg-4);border:1px solid var(--vx-line-2);color:var(--vx-txt-0);font-size:12.5px;font-weight:600;cursor:pointer;transition:all .2s;display:inline-flex;align-items:center;gap:6px}.btn-test.svelte-1c9i6zy:hover:not(:disabled){background:var(--vx-line-2);border-color:var(--vx-cyan-0)}.btn-test.svelte-1c9i6zy:disabled{opacity:.5;cursor:not-allowed}.status-pill.svelte-1c9i6zy{padding:6px 12px;border-radius:8px;font-size:11.5px;font-weight:500;line-height:1.35;word-break:break-word;max-width:100%}.status-pill.success.svelte-1c9i6zy{background:#6ad48a26;color:var(--vx-good);border:1px solid rgba(106,212,138,.3)}.status-pill.error.svelte-1c9i6zy{background:#f4636e26;color:var(--vx-bad);border:1px solid rgba(244,99,110,.3)}.modal-footer.svelte-1c9i6zy{padding:14px 22px;border-top:1px solid var(--vx-line);background:var(--vx-bg-2);display:flex;align-items:center;justify-content:space-between;gap:12px}.footer-status.svelte-1c9i6zy{font-size:12px}.status-msg.ok.svelte-1c9i6zy{color:var(--vx-good);font-weight:500}.status-msg.warn.svelte-1c9i6zy{color:var(--vx-warn)}.footer-actions.svelte-1c9i6zy{display:flex;gap:10px}.engine-step.svelte-xv54mf{flex:1;min-height:0;display:flex;flex-direction:column;gap:10px}.head.svelte-xv54mf{display:flex;gap:20px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-xv54mf{max-width:760px;min-width:0}.copy.svelte-xv54mf .vx-title:where(.svelte-xv54mf){margin:4px 0 3px;font-size:26px}.copy.svelte-xv54mf .vx-lede:where(.svelte-xv54mf){margin:2px 0 0;font-size:13px;line-height:1.4}.gpu-toggle.svelte-xv54mf{flex:none;width:380px;display:flex;align-items:center;gap:12px;padding:8px 14px}.gpu-toggle.svelte-xv54mf:disabled{opacity:.55;cursor:default}.switch.svelte-xv54mf{width:44px;height:26px;border-radius:999px;position:relative;flex:none;background:var(--vx-bg-4);border:1px solid var(--vx-line-2);transition:background .3s}.switch.on.svelte-xv54mf{background:var(--vx-cyan-0)}.knob.svelte-xv54mf{position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 2px 6px #0006;transition:left .28s var(--vx-ease)}.switch.on.svelte-xv54mf .knob:where(.svelte-xv54mf){left:20px}.gpu-copy.svelte-xv54mf{display:block}.gpu-title.svelte-xv54mf{display:flex;align-items:center;gap:6px;font-weight:600;font-size:13px}.gpu-title.svelte-xv54mf .glyph:where(.svelte-xv54mf){font-family:var(--vx-mono);color:var(--vx-cyan-1)}.state.svelte-xv54mf{font-family:var(--vx-mono);font-size:10px;letter-spacing:.1em;color:var(--vx-txt-3);transition:color .3s}.state.on.svelte-xv54mf{color:var(--vx-cyan-1)}.gpu-desc.svelte-xv54mf{display:block;font-size:11px;color:var(--vx-txt-2);margin-top:2px;line-height:1.35}.engines.svelte-xv54mf{flex:1;min-height:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.engine-card.svelte-xv54mf{position:relative;padding:14px 18px;border-radius:14px;display:grid;grid-template-columns:1fr 144px;gap:10px 14px;align-content:start}.left-col.svelte-xv54mf{min-width:0}.corner.svelte-xv54mf{position:absolute;top:12px;right:12px;width:22px;height:22px}.engine-head.svelte-xv54mf{grid-column:1 / -1}.name-row.svelte-xv54mf{display:flex;align-items:center;gap:8px;margin-bottom:2px}.engine-glyph.svelte-xv54mf{font-family:var(--vx-mono);font-size:20px;color:var(--vx-cyan-1);line-height:1}.engine-name.svelte-xv54mf{font-size:17px;font-weight:600;letter-spacing:-.02em;line-height:1.1}.tagline.svelte-xv54mf{font-size:12px;color:var(--vx-txt-2);line-height:1.35;max-width:92%}.warn.svelte-xv54mf{margin-top:6px;padding:6px 9px;border-radius:8px;border:1px solid rgba(255,180,84,.3);background:#ffb4540f;color:var(--vx-warn);font-size:11px;line-height:1.35}.sizes.svelte-xv54mf{display:flex;gap:4px;margin-top:5px;flex-wrap:wrap;min-width:0}.size.svelte-xv54mf{height:40px;flex:1 1 0;max-width:96px;min-width:0;padding:0 4px;border-radius:8px;border:1px solid var(--vx-line);background:#ffffff05;color:var(--vx-txt-1);font-family:var(--vx-mono);cursor:pointer;transition:all .22s;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:2px;white-space:nowrap}.size.svelte-xv54mf:hover{border-color:var(--vx-line-2)}.size.on.svelte-xv54mf{border-color:var(--vx-cyan-b);background:#22d4ef1f;color:var(--vx-cyan-1)}.size-id.svelte-xv54mf{font-size:11.5px;font-weight:600;line-height:1.1;white-space:nowrap}.size-mb.svelte-xv54mf{font-size:9.5px;line-height:1.1;opacity:.75;white-space:nowrap}.remote-summary-box.svelte-xv54mf{margin-top:5px;padding:7px 10px;background:#00000040;border:1px solid var(--vx-line);border-radius:8px;display:flex;flex-direction:column;gap:4px}.remote-row.svelte-xv54mf{display:flex;justify-content:space-between;align-items:center;gap:8px;font-family:var(--vx-mono);font-size:10.5px}.remote-k.svelte-xv54mf{color:var(--vx-txt-2);flex:none}.remote-v.svelte-xv54mf{color:var(--vx-txt-0);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:240px;text-align:right}.remote-v-ok.svelte-xv54mf{color:var(--vx-good);font-weight:600}.remote-v-warn.svelte-xv54mf{color:var(--vx-warn);font-weight:600}.remote-btn-row.svelte-xv54mf{margin-top:6px}.remote-cfg-btn.svelte-xv54mf{width:100%;height:32px;font-size:11.5px}.metrics.svelte-xv54mf{margin-top:14px;display:flex;flex-direction:column;gap:7px}.metric.svelte-xv54mf{display:flex;flex-direction:column;transition:opacity .3s}.metric.dim.svelte-xv54mf{opacity:.45}.metric-head.svelte-xv54mf{display:flex;justify-content:space-between;font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-2);margin-bottom:3px;line-height:1.2}.metric-head.svelte-xv54mf span:where(.svelte-xv54mf):last-child{color:var(--vx-txt-1)}.right-col.svelte-xv54mf{width:144px;display:flex;flex-direction:column;gap:8px}.spark.svelte-xv54mf{width:144px;height:80px;box-sizing:border-box;padding:7px 9px;border-radius:10px;border:1px solid var(--vx-line);background:#00000040;display:flex;flex-direction:column}.spark-head.svelte-xv54mf{display:flex;justify-content:space-between;font-family:var(--vx-mono);font-size:10px;color:var(--vx-txt-2);margin-bottom:5px;flex:none;line-height:1.2}.spark-head.svelte-xv54mf span:where(.svelte-xv54mf):last-child{color:var(--vx-txt-0)}.spark-bars.svelte-xv54mf{display:flex;align-items:flex-end;gap:3px;flex:1;min-height:0}.spark-bars.svelte-xv54mf>div:where(.svelte-xv54mf){flex:1;border-radius:2px;background:var(--vx-cyan-0);transition:height .6s var(--vx-ease),opacity .4s}.status-row.svelte-xv54mf{flex:none;display:flex;justify-content:flex-end}@media (max-width: 1100px){.head.svelte-xv54mf{flex-direction:column;align-items:stretch;gap:10px}.gpu-toggle.svelte-xv54mf{width:100%}.engines.svelte-xv54mf{grid-template-columns:1fr}}.hotkey-step.svelte-1fbfhk3{flex:1;min-height:0;display:flex;flex-direction:column;gap:14px}.copy.svelte-1fbfhk3{max-width:820px;min-width:0}.body.svelte-1fbfhk3{flex:1;min-height:0;display:grid;grid-template-columns:minmax(300px,1fr) 1.6fr;gap:14px}.gestures.svelte-1fbfhk3{display:grid;grid-auto-rows:min-content;gap:10px;align-content:start}.gesture.svelte-1fbfhk3{padding:12px 16px;display:grid;grid-template-columns:1fr 130px;gap:14px;align-items:center}.g-name.svelte-1fbfhk3{font-weight:600;font-size:14.5px;margin-bottom:3px}.g-desc.svelte-1fbfhk3{font-size:12px;color:var(--vx-txt-2);line-height:1.4}.tracks.svelte-1fbfhk3{display:grid;gap:5px}.track-row.svelte-1fbfhk3{display:grid;grid-template-columns:24px 1fr;gap:6px;align-items:center}.track-label.svelte-1fbfhk3{font-family:var(--vx-mono);font-size:9.5px;color:var(--vx-txt-3);letter-spacing:.1em}.track.svelte-1fbfhk3{display:flex;gap:2px;height:9px}.track.svelte-1fbfhk3>div:where(.svelte-1fbfhk3){border-radius:2px;background:var(--vx-bg-3);transition:background .3s}.track.svelte-1fbfhk3>div.lit:where(.svelte-1fbfhk3){background:var(--vx-txt-2)}.track.svelte-1fbfhk3>div.on:where(.svelte-1fbfhk3){background:var(--vx-cyan-0)}.hidden-note.svelte-1fbfhk3{padding:10px 12px;border-radius:10px;border:1px dashed var(--vx-line-2);font-size:12px;line-height:1.45;color:var(--vx-txt-2)}.right.svelte-1fbfhk3{display:flex;flex-direction:column;gap:12px;min-height:0}.recorder.svelte-1fbfhk3{position:relative;overflow:hidden;flex:1;min-height:220px;border-radius:18px;border:1px dashed var(--vx-line-2);background:#ffffff04;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;cursor:pointer;font:inherit;color:inherit;transition:all .3s var(--vx-ease)}.recorder.rec.svelte-1fbfhk3{border-color:var(--vx-cyan-b);background:#22d4ef0d;box-shadow:0 0 0 1px #22d4ef26,0 0 40px #22d4ef1f}.recorder.done.svelte-1fbfhk3{border-color:var(--vx-cyan-b);background:var(--vx-bg-1);box-shadow:0 0 0 1px #22d4ef1a}.scan.svelte-1fbfhk3{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,transparent,rgba(34,212,239,.08),transparent);animation:vxScan 1.6s linear infinite;pointer-events:none}.rec-label.svelte-1fbfhk3{font-family:var(--vx-mono);font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--vx-txt-2);display:flex;align-items:center;gap:8px;transition:color .3s}.recorder.rec.svelte-1fbfhk3 .rec-label:where(.svelte-1fbfhk3){color:var(--vx-cyan-1)}.recorder.done.svelte-1fbfhk3 .rec-label:where(.svelte-1fbfhk3){color:var(--vx-good)}.dot.svelte-1fbfhk3{width:8px;height:8px;border-radius:50%;background:currentColor;box-shadow:0 0 10px currentColor;animation:vxPulse 1.4s infinite}.keycaps.svelte-1fbfhk3{display:flex;gap:10px;align-items:center;min-height:64px}.rec-hint.svelte-1fbfhk3{font-size:13px;color:var(--vx-txt-2);text-align:center;max-width:520px;line-height:1.5;padding:0 20px}.rec-hint.bad.svelte-1fbfhk3{color:var(--vx-warn)}.sys.svelte-1fbfhk3{flex:none;padding:14px 18px;border-radius:14px;border:1px solid var(--vx-line);background:var(--vx-bg-1);display:flex;gap:16px;align-items:center;animation:vxPop .3s var(--vx-ease)}.sys.ok.svelte-1fbfhk3{border-color:#6ad48a66}.sys-glyph.svelte-1fbfhk3{font-family:var(--vx-mono);font-size:26px;color:var(--vx-gold-1)}.sys.ok.svelte-1fbfhk3 .sys-glyph:where(.svelte-1fbfhk3){color:var(--vx-good)}.sys-copy.svelte-1fbfhk3{flex:1;min-width:0}.sys-title.svelte-1fbfhk3{font-weight:600;font-size:14px}.sys-desc.svelte-1fbfhk3{font-size:12.5px;color:var(--vx-txt-2);line-height:1.45;margin-top:2px}.sys-err.svelte-1fbfhk3{margin-top:6px;font-size:12px;color:var(--vx-bad);line-height:1.4}.sys-actions.svelte-1fbfhk3{display:flex;gap:8px;flex:none}@media (max-width: 1100px){.body.svelte-1fbfhk3{grid-template-columns:1fr}}.preview.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;color:var(--vx-cyan-0);background:radial-gradient(120% 120% at 50% 120%,rgba(34,212,239,.1),transparent 70%)}.preview.mono.svelte-y6l73v{color:#dfe6ee;background:none}.still.svelte-y6l73v,.clip.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover;display:block;pointer-events:none}.clip.svelte-y6l73v{opacity:0;transition:opacity .35s ease}.clip.ready.svelte-y6l73v{opacity:1}.bars.svelte-y6l73v{display:flex;align-items:flex-end;justify-content:center;gap:3px;width:64%;height:56%}.bars.svelte-y6l73v>div:where(.svelte-y6l73v){flex:1;min-height:10%;border-radius:2px;background:currentColor;transform-origin:bottom;animation-name:vxBar;animation-iteration-count:infinite;animation-timing-function:ease-in-out;opacity:.9}.wave.svelte-y6l73v{width:76%;height:46%;color:inherit;animation:svelte-y6l73v-waveShift 2.6s linear infinite}@keyframes svelte-y6l73v-waveShift{0%{transform:translate(0)}to{transform:translate(-16%)}}.ring-wrap.svelte-y6l73v{position:relative;width:46%;aspect-ratio:1;display:grid;place-items:center}.ring.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;border:1.5px solid currentColor;opacity:.4;animation:vxPulse 1.8s ease-in-out infinite}.ring.r2.svelte-y6l73v{top:22%;right:22%;bottom:22%;left:22%;animation-delay:.5s}.ring-core.svelte-y6l73v{width:26%;aspect-ratio:1;border-radius:50%;background:currentColor;animation:vxPulse 1.8s ease-in-out infinite;animation-delay:.25s}.dial.svelte-y6l73v{position:relative;width:62%;aspect-ratio:2 / 1;display:grid;place-items:end center}.dial-arc.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:999px 999px 0 0;border:1.5px solid currentColor;border-bottom:0;opacity:.35}.needle.svelte-y6l73v{position:absolute;bottom:0;left:50%;width:2px;height:82%;background:var(--vx-gold-1);transform-origin:bottom center;animation:svelte-y6l73v-needleSwing 2.2s ease-in-out infinite}@keyframes svelte-y6l73v-needleSwing{0%,to{transform:rotate(-38deg)}50%{transform:rotate(34deg)}}.terminal.svelte-y6l73v{width:76%;font-family:var(--vx-mono);font-size:9px;color:#7ab8ff;display:grid;gap:5px}.blocks.svelte-y6l73v{display:flex;gap:2px;height:10px}.blocks.svelte-y6l73v>div:where(.svelte-y6l73v){flex:1;background:#7ab8ff;transform-origin:bottom;animation:vxBar 1.1s ease-in-out infinite}.overlay-step.svelte-ek86vh{flex:1;min-height:0;display:flex;flex-direction:column;gap:14px}.head.svelte-ek86vh{display:flex;gap:24px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-ek86vh{max-width:720px;min-width:0}.choice.svelte-ek86vh{display:grid;grid-template-columns:1fr 1fr;gap:10px;flex:none;width:520px}.mode.svelte-ek86vh{height:66px;padding:0 16px;display:flex;align-items:center;gap:12px}.mode.off-on.svelte-ek86vh{border-color:var(--vx-line-2);background:var(--vx-bg-3);box-shadow:0 0 0 1px var(--vx-line-2)}.mode-glyph.svelte-ek86vh{font-family:var(--vx-mono);font-size:22px;color:var(--vx-txt-2)}.mode-glyph.on.svelte-ek86vh{color:var(--vx-cyan-1)}.mode-title.svelte-ek86vh{display:block;font-weight:600;font-size:14px}.mode-desc.svelte-ek86vh{display:block;font-size:12px;color:var(--vx-txt-2)}.body.svelte-ek86vh{flex:1;min-height:0;display:grid;grid-template-columns:1.7fr 1fr;gap:16px;transition:opacity .4s,filter .4s}.body.muted.svelte-ek86vh{opacity:.18;filter:grayscale(1) blur(1px);pointer-events:none}.styles.svelte-ek86vh,.position.svelte-ek86vh{display:flex;flex-direction:column;min-height:0}.style-grid.svelte-ek86vh{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:8px}.style-card.svelte-ek86vh{overflow:hidden;padding:0;display:flex;flex-direction:column;min-height:0}.thumb.svelte-ek86vh{position:relative;aspect-ratio:16 / 9;background:#05070a;overflow:hidden}.style-meta.svelte-ek86vh{flex:none;display:flex;align-items:center;justify-content:space-between;padding:8px 12px}.style-name.svelte-ek86vh{font-weight:600;font-size:13px}.style-sub.svelte-ek86vh{font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-2)}.style-glyph.svelte-ek86vh{font-family:var(--vx-mono);font-size:14px;color:var(--vx-txt-3);transition:color .3s}.style-glyph.on.svelte-ek86vh{color:var(--vx-cyan-1)}.screen.svelte-ek86vh{position:relative;aspect-ratio:16 / 10;border-radius:12px;border:1px solid var(--vx-line-2);background:linear-gradient(180deg,var(--vx-bg-2),var(--vx-bg-0));overflow:hidden;box-shadow:var(--vx-panel-shadow);margin-top:8px}.grid-lines.svelte-ek86vh{position:absolute;top:0;right:0;bottom:0;left:0;background-image:linear-gradient(to right,rgba(255,255,255,.03) 1px,transparent 1px),linear-gradient(to bottom,rgba(255,255,255,.03) 1px,transparent 1px);background-size:28px 28px}.taskbar.svelte-ek86vh{position:absolute;left:0;right:0;bottom:0;height:7%;background:#00000080;border-top:1px solid var(--vx-line)}.floating.svelte-ek86vh{position:absolute;left:50%;transform:translate(-50%,-50%);width:44%;aspect-ratio:16 / 9;border-radius:8px;overflow:hidden;border:1px solid rgba(34,212,239,.4);box-shadow:0 0 24px #22d4ef40;background:#05070a;transition:top .5s var(--vx-ease)}.pos-buttons.svelte-ek86vh{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:10px}.pos.svelte-ek86vh{height:46px;border-radius:10px;border:1px solid var(--vx-line);background:#ffffff05;color:var(--vx-txt-1);font:inherit;font-size:13px;font-weight:600;cursor:pointer;transition:all .25s;display:flex;align-items:center;justify-content:center;gap:8px}.pos.svelte-ek86vh:hover{border-color:var(--vx-line-2)}.pos.on.svelte-ek86vh{border-color:var(--vx-cyan-b);background:#22d4ef1f;color:var(--vx-cyan-1)}.pos-glyph.svelte-ek86vh{font-family:var(--vx-mono)}@media (max-width: 1100px){.head.svelte-ek86vh{flex-direction:column;align-items:stretch}.choice.svelte-ek86vh{width:100%}.body.svelte-ek86vh{grid-template-columns:1fr}.style-grid.svelte-ek86vh{grid-template-columns:repeat(2,1fr)}}.test-step.svelte-oqvphh{flex:1;min-height:0;display:flex;flex-direction:column;gap:14px}.head.svelte-oqvphh{display:flex;gap:24px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-oqvphh{max-width:640px;min-width:0}.combo.svelte-oqvphh{display:flex;gap:10px;align-items:center;flex:none}.gesture-pill.svelte-oqvphh{margin-left:10px;font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-txt-2);padding:6px 12px;border:1px solid var(--vx-line);border-radius:999px}.box.svelte-oqvphh{position:relative;flex:1;min-height:0;border-radius:18px;border:1px solid var(--vx-line);background:var(--vx-bg-1);transition:all .4s var(--vx-ease);overflow:hidden;display:flex;flex-direction:column}.box.live.svelte-oqvphh{border-color:var(--vx-cyan-b);box-shadow:0 0 40px #22d4ef26}.box.won.svelte-oqvphh{border-color:#6ad48a80;box-shadow:0 0 40px #6ad48a26}.box-head.svelte-oqvphh{flex:none;display:flex;align-items:center;justify-content:space-between;padding:10px 18px;border-bottom:1px solid var(--vx-line)}.file.svelte-oqvphh{font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-txt-2)}.state.svelte-oqvphh{font-family:var(--vx-mono);font-size:11px;letter-spacing:.1em;display:flex;align-items:center;gap:8px;color:var(--vx-txt-3);transition:color .3s}.state.recording.svelte-oqvphh{color:var(--vx-cyan-0)}.state.transcribing.svelte-oqvphh{color:var(--vx-gold-1)}.state.success.svelte-oqvphh{color:var(--vx-good)}.dot.svelte-oqvphh{width:7px;height:7px;border-radius:50%;background:currentColor;box-shadow:0 0 8px currentColor;animation:vxPulse 1.4s infinite}textarea.svelte-oqvphh{display:block;flex:1;min-height:180px;width:100%;padding:22px;border:0;background:transparent;color:var(--vx-txt-0);font-family:inherit;font-size:19px;line-height:1.6;resize:none;caret-color:var(--vx-cyan-0);outline:none}.wave.svelte-oqvphh{position:absolute;left:0;right:0;bottom:0;height:64px;display:flex;align-items:center;justify-content:center;gap:4px;background:linear-gradient(180deg,transparent,rgba(34,212,239,.1));pointer-events:none}.wave.svelte-oqvphh>div:where(.svelte-oqvphh){width:4px;height:30px;border-radius:2px;background:var(--vx-cyan-0);transform-origin:center;animation-name:vxBar;animation-iteration-count:infinite;animation-timing-function:ease-in-out}.won-overlay.svelte-oqvphh{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;text-align:center;background:#0e1116db;animation:vxPop .35s var(--vx-ease)}.tick.svelte-oqvphh{width:84px;height:84px;margin:0 auto 16px;border-radius:50%;border:2px solid var(--vx-good);display:grid;place-items:center;color:var(--vx-good);font-family:var(--vx-mono);font-size:36px;box-shadow:0 0 30px #6ad48a59;animation:vxRing .5s var(--vx-ease)}.won-title.svelte-oqvphh{font-size:26px;font-weight:600;letter-spacing:-.02em}.won-sub.svelte-oqvphh{font-size:14px;color:var(--vx-txt-2);margin:6px 0 18px}.foot.svelte-oqvphh{flex:none;display:flex;justify-content:space-between;align-items:center;gap:20px;font-size:12.5px;color:var(--vx-txt-2)}.engine.svelte-oqvphh{font-family:var(--vx-mono);font-size:11px;white-space:nowrap}@media (max-width: 1000px){.head.svelte-oqvphh{flex-direction:column;align-items:stretch;gap:12px}}.voice-step.svelte-1yghr3b{flex:1;min-height:0;display:flex;flex-direction:column;gap:12px}.head.svelte-1yghr3b{display:flex;gap:20px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-1yghr3b{max-width:680px;min-width:0}.copy.svelte-1yghr3b .vx-lede:where(.svelte-1yghr3b){margin:4px 0 0;font-size:13px;line-height:1.45}.choice.svelte-1yghr3b{display:grid;grid-template-columns:1fr 1fr;gap:10px;flex:none;width:480px}.mode.svelte-1yghr3b{height:58px;padding:0 14px;display:flex;align-items:center;gap:10px}.mode.off-on.svelte-1yghr3b{border-color:var(--vx-line-2);background:var(--vx-bg-3);box-shadow:0 0 0 1px var(--vx-line-2)}.mode-glyph.svelte-1yghr3b{font-family:var(--vx-mono);font-size:20px;color:var(--vx-txt-2)}.mode-glyph.on.svelte-1yghr3b{color:var(--vx-cyan-1)}.mode-title.svelte-1yghr3b{display:block;font-weight:600;font-size:13.5px}.mode-desc.svelte-1yghr3b{display:block;font-size:11.5px;color:var(--vx-txt-2)}.toolbar.svelte-1yghr3b{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:8px 14px;border:1px solid var(--vx-line);border-radius:10px;background:#ffffff05;flex:none;transition:opacity .4s,filter .4s}.audition-panel.svelte-1yghr3b{display:flex;align-items:center;gap:14px;min-width:0}.audition-btn.svelte-1yghr3b{height:38px;padding:0 16px;display:inline-flex;align-items:center;gap:8px;font-size:13px;font-weight:600;border-radius:8px;background:#22d4ef17;border:1px solid var(--vx-cyan-0);color:var(--vx-cyan-0);cursor:pointer;transition:all .2s}.audition-btn.svelte-1yghr3b:hover:not(:disabled){background:#22d4ef2e;box-shadow:0 0 12px #22d4ef40}.audition-btn.svelte-1yghr3b:disabled{opacity:.4;cursor:not-allowed;border-color:var(--vx-line-2);color:var(--vx-txt-3);background:#ffffff08}.audition-btn.playing.svelte-1yghr3b{border-color:var(--vx-gold-1);color:var(--vx-gold-1);background:#eab3081f}.tri.svelte-1yghr3b{font-family:var(--vx-mono);font-size:14px;color:inherit}.stop-icon.svelte-1yghr3b{font-size:14px;color:inherit}.btn-text.svelte-1yghr3b{font-family:var(--vx-mono);font-size:12px;letter-spacing:.02em}.play-bars.svelte-1yghr3b{display:flex;align-items:center;gap:2.5px;height:18px;margin-left:4px}.play-bars.svelte-1yghr3b>div:where(.svelte-1yghr3b){width:3px;height:18px;border-radius:1.5px;background:currentColor;transform-origin:center;animation-name:vxBar;animation-iteration-count:infinite;animation-timing-function:ease-in-out}.audition-meta.svelte-1yghr3b{display:flex;flex-direction:column;gap:2px}.audition-label.svelte-1yghr3b{font-size:12px;color:var(--vx-cyan-0);font-weight:600}.audition-hint.svelte-1yghr3b{font-size:11px;font-family:var(--vx-mono)}.audition-hint.svelte-1yghr3b .ready:where(.svelte-1yghr3b){color:var(--vx-good)}.audition-hint.svelte-1yghr3b .good:where(.svelte-1yghr3b){color:var(--vx-cyan-0)}.audition-hint.svelte-1yghr3b .warn:where(.svelte-1yghr3b){color:var(--vx-gold-1)}.audition-hint.svelte-1yghr3b .bad:where(.svelte-1yghr3b){color:var(--vx-bad)}.audition-hint.svelte-1yghr3b .dim:where(.svelte-1yghr3b){color:var(--vx-txt-3)}.hf-bar.svelte-1yghr3b{display:flex;align-items:center;gap:12px;padding:4px 10px;border-radius:8px;border:1px solid transparent;background:#0003}.hf-bar.needed.svelte-1yghr3b{border-color:color-mix(in srgb,var(--vx-gold-1) 45%,transparent);background:color-mix(in srgb,var(--vx-gold-1) 6%,transparent)}.hf-header.svelte-1yghr3b{display:flex;flex-direction:column;gap:1px;text-align:right}.hf-title.svelte-1yghr3b{font-size:11.5px;font-weight:600}.hf-sub.svelte-1yghr3b{font-size:10px;color:var(--vx-txt-3)}.hf-control.svelte-1yghr3b{display:flex;flex-direction:column;gap:2px}.hf-input.svelte-1yghr3b{width:170px;padding:5px 8px;font-size:11.5px;font-family:inherit;color:inherit;background:#00000073;border:1px solid var(--vx-line);border-radius:6px;outline:none;transition:border-color .2s}.hf-input.svelte-1yghr3b:focus{border-color:var(--vx-cyan-0)}.hf-input[readonly].svelte-1yghr3b{color:var(--vx-txt-2);cursor:not-allowed}.hf-state.svelte-1yghr3b{font-size:9.5px;font-family:var(--vx-mono);color:var(--vx-txt-3);white-space:nowrap}.hf-state.ok.svelte-1yghr3b{color:var(--vx-good)}.hf-state.bad.svelte-1yghr3b{color:var(--vx-bad)}.non-commercial-notice.svelte-1yghr3b{flex:none;padding:8px 12px;border-radius:8px;border:1px solid color-mix(in srgb,var(--vx-gold-1) 45%,transparent);background:color-mix(in srgb,var(--vx-gold-1) 6%,transparent);font-size:12px;line-height:1.4}.gpu-toggle-row.svelte-1yghr3b{flex:none;display:flex;align-items:center;gap:8px;font-size:12.5px;padding:2px}.gpu-toggle-hint.svelte-1yghr3b{color:var(--vx-txt-3);font-size:11px}.grid.svelte-1yghr3b{flex:1;min-height:0;display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(2,minmax(0,1fr));gap:10px;transition:opacity .4s,filter .4s}.grid.muted.svelte-1yghr3b{opacity:.18;filter:grayscale(1) blur(1px);pointer-events:none}.card.svelte-1yghr3b{padding:12px 14px;display:flex;flex-direction:column;gap:8px;min-height:0;cursor:pointer;transition:all .2s}.card.locked.svelte-1yghr3b{opacity:.55}.card.locked.svelte-1yghr3b .name:where(.svelte-1yghr3b){color:var(--vx-txt-2)}.card-head.svelte-1yghr3b{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}.card-title-group.svelte-1yghr3b{display:flex;align-items:baseline;gap:8px;min-width:0}.name.svelte-1yghr3b{font-weight:600;font-size:14.5px;letter-spacing:-.01em;white-space:nowrap}.kind.svelte-1yghr3b{font-family:var(--vx-mono);font-size:10px;color:var(--vx-txt-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions.svelte-1yghr3b{display:grid}.dl.svelte-1yghr3b{height:30px;width:100%;font-size:11.5px;padding:0 10px}.bundled.svelte-1yghr3b{height:30px;display:flex;align-items:center;justify-content:center;border-radius:8px;border:1px dashed var(--vx-line);font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-3);text-align:center}.bundled.ok.svelte-1yghr3b{border-style:solid;border-color:#6ad48a59;color:var(--vx-good)}.metrics.svelte-1yghr3b{display:flex;flex-direction:column;gap:8px}.metric-head.svelte-1yghr3b{display:flex;justify-content:space-between;font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-2);margin-bottom:4px}.metric-head.svelte-1yghr3b span:where(.svelte-1yghr3b):last-child{color:var(--vx-txt-1)}.note.svelte-1yghr3b{font-size:11px;color:var(--vx-txt-2);line-height:1.35;margin-top:auto;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical}.bad.svelte-1yghr3b{color:var(--vx-bad);word-break:break-word}.note.svelte-1yghr3b .ok:where(.svelte-1yghr3b){color:var(--vx-good)}.play-error.svelte-1yghr3b{flex:none;font-size:12px;color:var(--vx-bad)}@media (max-width: 1100px){.grid.svelte-1yghr3b{grid-template-columns:repeat(2,1fr);grid-template-rows:repeat(3,minmax(0,1fr))}.head.svelte-1yghr3b{flex-direction:column;align-items:stretch}.choice.svelte-1yghr3b{width:100%}}@media (max-width: 800px){.toolbar.svelte-1yghr3b{flex-direction:column;align-items:stretch}.hf-header.svelte-1yghr3b{text-align:left}.hf-input.svelte-1yghr3b{width:100%}}.done-step.svelte-ujy0nl{flex:1;min-height:0;display:grid;grid-template-columns:.95fr 1fr 1fr;gap:18px;align-items:stretch}.hero.svelte-ujy0nl{display:flex;flex-direction:column;justify-content:center}.tick.svelte-ujy0nl{width:76px;height:76px;margin:0 0 20px;border-radius:50%;border:2px solid var(--vx-gold-0);display:grid;place-items:center;color:var(--vx-gold-1);font-family:var(--vx-mono);font-size:32px;box-shadow:0 0 30px var(--vx-gold-glow);animation:vxRing .6s var(--vx-ease)}.tick.warn.svelte-ujy0nl{border-color:var(--vx-bad);color:var(--vx-bad);box-shadow:0 0 30px #f4636e4d}h2.svelte-ujy0nl{margin:10px 0;font-size:clamp(28px,3.2vw,44px);letter-spacing:-.035em;line-height:1.02;font-weight:600}h2.svelte-ujy0nl span:where(.svelte-ujy0nl){color:var(--vx-gold-1)}h2.svelte-ujy0nl span.bad-word:where(.svelte-ujy0nl){color:var(--vx-bad)}.hero.svelte-ujy0nl p:where(.svelte-ujy0nl){margin:0 0 20px;font-size:14.5px;line-height:1.55;color:var(--vx-txt-1)}.summary.svelte-ujy0nl{display:grid;grid-template-columns:1fr 1fr;gap:10px 14px;padding:14px 16px;border-radius:14px;border:1px solid var(--vx-line);background:linear-gradient(180deg,rgba(34,212,239,.04),transparent)}.summary-value.svelte-ujy0nl{font-size:13px;font-weight:600;color:var(--vx-txt-0);margin-top:3px;word-break:break-word}.panel.svelte-ujy0nl{padding:20px;border-radius:18px;border:1px solid var(--vx-line);background:var(--vx-bg-1);display:flex;flex-direction:column;min-height:0}.panel.problems.svelte-ujy0nl{border-color:#f4636e66}.panel-head.svelte-ujy0nl{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.panel-title.svelte-ujy0nl{font-weight:600;font-size:16px;margin:6px 0 4px}.panel-desc.svelte-ujy0nl{font-size:13px;color:var(--vx-txt-2);line-height:1.5;margin-bottom:16px}.issue-list.svelte-ujy0nl{flex:1;min-height:0;overflow:auto;margin:10px 0 12px;display:grid;gap:10px;align-content:start}.issue.svelte-ujy0nl{border:1px solid var(--vx-line);border-radius:12px;background:#f4636e0a;padding:11px 12px}.issue-head.svelte-ujy0nl{display:flex;gap:9px;align-items:baseline}.issue-step.svelte-ujy0nl{flex:none;font-family:var(--vx-mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--vx-bad)}.issue-title.svelte-ujy0nl{font-size:13px;line-height:1.45;color:var(--vx-txt-0)}.issue-detail.svelte-ujy0nl{margin:8px 0 0;padding:8px 10px;border-radius:8px;background:#00000059;font-family:var(--vx-mono);font-size:11px;line-height:1.5;color:var(--vx-txt-2);white-space:pre-wrap;word-break:break-word;max-height:150px;overflow:auto}.problem-actions.svelte-ujy0nl{display:flex;gap:8px;margin-top:auto}.log-status.svelte-ujy0nl{margin-top:8px;font-size:12px;line-height:1.4;color:var(--vx-txt-2)}.mock-screen.svelte-ujy0nl{position:relative;flex:1;min-height:230px;border-radius:12px;border:1px solid var(--vx-line-2);background:linear-gradient(180deg,var(--vx-bg-2),var(--vx-bg-0));overflow:hidden}.mock-bar.svelte-ujy0nl{position:absolute;left:0;right:0;bottom:0;height:40px;background:#0000008c;border-top:1px solid var(--vx-line);display:flex;align-items:center;justify-content:flex-end;padding:0 14px;gap:12px}.mock-sys-icon.svelte-ujy0nl{font-size:11px;color:var(--vx-txt-3);opacity:.65;-webkit-user-select:none;user-select:none}.mock-sys-icon.chevron.svelte-ujy0nl{font-size:14px;margin-left:2px}.tray-btn-wrap.svelte-ujy0nl{position:relative;display:inline-flex;align-items:center;justify-content:center}.tray-btn.svelte-ujy0nl{width:32px;height:32px;border-radius:6px;border:1px solid transparent;background:transparent;cursor:pointer;display:grid;place-items:center;transition:all .2s}.tray-btn.svelte-ujy0nl:hover{background:#ffffff14}.tray-btn.on.svelte-ujy0nl{border-color:#ffffff40;background:#ffffff1f}.tray-btn.svelte-ujy0nl img:where(.svelte-ujy0nl){width:22px;height:22px;display:block;object-fit:contain}.tray-menu.svelte-ujy0nl{position:absolute;right:14px;bottom:48px;width:275px;padding:6px;border-radius:8px;border:1px solid rgba(255,255,255,.15);background:#1f232a;box-shadow:0 10px 30px #000000b3;animation:vxPop .18s var(--vx-ease);z-index:10}.tray-row.svelte-ujy0nl{width:100%;border:none;background:transparent;padding:6px 8px;border-radius:5px;display:flex;align-items:center;gap:8px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:13.5px;color:#e6edf3;text-align:left;cursor:pointer;transition:background .15s,color .15s}.tray-row.svelte-ujy0nl:hover{background:#ffffff14;color:#fff}.chk-gutter.svelte-ujy0nl{width:18px;height:18px;flex:none;display:flex;align-items:center;justify-content:center}.chk.svelte-ujy0nl{width:16px;height:16px;border-radius:4px;border:1px solid rgba(255,255,255,.3);background:#ffffff0f;display:flex;align-items:center;justify-content:center;transition:all .15s ease}.chk.on.svelte-ujy0nl{background:#1d8cf8;border-color:#38bdf8}.tray-icon.svelte-ujy0nl{width:20px;font-size:15px;display:flex;align-items:center;justify-content:center;flex:none}.tray-label.svelte-ujy0nl{flex:1;white-space:nowrap;letter-spacing:-.01em}.tray-label.no-icon.svelte-ujy0nl{padding-left:2px}.tray-sep.svelte-ujy0nl{height:1px;background:#ffffff1f;margin:5px 6px}.click-me.svelte-ujy0nl{position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;gap:2px;font-family:var(--vx-mono);font-size:11px;letter-spacing:.05em;color:var(--vx-cyan-1);white-space:nowrap;pointer-events:none;animation:svelte-ujy0nl-vxNudge 1.6s ease-in-out infinite}.arrow.svelte-ujy0nl{font-size:14px;font-weight:700;line-height:1}@keyframes svelte-ujy0nl-vxNudge{0%,to{transform:translate(-50%) translateY(0)}50%{transform:translate(-50%) translateY(4px)}}.where.svelte-ujy0nl{list-style:none;padding:0;margin:0 0 16px;display:grid;gap:2px}.where.svelte-ujy0nl li:where(.svelte-ujy0nl){display:flex;align-items:center;gap:9px;padding:7px 10px;font-size:12.5px;color:var(--vx-txt-1)}.where.svelte-ujy0nl .glyph:where(.svelte-ujy0nl){font-family:var(--vx-mono);color:var(--vx-cyan-2);width:16px}.where.svelte-ujy0nl .tag:where(.svelte-ujy0nl){margin-left:auto;font-family:var(--vx-mono);font-size:10px;color:var(--vx-txt-3)}.open-settings.svelte-ujy0nl{margin-top:auto;align-self:flex-start}.vx-btn.small.svelte-ujy0nl{height:34px;padding:0 12px;font-size:12px}@media (max-width: 1100px){.done-step.svelte-ujy0nl{grid-template-columns:1fr;align-content:start}}.vx-root.svelte-18pn5kx{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;overflow:hidden}.vx-titlebar.svelte-18pn5kx{height:46px;flex:none;display:flex;align-items:center;gap:9px;padding:0 18px;border-bottom:1px solid var(--vx-line);background:#0e1116b3;z-index:2}.vx-logo.svelte-18pn5kx{width:20px;height:20px;border-radius:5px}.vx-brand.svelte-18pn5kx{font-weight:600;font-size:14.5px;letter-spacing:-.01em}.vx-brand.svelte-18pn5kx span:where(.svelte-18pn5kx){color:var(--vx-cyan-0)}.vx-mono.svelte-18pn5kx{font-family:var(--vx-mono);font-size:11px;letter-spacing:.1em}.vx-dim.svelte-18pn5kx{color:var(--vx-txt-2)}.vx-faint.svelte-18pn5kx{color:var(--vx-txt-3)}.vx-spacer.svelte-18pn5kx{flex:1}.vx-screen.svelte-18pn5kx{flex:1;min-height:0;display:flex;flex-direction:column;padding:22px 32px 16px;overflow:auto;opacity:1;transform:none;transition:opacity .2s ease,transform .2s var(--vx-ease)}.vx-screen.vx-leaving.svelte-18pn5kx{opacity:0;transform:translateY(10px)}.vx-loading.svelte-18pn5kx{margin:auto;display:flex;align-items:center;gap:10px;color:var(--vx-txt-2);font-size:13.5px}.vx-footer.svelte-18pn5kx{flex:none;display:grid;grid-template-columns:170px 1fr auto;align-items:center;gap:28px;border-top:1px solid var(--vx-line);background:#0e1116cc;padding:10px 32px 12px;z-index:3}.vx-nav-left.svelte-18pn5kx,.vx-nav-right.svelte-18pn5kx{display:flex;align-items:center;gap:12px}.vx-nav-right.svelte-18pn5kx{justify-content:flex-end}.vx-skip.svelte-18pn5kx{font-weight:500;color:var(--vx-txt-3)}.vx-blocker.svelte-18pn5kx{max-width:340px;font-size:12px;line-height:1.35;color:var(--vx-txt-2);text-align:right}.vx-track.svelte-18pn5kx,.vx-track-cell.svelte-18pn5kx{display:flex;align-items:center;min-width:0}.vx-track-step.svelte-18pn5kx{display:flex;flex-direction:column;align-items:center;gap:6px;min-width:62px;padding:4px 6px;border:0;background:transparent;font:inherit;color:var(--vx-txt-3);cursor:pointer;transition:color .3s}.vx-track-step.svelte-18pn5kx:disabled{cursor:default}.vx-track-step.vx-done.svelte-18pn5kx{color:var(--vx-txt-1)}.vx-track-step.vx-cur.svelte-18pn5kx{color:var(--vx-txt-0)}.vx-ring.svelte-18pn5kx{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-family:var(--vx-mono);font-size:12px;border:1px solid var(--vx-line-2);background:transparent;color:var(--vx-txt-3);transition:all .35s var(--vx-ease)}.vx-track-step.vx-done.svelte-18pn5kx .vx-ring:where(.svelte-18pn5kx){border-color:#22d4ef66;background:#22d4ef1a;color:var(--vx-cyan-1)}.vx-track-step.vx-cur.svelte-18pn5kx .vx-ring:where(.svelte-18pn5kx){border-color:var(--vx-cyan-0);background:var(--vx-cyan-0);color:#00222a;box-shadow:0 0 16px #22d4ef73}.vx-track-label.svelte-18pn5kx{font-size:11px;font-weight:500;white-space:nowrap}.vx-track-step.vx-cur.svelte-18pn5kx .vx-track-label:where(.svelte-18pn5kx){font-weight:600}.vx-track-line.svelte-18pn5kx{flex:1;min-width:8px;height:2px;margin:0 2px 19px;border-radius:1px;background:var(--vx-bg-4);overflow:hidden}.vx-track-line.svelte-18pn5kx>div:where(.svelte-18pn5kx){height:100%;background:var(--vx-cyan-0);transition:width .5s var(--vx-ease)}.vx-toast.svelte-18pn5kx{position:fixed;left:50%;bottom:84px;transform:translate(-50%);display:flex;align-items:center;gap:14px;max-width:70vw;padding:11px 14px;border-radius:10px;border:1px solid rgba(244,99,110,.45);background:#2a1215;color:#ffb3b8;font-size:13px;box-shadow:var(--vx-panel-shadow);animation:vxPop .25s var(--vx-ease);z-index:20}.vx-toast.svelte-18pn5kx button:where(.svelte-18pn5kx){border:0;background:transparent;color:inherit;cursor:pointer;font-size:13px}@media (max-width: 1000px){.vx-footer.svelte-18pn5kx{grid-template-columns:110px 1fr auto;gap:16px;padding:10px 18px 12px}.vx-track-label.svelte-18pn5kx{display:none}.vx-track-line.svelte-18pn5kx{margin-bottom:0}.vx-screen.svelte-18pn5kx{padding:18px 20px 14px}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}main.svelte-15mrihi{background-color:var(--color-obsidian-950);width:100vw;height:100vh;padding:calc(var(--spacing,.25rem) * 5);color:var(--text);justify-content:center;align-items:flex-start;display:flex;overflow-y:auto}.card.svelte-15mrihi{gap:calc(var(--spacing,.25rem) * 4);flex-direction:column;width:100%;max-width:520px;display:flex}header.svelte-15mrihi{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 3);display:flex}.logo.svelte-15mrihi{height:calc(var(--spacing,.25rem) * 11);width:calc(var(--spacing,.25rem) * 11);border-radius:var(--radius-xl,.75rem);flex-shrink:0}h1.svelte-15mrihi{font-size:var(--text-lg,1.125rem);line-height:var(--tw-leading,var(--text-lg--line-height,calc(1.75 / 1.125)));--tw-leading:var(--leading-tight,1.25);line-height:var(--leading-tight,1.25);--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800);--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em);color:var(--color-white,#fff)}h2.svelte-15mrihi{margin-bottom:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em);color:var(--color-obsidian-400);text-transform:uppercase}.sub.svelte-15mrihi{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--color-obsidian-400);font-size:12.5px}.body.svelte-15mrihi{--tw-leading:var(--leading-relaxed,1.625);font-size:13px;line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-200)}.hint.svelte-15mrihi{--tw-leading:var(--leading-relaxed,1.625);font-size:11.5px;line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-400)}.notes-block.svelte-15mrihi{border-radius:var(--radius-lg,.5rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.notes-block.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.notes-block.svelte-15mrihi{padding:calc(var(--spacing,.25rem) * 3)}.notes.svelte-15mrihi{margin:calc(var(--spacing,.25rem) * 0);max-height:240px;font-family:var(--font-sans,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word;white-space:pre-wrap;color:var(--color-obsidian-200);overflow-y:auto}.warn.svelte-15mrihi{border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0033;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.warn.svelte-15mrihi{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 20%,transparent)}}.warn.svelte-15mrihi{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.warn.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.warn.svelte-15mrihi{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12.5px;line-height:var(--leading-relaxed,1.625);color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.warn.svelte-15mrihi{color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.error.svelte-15mrihi{border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3633;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.error.svelte-15mrihi{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.error.svelte-15mrihi{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.error.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.error.svelte-15mrihi{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12.5px;line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word;color:var(--color-red-400,oklch(70.4% .191 22.216))}.progress-block.svelte-15mrihi{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.bar.svelte-15mrihi{height:calc(var(--spacing,.25rem) * 2);background-color:#ffffff0d;border-radius:3.40282e38px;width:100%;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.bar.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.fill.svelte-15mrihi{background-color:var(--color-accent-blue);height:100%;transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-radius:3.40282e38px}.bar.indeterminate.svelte-15mrihi .fill:where(.svelte-15mrihi){width:33.3333%;animation:var(--animate-pulse,pulse 2s cubic-bezier(.4, 0, .6, 1) infinite)}footer.svelte-15mrihi{margin-top:calc(var(--spacing,.25rem) * 1);justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-wrap:wrap;display:flex}.left-actions.svelte-15mrihi{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;display:flex}.right-actions.svelte-15mrihi{align-items:center;gap:calc(var(--spacing,.25rem) * 2);margin-left:auto;display:flex}.btn-primary.svelte-15mrihi{cursor:pointer;border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-bold,700);font-size:12.5px;font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 14px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-primary.svelte-15mrihi:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 18px var(--tw-shadow-color,#38bdf873);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-secondary.svelte-15mrihi{cursor:pointer;border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-800);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-semibold,600);font-size:12.5px;font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-300);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-secondary.svelte-15mrihi:hover{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-15mrihi:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 10%,transparent)}}.btn-secondary.svelte-15mrihi:hover{background-color:var(--color-obsidian-700);color:var(--color-white,#fff)}.btn-secondary.svelte-15mrihi:disabled,.btn-primary.svelte-15mrihi:disabled{cursor:default;opacity:.6;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.link.svelte-15mrihi{cursor:pointer;border-style:var(--tw-border-style);padding:calc(var(--spacing,.25rem) * 0);text-align:left;--tw-font-weight:var(--font-weight-semibold,600);font-size:12px;font-weight:var(--font-weight-semibold,600);color:var(--color-accent-blue);text-underline-offset:2px;background-color:#0000;border-width:0;text-decoration-line:underline}.centered.svelte-15mrihi{justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 8);flex-direction:column;display:flex}.spinner.svelte-15mrihi{height:calc(var(--spacing,.25rem) * 7);width:calc(var(--spacing,.25rem) * 7);animation:var(--animate-spin,spin 1s linear infinite);border-style:var(--tw-border-style);border-width:2.5px;border-color:#ffffff0d;border-radius:3.40282e38px}@supports (color:color-mix(in lab,red,red)){.spinner.svelte-15mrihi{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.spinner.svelte-15mrihi{border-top-color:var(--color-accent-blue)}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--color-obsidian-950:#08090b;--color-obsidian-900:#0d0e12;--color-obsidian-800:#14171f;--color-obsidian-700:#1e222d;--color-obsidian-300:#9ca3af;--color-obsidian-100:#e5e7eb;--color-accent-tangerine:#ff6b35;--color-accent-blue:#38bdf8;--color-accent-green:#10b981;--radius-desktop:6px;--animate-border-pulse:border-pulse 1.5s infinite;--animate-flash:flash 1s infinite;--transition-snappy:all .25s cubic-bezier(.175, .885, .32, 1.2);--transition-snappy-fast:all .15s cubic-bezier(.175, .885, .32, 1.275)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,var(--font-sans,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"));font-feature-settings:var(--default-font-feature-settings,initial);font-variation-settings:var(--default-font-variation-settings,initial);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace));font-feature-settings:var(--default-mono-font-feature-settings,initial);font-variation-settings:var(--default-mono-font-variation-settings,initial);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing,.25rem) * 0)}.-top-0\.5{top:calc(var(--spacing,.25rem) * -.5)}.top-0{top:calc(var(--spacing,.25rem) * 0)}.top-2\.5{top:calc(var(--spacing,.25rem) * 2.5)}.top-\[15\%\]{top:15%}.right-0{right:calc(var(--spacing,.25rem) * 0)}.right-3\.5{right:calc(var(--spacing,.25rem) * 3.5)}.right-6{right:calc(var(--spacing,.25rem) * 6)}.-bottom-0\.5{bottom:calc(var(--spacing,.25rem) * -.5)}.bottom-6{bottom:calc(var(--spacing,.25rem) * 6)}.left-0{left:calc(var(--spacing,.25rem) * 0)}.isolate{isolation:isolate}.z-10{z-index:10}.z-\[100\]{z-index:100}.z-\[200\]{z-index:200}.z-\[2000\]{z-index:2000}.col-span-full{grid-column:1/-1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing,.25rem) * 0)}.my-1{margin-block:calc(var(--spacing,.25rem) * 1)}.mt-0\.5{margin-top:calc(var(--spacing,.25rem) * .5)}.mt-1{margin-top:calc(var(--spacing,.25rem) * 1)}.mt-1\.5{margin-top:calc(var(--spacing,.25rem) * 1.5)}.mt-2{margin-top:calc(var(--spacing,.25rem) * 2)}.mt-2\.5{margin-top:calc(var(--spacing,.25rem) * 2.5)}.mt-3\.5{margin-top:calc(var(--spacing,.25rem) * 3.5)}.mt-4{margin-top:calc(var(--spacing,.25rem) * 4)}.mt-6{margin-top:calc(var(--spacing,.25rem) * 6)}.mb-1{margin-bottom:calc(var(--spacing,.25rem) * 1)}.mb-2{margin-bottom:calc(var(--spacing,.25rem) * 2)}.mb-3{margin-bottom:calc(var(--spacing,.25rem) * 3)}.mb-3\.5{margin-bottom:calc(var(--spacing,.25rem) * 3.5)}.mb-4{margin-bottom:calc(var(--spacing,.25rem) * 4)}.mb-5{margin-bottom:calc(var(--spacing,.25rem) * 5)}.ml-2\.5{margin-left:calc(var(--spacing,.25rem) * 2.5)}.ml-4{margin-left:calc(var(--spacing,.25rem) * 4)}.box-border{box-sizing:border-box}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\.5{height:calc(var(--spacing,.25rem) * 1.5)}.h-2{height:calc(var(--spacing,.25rem) * 2)}.h-3\.5{height:calc(var(--spacing,.25rem) * 3.5)}.h-4{height:calc(var(--spacing,.25rem) * 4)}.h-5{height:calc(var(--spacing,.25rem) * 5)}.h-7{height:calc(var(--spacing,.25rem) * 7)}.h-11{height:calc(var(--spacing,.25rem) * 11)}.h-16{height:calc(var(--spacing,.25rem) * 16)}.h-\[5px\]{height:5px}.h-\[70\%\]{height:70%}.h-full{height:100%}.h-screen{height:100vh}.max-h-60{max-height:calc(var(--spacing,.25rem) * 60)}.max-h-\[85vh\]{max-height:85vh}.max-h-\[180px\]{max-height:180px}.max-h-\[240px\]{max-height:240px}.max-h-\[340px\]{max-height:340px}.min-h-\[42px\]{min-height:42px}.min-h-\[70px\]{min-height:70px}.min-h-\[80px\]{min-height:80px}.min-h-\[150px\]{min-height:150px}.w-1\.5{width:calc(var(--spacing,.25rem) * 1.5)}.w-1\/3{width:33.3333%}.w-2{width:calc(var(--spacing,.25rem) * 2)}.w-4{width:calc(var(--spacing,.25rem) * 4)}.w-5{width:calc(var(--spacing,.25rem) * 5)}.w-7{width:calc(var(--spacing,.25rem) * 7)}.w-11{width:calc(var(--spacing,.25rem) * 11)}.w-16{width:calc(var(--spacing,.25rem) * 16)}.w-20{width:calc(var(--spacing,.25rem) * 20)}.w-\[2px\]{width:2px}.w-\[3px\]{width:3px}.w-\[5px\]{width:5px}.w-\[90\%\]{width:90%}.w-fit{width:fit-content}.w-full{width:100%}.w-screen{width:100vw}.max-w-\[280px\]{max-width:280px}.max-w-\[500px\]{max-width:500px}.max-w-\[520px\]{max-width:520px}.min-w-0{min-width:calc(var(--spacing,.25rem) * 0)}.min-w-\[36px\]{min-width:36px}.min-w-\[135px\]{min-width:135px}.min-w-\[190px\]{min-width:190px}.flex-1{flex:1}.flex-\[2\]{flex:2}.flex-shrink,.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-y-0\.5{--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-\[1px\]{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-\[0\.97\]{scale:.97}.scale-\[1\.01\]{scale:1.01}.scale-\[1\.02\]{scale:1.02}.scale-\[1\.18\]{scale:1.18}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.transform\!{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)!important}.animate-\[floating_4s_ease-in-out_infinite\]{animation:4s ease-in-out infinite floating}.animate-\[ripple_1\.6s_infinite_ease-out\]{animation:1.6s ease-out infinite ripple}.animate-border-pulse{animation:var(--animate-border-pulse)}.animate-flash{animation:var(--animate-flash)}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-y{resize:vertical}.list-none{list-style-type:none}.flex-col{flex-direction:column}.flex-row\!{flex-direction:row!important}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing,.25rem) * .5)}.gap-1{gap:calc(var(--spacing,.25rem) * 1)}.gap-1\.5{gap:calc(var(--spacing,.25rem) * 1.5)}.gap-2{gap:calc(var(--spacing,.25rem) * 2)}.gap-2\.5{gap:calc(var(--spacing,.25rem) * 2.5)}.gap-3{gap:calc(var(--spacing,.25rem) * 3)}.gap-3\.5{gap:calc(var(--spacing,.25rem) * 3.5)}.gap-4{gap:calc(var(--spacing,.25rem) * 4)}.gap-5{gap:calc(var(--spacing,.25rem) * 5)}.gap-\[2px\]{gap:2px}.gap-\[10px\]{gap:10px}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded\!{border-radius:.25rem!important}.rounded-\[99px_0_0_99px\]{border-radius:99px 0 0 99px}.rounded-\[var\(--radius\)\]{border-radius:var(--radius)}.rounded-desktop{border-radius:var(--radius-desktop)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg,.5rem)}.rounded-md{border-radius:var(--radius-md,.375rem)}.rounded-xl{border-radius:var(--radius-xl,.75rem)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[2\.5px\]{border-style:var(--tw-border-style);border-width:2.5px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-none\!{--tw-border-style:none!important;border-style:none!important}.border-solid{--tw-border-style:solid;border-style:solid}.border-\[\#f43f5e\]{border-color:#f43f5e}.border-\[\#fbbf24\]{border-color:#fbbf24}.border-\[var\(--accent\)\]{border-color:var(--accent)}.border-\[var\(--accent2\)\],.border-\[var\(--accent2\)\]\/25{border-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--accent2\)\]\/25{border-color:color-mix(in oklab,var(--accent2) 25%,transparent)}}.border-\[var\(--border\)\]{border-color:var(--border)}.border-\[var\(--color-accent-blue\)\]{border-color:var(--color-accent-blue)}.border-\[var\(--color-accent-blue\)\]\/15{border-color:#38bdf826}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-accent-blue\)\]\/15{border-color:color-mix(in oklab,var(--color-accent-blue) 15%,transparent)}}.border-\[var\(--color-accent-blue\)\]\/20{border-color:#38bdf833}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-accent-blue\)\]\/20{border-color:color-mix(in oklab,var(--color-accent-blue) 20%,transparent)}}.border-\[var\(--color-accent-blue\)\]\/25{border-color:#38bdf840}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-accent-blue\)\]\/25{border-color:color-mix(in oklab,var(--color-accent-blue) 25%,transparent)}}.border-amber-500\/20{border-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/20{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 20%,transparent)}}.border-amber-500\/25{border-color:#f99c0040}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/25{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.border-amber-500\/40{border-color:#f99c0066}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/40{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 40%,transparent)}}.border-amber-500\/70\!{border-color:#f99c00b3!important}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/70\!{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 70%,transparent)!important}}.border-emerald-500\/25{border-color:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/25{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 25%,transparent)}}.border-red-500{border-color:var(--color-red-500,oklch(63.7% .237 25.331))}.border-red-500\!{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.border-red-500\/20{border-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.border-red-500\/20{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.border-red-500\/25{border-color:#fb2c3640}@supports (color:color-mix(in lab,red,red)){.border-red-500\/25{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 25%,transparent)}}.border-slate-500\/30{border-color:#62748e4d}@supports (color:color-mix(in lab,red,red)){.border-slate-500\/30{border-color:color-mix(in oklab,var(--color-slate-500,oklch(55.4% .046 257.417)) 30%,transparent)}}.border-white\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.border-white\/5{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.border-white\/12{border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.border-white\/12{border-color:color-mix(in oklab,var(--color-white,#fff) 12%,transparent)}}.border-white\/15{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.border-white\/15{border-color:color-mix(in oklab,var(--color-white,#fff) 15%,transparent)}}.border-white\/\[0\.03\]{border-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.03\]{border-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.border-white\/\[0\.05\]{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.05\]{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.border-yellow-500\/30{border-color:#edb2004d}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/30{border-color:color-mix(in oklab,var(--color-yellow-500,oklch(79.5% .184 86.047)) 30%,transparent)}}.border-t-\[var\(--color-accent-blue\)\]{border-top-color:var(--color-accent-blue)}.bg-\[\#1e2436\]{background-color:#1e2436}.bg-\[\#39ff14\]{background-color:#39ff14}.bg-\[\#444\]{background-color:#444}.bg-\[\#ff6d00\]{background-color:#ff6d00}.bg-\[\#ffab00\]{background-color:#ffab00}.bg-\[rgba\(244\,63\,94\,0\.05\)\]{background-color:#f43f5e0d}.bg-\[rgba\(251\,191\,36\,0\.05\)\]{background-color:#fbbf240d}.bg-\[var\(--accent\)\]{background-color:var(--accent)}.bg-\[var\(--accent2\)\],.bg-\[var\(--accent2\)\]\/8{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--accent2\)\]\/8{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.bg-\[var\(--accent2\)\]\/10{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--accent2\)\]\/10{background-color:color-mix(in oklab,var(--accent2) 10%,transparent)}}.bg-\[var\(--accent2\)\]\/15{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--accent2\)\]\/15{background-color:color-mix(in oklab,var(--accent2) 15%,transparent)}}.bg-\[var\(--bg\)\]{background-color:var(--bg)}.bg-\[var\(--border\)\]{background-color:var(--border)}.bg-\[var\(--color-accent-blue\)\]{background-color:var(--color-accent-blue)}.bg-\[var\(--color-accent-blue\)\]\/8{background-color:#38bdf814}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--color-accent-blue\)\]\/8{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.bg-\[var\(--color-accent-green\)\]{background-color:var(--color-accent-green)}.bg-\[var\(--color-obsidian-300\)\]{background-color:var(--color-obsidian-300)}.bg-\[var\(--color-obsidian-700\)\]{background-color:var(--color-obsidian-700)}.bg-\[var\(--color-obsidian-800\)\]{background-color:var(--color-obsidian-800)}.bg-\[var\(--color-obsidian-900\)\]{background-color:var(--color-obsidian-900)}.bg-\[var\(--color-obsidian-950\)\]{background-color:var(--color-obsidian-950)}.bg-\[var\(--surface2\)\]{background-color:var(--surface2)}.bg-accent-blue{background-color:var(--color-accent-blue)}.bg-accent-blue\!{background-color:var(--color-accent-blue)!important}.bg-amber-400{background-color:var(--color-amber-400,oklch(82.8% .189 84.429))}.bg-amber-500\/6{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/6{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.bg-amber-950\/30{background-color:#4619014d}@supports (color:color-mix(in lab,red,red)){.bg-amber-950\/30{background-color:color-mix(in oklab,var(--color-amber-950,oklch(27.9% .077 45.635)) 30%,transparent)}}.bg-black\/25{background-color:#00000040}@supports (color:color-mix(in lab,red,red)){.bg-black\/25{background-color:color-mix(in oklab,var(--color-black,#000) 25%,transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black,#000) 40%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black,#000) 60%,transparent)}}.bg-cyan-500\/15{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.bg-cyan-500\/15{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.bg-emerald-500\/6{background-color:#00bb7f0f}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/6{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 6%,transparent)}}.bg-emerald-500\/15{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/15{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.bg-emerald-950\/80{background-color:#002c22cc}@supports (color:color-mix(in lab,red,red)){.bg-emerald-950\/80{background-color:color-mix(in oklab,var(--color-emerald-950,oklch(26.2% .051 172.552)) 80%,transparent)}}.bg-red-400\/10{background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.bg-red-400\/10{background-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 10%,transparent)}}.bg-red-500{background-color:var(--color-red-500,oklch(63.7% .237 25.331))}.bg-red-500\/6{background-color:#fb2c360f}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/6{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 6%,transparent)}}.bg-red-500\/8{background-color:#fb2c3614}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/8{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 8%,transparent)}}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.bg-red-500\/15{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/15{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 15%,transparent)}}.bg-slate-500\/10{background-color:#62748e1a}@supports (color:color-mix(in lab,red,red)){.bg-slate-500\/10{background-color:color-mix(in oklab,var(--color-slate-500,oklch(55.4% .046 257.417)) 10%,transparent)}}.bg-transparent{background-color:#0000}.bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/5{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.bg-white\/\[0\.02\]{background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.02\]{background-color:color-mix(in oklab,var(--color-white,#fff) 2%,transparent)}}.bg-white\/\[0\.03\]{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.03\]{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.bg-white\/\[0\.05\]{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.05\]{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.bg-white\/\[0\.08\]{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-white,#fff) 8%,transparent)}}.bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500,oklch(79.5% .184 86.047)) 10%,transparent)}}.object-contain{object-fit:contain}.p-0{padding:calc(var(--spacing,.25rem) * 0)}.p-0\.5{padding:calc(var(--spacing,.25rem) * .5)}.p-1{padding:calc(var(--spacing,.25rem) * 1)}.p-1\.5{padding:calc(var(--spacing,.25rem) * 1.5)}.p-2{padding:calc(var(--spacing,.25rem) * 2)}.p-2\.5{padding:calc(var(--spacing,.25rem) * 2.5)}.p-3{padding:calc(var(--spacing,.25rem) * 3)}.p-4{padding:calc(var(--spacing,.25rem) * 4)}.p-5{padding:calc(var(--spacing,.25rem) * 5)}.p-6{padding:calc(var(--spacing,.25rem) * 6)}.p-10{padding:calc(var(--spacing,.25rem) * 10)}.p-\[3px\]{padding:3px}.p-\[30px\]{padding:30px}.px-1{padding-inline:calc(var(--spacing,.25rem) * 1)}.px-1\.5{padding-inline:calc(var(--spacing,.25rem) * 1.5)}.px-1\.5\!{padding-inline:calc(var(--spacing,.25rem) * 1.5)!important}.px-2{padding-inline:calc(var(--spacing,.25rem) * 2)}.px-2\.5{padding-inline:calc(var(--spacing,.25rem) * 2.5)}.px-3{padding-inline:calc(var(--spacing,.25rem) * 3)}.px-3\.5{padding-inline:calc(var(--spacing,.25rem) * 3.5)}.px-4{padding-inline:calc(var(--spacing,.25rem) * 4)}.px-5{padding-inline:calc(var(--spacing,.25rem) * 5)}.py-0\.5{padding-block:calc(var(--spacing,.25rem) * .5)}.py-0\.5\!{padding-block:calc(var(--spacing,.25rem) * .5)!important}.py-1{padding-block:calc(var(--spacing,.25rem) * 1)}.py-1\.5{padding-block:calc(var(--spacing,.25rem) * 1.5)}.py-2{padding-block:calc(var(--spacing,.25rem) * 2)}.py-5{padding-block:calc(var(--spacing,.25rem) * 5)}.pt-2{padding-top:calc(var(--spacing,.25rem) * 2)}.pt-3\.5{padding-top:calc(var(--spacing,.25rem) * 3.5)}.pt-4{padding-top:calc(var(--spacing,.25rem) * 4)}.pt-\[14px\]{padding-top:14px}.pr-9{padding-right:calc(var(--spacing,.25rem) * 9)}.pb-4{padding-bottom:calc(var(--spacing,.25rem) * 4)}.pl-3{padding-left:calc(var(--spacing,.25rem) * 3)}.pl-3\.5{padding-left:calc(var(--spacing,.25rem) * 3.5)}.pl-4{padding-left:calc(var(--spacing,.25rem) * 4)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace)}.text-2xl{font-size:var(--text-2xl,1.5rem);line-height:var(--tw-leading,var(--text-2xl--line-height,calc(2 / 1.5)))}.text-base{font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ))}.text-lg{font-size:var(--text-lg,1.125rem);line-height:var(--tw-leading,var(--text-lg--line-height,calc(1.75 / 1.125)))}.text-sm{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)))}.text-xl{font-size:var(--text-xl,1.25rem);line-height:var(--tw-leading,var(--text-xl--line-height,calc(1.75 / 1.25)))}.text-xs{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)))}.text-\[7px\]{font-size:7px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11\.5px\]{font-size:11.5px}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-\[12px\]\!{font-size:12px!important}.text-\[13\.5px\]{font-size:13.5px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[32px\]{font-size:32px}.leading-5{--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5)}.leading-6{--tw-leading:calc(var(--spacing,.25rem) * 6);line-height:calc(var(--spacing,.25rem) * 6)}.leading-\[1\.1\]{--tw-leading:1.1;line-height:1.1}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625)}.font-\[850\]{--tw-font-weight:850;font-weight:850}.font-bold{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800)}.font-extrabold\!{--tw-font-weight:var(--font-weight-extrabold,800)!important;font-weight:var(--font-weight-extrabold,800)!important}.font-medium{--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500)}.font-normal{--tw-font-weight:var(--font-weight-normal,400);font-weight:var(--font-weight-normal,400)}.font-semibold{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600)}.tracking-\[-0\.5px\]{--tw-tracking:-.5px;letter-spacing:-.5px}.tracking-\[0\.06em\]{--tw-tracking:.06em;letter-spacing:.06em}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-tight{--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em)}.tracking-wide{--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em)}.tracking-wider{--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--accent\)\]{color:var(--accent)}.text-\[var\(--accent2\)\]{color:var(--accent2)}.text-\[var\(--color-accent-blue\)\]{color:var(--color-accent-blue)}.text-\[var\(--color-obsidian-200\)\]{color:var(--color-obsidian-200)}.text-\[var\(--color-obsidian-300\)\]{color:var(--color-obsidian-300)}.text-\[var\(--color-obsidian-400\)\]{color:var(--color-obsidian-400)}.text-\[var\(--text\)\]{color:var(--text)}.text-\[var\(--text-muted\)\]{color:var(--text-muted)}.text-accent-blue{color:var(--color-accent-blue)}.text-amber-200\/80{color:#fee685cc}@supports (color:color-mix(in lab,red,red)){.text-amber-200\/80{color:color-mix(in oklab,var(--color-amber-200,oklch(92.4% .12 95.746)) 80%,transparent)}}.text-amber-300\/90{color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.text-amber-300\/90{color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.text-amber-400{color:var(--color-amber-400,oklch(82.8% .189 84.429))}.text-black{color:var(--color-black,#000)}.text-black\!{color:var(--color-black,#000)!important}.text-cyan-200{color:var(--color-cyan-200,oklch(91.7% .08 205.041))}.text-cyan-300{color:var(--color-cyan-300,oklch(86.5% .127 207.078))}.text-emerald-200{color:var(--color-emerald-200,oklch(90.5% .093 164.15))}.text-emerald-300{color:var(--color-emerald-300,oklch(84.5% .143 164.978))}.text-emerald-300\/90{color:#5ee9b5e6}@supports (color:color-mix(in lab,red,red)){.text-emerald-300\/90{color:color-mix(in oklab,var(--color-emerald-300,oklch(84.5% .143 164.978)) 90%,transparent)}}.text-emerald-400{color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.text-neutral-900{color:var(--color-neutral-900,oklch(20.5% 0 0))}.text-obsidian-300{color:var(--color-obsidian-300)}.text-red-300{color:var(--color-red-300,oklch(80.8% .114 19.571))}.text-red-400{color:var(--color-red-400,oklch(70.4% .191 22.216))}.text-slate-100{color:var(--color-slate-100,oklch(96.8% .007 247.896))}.text-slate-200{color:var(--color-slate-200,oklch(92.9% .013 255.508))}.text-slate-300{color:var(--color-slate-300,oklch(86.9% .022 252.894))}.text-white{color:var(--color-white,#fff)}.text-white\/30{color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.text-white\/30{color:color-mix(in oklab,var(--color-white,#fff) 30%,transparent)}}.text-yellow-200{color:var(--color-yellow-200,oklch(94.5% .129 101.54))}.text-yellow-500{color:var(--color-yellow-500,oklch(79.5% .184 86.047))}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.not-italic{font-style:normal}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.no-underline{text-decoration-line:none}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-55{opacity:.55}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_6px_\#ffab00\]{--tw-shadow:0 0 6px var(--tw-shadow-color,#ffab00);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_8px_var\(--color-accent-blue\)\]{--tw-shadow:0 0 8px var(--tw-shadow-color,var(--color-accent-blue));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_2px_6px_rgba\(56\,189\,248\,0\.05\)\]{--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf80d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_4px_12px_rgba\(0\,0\,0\,0\.15\)\]{--tw-shadow:0 4px 12px var(--tw-shadow-color,#00000026);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_4px_14px_rgba\(56\,189\,248\,0\.3\)\]{--tw-shadow:0 4px 14px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_6px_14px_rgba\(56\,189\,248\,0\.35\)\]{--tw-shadow:0 6px 14px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_6px_18px_rgba\(56\,189\,248\,0\.45\)\]{--tw-shadow:0 6px 18px var(--tw-shadow-color,#38bdf873);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_10px_30px_rgba\(0\,0\,0\,0\.4\)\,_0_0_12px_rgba\(56\,189\,248\,0\.15\)\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#0006), 0 0 12px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_10px_30px_rgba\(0\,0\,0\,0\.5\)\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[inset_0_2px_4px_rgba\(0\,0\,0\,0\.2\)\]{--tw-shadow:inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2\!{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.ring-red-500\/20\!{--tw-ring-color:#fb2c3633!important}@supports (color:color-mix(in lab,red,red)){.ring-red-500\/20\!{--tw-ring-color:color-mix(in oklab, var(--color-red-500,oklch(63.7% .237 25.331)) 20%, transparent)!important}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.brightness-110{--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_0_6px_rgba\(234\,179\,8\,0\.3\)\]{--tw-drop-shadow-size:drop-shadow(0 0 6px var(--tw-drop-shadow-color,#eab3084d));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_0_10px_rgba\(56\,189\,248\,0\.6\)\]{--tw-drop-shadow-size:drop-shadow(0 0 10px var(--tw-drop-shadow-color,#38bdf899));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_2px_8px_rgba\(56\,189\,248\,0\.3\)\]{--tw-drop-shadow-size:drop-shadow(0 2px 8px var(--tw-drop-shadow-color,#38bdf84d));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_4px_24px_rgba\(56\,189\,248\,0\.35\)\]{--tw-drop-shadow-size:drop-shadow(0 4px 24px var(--tw-drop-shadow-color,#38bdf859));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter\!{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)!important}.backdrop-blur-\[4px\]{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-\[left\]{transition-property:left;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-250{--tw-duration:.25s;transition-duration:.25s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-\[50ms\]{--tw-duration:50ms;transition-duration:50ms}.ease-in-out{--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1))}.ease-out{--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.hover\:border-\[\#fbbf24\]\/80:hover{border-color:#fbbf24cc}.hover\:border-accent-blue:hover{border-color:var(--color-accent-blue)}.hover\:bg-\[var\(--accent2\)\]:hover{background-color:var(--accent2)}.hover\:bg-\[var\(--border\)\]:hover{background-color:var(--border)}.hover\:bg-black\/35:hover{background-color:#00000059}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/35:hover{background-color:color-mix(in oklab,var(--color-black,#000) 35%,transparent)}}.hover\:text-white:hover{color:var(--color-white,#fff)}}.focus\:border-accent-blue:focus{border-color:var(--color-accent-blue)}.focus\:border-red-500\!:focus{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.focus\:bg-black\/35:focus{background-color:#00000059}@supports (color:color-mix(in lab,red,red)){.focus\:bg-black\/35:focus{background-color:color-mix(in oklab,var(--color-black,#000) 35%,transparent)}}.focus\:ring-red-500\/20\!:focus{--tw-ring-color:#fb2c3633!important}@supports (color:color-mix(in lab,red,red)){.focus\:ring-red-500\/20\!:focus{--tw-ring-color:color-mix(in oklab, var(--color-red-500,oklch(63.7% .237 25.331)) 20%, transparent)!important}}.disabled\:opacity-50:disabled{opacity:.5}}section{flex-direction:column;gap:20px;max-width:650px;animation:.25s cubic-bezier(.175,.885,.32,1.15) forwards slideIn;display:flex}@keyframes slideIn{0%{opacity:0;transform:translateY(6px)scale(.995)}to{opacity:1;transform:none}}h2{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em);color:var(--color-obsidian-100);margin-bottom:2px;font-size:20px}h3{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em);text-transform:uppercase;color:var(--color-accent-blue);margin-bottom:8px;font-size:11px}.field-group{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;flex-direction:column;gap:16px;padding:18px 20px;transition:all .2s ease-out;display:flex}.field-group:hover{background-color:#ffffff0d;border-color:#ffffff1f}.field{cursor:pointer;justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 4);padding-top:4px;padding-bottom:4px;display:flex}.field.col{align-items:stretch;gap:calc(var(--spacing,.25rem) * 1.5);flex-direction:column;width:100%}.field span{color:var(--text);flex:1;font-size:13px;font-weight:500;transition:color .15s ease-out}.field:hover span{color:#fff}.field select{min-width:190px;padding:8px 36px 8px 12px;font-size:13px}.hint{color:var(--text-muted);margin-top:4px;font-size:11px;line-height:1.625}.hint code{background-color:var(--color-obsidian-950);color:var(--color-accent-blue);border:1px solid var(--border);border-radius:4px;padding:2px 6px;font-family:monospace;font-size:10px}.field-label-row{justify-content:space-between;align-items:center;width:100%;margin-bottom:2px;display:flex}.btn-add-inline{color:var(--accent2);cursor:pointer;border-radius:var(--radius);background:0 0;border:none;padding:4px 8px;font-size:11px;font-weight:700;transition:all .15s ease-out}.btn-add-inline:hover{color:#fff;background-color:#38bdf81a}.dynamic-list{flex-direction:column;gap:8px;width:100%;margin-top:4px;display:flex}.dynamic-list-row{align-items:center;gap:calc(var(--spacing,.25rem) * 2);width:100%;display:flex}.dynamic-list-row input,.dynamic-list-row select{min-width:calc(var(--spacing,.25rem) * 0)}.btn-remove-inline{box-sizing:border-box;color:#f87171;cursor:pointer;border-radius:var(--radius);background-color:#ef444414;border:1px solid #ef444433;justify-content:center;align-items:center;height:34px;padding:6px 12px;font-size:12px;font-weight:700;transition:all .15s ease-out;display:flex}.btn-remove-inline:hover{color:#fff;background-color:#ef4444;border-color:#ef4444;box-shadow:0 2px 8px #ef444440}.warning-alert{align-items:center;gap:calc(var(--spacing,.25rem) * 2);color:#f59e0b;border-radius:var(--radius);background-color:#f59e0b1a;border:1px solid #f59e0b40;margin-top:4px;padding:10px 14px;font-size:12px;font-weight:500;animation:.25s cubic-bezier(.175,.885,.32,1.15) forwards slideIn;display:flex}@keyframes border-pulse{0%,to{border-color:#f43f5e66}50%{border-color:#f43f5e}}@keyframes flash{0%,to{opacity:1}50%{opacity:.3}}:root{--bg:var(--color-obsidian-950);--surface:var(--color-obsidian-900);--surface2:var(--color-obsidian-800);--accent:var(--color-accent-blue);--accent2:var(--color-accent-blue);--text:var(--color-obsidian-100);--text-muted:var(--color-obsidian-300);--border:#ffffff0d;--radius:var(--radius-desktop);--recording-color:var(--color-accent-tangerine);--idle-color:var(--color-accent-blue);--speaking-color:var(--color-accent-green);--transition-spring:var(--transition-snappy);--transition-spring-fast:var(--transition-snappy-fast)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body,#app{width:100%;height:100%;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;font-family:Outfit,Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;overflow:hidden}html.overlay-window,body.overlay-window,body.overlay-window #app{box-shadow:none!important;background:0 0!important;border:none!important;outline:none!important;overflow:hidden!important}body.overlay-window *{box-shadow:none!important;outline:none!important}body.overlay-window ::-webkit-scrollbar{width:0!important;height:0!important;display:none!important}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#ffffff0f;border-radius:99px;transition:background .2s}::-webkit-scrollbar-thumb:hover{background:#ffffff26}.sr-only{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}button{cursor:pointer;font-family:inherit;font-size:inherit;background:0 0;border:none;outline:none}input,select,textarea{font-family:inherit;font-size:inherit;outline:none}select{-webkit-appearance:none;appearance:none;background:var(--surface2) url("data:image/svg+xml;utf8,") no-repeat right 12px center;color:var(--text);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;transition:var(--transition-snappy-fast);background-size:10px;padding:8px 36px 8px 12px;box-shadow:0 4px 12px #00000026}select:hover{background-color:var(--color-obsidian-700);border-color:#ffffff1f;transform:translateY(-1px)}select:focus{border-color:var(--accent2);box-shadow:0 0 0 2px #38bdf826}select option{background-color:var(--color-obsidian-900);color:var(--text);padding:10px 12px}select:-webkit-autofill{-webkit-text-fill-color:var(--text)!important;-webkit-box-shadow:0 0 0px 1000px var(--color-obsidian-900) inset!important}select:-webkit-autofill:hover{-webkit-text-fill-color:var(--text)!important;-webkit-box-shadow:0 0 0px 1000px var(--color-obsidian-900) inset!important}select:-webkit-autofill:focus{-webkit-text-fill-color:var(--text)!important;-webkit-box-shadow:0 0 0px 1000px var(--color-obsidian-900) inset!important}.interactive-spring{transition:var(--transition-snappy)}.interactive-spring:hover{transform:scale(1.02)translateY(-1px)}.interactive-spring:active{transform:scale(.97)translateY(0)}input[type=checkbox]{-webkit-appearance:none;appearance:none;background:var(--color-obsidian-700);cursor:pointer;width:36px;height:20px;transition:var(--transition-spring-fast);border:1px solid var(--border);border-radius:99px;outline:none;position:relative}input[type=checkbox]:before{content:"";background:var(--color-obsidian-300);width:14px;height:14px;transition:var(--transition-spring-fast);border-radius:50%;position:absolute;top:2px;left:2px}input[type=checkbox]:checked{background:var(--color-accent-blue);border-color:var(--color-accent-blue)}input[type=checkbox]:checked:before{background:#fff;left:18px;box-shadow:0 2px 4px #0003}input[type=checkbox]:hover{border-color:#ffffff26}input[type=number],input[type=text],input[type=password]{background:var(--color-obsidian-950);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);min-width:170px;transition:var(--transition-spring-fast);outline:none;padding:8px 12px;font-size:13px;box-shadow:inset 0 2px 4px #0003}input[type=number]:hover,input[type=text]:hover,input[type=password]:hover{background-color:var(--color-obsidian-900);border-color:#ffffff26}input[type=number]:focus,input[type=text]:focus,input[type=password]:focus{border-color:var(--accent2);background-color:var(--color-obsidian-950);box-shadow:0 0 0 2px #38bdf826,inset 0 2px 4px #0003}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false} diff --git a/dist/assets/index-CAhZLQF6.css b/dist/assets/index-CAhZLQF6.css new file mode 100644 index 00000000..eeba26f3 --- /dev/null +++ b/dist/assets/index-CAhZLQF6.css @@ -0,0 +1 @@ +@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid}}}.hint.error.svelte-da8msw{color:var(--color-red-400,oklch(70.4% .191 22.216))}.link.svelte-da8msw{cursor:pointer;border-style:var(--tw-border-style);padding:calc(var(--spacing,.25rem) * 0);color:inherit;text-underline-offset:2px;background-color:#0000;border-width:0;text-decoration-line:underline}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}.custom-select-wrapper.svelte-1heock4{flex:2;width:100%;min-width:190px;position:relative}.custom-select-trigger.svelte-1heock4{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-right:calc(var(--spacing,.25rem) * 9);text-align:left;--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text);--tw-shadow:0 4px 12px var(--tw-shadow-color,#00000026);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));-webkit-user-select:none;user-select:none;background:var(--surface2) url("data:image/svg+xml;utf8,") no-repeat right 12px center;background-size:10px}.custom-select-trigger.svelte-1heock4:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.custom-select-trigger.svelte-1heock4:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 12%,transparent)}}.custom-select-trigger.svelte-1heock4:hover{background-color:var(--color-obsidian-700)}.custom-select-trigger.svelte-1heock4:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-select-trigger.svelte-1heock4:disabled{cursor:not-allowed;opacity:.5;--tw-translate-y:calc(var(--spacing,.25rem) * 0)!important;translate:var(--tw-translate-x) var(--tw-translate-y)!important}.custom-dropdown-menu.svelte-1heock4{z-index:2000;gap:calc(var(--spacing,.25rem) * .5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 1);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex;overflow-y:auto}.custom-dropdown-item.svelte-1heock4{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);text-align:left;color:var(--text);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;background-color:#0000;border-style:none;font-size:13px;transition-duration:.15s}.custom-dropdown-item.svelte-1heock4:hover{background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.svelte-1heock4:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 4%,transparent)}}.custom-dropdown-item.selected.svelte-1heock4{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.selected.svelte-1heock4{background-color:color-mix(in oklab,var(--accent2) 10%,transparent)}}.custom-dropdown-item.selected.svelte-1heock4{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--accent2)}.custom-dropdown-item.svelte-1heock4:disabled{cursor:not-allowed;opacity:.4}.custom-dropdown-item.svelte-1heock4:disabled:hover{background-color:#0000}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-duration:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-leading:initial}}}.model-status-container.svelte-nfi4ak{margin-bottom:calc(var(--spacing,.25rem) * 3);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);min-height:42px;padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);align-items:center;font-size:13px;display:flex}.status-downloaded.svelte-nfi4ak{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-downloading.svelte-nfi4ak{color:var(--accent2)}.status-checking.svelte-nfi4ak{color:var(--text-muted)}.status-missing-wrapper.svelte-nfi4ak{justify-content:space-between;align-items:center;width:100%;display:flex}.status-missing.svelte-nfi4ak{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-download.svelte-nfi4ak{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}.btn-download.svelte-nfi4ak:hover{background-color:var(--accent2)}.field-input-error.svelte-nfi4ak{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.field-input-error.svelte-nfi4ak:focus{border-color:var(--color-red-500,oklch(63.7% .237 25.331));--tw-shadow:0 0 0 2px var(--tw-shadow-color,#ef444426), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field-error-msg.svelte-nfi4ak{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5);color:var(--color-red-400,oklch(70.4% .191 22.216))}.test-row.svelte-nfi4ak{margin-top:calc(var(--spacing,.25rem) * 4);align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-wrap:wrap;display:flex}.btn-test.svelte-nfi4ak{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding-inline:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}@media (hover:hover){.btn-test.svelte-nfi4ak:hover{background-color:var(--accent2)}}.btn-test.svelte-nfi4ak:disabled{cursor:not-allowed;opacity:.5}.status-pill.svelte-nfi4ak{border-radius:var(--radius);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500)}.status-pill.success.svelte-nfi4ak{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-nfi4ak{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 30%,transparent)}}.status-pill.success.svelte-nfi4ak{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-nfi4ak{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.status-pill.success.svelte-nfi4ak{color:var(--color-emerald-300,oklch(84.5% .143 164.978))}.status-pill.error.svelte-nfi4ak{border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-nfi4ak{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 30%,transparent)}}.status-pill.error.svelte-nfi4ak{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-nfi4ak{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 15%,transparent)}}.status-pill.error.svelte-nfi4ak{color:var(--color-red-300,oklch(80.8% .114 19.571))}.discovered-models.svelte-nfi4ak{margin-bottom:calc(var(--spacing,.25rem) * 3);align-items:center;gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}.model-tags.svelte-nfi4ak{align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);flex-wrap:wrap;display:flex}.tag-btn.svelte-nfi4ak{cursor:pointer;border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));border-radius:.25rem}@media (hover:hover){.tag-btn.svelte-nfi4ak:hover{background-color:var(--border);color:var(--color-white,#fff)}}.tag-btn.active.svelte-nfi4ak{border-color:var(--accent);background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.tag-btn.active.svelte-nfi4ak{background-color:color-mix(in oklab,var(--accent) 10%,transparent)}}.tag-btn.active.svelte-nfi4ak{color:var(--accent)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-tracking:initial;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}.val.svelte-1msnq7i{text-align:right;min-width:36px;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.vu-meter-container.svelte-1msnq7i{margin-block:calc(var(--spacing,.25rem) * 1);margin-bottom:calc(var(--spacing,.25rem) * 3);gap:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 1);flex-direction:column;display:flex}.vu-meter-info.svelte-1msnq7i{align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em);text-transform:uppercase;font-size:10px;display:flex}.vu-label.svelte-1msnq7i{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text-muted)}.vu-status-dot.svelte-1msnq7i{height:calc(var(--spacing,.25rem) * 1.5);width:calc(var(--spacing,.25rem) * 1.5);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));background-color:#444}.vu-status-dot.active.svelte-1msnq7i{--tw-shadow:0 0 8px var(--tw-shadow-color,#39ff14);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#39ff14}.vu-status-text.svelte-1msnq7i{color:var(--text);opacity:.7;margin-left:auto}.vu-meter-bar-wrapper.svelte-1msnq7i{box-sizing:border-box;height:calc(var(--spacing,.25rem) * 3.5);background-color:#0006;width:100%;position:relative}@supports (color:color-mix(in lab,red,red)){.vu-meter-bar-wrapper.svelte-1msnq7i{background-color:color-mix(in oklab,var(--color-black,#000) 40%,transparent)}}.vu-meter-bar-wrapper.svelte-1msnq7i{padding:3px}.vu-meter-bar.svelte-1msnq7i{gap:2px;width:100%;height:100%;display:flex;position:relative}.vu-segment.svelte-1msnq7i{background-color:#ffffff0d;flex:1;height:100%}@supports (color:color-mix(in lab,red,red)){.vu-segment.svelte-1msnq7i{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.vu-segment.svelte-1msnq7i{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:50ms;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:50ms;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.vu-segment.active.svelte-1msnq7i{--tw-shadow:0 0 4px var(--tw-shadow-color,#39ff144d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#39ff14}.vu-segment.active.orange.svelte-1msnq7i{--tw-shadow:0 0 4px var(--tw-shadow-color,#ff6d0080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#ff6d00}.vu-peak-marker.svelte-1msnq7i{pointer-events:none;top:calc(var(--spacing,.25rem) * -.5);bottom:calc(var(--spacing,.25rem) * -.5);--tw-shadow:0 0 6px var(--tw-shadow-color,#ffab00);width:2px;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:left;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:50ms;--tw-ease:linear;background-color:#ffab00;transition-duration:50ms;transition-timing-function:linear;position:absolute}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-leading:initial;--tw-duration:initial;--tw-ease:initial;--tw-tracking:initial}}}.modal-backdrop.svelte-oc07pw{inset:calc(var(--spacing,.25rem) * 0);z-index:1000;background-color:#0009;justify-content:center;align-items:center;display:flex;position:fixed}@supports (color:color-mix(in lab,red,red)){.modal-backdrop.svelte-oc07pw{background-color:color-mix(in oklab,var(--color-black,#000) 60%,transparent)}}.modal-backdrop.svelte-oc07pw{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.target-modal-backdrop.svelte-oc07pw{z-index:1100!important}.modal.svelte-oc07pw{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);width:90%;max-width:500px;max-height:85vh;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex}.modal-header.svelte-oc07pw{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);justify-content:space-between;align-items:center;display:flex}.modal-header.svelte-oc07pw h3:where(.svelte-oc07pw){margin:calc(var(--spacing,.25rem) * 0);--tw-font-weight:var(--font-weight-bold,700);font-size:15px;font-weight:var(--font-weight-bold,700)}.close-btn.svelte-oc07pw{cursor:pointer;--tw-border-style:none;font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));color:var(--text-muted);background-color:#0000;border-style:none}.close-btn.svelte-oc07pw:hover{color:var(--text)}.modal-body.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 3.5);padding:calc(var(--spacing,.25rem) * 5);flex-direction:column;display:flex;overflow-y:auto}.modal-footer.svelte-oc07pw{justify-content:flex-end;gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);display:flex}.morph-section.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 2.5);border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:1px;border-color:var(--border);background-color:#ffffff05;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.morph-section.svelte-oc07pw{background-color:color-mix(in oklab,var(--color-white,#fff) 2%,transparent)}}.morph-section.svelte-oc07pw{padding:calc(var(--spacing,.25rem) * 3)}.morph-section.svelte-oc07pw h5:where(.svelte-oc07pw),.processing-toggles.svelte-oc07pw h5:where(.svelte-oc07pw){margin:calc(var(--spacing,.25rem) * 0);margin-bottom:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);text-transform:uppercase}.processing-toggles.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding-top:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}.checkbox-field.svelte-oc07pw{cursor:pointer;align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted);display:flex}.checkbox-field.svelte-oc07pw input[type=checkbox]:where(.svelte-oc07pw){cursor:pointer}.checkbox-field.svelte-oc07pw:hover{color:var(--text)}.chat-actions.svelte-oc07pw{align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.chat-status.svelte-oc07pw{margin-top:calc(var(--spacing,.25rem) * 1.5);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);display:block}.chat-status.ok.svelte-oc07pw{color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.chat-status.bad.svelte-oc07pw{color:var(--color-red-400,oklch(70.4% .191 22.216))}.full-width-input.svelte-oc07pw{width:100%!important}textarea.svelte-oc07pw{resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--text);--tw-shadow:inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}textarea.svelte-oc07pw:hover{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){textarea.svelte-oc07pw:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 15%,transparent)}}textarea.svelte-oc07pw:hover{background-color:var(--color-obsidian-900)}textarea.svelte-oc07pw:focus{border-color:var(--accent2);background-color:var(--color-obsidian-950);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field.col.svelte-oc07pw{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;width:100%}.mcp-container.svelte-oc07pw{gap:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 1.5);flex-direction:column;display:flex}.field-label-row.svelte-oc07pw{margin-bottom:calc(var(--spacing,.25rem) * .5);justify-content:space-between;align-items:center;width:100%;display:flex}.field-title.svelte-oc07pw{--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text)}.field-tag.svelte-oc07pw{border-style:var(--tw-border-style);border-width:1px;border-color:var(--accent2);border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-oc07pw{border-color:color-mix(in oklab,var(--accent2) 25%,transparent)}}.field-tag.svelte-oc07pw{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-oc07pw{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.field-tag.svelte-oc07pw{padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-leading:1;--tw-font-weight:var(--font-weight-bold,700);font-size:9px;line-height:1;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em);color:var(--accent2);text-transform:uppercase}p.hint.svelte-oc07pw{margin:calc(var(--spacing,.25rem) * 0);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}p.hint.svelte-oc07pw code:where(.svelte-oc07pw){border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);border-radius:.25rem;font-size:10px}.validation-error-msg.svelte-oc07pw{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-red-400,oklch(70.4% .191 22.216));display:block}.longer-display-label.svelte-oc07pw{min-width:255px!important}.animate-fade-in.svelte-oc07pw{animation:.2s cubic-bezier(.16,1,.3,1) fade-in}@keyframes svelte-oc07pw-fade-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-duration:initial;--tw-leading:initial;--tw-font-weight:initial;--tw-ease:initial}}}.backend-banner.svelte-1hl6idm{margin-bottom:calc(var(--spacing,.25rem) * 1);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.backend-banner.svelte-1hl6idm{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.backend-banner.svelte-1hl6idm{padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;transition-duration:.15s}.backend-banner.private.svelte-1hl6idm{border-color:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.backend-banner.private.svelte-1hl6idm{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 25%,transparent)}}.backend-banner.private.svelte-1hl6idm{background-color:#00bb7f0f}@supports (color:color-mix(in lab,red,red)){.backend-banner.private.svelte-1hl6idm{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 6%,transparent)}}.backend-banner.warn.svelte-1hl6idm{border-color:#f99c0040}@supports (color:color-mix(in lab,red,red)){.backend-banner.warn.svelte-1hl6idm{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.backend-banner.warn.svelte-1hl6idm{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.backend-banner.warn.svelte-1hl6idm{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.backend-banner.broken.svelte-1hl6idm{border-color:#fb2c3640}@supports (color:color-mix(in lab,red,red)){.backend-banner.broken.svelte-1hl6idm{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 25%,transparent)}}.backend-banner.broken.svelte-1hl6idm{background-color:#fb2c360f}@supports (color:color-mix(in lab,red,red)){.backend-banner.broken.svelte-1hl6idm{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 6%,transparent)}}.manual-enable-banner.svelte-1hl6idm{margin-bottom:calc(var(--spacing,.25rem) * 1);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0040;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.manual-enable-banner.svelte-1hl6idm{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.manual-enable-banner.svelte-1hl6idm{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.manual-enable-banner.svelte-1hl6idm{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.manual-enable-banner.svelte-1hl6idm{padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;transition-duration:.15s}.banner-toggle.svelte-1hl6idm{cursor:pointer;align-items:center;gap:calc(var(--spacing,.25rem) * 2.5);--tw-border-style:none;width:100%;padding:calc(var(--spacing,.25rem) * 0);text-align:left;color:var(--text);-webkit-user-select:none;user-select:none;background-color:#0000;border-style:none;display:flex}.banner-title.svelte-1hl6idm{--tw-leading:var(--leading-normal,1.5);font-size:12.5px;line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);flex:1}.banner-chevron.svelte-1hl6idm{height:calc(var(--spacing,.25rem) * 4);width:calc(var(--spacing,.25rem) * 4);color:var(--text-muted);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));flex-shrink:0}.banner-chevron.expanded.svelte-1hl6idm{color:var(--text);rotate:180deg}.banner-content.svelte-1hl6idm{margin-top:calc(var(--spacing,.25rem) * 2);width:100%;min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);border-top-style:var(--tw-border-style);border-color:#ffffff0d;border-top-width:1px;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.banner-content.svelte-1hl6idm{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.banner-content.svelte-1hl6idm{padding-top:calc(var(--spacing,.25rem) * 2);padding-left:calc(var(--spacing,.25rem) * 6.5);font-size:12.5px}.backend-icon.svelte-1hl6idm{font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));--tw-leading:1;flex-shrink:0;line-height:1}.backend-detail.svelte-1hl6idm{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.backend-detail.error.svelte-1hl6idm{color:var(--color-red-400,oklch(70.4% .191 22.216))}.manual-enable-actions.svelte-1hl6idm{margin-top:calc(var(--spacing,.25rem) * 1)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-tracking:initial}}}.keys-rejected.svelte-w4d8v7{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3640;display:flex}@supports (color:color-mix(in lab,red,red)){.keys-rejected.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 25%,transparent)}}.keys-rejected.svelte-w4d8v7{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.keys-rejected.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.keys-rejected.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:var(--color-red-300,oklch(80.8% .114 19.571))}.keys-fragile.svelte-w4d8v7{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0040;display:flex}@supports (color:color-mix(in lab,red,red)){.keys-fragile.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.keys-fragile.svelte-w4d8v7{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.keys-fragile.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.keys-fragile.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:var(--color-amber-200,oklch(92.4% .12 95.746))}.keys-accepted.svelte-w4d8v7{color:#5ee9b5e6;font-size:11.5px}@supports (color:color-mix(in lab,red,red)){.keys-accepted.svelte-w4d8v7{color:color-mix(in oklab,var(--color-emerald-300,oklch(84.5% .143 164.978)) 90%,transparent)}}.keys-accepted.svelte-w4d8v7 code:where(.svelte-w4d8v7){background-color:#ffffff0d;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.keys-accepted.svelte-w4d8v7 code:where(.svelte-w4d8v7){background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.keys-accepted.svelte-w4d8v7 code:where(.svelte-w4d8v7){padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace)}.hotkeys-section.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 5);padding-bottom:calc(var(--spacing,.25rem) * 10);flex-direction:column;display:flex}.section-header.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 2);justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 5);display:flex}.description.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.bindings-list.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.binding-item.svelte-w4d8v7{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));background-color:#1a1f2e66;display:flex}.binding-item.svelte-w4d8v7:hover{border-color:var(--accent2);--tw-shadow:0 4px 20px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.binding-item.disabled.svelte-w4d8v7{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.binding-item.disabled.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.binding-item.disabled.svelte-w4d8v7{opacity:.55;background-image:repeating-linear-gradient(-45deg,#0000,#0000 10px,#00000040 10px 20px)}.binding-content.svelte-w4d8v7{min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex}.binding-header-row.svelte-w4d8v7{justify-content:space-between;align-items:center;width:100%;display:flex}.binding-title.svelte-w4d8v7{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.binding-row2.svelte-w4d8v7{justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.binding-targets.svelte-w4d8v7{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.binding-actions.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);justify-content:flex-end;align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);border-top-style:var(--tw-border-style);border-color:#ffffff0d;border-top-width:1px;display:flex}@supports (color:color-mix(in lab,red,red)){.binding-actions.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.binding-actions.svelte-w4d8v7{padding-top:calc(var(--spacing,.25rem) * 2)}.confirm-label.svelte-w4d8v7{color:var(--text-muted);font-size:11px}kbd.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);--tw-shadow:0 1px 0 var(--tw-shadow-color,#0006);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:.25rem}.empty-state.svelte-w4d8v7{border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:2px;border-color:var(--border);background-color:#00000026;flex-direction:column;grid-column:1/-1;justify-content:center;align-items:center;display:flex}@supports (color:color-mix(in lab,red,red)){.empty-state.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-black,#000) 15%,transparent)}}.empty-state.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 10);text-align:center}.empty-icon.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 2);font-size:32px}.empty-state.svelte-w4d8v7 p:where(.svelte-w4d8v7){margin:calc(var(--spacing,.25rem) * 0);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.btn-add-wide.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 4);cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent2);width:100%;padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-style:none;display:flex}.btn-add-wide.svelte-w4d8v7:hover{--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-add-wide.svelte-w4d8v7:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.badge.svelte-w4d8v7{border-radius:var(--radius-xl,.75rem);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-semibold,600);font-size:10px;font-weight:var(--font-weight-semibold,600);text-transform:uppercase}.warn-note.svelte-w4d8v7{color:var(--accent-amber,#f0b429);font-size:11px;line-height:1.45}.badge.gesture.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.badge.gesture.svelte-w4d8v7{border-color:color-mix(in oklab,var(--accent2) 30%,transparent)}}.badge.gesture.svelte-w4d8v7{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.badge.gesture.svelte-w4d8v7{background-color:color-mix(in oklab,var(--accent2) 15%,transparent)}}.badge.gesture.svelte-w4d8v7{color:var(--accent2)}.badge.openai.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.badge.openai.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 30%,transparent)}}.badge.openai.svelte-w4d8v7{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.badge.openai.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.badge.openai.svelte-w4d8v7{color:var(--color-emerald-200,oklch(90.5% .093 164.15))}.badge.s1-mini.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.badge.s1-mini.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 30%,transparent)}}.badge.s1-mini.svelte-w4d8v7{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.badge.s1-mini.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.badge.s1-mini.svelte-w4d8v7{color:var(--color-cyan-200,oklch(91.7% .08 205.041))}.modal-backdrop.svelte-w4d8v7{inset:calc(var(--spacing,.25rem) * 0);z-index:1000;background-color:#0009;justify-content:center;align-items:center;display:flex;position:fixed}@supports (color:color-mix(in lab,red,red)){.modal-backdrop.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-black,#000) 60%,transparent)}}.modal-backdrop.svelte-w4d8v7{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.modal.svelte-w4d8v7{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);width:90%;max-width:500px;max-height:85vh;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex}.modal-header.svelte-w4d8v7{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);justify-content:space-between;align-items:center;display:flex}.modal-header.svelte-w4d8v7 h3:where(.svelte-w4d8v7){margin:calc(var(--spacing,.25rem) * 0);--tw-font-weight:var(--font-weight-bold,700);font-size:15px;font-weight:var(--font-weight-bold,700)}.close-btn.svelte-w4d8v7{cursor:pointer;--tw-border-style:none;font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));color:var(--text-muted);background-color:#0000;border-style:none}.close-btn.svelte-w4d8v7:hover{color:var(--text)}.modal-body.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 3.5);padding:calc(var(--spacing,.25rem) * 5);flex-direction:column;display:flex;overflow-y:auto}.modal-footer.svelte-w4d8v7{justify-content:flex-end;gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 4);padding-inline:calc(var(--spacing,.25rem) * 5);display:flex}.morph-section.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 2.5);border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:1px;border-color:var(--border);background-color:#ffffff05;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.morph-section.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-white,#fff) 2%,transparent)}}.morph-section.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 3)}.processing-toggles.svelte-w4d8v7 h5:where(.svelte-w4d8v7){margin:calc(var(--spacing,.25rem) * 0);margin-bottom:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);text-transform:uppercase}.processing-toggles.svelte-w4d8v7{gap:calc(var(--spacing,.25rem) * 2.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding-top:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}.checkbox-field.svelte-w4d8v7{cursor:pointer;align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted);display:flex}.checkbox-field.svelte-w4d8v7 input[type=checkbox]:where(.svelte-w4d8v7){cursor:pointer}.checkbox-field.svelte-w4d8v7:hover{color:var(--text)}.btn-add-inline.svelte-w4d8v7{cursor:pointer;--tw-border-style:none;padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);color:var(--accent2);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));background-color:#0000;border-style:none;border-radius:.25rem}.btn-add-inline.svelte-w4d8v7:hover{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.btn-add-inline.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.btn-add-inline.svelte-w4d8v7:hover{color:var(--color-white,#fff)}.target-selects-list.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;width:100%;display:flex}.target-select-row.svelte-w4d8v7{align-items:center;gap:calc(var(--spacing,.25rem) * 2);width:100%;display:flex}.btn-remove-inline.svelte-w4d8v7{box-sizing:border-box;cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3633;justify-content:center;align-items:center;height:34px;display:flex}@supports (color:color-mix(in lab,red,red)){.btn-remove-inline.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.btn-remove-inline.svelte-w4d8v7{background-color:#fb2c3614}@supports (color:color-mix(in lab,red,red)){.btn-remove-inline.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 8%,transparent)}}.btn-remove-inline.svelte-w4d8v7{padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-red-400,oklch(70.4% .191 22.216));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-remove-inline.svelte-w4d8v7:hover{border-color:var(--color-red-500,oklch(63.7% .237 25.331));background-color:var(--color-red-500,oklch(63.7% .237 25.331));color:var(--color-white,#fff);--tw-shadow:0 2px 8px var(--tw-shadow-color,#ef444440);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.longer-display-label.svelte-w4d8v7{min-width:255px!important}.openai-target-settings.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 2.5);margin-bottom:calc(var(--spacing,.25rem) * 3.5);margin-left:calc(var(--spacing,.25rem) * 2.5);gap:calc(var(--spacing,.25rem) * 2);border-left-style:var(--tw-border-style);border-left-width:2px;border-color:var(--accent);padding-left:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}textarea.svelte-w4d8v7{resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--text);--tw-shadow:inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}textarea.svelte-w4d8v7:hover{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){textarea.svelte-w4d8v7:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 15%,transparent)}}textarea.svelte-w4d8v7:hover{background-color:var(--color-obsidian-900)}textarea.svelte-w4d8v7:focus{border-color:var(--accent2);background-color:var(--color-obsidian-950);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field.col.svelte-w4d8v7{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;width:100%}.field-label-row.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * .5);justify-content:space-between;align-items:center;width:100%;display:flex}.field-title.svelte-w4d8v7{--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text)}.field-tag.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:var(--accent2);border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-w4d8v7{border-color:color-mix(in oklab,var(--accent2) 25%,transparent)}}.field-tag.svelte-w4d8v7{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.field-tag.svelte-w4d8v7{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.field-tag.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-leading:1;--tw-font-weight:var(--font-weight-bold,700);font-size:9px;line-height:1;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em);color:var(--accent2);text-transform:uppercase}p.hint.svelte-w4d8v7{margin:calc(var(--spacing,.25rem) * 0);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}p.hint.svelte-w4d8v7 code:where(.svelte-w4d8v7){border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);border-radius:.25rem;font-size:10px}.validation-error-msg.svelte-w4d8v7{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-red-400,oklch(70.4% .191 22.216));display:block}.binding-item.has-conflict.svelte-w4d8v7{border-color:#f99c0073!important}@supports (color:color-mix(in lab,red,red)){.binding-item.has-conflict.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 45%,transparent)!important}}.binding-item.active-conflict.svelte-w4d8v7{background-color:#f99c000f;position:relative}@supports (color:color-mix(in lab,red,red)){.binding-item.active-conflict.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.binding-item.active-conflict.svelte-w4d8v7:hover{border-color:#f99c00b3!important}@supports (color:color-mix(in lab,red,red)){.binding-item.active-conflict.svelte-w4d8v7:hover{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 70%,transparent)!important}}.binding-item.active-conflict.svelte-w4d8v7:hover{--tw-shadow:0 4px 20px var(--tw-shadow-color,#fbbf2426);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.binding-title.has-conflict.svelte-w4d8v7{padding-right:75px}.conflict-marker.svelte-w4d8v7{top:calc(var(--spacing,.25rem) * 2.5);right:calc(var(--spacing,.25rem) * 3.5);background-color:var(--color-amber-400,oklch(82.8% .189 84.429));padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-extrabold,800);font-size:9px;font-weight:var(--font-weight-extrabold,800);color:var(--color-neutral-900,oklch(20.5% 0 0));--tw-shadow:0 2px 6px var(--tw-shadow-color,#fbbf2440);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:.25rem;position:absolute}.conflict-alert-banner.svelte-w4d8v7{margin-bottom:calc(var(--spacing,.25rem) * 3);align-items:center;gap:calc(var(--spacing,.25rem) * 2.5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0040;display:flex}@supports (color:color-mix(in lab,red,red)){.conflict-alert-banner.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.conflict-alert-banner.svelte-w4d8v7{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.conflict-alert-banner.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.conflict-alert-banner.svelte-w4d8v7{padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);color:var(--color-amber-400,oklch(82.8% .189 84.429))}.warning-icon.svelte-w4d8v7{font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));flex-shrink:0}.animate-fade-in.svelte-w4d8v7{animation:.2s cubic-bezier(.16,1,.3,1) fade-in}@keyframes svelte-w4d8v7-fade-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}.custom-select-wrapper.svelte-w4d8v7{flex:1;min-width:190px;position:relative}.custom-select-trigger.svelte-w4d8v7{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-right:calc(var(--spacing,.25rem) * 9);text-align:left;--tw-font-weight:var(--font-weight-semibold,600);font-size:13px;font-weight:var(--font-weight-semibold,600);color:var(--text);--tw-shadow:0 4px 12px var(--tw-shadow-color,#00000026);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));-webkit-user-select:none;user-select:none;background:var(--surface2) url("data:image/svg+xml;utf8,") no-repeat right 12px center;background-size:10px}.custom-select-trigger.svelte-w4d8v7:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.custom-select-trigger.svelte-w4d8v7:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 12%,transparent)}}.custom-select-trigger.svelte-w4d8v7:hover{background-color:var(--color-obsidian-700)}.custom-select-trigger.svelte-w4d8v7:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-select-backdrop.svelte-w4d8v7{inset:calc(var(--spacing,.25rem) * 0);z-index:199;position:fixed}.custom-dropdown-menu.svelte-w4d8v7{right:calc(var(--spacing,.25rem) * 0);left:calc(var(--spacing,.25rem) * 0);z-index:200;margin-top:calc(var(--spacing,.25rem) * 1);max-height:calc(var(--spacing,.25rem) * 60);gap:calc(var(--spacing,.25rem) * .5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 1);--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#1e2436;flex-direction:column;display:flex;position:absolute;overflow-y:auto}.custom-dropdown-item.svelte-w4d8v7{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);text-align:left;color:var(--text);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;background-color:#0000;border-style:none;font-size:13px;transition-duration:.15s}.custom-dropdown-item.svelte-w4d8v7:hover{background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 4%,transparent)}}.custom-dropdown-item.svelte-w4d8v7:disabled{cursor:not-allowed;opacity:.4}.custom-dropdown-item.svelte-w4d8v7:disabled:hover{background-color:#0000}.custom-dropdown-item.create-new.svelte-w4d8v7{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f40;margin-top:calc(var(--spacing,.25rem) * 1)!important}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.create-new.svelte-w4d8v7{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 25%,transparent)}}.custom-dropdown-item.create-new.svelte-w4d8v7{background-color:#002c22cc}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.create-new.svelte-w4d8v7{background-color:color-mix(in oklab,var(--color-emerald-950,oklch(26.2% .051 172.552)) 80%,transparent)}}.custom-dropdown-item.create-new.svelte-w4d8v7{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.custom-dropdown-item.create-new.svelte-w4d8v7:hover{background-color:#004e3be6!important}@supports (color:color-mix(in lab,red,red)){.custom-dropdown-item.create-new.svelte-w4d8v7:hover{background-color:color-mix(in oklab,var(--color-emerald-900,oklch(37.8% .077 168.94)) 90%,transparent)!important}}.custom-dropdown-item.create-new.svelte-w4d8v7 .plus-icon:where(.svelte-w4d8v7){margin-right:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800);color:var(--color-emerald-300,oklch(84.5% .143 164.978))}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.targets-section.svelte-134kctg{gap:calc(var(--spacing,.25rem) * 5);padding-bottom:calc(var(--spacing,.25rem) * 10);flex-direction:column;display:flex}.section-header.svelte-134kctg{margin-bottom:calc(var(--spacing,.25rem) * 2);justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 5);display:flex}.description.svelte-134kctg{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.usage-note.svelte-134kctg{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.usage-note.svelte-134kctg{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.usage-note.svelte-134kctg{padding:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.usage-note.svelte-134kctg strong:where(.svelte-134kctg){--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.usage-note.svelte-134kctg em:where(.svelte-134kctg){font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);font-style:normal}.bindings-list.svelte-134kctg{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.binding-item.svelte-134kctg{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));background-color:#1a1f2e66;display:flex}.binding-item.svelte-134kctg:hover{border-color:var(--accent2);--tw-shadow:0 4px 20px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.binding-content.svelte-134kctg{min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex}.binding-row2.svelte-134kctg{justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.binding-title.svelte-134kctg{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.badge.svelte-134kctg{border-radius:var(--radius-xl,.75rem);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-semibold,600);font-size:10px;font-weight:var(--font-weight-semibold,600);text-transform:uppercase}.badge.delivery.svelte-134kctg{border-style:var(--tw-border-style);border-width:1px;border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.badge.delivery.svelte-134kctg{border-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 30%,transparent)}}.badge.delivery.svelte-134kctg{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.badge.delivery.svelte-134kctg{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.badge.delivery.svelte-134kctg{color:var(--color-cyan-300,oklch(86.5% .127 207.078))}.binding-targets.svelte-134kctg{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.binding-actions.svelte-134kctg{margin-top:calc(var(--spacing,.25rem) * 1);justify-content:flex-end;align-items:center;gap:calc(var(--spacing,.25rem) * 1.5);border-top-style:var(--tw-border-style);border-color:#ffffff0d;border-top-width:1px;display:flex}@supports (color:color-mix(in lab,red,red)){.binding-actions.svelte-134kctg{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.binding-actions.svelte-134kctg{padding-top:calc(var(--spacing,.25rem) * 2)}.confirm-label.svelte-134kctg{color:var(--text-muted);font-size:11px}.btn-add-wide.svelte-134kctg{margin-bottom:calc(var(--spacing,.25rem) * 4);cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent2);width:100%;padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-style:none;display:flex}.btn-add-wide.svelte-134kctg:hover{--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-add-wide.svelte-134kctg:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.empty-state.svelte-134kctg{border-radius:var(--radius);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:2px;border-color:var(--border);background-color:#00000026;flex-direction:column;grid-column:1/-1;justify-content:center;align-items:center;display:flex}@supports (color:color-mix(in lab,red,red)){.empty-state.svelte-134kctg{background-color:color-mix(in oklab,var(--color-black,#000) 15%,transparent)}}.empty-state.svelte-134kctg{padding:calc(var(--spacing,.25rem) * 10);text-align:center}.empty-icon.svelte-134kctg{margin-bottom:calc(var(--spacing,.25rem) * 2);font-size:32px}.empty-state.svelte-134kctg p:where(.svelte-134kctg){margin:calc(var(--spacing,.25rem) * 0);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-leading:initial}}}.row.svelte-1q9seip{margin-top:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 2);display:flex}.btn-preview.svelte-1q9seip{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-preview.svelte-1q9seip:hover:not(:disabled){background-color:var(--border);color:var(--accent)}.btn-preview.svelte-1q9seip:disabled{cursor:not-allowed;opacity:.4}.idle-minutes-input.svelte-1q9seip{width:calc(var(--spacing,.25rem) * 20);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 2.5);text-align:right;color:var(--text);font-size:13px}.voice-status-container.svelte-1q9seip{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);min-height:42px;padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);align-items:center;font-size:13px;display:flex}.status-downloaded.svelte-1q9seip{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-downloading.svelte-1q9seip{color:var(--accent2)}.status-checking.svelte-1q9seip{color:var(--text-muted)}.status-missing-wrapper.svelte-1q9seip{justify-content:space-between;align-items:center;width:100%;display:flex}.status-missing.svelte-1q9seip{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-download.svelte-1q9seip{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}.btn-download.svelte-1q9seip:hover:not(:disabled){background-color:var(--accent2)}.btn-download.svelte-1q9seip:disabled{cursor:not-allowed;border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);color:var(--text-muted);opacity:.5}.field-input-error.svelte-1q9seip{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.field-input-error.svelte-1q9seip:focus{border-color:var(--color-red-500,oklch(63.7% .237 25.331));--tw-shadow:0 0 0 2px var(--tw-shadow-color,#ef444426), inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.field-error-msg.svelte-1q9seip{margin-top:calc(var(--spacing,.25rem) * 1);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5);color:var(--color-red-400,oklch(70.4% .191 22.216))}.range-input.svelte-1q9seip{width:100%;accent-color:var(--accent)}.tts-test-row.svelte-1q9seip{justify-content:space-between;align-items:center;width:100%;display:flex}.tts-error-msg.svelte-1q9seip{overflow-wrap:break-word;width:100%}.run-speed-container.svelte-1q9seip{border:1px solid var(--border);border-radius:var(--radius);background:#ffffff05;align-items:center;gap:8px;padding:6px 12px;font-size:12px;font-weight:500;display:flex}.run-speed-label.svelte-1q9seip{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;font-size:10px}.run-speed-value.svelte-1q9seip{color:var(--accent);font-family:JetBrains Mono,monospace;font-weight:600}.run-speed-value.counting.svelte-1q9seip{color:var(--accent2);text-shadow:0 0 8px #38bdf84d}.non-commercial-warning.svelte-1q9seip{margin-bottom:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 1.5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0066;flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.non-commercial-warning.svelte-1q9seip{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 40%,transparent)}}.non-commercial-warning.svelte-1q9seip{background-color:#4619014d}@supports (color:color-mix(in lab,red,red)){.non-commercial-warning.svelte-1q9seip{background-color:color-mix(in oklab,var(--color-amber-950,oklch(27.9% .077 45.635)) 30%,transparent)}}.non-commercial-warning.svelte-1q9seip{padding:calc(var(--spacing,.25rem) * 3)}.warning-header.svelte-1q9seip{align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-amber-400,oklch(82.8% .189 84.429));display:flex}.warning-icon.svelte-1q9seip{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)))}.warning-text.svelte-1q9seip{margin:calc(var(--spacing,.25rem) * 0);--tw-leading:var(--leading-relaxed,1.625);max-width:none;font-size:12px;line-height:var(--leading-relaxed,1.625);color:#fee685cc}@supports (color:color-mix(in lab,red,red)){.warning-text.svelte-1q9seip{color:color-mix(in oklab,var(--color-amber-200,oklch(92.4% .12 95.746)) 80%,transparent)}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.hint.svelte-1bvctpo{margin-bottom:calc(var(--spacing,.25rem) * 4);max-width:520px;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-300)}.field.col.svelte-1bvctpo{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1.5);flex-direction:column}textarea.svelte-1bvctpo{resize:vertical;border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;padding:calc(var(--spacing,.25rem) * 2);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--text);border-radius:.25rem;font-size:13px}textarea.invalid.svelte-1bvctpo{border-color:var(--color-red-500,oklch(63.7% .237 25.331));--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){textarea.invalid.svelte-1bvctpo{--tw-ring-color:color-mix(in oklab, var(--color-red-500,oklch(63.7% .237 25.331)) 20%, transparent)}}textarea.locked.svelte-1bvctpo{cursor:not-allowed;background-color:#0003}@supports (color:color-mix(in lab,red,red)){textarea.locked.svelte-1bvctpo{background-color:color-mix(in oklab,var(--color-black,#000) 20%,transparent)}}textarea.locked.svelte-1bvctpo{opacity:.6}.validation-error.svelte-1bvctpo{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-red-400,oklch(70.4% .191 22.216))}.field-hint.svelte-1bvctpo{color:var(--color-obsidian-300);font-size:11px}code.svelte-1bvctpo{background-color:#ffffff0d;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){code.svelte-1bvctpo{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}code.svelte-1bvctpo{padding-inline:calc(var(--spacing,.25rem) * 1);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue)}.action-row.svelte-1bvctpo{margin-top:calc(var(--spacing,.25rem) * 3.5);align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);padding-top:calc(var(--spacing,.25rem) * 3.5);flex-direction:column;display:flex}.btn-test.svelte-1bvctpo{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);width:100%;padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-style:none}.btn-test.svelte-1bvctpo:hover:not(:disabled){--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-test.svelte-1bvctpo:active:not(:disabled){--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.btn-test.svelte-1bvctpo:disabled{cursor:not-allowed;opacity:.6}.status-msg.svelte-1bvctpo{text-align:center;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600)}.status-msg.success.svelte-1bvctpo{color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-msg.error.svelte-1bvctpo{color:var(--color-red-400,oklch(70.4% .191 22.216))}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-leading:initial}}}.custom-vocab-input.svelte-1s1a8xn{margin-top:calc(var(--spacing,.25rem) * 2);box-sizing:border-box;resize:vertical;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;min-height:80px;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}.custom-vocab-input.svelte-1s1a8xn:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#4fc3f733);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-vocab-input.svelte-1s1a8xn::placeholder{color:var(--text-muted);opacity:.5}.model-status-container.svelte-1s1a8xn{margin-bottom:calc(var(--spacing,.25rem) * 3);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);min-height:42px;padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);align-items:center;font-size:13px;display:flex}.status-downloaded.svelte-1s1a8xn{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.status-downloading.svelte-1s1a8xn{color:var(--accent2)}.status-checking.svelte-1s1a8xn{color:var(--text-muted)}.status-missing-wrapper.svelte-1s1a8xn{justify-content:space-between;align-items:center;width:100%;display:flex}.status-missing.svelte-1s1a8xn{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-download.svelte-1s1a8xn{cursor:pointer;border-radius:var(--radius);--tw-border-style:none;background-color:var(--accent);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;border-style:none;transition-duration:.2s}.btn-download.svelte-1s1a8xn:hover{background-color:var(--accent2)}.status-pill.svelte-1s1a8xn{border-radius:var(--radius);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500)}.status-pill.success.svelte-1s1a8xn{border-style:var(--tw-border-style);border-width:1px;border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-1s1a8xn{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 30%,transparent)}}.status-pill.success.svelte-1s1a8xn{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.status-pill.success.svelte-1s1a8xn{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.status-pill.success.svelte-1s1a8xn{color:var(--color-emerald-300,oklch(84.5% .143 164.978))}.status-pill.error.svelte-1s1a8xn{border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-1s1a8xn{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 30%,transparent)}}.status-pill.error.svelte-1s1a8xn{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.status-pill.error.svelte-1s1a8xn{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 15%,transparent)}}.status-pill.error.svelte-1s1a8xn{color:var(--color-red-300,oklch(80.8% .114 19.571))}.status-pill.downloading.svelte-1s1a8xn{border-style:var(--tw-border-style);border-width:1px;border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.status-pill.downloading.svelte-1s1a8xn{border-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 30%,transparent)}}.status-pill.downloading.svelte-1s1a8xn{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.status-pill.downloading.svelte-1s1a8xn{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.status-pill.downloading.svelte-1s1a8xn{color:var(--color-cyan-300,oklch(86.5% .127 207.078))}.field-title-col.svelte-1s1a8xn{margin-right:calc(var(--spacing,.25rem) * 4);flex-direction:column;flex:1;display:flex}.field-title-col.svelte-1s1a8xn span:where(.svelte-1s1a8xn){--tw-font-weight:var(--font-weight-medium,500);font-size:13px;font-weight:var(--font-weight-medium,500);color:var(--color-obsidian-100)}.field-title-col.svelte-1s1a8xn .hint:where(.svelte-1s1a8xn){margin-top:calc(var(--spacing,.25rem) * .5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.s1-mini-note.svelte-1s1a8xn{margin-top:calc(var(--spacing,.25rem) * -1);--tw-font-weight:var(--font-weight-medium,500);font-size:11.5px;font-weight:var(--font-weight-medium,500);color:var(--color-accent-blue);opacity:.9}.disabled-section.svelte-1s1a8xn{pointer-events:none;opacity:.5}.disabled-note.svelte-1s1a8xn{color:var(--color-accent-blue);opacity:.9}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.lede.svelte-7vrdzs{--tw-leading:var(--leading-relaxed,1.625);font-size:13px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}.disclosure.svelte-7vrdzs{border-color:#38bdf840}@supports (color:color-mix(in lab,red,red)){.disclosure.svelte-7vrdzs{border-color:color-mix(in oklab,var(--color-accent-blue) 25%,transparent)}}.disclosure.svelte-7vrdzs{background-color:#38bdf80a}.ledger.svelte-7vrdzs{gap:calc(var(--spacing,.25rem) * 4);grid-template-columns:repeat(auto-fit,minmax(240px,1fr));display:grid}.ledger-col.svelte-7vrdzs ul:where(.svelte-7vrdzs){margin-top:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 1.5);--tw-leading:var(--leading-relaxed,1.625);font-size:11.5px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted);flex-direction:column;display:flex}.ledger-col.svelte-7vrdzs li:where(.svelte-7vrdzs){border-left-style:var(--tw-border-style);padding-left:calc(var(--spacing,.25rem) * 3);border-left-width:1px}.ledger-head.svelte-7vrdzs{--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em);text-transform:uppercase}.included.svelte-7vrdzs .ledger-head:where(.svelte-7vrdzs){color:var(--color-accent-green)}.included.svelte-7vrdzs li:where(.svelte-7vrdzs){border-color:#10b9814d}.excluded.svelte-7vrdzs .ledger-head:where(.svelte-7vrdzs){color:#f87171}.excluded.svelte-7vrdzs li:where(.svelte-7vrdzs){border-color:#f871714d}.ledger-col.svelte-7vrdzs strong{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text)}.field-caption.svelte-7vrdzs{--tw-font-weight:var(--font-weight-medium,500);font-size:13px;font-weight:var(--font-weight-medium,500);color:var(--text)}.two-up.svelte-7vrdzs{gap:calc(var(--spacing,.25rem) * 4);grid-template-columns:repeat(auto-fit,minmax(200px,1fr));display:grid}.text-input.svelte-7vrdzs{box-sizing:border-box;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--bg);width:100%;padding:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));--tw-outline-style:none;outline-style:none;font-size:13px}.text-input.svelte-7vrdzs:focus{border-color:var(--accent2);--tw-shadow:0 0 0 2px var(--tw-shadow-color,#4fc3f733);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.description.svelte-7vrdzs{resize:vertical;--tw-leading:var(--leading-relaxed,1.625);min-height:150px;line-height:var(--leading-relaxed,1.625)}.counter.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--text-muted);font-size:11px}.counter.short.svelte-7vrdzs{color:#f59e0b}.preview.svelte-7vrdzs{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);width:100%;max-height:340px;padding:calc(var(--spacing,.25rem) * 3);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word;white-space:pre-wrap;color:var(--text-muted);overflow:auto}.actions.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}.btn-primary.svelte-7vrdzs{border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 10px var(--tw-shadow-color,#38bdf840);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-primary.svelte-7vrdzs:hover:not(:disabled){--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 14px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-primary.svelte-7vrdzs:disabled{cursor:not-allowed;opacity:.4;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.btn-secondary.svelte-7vrdzs{border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;flex-shrink:0}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-7vrdzs{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.btn-secondary.svelte-7vrdzs{padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-secondary.svelte-7vrdzs:hover{border-color:#38bdf866}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-7vrdzs:hover{border-color:color-mix(in oklab,var(--color-accent-blue) 40%,transparent)}}.btn-secondary.svelte-7vrdzs:hover{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-7vrdzs:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 8%,transparent)}}.link-button.svelte-7vrdzs{margin-left:calc(var(--spacing,.25rem) * 1);--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);text-decoration-line:underline}.alert-body.svelte-7vrdzs{gap:calc(var(--spacing,.25rem) * 1.5);flex-direction:column;width:100%;display:flex}.alert-msg.svelte-7vrdzs{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625)}.alert-actions.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-wrap:wrap;display:flex}.ok-alert.svelte-7vrdzs{margin-top:calc(var(--spacing,.25rem) * 1);align-items:center;gap:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:#10b981;border-radius:var(--radius);background-color:#10b9811a;border:1px solid #10b98140;padding:10px 14px;display:flex}code.svelte-7vrdzs{background-color:var(--color-obsidian-950);color:var(--color-accent-blue);border:1px solid var(--border);border-radius:4px;padding:2px 6px;font-family:monospace;font-size:10px}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-font-weight:initial;--tw-leading:initial;--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial}}}.about-card.svelte-4mufsx{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 5);flex-direction:row!important}.logo.svelte-4mufsx{height:calc(var(--spacing,.25rem) * 16);width:calc(var(--spacing,.25rem) * 16);border-radius:var(--radius-xl,.75rem);object-fit:contain;--tw-drop-shadow-size:drop-shadow(0 4px 24px var(--tw-drop-shadow-color,#38bdf859));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.app-name.svelte-4mufsx{margin-bottom:calc(var(--spacing,.25rem) * 1);font-size:var(--text-2xl,1.5rem);line-height:var(--tw-leading,var(--text-2xl--line-height,calc(2 / 1.5)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700)}.app-version.svelte-4mufsx{margin-bottom:calc(var(--spacing,.25rem) * 2.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}p.svelte-4mufsx{--tw-leading:var(--leading-relaxed,1.625);max-width:400px;font-size:13px;line-height:var(--leading-relaxed,1.625);color:var(--text-muted)}a.svelte-4mufsx{color:var(--accent2);font-size:13px;text-decoration-line:none}a.svelte-4mufsx:hover{text-decoration-line:underline}.kv.svelte-4mufsx{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding-block:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));justify-content:space-between;display:flex}.kv.svelte-4mufsx span:where(.svelte-4mufsx):first-child{color:var(--text-muted)}.credits-hint.svelte-4mufsx{margin-bottom:calc(var(--spacing,.25rem) * 3);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--text-muted)}.credits-list.svelte-4mufsx{margin-top:calc(var(--spacing,.25rem) * 1);gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.credit-item.svelte-4mufsx{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding-block:calc(var(--spacing,.25rem) * 1.5);justify-content:space-between;align-items:center;display:flex}.credit-item.svelte-4mufsx:last-child{--tw-border-style:none;border-style:none}.credit-name-link.svelte-4mufsx{--tw-font-weight:var(--font-weight-normal,400);font-size:13px;font-weight:var(--font-weight-normal,400);color:var(--color-white,#fff);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));text-decoration-line:none}.credit-name-link.svelte-4mufsx:hover{color:var(--color-accent-blue);text-decoration-line:underline}.credit-license.svelte-4mufsx{border-style:var(--tw-border-style);border-width:1px;border-color:#38bdf826;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.credit-license.svelte-4mufsx{border-color:color-mix(in oklab,var(--color-accent-blue) 15%,transparent)}}.credit-license.svelte-4mufsx{background-color:#38bdf814}@supports (color:color-mix(in lab,red,red)){.credit-license.svelte-4mufsx{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.credit-license.svelte-4mufsx{padding:calc(var(--spacing,.25rem) * .5);padding-inline:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-normal,400);font-size:10px;font-weight:var(--font-weight-normal,400);color:var(--color-accent-blue)}.credit-license.non-commercial.svelte-4mufsx{border-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.credit-license.non-commercial.svelte-4mufsx{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 30%,transparent)}}.credit-license.non-commercial.svelte-4mufsx{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.credit-license.non-commercial.svelte-4mufsx{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.credit-license.non-commercial.svelte-4mufsx{color:var(--color-amber-400,oklch(82.8% .189 84.429))}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}.settings-root.svelte-myrvk6{background-color:var(--bg);width:100vw;height:100vh;color:var(--text);display:flex;overflow:hidden}.sidebar.svelte-myrvk6{z-index:10;border-right-style:var(--tw-border-style);border-right-width:1px;border-color:var(--border);background-color:var(--color-obsidian-900);width:fit-content;min-width:135px;padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * 5);--tw-shadow:4px 0 24px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);flex-direction:column;flex-shrink:0;display:flex}.brand.svelte-myrvk6{margin-bottom:calc(var(--spacing,.25rem) * 4);align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-bottom-style:var(--tw-border-style);border-color:#ffffff08;border-bottom-width:1px;display:flex}@supports (color:color-mix(in lab,red,red)){.brand.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.brand.svelte-myrvk6{padding-inline:calc(var(--spacing,.25rem) * 1);padding-block:calc(var(--spacing,.25rem) * 1.5);padding-bottom:calc(var(--spacing,.25rem) * 4);white-space:nowrap}.brand-logo.svelte-myrvk6{height:calc(var(--spacing,.25rem) * 5);width:calc(var(--spacing,.25rem) * 5);object-fit:contain;--tw-drop-shadow-size:drop-shadow(0 2px 8px var(--tw-drop-shadow-color,#38bdf84d));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);flex-shrink:0;animation:4s ease-in-out infinite floating}@keyframes svelte-myrvk6-floating{0%,to{transform:translateY(0)rotate(0)}50%{transform:translateY(-3px)rotate(3deg)}}.brand-text.svelte-myrvk6{white-space:nowrap;flex-direction:column;display:flex;overflow:hidden}.brand-name.svelte-myrvk6{--tw-leading:1.1;--tw-font-weight:850;--tw-tracking:-.5px;letter-spacing:-.5px;white-space:nowrap;color:var(--color-white,#fff);font-size:15px;font-weight:850;line-height:1.1}.brand-tag.svelte-myrvk6{margin-top:calc(var(--spacing,.25rem) * .5);--tw-font-weight:var(--font-weight-bold,700);font-size:7px;font-weight:var(--font-weight-bold,700);--tw-tracking:.12em;letter-spacing:.12em;white-space:nowrap;color:var(--color-accent-blue)}.sidebar-nav.svelte-myrvk6{gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex;overflow-y:auto}.nav-btn.svelte-myrvk6{align-items:center;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 2);text-align:left;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);white-space:nowrap;color:var(--color-obsidian-300);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));display:flex;position:relative}.nav-btn.svelte-myrvk6:hover{--tw-translate-x:2px;translate:var(--tw-translate-x) var(--tw-translate-y);background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.nav-btn.svelte-myrvk6:hover{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.nav-btn.svelte-myrvk6:hover{color:var(--color-white,#fff)}.nav-btn.active.svelte-myrvk6{--tw-translate-x:2px;translate:var(--tw-translate-x) var(--tw-translate-y);background-color:#38bdf814;scale:1.01}@supports (color:color-mix(in lab,red,red)){.nav-btn.active.svelte-myrvk6{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.nav-btn.active.svelte-myrvk6{color:var(--color-accent-blue)}.nav-btn.svelte-myrvk6:active{--tw-translate-x:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y);scale:.97}.nav-icon.svelte-myrvk6{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.nav-btn.svelte-myrvk6:hover .nav-icon:where(.svelte-myrvk6){rotate:5deg;scale:1.18}.nav-active-pill.svelte-myrvk6{top:15%;right:calc(var(--spacing,.25rem) * 0);background-color:var(--color-accent-blue);--tw-shadow:-2px 0 8px var(--tw-shadow-color,var(--color-accent-blue));width:3px;height:70%;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:99px 0 0 99px;position:absolute}.sidebar-footer.svelte-myrvk6{border-top-style:var(--tw-border-style);border-color:#ffffff08;border-top-width:1px}@supports (color:color-mix(in lab,red,red)){.sidebar-footer.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.sidebar-footer.svelte-myrvk6{padding-top:calc(var(--spacing,.25rem) * 4)}.status-panel.svelte-myrvk6{gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-950);padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-shadow:inset 0 2px 6px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.25s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.25s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));flex-direction:column;display:flex}.status-panel.recording.svelte-myrvk6{border-color:#38bdf840}@supports (color:color-mix(in lab,red,red)){.status-panel.recording.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-accent-blue) 25%,transparent)}}.status-panel.recording.svelte-myrvk6{--tw-shadow:0 4px 20px var(--tw-shadow-color,#38bdf81a), inset 0 2px 6px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.status-header.svelte-myrvk6{align-items:flex-start;gap:calc(var(--spacing,.25rem) * .5);white-space:nowrap;flex-direction:column;display:flex}.status-indicator.svelte-myrvk6{align-items:center;gap:calc(var(--spacing,.25rem) * 1);white-space:nowrap;display:flex}.status-dot.svelte-myrvk6{background-color:var(--color-obsidian-300);width:5px;height:5px;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-radius:3.40282e38px}.status-panel.recording.svelte-myrvk6 .status-dot:where(.svelte-myrvk6){background-color:var(--color-accent-blue);--tw-shadow:0 0 8px var(--tw-shadow-color,var(--color-accent-blue));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);animation:1.2s infinite heartBeat}.status-panel.speaking.svelte-myrvk6 .status-dot:where(.svelte-myrvk6){background-color:var(--color-accent-green);--tw-shadow:0 0 8px var(--tw-shadow-color,var(--color-accent-green));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@keyframes svelte-myrvk6-heartBeat{0%,to{transform:scale(1)}50%{transform:scale(1.4)}}.status-label.svelte-myrvk6{--tw-font-weight:var(--font-weight-bold,700);font-size:10px;font-weight:var(--font-weight-bold,700);white-space:nowrap;color:var(--color-obsidian-300)}.status-panel.recording.svelte-myrvk6 .status-label:where(.svelte-myrvk6){color:var(--color-accent-blue)}.word-count.svelte-myrvk6{--tw-font-weight:var(--font-weight-semibold,600);font-size:9px;font-weight:var(--font-weight-semibold,600);white-space:nowrap;color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.word-count.svelte-myrvk6{color:color-mix(in oklab,var(--color-white,#fff) 30%,transparent)}}.btn-record.svelte-myrvk6{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:#38bdf833;width:100%;position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.btn-record.svelte-myrvk6{border-color:color-mix(in oklab,var(--color-accent-blue) 20%,transparent)}}.btn-record.svelte-myrvk6{background-color:#38bdf814}@supports (color:color-mix(in lab,red,red)){.btn-record.svelte-myrvk6{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.btn-record.svelte-myrvk6{padding-inline:calc(var(--spacing,.25rem) * 1);padding-block:calc(var(--spacing,.25rem) * 1.5);text-align:center;--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);white-space:nowrap;color:var(--color-accent-blue);--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf80d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-record.svelte-myrvk6:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);border-color:var(--color-accent-blue);background-color:var(--color-accent-blue);color:var(--color-white,#fff);--tw-shadow:0 4px 12px var(--tw-shadow-color,#38bdf840);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.btn-record.svelte-myrvk6:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y);scale:.97}.btn-record.active.svelte-myrvk6{border-color:var(--color-accent-blue);background-color:var(--color-accent-blue);color:var(--color-white,#fff);--tw-shadow:0 4px 16px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pulse-ring.svelte-myrvk6{pointer-events:none;top:calc(var(--spacing,.25rem) * 0);left:calc(var(--spacing,.25rem) * 0);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-accent-blue);opacity:0;width:100%;height:100%;animation:1.6s ease-out infinite ripple;position:absolute}@keyframes svelte-myrvk6-ripple{0%{opacity:.5;transform:scale(1)}to{opacity:0;transform:scale(1.15,1.3)}}.btn-text.svelte-myrvk6{z-index:2;position:relative}.content-container.svelte-myrvk6{z-index:1;background-color:var(--bg);flex-direction:column;flex:1;display:flex;position:relative;overflow:hidden}.content-container.svelte-myrvk6:has(.modal-backdrop){z-index:100}.tab-content.svelte-myrvk6{z-index:1;flex:1;padding:30px;overflow-y:auto}.floating-save-container.svelte-myrvk6{right:calc(var(--spacing,.25rem) * 6);bottom:calc(var(--spacing,.25rem) * 6);z-index:100;align-items:center;gap:calc(var(--spacing,.25rem) * 3.5);border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-accent-blue);background-color:var(--color-obsidian-900);padding:calc(var(--spacing,.25rem) * 2.5);padding-inline:calc(var(--spacing,.25rem) * 4);--tw-shadow:0 10px 30px var(--tw-shadow-color,#0006), 0 0 12px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);animation:.3s cubic-bezier(.175,.885,.32,1.275) forwards popUp;display:flex;position:absolute}@keyframes svelte-myrvk6-popUp{0%{opacity:0;transform:translateY(20px)scale(.9)}to{opacity:1;transform:translateY(0)scale(1)}}.save-hint.svelte-myrvk6{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-300)}.btn-save.svelte-myrvk6{border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 10px var(--tw-shadow-color,#38bdf840);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-save.svelte-myrvk6:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 14px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);scale:1.02}.btn-save.svelte-myrvk6:active{--tw-translate-y:calc(var(--spacing,.25rem) * 0);translate:var(--tw-translate-x) var(--tw-translate-y);scale:.97}.card-scene.svelte-1pt4ba2{perspective:900px;pointer-events:none;-webkit-user-select:none;user-select:none}.card.svelte-1pt4ba2{position:relative;width:340px;height:152px;border-radius:16px;overflow:hidden;background:linear-gradient(135deg,#181b24,#0b0d12 55%,#141925);border:1px solid rgba(255,255,255,.12);box-shadow:0 18px 44px #0009;font-family:Outfit,Inter,sans-serif;transform:rotateY(88deg);opacity:0;transition:transform .38s cubic-bezier(.175,.885,.32,1.2),opacity .3s ease,border-color .3s ease}.on.svelte-1pt4ba2 .card:where(.svelte-1pt4ba2){transform:rotateY(0);opacity:1}.card.processing.svelte-1pt4ba2{border-color:#38bdf866}.sheen.svelte-1pt4ba2{position:absolute;top:-20px;bottom:-20px;width:64px;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.06) 50%,transparent 100%);animation:svelte-1pt4ba2-sheen-drift 6.5s linear infinite}@keyframes svelte-1pt4ba2-sheen-drift{0%{left:-70px}to{left:410px}}.chip.svelte-1pt4ba2{position:absolute;left:20px;top:18px;width:38px;height:28px;border-radius:6px;background:linear-gradient(160deg,#f6d27a,#d9a946 55%,#b9842b)}.chip-line.svelte-1pt4ba2{position:absolute;background:#462d0073}.chip-line.h1.svelte-1pt4ba2{left:0;right:0;top:9px;height:1.5px}.chip-line.h2.svelte-1pt4ba2{left:0;right:0;top:18px;height:1.5px}.chip-line.v.svelte-1pt4ba2{top:0;bottom:0;left:18px;width:1.5px}.brand.svelte-1pt4ba2{position:absolute;left:68px;top:16px;color:#f3f4f6;font-size:14px;font-weight:850;letter-spacing:.08em}.brand-sub.svelte-1pt4ba2{position:absolute;left:68px;top:34px;color:#ffffff61;font-size:7.5px;font-weight:800;letter-spacing:.4em}.stamp.svelte-1pt4ba2{position:absolute;right:20px;top:18px;display:inline-flex;align-items:center;gap:5px;height:20px;padding:0 9px;border-radius:5px;border:1px solid rgba(244,63,94,.5);background:#f43f5e14;color:#f43f5e;font-size:8.5px;font-weight:850;letter-spacing:.18em}.initializing.svelte-1pt4ba2 .stamp:where(.svelte-1pt4ba2){border-color:#f59e0b80;background:#f59e0b14;color:#f59e0b}.processing.svelte-1pt4ba2 .stamp:where(.svelte-1pt4ba2){border-color:#38bdf880;background:#38bdf814;color:#38bdf8}.stamp-dot.svelte-1pt4ba2{width:6px;height:6px;border-radius:50%;background:currentColor;animation:svelte-1pt4ba2-stamp-blink 1.15s ease-in-out infinite}@keyframes svelte-1pt4ba2-stamp-blink{0%,to{opacity:.35}50%{opacity:1}}.matrix.svelte-1pt4ba2{position:absolute;left:22px;top:56px;width:296px;height:51px;display:flex;gap:4px}.col.svelte-1pt4ba2{display:flex;flex-direction:column;gap:3px}.dot.svelte-1pt4ba2{width:11px;height:6px;border-radius:2px;opacity:.1;transition:opacity .05s linear}.dot.lit.svelte-1pt4ba2{opacity:.95}.dot.red.svelte-1pt4ba2{background:#f43f5e}.dot.amber.svelte-1pt4ba2{background:#fbbf24}.dot.green.svelte-1pt4ba2{background:#34d399}.processing.svelte-1pt4ba2 .dot:where(.svelte-1pt4ba2){background:#22d3ee}.field-label.svelte-1pt4ba2{position:absolute;left:22px;top:118px;color:#ffffff4d;font-size:7px;font-weight:800;letter-spacing:.36em}.field-value.svelte-1pt4ba2{position:absolute;left:22px;top:128px;max-width:200px;color:#e5e7eb;font-size:11.5px;font-weight:750;letter-spacing:.04em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.card-number.svelte-1pt4ba2{position:absolute;right:22px;top:128px;color:#ffffff38;font-size:11px;font-weight:700;letter-spacing:.18em}.scope.svelte-xjziu1{width:540px;height:124px;background:linear-gradient(180deg,#07140c,#030a07);border:1px solid rgba(74,222,128,.25);border-radius:10px;box-shadow:0 10px 36px #0009,0 0 18px #22c55e24;overflow:hidden;pointer-events:none;-webkit-user-select:none;user-select:none;transform:scaleY(.04);opacity:0;transition:transform .32s cubic-bezier(.175,.885,.32,1.2),opacity .28s ease}.scope.on.svelte-xjziu1{transform:scaleY(1);opacity:1}.scope-inner.svelte-xjziu1{width:100%;height:100%;padding:10px 20px 12px;display:flex;flex-direction:column;gap:8px}.header.svelte-xjziu1{display:flex;align-items:center;gap:8px;height:18px;font-family:Outfit,Inter,sans-serif}.led.svelte-xjziu1{width:7px;height:7px;border-radius:50%;background:#4ade80;box-shadow:0 0 7px #4ade80;animation:svelte-xjziu1-led-blink 1.1s ease-in-out infinite;flex-shrink:0}.initializing.svelte-xjziu1 .led:where(.svelte-xjziu1){background:#f59e0b;box-shadow:0 0 7px #f59e0b}.processing.svelte-xjziu1 .led:where(.svelte-xjziu1){background:#38bdf8;box-shadow:0 0 7px #38bdf8}@keyframes svelte-xjziu1-led-blink{0%,to{opacity:.4}50%{opacity:1}}.title.svelte-xjziu1{color:#bbf7d0;font-size:10px;font-weight:800;letter-spacing:.12em}.subtitle.svelte-xjziu1{color:#bbf7d059;font-size:9px;font-weight:500;letter-spacing:.1em}.spacer.svelte-xjziu1{flex:1}.target-chip.svelte-xjziu1{display:inline-flex;align-items:center;gap:5px;background:#4ade800f;border:1px solid rgba(74,222,128,.3);border-radius:4px;padding:2px 8px}.tgt.svelte-xjziu1{color:#4ade80;font-size:8.5px;font-weight:800;letter-spacing:.1em}.tgt-label.svelte-xjziu1{color:#d1fae5;font-size:8.5px;font-weight:700;letter-spacing:.06em;max-width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stage.svelte-xjziu1{position:relative;flex:1}.grid-h.svelte-xjziu1{position:absolute;left:0;right:0;height:1px;background:#4ade8012}.g1.svelte-xjziu1{top:25%}.g2.svelte-xjziu1{top:50%;background:#4ade8024}.g3.svelte-xjziu1{top:75%}.grid-v.svelte-xjziu1{position:absolute;top:0;bottom:0;width:1px;background:#4ade800d}svg.svelte-xjziu1{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.trace.svelte-xjziu1{fill:none;stroke:#a7f3d0;stroke-width:1.8;vector-effect:non-scaling-stroke}.glow.svelte-xjziu1{fill:none;stroke:#4ade80;stroke-width:6;opacity:.16;vector-effect:non-scaling-stroke}.initializing.svelte-xjziu1 .trace:where(.svelte-xjziu1){stroke:#fcd34d}.initializing.svelte-xjziu1 .glow:where(.svelte-xjziu1){stroke:#f59e0b}.processing.svelte-xjziu1 .trace:where(.svelte-xjziu1){stroke:#7dd3fc}.processing.svelte-xjziu1 .glow:where(.svelte-xjziu1){stroke:#38bdf8}.radar.svelte-13tl5wx{--tone: #ff6b35;--tone-soft: rgba(255, 107, 53, .4);display:flex;align-items:center;gap:24px;pointer-events:none;-webkit-user-select:none;user-select:none}.radar.initializing.svelte-13tl5wx{--tone: #f59e0b;--tone-soft: rgba(245, 158, 11, .4)}.radar.processing.svelte-13tl5wx{--tone: #38bdf8;--tone-soft: rgba(56, 189, 248, .4)}.dial.svelte-13tl5wx{position:relative;width:124px;height:124px;border-radius:50%;background:radial-gradient(circle,#10181c,#06090b 85%,#04070a);border:1.2px solid var(--tone-soft);box-shadow:0 12px 34px #0000008c,0 0 22px color-mix(in srgb,var(--tone) 20%,transparent);overflow:hidden;transform:translateY(30px) scale(.85);opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.25),opacity .28s ease}.on.svelte-13tl5wx .dial:where(.svelte-13tl5wx){transform:translateY(0) scale(1);opacity:1}.range-ring.svelte-13tl5wx{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);border-radius:50%;border:1px solid rgba(255,255,255,.1)}.r1.svelte-13tl5wx{width:92px;height:92px}.r2.svelte-13tl5wx{width:56px;height:56px;border-color:#ffffff24}.axis.svelte-13tl5wx{position:absolute;background:#ffffff12}.axis.h.svelte-13tl5wx{left:0;right:0;top:50%;height:1px}.axis.v.svelte-13tl5wx{top:0;bottom:0;left:50%;width:1px}.sweep.svelte-13tl5wx{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;background:conic-gradient(from 0deg,transparent 0deg,transparent 300deg,color-mix(in srgb,var(--tone) 35%,transparent) 350deg,var(--tone) 360deg);animation:svelte-13tl5wx-sweep-rotate 1.5s linear infinite;opacity:.7}@keyframes svelte-13tl5wx-sweep-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.pulse-ring.svelte-13tl5wx{position:absolute;top:50%;left:50%;width:118px;height:118px;margin:-59px 0 0 -59px;border-radius:50%;border:1.5px solid var(--tone);opacity:0;animation:svelte-13tl5wx-ring-expand 1.4s cubic-bezier(.1,.7,.3,1) infinite}.p2.svelte-13tl5wx{animation-delay:.7s}@keyframes svelte-13tl5wx-ring-expand{0%{transform:scale(.18);opacity:calc(.25 + var(--lvl) * .65)}to{transform:scale(1);opacity:0}}.blip.svelte-13tl5wx{position:absolute;border-radius:50%;background:color-mix(in srgb,var(--tone) 60%,#ffffff);animation:svelte-13tl5wx-blip-flash 1.5s linear infinite}.b1.svelte-13tl5wx{left:88px;top:42px;width:5px;height:5px}.b2.svelte-13tl5wx{left:36px;top:86px;width:4px;height:4px;animation-delay:.55s}@keyframes svelte-13tl5wx-blip-flash{0%{opacity:1}55%{opacity:.05}to{opacity:.05}}.core.svelte-13tl5wx{position:absolute;top:50%;left:50%;width:12px;height:12px;margin:-6px 0 0 -6px;border-radius:50%;background:var(--tone);box-shadow:0 0 14px var(--tone);transform:scale(calc(1 + var(--lvl) * 1.6));transition:transform .05s linear}.plate.svelte-13tl5wx{display:flex;align-items:center;gap:10px;width:200px;height:52px;padding:0 12px;background:#0a0c10f0;border:1px solid rgba(255,255,255,.08);border-radius:10px;position:relative;transform:translate(-22px);opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.25) .06s,opacity .28s ease .06s}.on.svelte-13tl5wx .plate:where(.svelte-13tl5wx){transform:translate(0);opacity:1}.plate.svelte-13tl5wx:after{content:"";position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;border-radius:10px;border:1px solid var(--tone);animation:svelte-13tl5wx-lock-pulse 1.15s ease-in-out infinite;pointer-events:none}@keyframes svelte-13tl5wx-lock-pulse{0%,to{opacity:.25}50%{opacity:.85}}.reticle.svelte-13tl5wx{color:var(--tone);font-size:22px;line-height:1;animation:svelte-13tl5wx-lock-pulse 1.15s ease-in-out infinite}.plate-text.svelte-13tl5wx{display:flex;flex-direction:column;gap:2px;min-width:0;font-family:Outfit,Inter,sans-serif}.caption.svelte-13tl5wx{color:#ffffff59;font-size:7.5px;font-weight:800;letter-spacing:.18em}.label.svelte-13tl5wx{color:#e5e7eb;font-size:12px;font-weight:750;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ocean.svelte-1orgnnz{position:relative;width:380px;height:128px;border-radius:24px;overflow:hidden;background:linear-gradient(180deg,#081220f5,#030912f7);border:1.2px solid rgba(34,211,238,.25);box-shadow:0 14px 40px #0009,0 0 24px #0891b238;pointer-events:none;-webkit-user-select:none;user-select:none;font-family:Outfit,Inter,sans-serif;opacity:0;transform:translateY(16px);transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .3s ease}.ocean.on.svelte-1orgnnz{opacity:1;transform:translateY(0)}.ocean.processing.svelte-1orgnnz{border-color:#38bdf859}.moon.svelte-1orgnnz{position:absolute;top:10px;right:62px;width:22px;height:22px;border-radius:50%;background:#e0f2fed9;box-shadow:0 0 16px #bae6fd99;animation:svelte-1orgnnz-moon-glow 2.4s ease-in-out infinite}@keyframes svelte-1orgnnz-moon-glow{0%,to{opacity:.55}50%{opacity:.8}}.title.svelte-1orgnnz{position:absolute;left:18px;top:12px;color:#bae6fd8c;font-size:9.5px;font-weight:800;letter-spacing:.22em}.subtitle.svelte-1orgnnz{position:absolute;left:18px;top:25px;color:#7dd3fc59;font-size:8px;font-weight:500;letter-spacing:.08em}.water.svelte-1orgnnz{position:absolute;left:0;right:0;top:38px;height:90px;transform:translateY(92px);transition:transform .45s cubic-bezier(.22,1,.36,1)}.on.svelte-1orgnnz .water:where(.svelte-1orgnnz){transform:translateY(0)}svg.svelte-1orgnnz{display:block;width:100%;height:100%}.w1.svelte-1orgnnz{fill:#0284c759;stroke:#0284c733;stroke-width:1}.w2.svelte-1orgnnz{fill:#06b6d473;stroke:#06b6d440;stroke-width:1}.w3.svelte-1orgnnz{fill:#22d3ee99;stroke:#a5f3fc8c;stroke-width:1.5}.processing.svelte-1orgnnz .w1:where(.svelte-1orgnnz){fill:#1e40af66}.processing.svelte-1orgnnz .w2:where(.svelte-1orgnnz){fill:#3b82f673}.processing.svelte-1orgnnz .w3:where(.svelte-1orgnnz){fill:#60a5fa8c;stroke:#93c5fd99}.bubble.svelte-1orgnnz{position:absolute;bottom:-8px;width:5px;height:5px;border-radius:50%;border:1px solid rgba(165,243,252,.7);background:#a5f3fc1f;animation:svelte-1orgnnz-bubble-rise 4.2s linear infinite;opacity:0}@keyframes svelte-1orgnnz-bubble-rise{0%{transform:translateY(0);opacity:0}12%{opacity:.55}85%{opacity:.25}to{transform:translateY(-78px);opacity:0}}.buoy.svelte-1orgnnz{position:absolute;left:50%;transform:translate(-50%);display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 12px 0 10px;border-radius:12px;background:#082f49eb;border:1px solid rgba(125,211,252,.5);opacity:0;transition:opacity .3s ease .2s}.on.svelte-1orgnnz .buoy:where(.svelte-1orgnnz){opacity:1}.buoy-dot.svelte-1orgnnz{width:7px;height:7px;border-radius:50%;background:#22d3ee;animation:svelte-1orgnnz-moon-glow 1.15s ease-in-out infinite;flex-shrink:0}.processing.svelte-1orgnnz .buoy-dot:where(.svelte-1orgnnz){background:#60a5fa}.buoy-label.svelte-1orgnnz{color:#e0f2fe;font-size:10px;font-weight:700;max-width:130px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mono.svelte-12wa5lj{width:190px;height:112px;background:#000;border:1px solid rgba(255,255,255,.16);border-radius:6px;position:relative;font-family:Outfit,Inter,sans-serif;pointer-events:none;-webkit-user-select:none;user-select:none;opacity:0;transition:opacity .28s ease}.mono.on.svelte-12wa5lj{opacity:1}.status.svelte-12wa5lj{position:absolute;left:18px;top:14px;display:flex;align-items:center;gap:6px}.dot.svelte-12wa5lj{width:6px;height:6px;border-radius:3px;border:1px solid rgba(245,245,245,.7);background:transparent}.dot.lit.svelte-12wa5lj{background:#f5f5f5;animation:svelte-12wa5lj-mono-blink 1.2s ease-in-out infinite}.dot.processing.svelte-12wa5lj{animation:svelte-12wa5lj-mono-blink-dim 1.2s ease-in-out infinite}.dot.standby.svelte-12wa5lj{opacity:.35}@keyframes svelte-12wa5lj-mono-blink{0%,to{opacity:.5}50%{opacity:1}}@keyframes svelte-12wa5lj-mono-blink-dim{0%,to{opacity:.3}50%{opacity:1}}.status-text.svelte-12wa5lj{color:#ffffff8c;font-size:8px;font-weight:700;letter-spacing:.25em}.bars.svelte-12wa5lj{position:absolute;left:18px;bottom:28px;width:154px;height:52px;display:flex;align-items:flex-end;justify-content:center;gap:14px}.bar.svelte-12wa5lj{width:12px;background:#f5f5f5;border-radius:6px;opacity:1;transition:height .05s linear,opacity .2s ease}.bar.dim.svelte-12wa5lj{opacity:.3}.bar.processing.svelte-12wa5lj{opacity:.55}.baseline.svelte-12wa5lj{position:absolute;left:18px;bottom:28px;width:154px;height:1px;background:#ffffff1f}.target.svelte-12wa5lj{position:absolute;left:18px;bottom:6px;width:154px;text-align:center;color:#fff6;font-size:8.5px;font-weight:600;letter-spacing:.03em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.spectrum.svelte-194vixl{width:440px;height:132px;background:linear-gradient(160deg,#1b0c2e,#0a0614);border:1px solid rgba(232,121,249,.25);border-radius:16px;box-shadow:0 0 26px #c084fc38;position:relative;overflow:hidden;pointer-events:none;-webkit-user-select:none;user-select:none;transform:scaleY(.04);transform-origin:bottom center;opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .16s ease}.spectrum.on.svelte-194vixl{transform:scaleY(1);opacity:1}.header.svelte-194vixl{position:absolute;left:20px;top:12px;right:20px;height:16px;display:flex;align-items:center;gap:8px;font-family:Outfit,Inter,sans-serif}.led.svelte-194vixl{width:7px;height:7px;border-radius:50%;background:#e879f9;box-shadow:0 0 6px #e879f9;animation:svelte-194vixl-spectrum-blink 1.2s ease-in-out infinite;flex-shrink:0}.led.standby.svelte-194vixl{background:#f59e0b;box-shadow:0 0 6px #f59e0b}.led.processing.svelte-194vixl{background:#38bdf8;box-shadow:0 0 6px #38bdf8}@keyframes svelte-194vixl-spectrum-blink{0%,to{opacity:.4}50%{opacity:1}}.title.svelte-194vixl{color:#f5d0fe;font-size:10px;font-weight:800;letter-spacing:.15em}.subtitle.svelte-194vixl{color:#f5d0fe59;font-size:9px;font-weight:500;letter-spacing:.1em}.spacer.svelte-194vixl{flex:1}.chip.svelte-194vixl{display:inline-flex;align-items:center;gap:5px;background:#e879f914;border:1px solid rgba(232,121,249,.3);border-radius:4px;padding:2px 8px}.tgt.svelte-194vixl{color:#e879f9;font-size:8.5px;font-weight:800;letter-spacing:.1em}.tgt-label.svelte-194vixl{color:#fae8ff;font-size:8.5px;font-weight:700;letter-spacing:.06em;max-width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bars.svelte-194vixl{position:absolute;left:20px;right:20px;bottom:16px;display:flex;gap:6.5px;align-items:flex-end;height:96px}.bar.svelte-194vixl{width:19px;border-radius:3px;background:linear-gradient(180deg,#f0abfc,#c084fc 45%,#38bdf8);transition:height .05s linear}.floor.svelte-194vixl{position:absolute;left:20px;right:20px;bottom:16px;height:1px;background:#e879f926}.terminal.svelte-pvtvge{width:380px;height:130px;background:#0d1b4c;border:1.5px solid rgba(125,211,252,.35);border-radius:8px;box-shadow:0 0 20px #080f3099;overflow:hidden;pointer-events:none;-webkit-user-select:none;user-select:none;transform:scaleY(.04);transform-origin:top center;opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .16s ease}.terminal.on.svelte-pvtvge{transform:scaleY(1);opacity:1}.titlebar.svelte-pvtvge{height:24px;background:#ffffff0f;display:flex;align-items:center;gap:6px;padding:0 12px;font-family:Outfit,Inter,sans-serif}.dot.svelte-pvtvge{width:8px;height:8px;border-radius:50%;background:#ffffff38}.titletext.svelte-pvtvge{color:#e0f2fe8c;font-size:9px;font-weight:700;letter-spacing:.1em}.body.svelte-pvtvge{padding:12px 16px;display:flex;flex-direction:column;gap:8px}.line1.svelte-pvtvge{color:#bae6fdb3;font-size:10px;font-weight:600;font-family:SF Mono,Menlo,Consolas,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.line2.svelte-pvtvge{color:#fff;font-size:11px;font-weight:700;letter-spacing:.05em;font-family:SF Mono,Menlo,Consolas,monospace}.line2.standby.svelte-pvtvge{color:#fcd34d}.line2.processing.svelte-pvtvge{color:#7dd3fc}.line3.svelte-pvtvge{color:#bae6fd73;font-size:9.5px;font-weight:500;font-family:SF Mono,Menlo,Consolas,monospace}.vinyl.svelte-kq5b5i{width:320px;height:132px;background:linear-gradient(180deg,#f7ecd9,#e7d6b8);border:1.5px solid rgba(120,89,53,.35);border-radius:14px;box-shadow:0 0 22px #00000059;position:relative;pointer-events:none;-webkit-user-select:none;user-select:none;transform:translateY(16px);opacity:0;transition:transform .34s cubic-bezier(.175,.885,.32,1.2),opacity .28s ease}.vinyl.on.svelte-kq5b5i{transform:translateY(0);opacity:1}.header.svelte-kq5b5i{position:absolute;left:16px;top:12px;right:16px;height:14px;display:flex;align-items:center;gap:8px;font-family:Outfit,Inter,sans-serif}.vu-label.svelte-kq5b5i{color:#5b4530;font-size:12px;font-weight:900;letter-spacing:.17em}.subtitle.svelte-kq5b5i{color:#5b45308c;font-size:8px;font-weight:700;letter-spacing:.19em}.spacer.svelte-kq5b5i{flex:1}.led.svelte-kq5b5i{width:8px;height:8px;border-radius:50%;background:#dc2626;box-shadow:0 0 6px #dc2626;animation:svelte-kq5b5i-vinyl-blink 1.2s ease-in-out infinite;flex-shrink:0}.led.standby.svelte-kq5b5i{background:#f59e0b;box-shadow:0 0 6px #f59e0b}.led.processing.svelte-kq5b5i{background:#38bdf8;box-shadow:0 0 6px #38bdf8}@keyframes svelte-kq5b5i-vinyl-blink{0%,to{opacity:.4}50%{opacity:1}}.face.svelte-kq5b5i{position:absolute;left:16px;top:30px;width:288px;height:72px;background:#fffcf48c;border:1px solid rgba(120,89,53,.25);border-radius:8px}.tick.svelte-kq5b5i{position:absolute;top:14px;width:1.5px;height:22px;background:#5b453066}.tick.red.svelte-kq5b5i{background:#dc2626;height:30px}.scale-label.svelte-kq5b5i{position:absolute;color:#5b453080;font-size:7px;font-family:Outfit,Inter,sans-serif}.scale-label.red.svelte-kq5b5i{color:#dc2626;font-weight:800}.needle-svg.svelte-kq5b5i{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.needle.svelte-kq5b5i{fill:none;stroke:#292524;stroke-width:2px;vector-effect:non-scaling-stroke}.pivot.svelte-kq5b5i{position:absolute;left:138px;top:64px;width:12px;height:12px;border-radius:50%;background:#292524}.target.svelte-kq5b5i{position:absolute;left:16px;bottom:12px;width:288px;color:#5b4530a6;font-size:9.5px;font-weight:700;font-family:Outfit,Inter,sans-serif;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}html,body,#app{background:transparent!important;background-color:transparent!important;box-shadow:none!important;border:none!important;outline:none!important;overflow:hidden!important;will-change:transform,opacity;backface-visibility:hidden}*:focus{outline:none!important;box-shadow:none!important}.overlay-root.svelte-rmqsd6{width:100%;height:100%;background:transparent!important;display:flex;align-items:center;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;overflow:hidden!important}.overlay-stack.svelte-rmqsd6{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;max-width:100%;max-height:100%;pointer-events:none}.visualizer-container.svelte-rmqsd6{display:flex;align-items:center;justify-content:center;pointer-events:none;min-height:0;flex-shrink:1;overflow:hidden}.system-response-box.svelte-rmqsd6{position:relative;z-index:10;display:flex;align-items:center;gap:10px;height:46px;padding:0 20px;border-radius:23px;font-family:Outfit,Inter,system-ui,sans-serif;opacity:0;transform:translateY(10px);transition:transform .34s cubic-bezier(.175,.885,.32,1.25),opacity .28s ease;pointer-events:none;flex-shrink:0}.system-response-box.on.svelte-rmqsd6{opacity:1;transform:translateY(0)}.system-response-box.speaking.svelte-rmqsd6{background:#042f24f0;border:1.2px solid rgba(16,185,129,.55);box-shadow:0 10px 28px #00000080,0 0 18px #10b98140;color:#a7f3d0}.system-response-box.command.svelte-rmqsd6{background:#1e103cf0;border:1.2px solid rgba(168,85,247,.65);box-shadow:0 10px 28px #00000080,0 0 18px #a855f74d;color:#e9d5ff}.system-response-box.mcp.svelte-rmqsd6{background:#4c0519f0;border:1.2px solid rgba(244,63,94,.55);box-shadow:0 10px 28px #00000080,0 0 18px #f43f5e40;color:#fecdd3}.cmd-icon.svelte-rmqsd6{font-size:16px;line-height:1;color:#c084fc;animation:svelte-rmqsd6-flash 1.5s infinite ease-in-out}.mini-eq.svelte-rmqsd6{display:flex;align-items:center;gap:2.5px;height:22px}.eq-bar.svelte-rmqsd6{width:3px;height:8px;border-radius:1.5px;background:#34d399;animation:svelte-rmqsd6-eq-bounce .8s ease-in-out infinite alternate}@keyframes svelte-rmqsd6-eq-bounce{0%{height:7px}to{height:21px}}.pill-text.svelte-rmqsd6{display:flex;flex-direction:column;gap:1px;min-width:0}.pill-title.svelte-rmqsd6{font-size:10px;font-weight:850;letter-spacing:.15em}.pill-target.svelte-rmqsd6{font-size:8.5px;font-weight:600;opacity:.55;max-width:180px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pulse-dot.svelte-rmqsd6{width:10px;height:10px;background-color:#f43f5e;border-radius:50%;animation:svelte-rmqsd6-flash 1.2s infinite ease-in-out}@keyframes svelte-rmqsd6-flash{0%,to{opacity:.3;transform:scale(.9)}50%{opacity:1;transform:scale(1.15)}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.diagnostic-window.svelte-45v8pc{background-color:var(--color-obsidian-950);width:100vw;height:100vh;padding:calc(var(--spacing,.25rem) * 5);color:var(--text);justify-content:center;align-items:flex-start;display:flex;overflow-y:auto}.modal-card.svelte-45v8pc{width:100%;max-width:520px;animation:.3s cubic-bezier(.175,.885,.32,1.2) forwards scaleUp}.head.svelte-45v8pc{margin-bottom:calc(var(--spacing,.25rem) * 5);align-items:flex-start;gap:calc(var(--spacing,.25rem) * 3);display:flex}.head-icon.svelte-45v8pc{--tw-leading:1;flex-shrink:0;font-size:32px;line-height:1}.title.svelte-45v8pc{font-size:var(--text-xl,1.25rem);line-height:var(--tw-leading,var(--text-xl--line-height,calc(1.75 / 1.25)));--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800);--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em);color:var(--color-white,#fff)}.subtitle.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--color-obsidian-400);font-size:12.5px}.steps.svelte-45v8pc{margin:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 2.5);padding:calc(var(--spacing,.25rem) * 0);flex-direction:column;list-style-type:none;display:flex}.step.svelte-45v8pc{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 3);border-radius:var(--radius-lg,.5rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;display:flex}@supports (color:color-mix(in lab,red,red)){.step.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.step.svelte-45v8pc{padding:calc(var(--spacing,.25rem) * 3)}.step.done.svelte-45v8pc{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.step.done.svelte-45v8pc{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.step.done.svelte-45v8pc{background-color:#0000}.step-icon.svelte-45v8pc{--tw-leading:calc(var(--spacing,.25rem) * 6);font-size:16px;line-height:calc(var(--spacing,.25rem) * 6);flex-shrink:0}.step-body.svelte-45v8pc{min-width:calc(var(--spacing,.25rem) * 0);gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;flex:1;display:flex}.step-title.svelte-45v8pc{--tw-font-weight:var(--font-weight-bold,700);font-size:13.5px;font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff)}.step-detail.svelte-45v8pc{--tw-leading:var(--leading-relaxed,1.625);font-size:12.5px;line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-300)}.step-detail.svelte-45v8pc code:where(.svelte-45v8pc){background-color:#ffffff0d;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.step-detail.svelte-45v8pc code:where(.svelte-45v8pc){background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.step-detail.svelte-45v8pc code:where(.svelte-45v8pc){padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue)}.warn-note.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.warn-note.svelte-45v8pc{color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.privacy-note.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);color:#5ee9b5e6}@supports (color:color-mix(in lab,red,red)){.privacy-note.svelte-45v8pc{color:color-mix(in oklab,var(--color-emerald-300,oklch(84.5% .143 164.978)) 90%,transparent)}}.muted.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--color-obsidian-400);font-size:11px}.shortcut-list.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 2);gap:calc(var(--spacing,.25rem) * 1.5);padding:calc(var(--spacing,.25rem) * 0);flex-wrap:wrap;list-style-type:none;display:flex}.shortcut-keys.svelte-45v8pc{background-color:#ffffff0d;border-radius:.25rem;display:inline-block}@supports (color:color-mix(in lab,red,red)){.shortcut-keys.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.shortcut-keys.svelte-45v8pc{padding-inline:calc(var(--spacing,.25rem) * 1.5);padding-block:calc(var(--spacing,.25rem) * .5);font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);color:var(--color-accent-blue);font-size:11px}.shortcut-list.svelte-45v8pc li.unbound:where(.svelte-45v8pc) .shortcut-keys:where(.svelte-45v8pc){color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.shortcut-list.svelte-45v8pc li.unbound:where(.svelte-45v8pc) .shortcut-keys:where(.svelte-45v8pc){color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.step-actions.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 2);align-items:center;gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}.manual.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#0006}@supports (color:color-mix(in lab,red,red)){.manual.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-black,#000) 40%,transparent)}}.manual.svelte-45v8pc{padding:calc(var(--spacing,.25rem) * 2.5)}.manual.svelte-45v8pc pre:where(.svelte-45v8pc){margin:calc(var(--spacing,.25rem) * 0);max-height:180px;font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-leading:var(--leading-relaxed,1.625);font-size:11px;line-height:var(--leading-relaxed,1.625);word-break:break-all;white-space:pre-wrap;color:var(--color-obsidian-200);overflow-y:auto}.error-container.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 4);align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3633;border-radius:.25rem;width:100%;display:flex}@supports (color:color-mix(in lab,red,red)){.error-container.svelte-45v8pc{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.error-container.svelte-45v8pc{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.error-container.svelte-45v8pc{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.error-container.svelte-45v8pc{padding:calc(var(--spacing,.25rem) * 3);text-align:left;color:var(--color-red-400,oklch(70.4% .191 22.216));font-size:12px}.error-icon.svelte-45v8pc{flex-shrink:0}.error-msg.svelte-45v8pc{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word}.modal-actions.svelte-45v8pc{margin-top:calc(var(--spacing,.25rem) * 5);justify-content:flex-end;display:flex}.btn-primary.svelte-45v8pc{cursor:pointer;border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-bold,700);font-size:12.5px;font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 14px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-primary.svelte-45v8pc:hover:not(:disabled){--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 18px var(--tw-shadow-color,#38bdf873);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-primary.svelte-45v8pc:disabled{cursor:default;opacity:.6;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.btn-secondary.svelte-45v8pc{cursor:pointer;border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-800);padding-inline:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-semibold,600);font-size:12.5px;font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-300);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-secondary.svelte-45v8pc:hover{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-45v8pc:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 10%,transparent)}}.btn-secondary.svelte-45v8pc:hover{background-color:var(--color-obsidian-700);color:var(--color-white,#fff)}.btn-link.svelte-45v8pc{cursor:pointer;border-style:var(--tw-border-style);padding:calc(var(--spacing,.25rem) * 0);--tw-font-weight:var(--font-weight-semibold,600);font-size:12px;font-weight:var(--font-weight-semibold,600);color:var(--color-accent-blue);text-underline-offset:2px;background-color:#0000;border-width:0;text-decoration-line:underline}.loading-container.svelte-45v8pc{justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-direction:column;width:100%;height:100%;display:flex}.loading-label.svelte-45v8pc{text-align:center;--tw-font-weight:var(--font-weight-semibold,600);font-size:13.5px;font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-200)}.hint.svelte-45v8pc{text-align:center;max-width:280px;color:var(--color-obsidian-400);font-size:11.5px}.spinner.svelte-45v8pc{height:calc(var(--spacing,.25rem) * 7);width:calc(var(--spacing,.25rem) * 7);animation:var(--animate-spin,spin 1s linear infinite);border-style:var(--tw-border-style);border-width:2.5px;border-color:#ffffff0d;border-radius:3.40282e38px}@supports (color:color-mix(in lab,red,red)){.spinner.svelte-45v8pc{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.spinner.svelte-45v8pc{border-top-color:var(--color-accent-blue)}@keyframes svelte-45v8pc-scaleUp{0%{opacity:0;transform:scale(.98)}to{opacity:1;transform:none}}.vx-wizard{--vx-bg-0: #0e1116;--vx-bg-1: #14181f;--vx-bg-2: #1a1f28;--vx-bg-3: #232a35;--vx-bg-4: #2d3540;--vx-line: #2a313c;--vx-line-2: #3a4350;--vx-txt-0: #e8edf3;--vx-txt-1: #b6bfcb;--vx-txt-2: #7e8896;--vx-txt-3: #555f6c;--vx-cyan-0: #22d4ef;--vx-cyan-1: #7ae8f8;--vx-cyan-2: #5cc4d8;--vx-cyan-d: #0d8ea3;--vx-cyan-b: rgba(34, 212, 239, .45);--vx-gold-0: #e8a019;--vx-gold-1: #f5c842;--vx-gold-glow: rgba(232, 160, 25, .3);--vx-good: #6ad48a;--vx-warn: #ffb454;--vx-bad: #f4636e;--vx-mono: ui-monospace, "JetBrains Mono", SFMono-Regular, Consolas, monospace;--vx-ease: cubic-bezier(.21, .6, .35, 1);--vx-sel-bg: linear-gradient(180deg, rgba(34, 212, 239, .07), rgba(34, 212, 239, .01)), var(--vx-bg-1);--vx-sel-shadow: 0 18px 40px -20px rgba(34, 212, 239, .35), 0 0 0 1px rgba(34, 212, 239, .15);--vx-panel-shadow: 0 12px 36px rgba(0, 0, 0, .5), 0 0 0 1px var(--vx-line);--vx-btn-shadow: 0 6px 24px rgba(34, 212, 239, .25), 0 0 0 1px rgba(34, 212, 239, .4) inset;color:var(--vx-txt-0);background:var(--vx-bg-0)}.vx-wizard .vx-eyebrow{font-family:var(--vx-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--vx-cyan-2)}.vx-wizard .vx-label{font-family:var(--vx-mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--vx-txt-3)}.vx-wizard h2.vx-title{margin:8px 0 6px;font-size:30px;letter-spacing:-.03em;line-height:1.05;font-weight:600}.vx-wizard p.vx-lede{margin:0;font-size:14px;line-height:1.5;color:var(--vx-txt-1)}.vx-wizard p.vx-lede b{color:var(--vx-txt-0);font-weight:600}.vx-wizard .vx-card{border:1px solid var(--vx-line);border-radius:14px;background:var(--vx-bg-1);cursor:pointer;text-align:left;color:inherit;font:inherit;transition:border-color .28s var(--vx-ease),background .28s var(--vx-ease),box-shadow .28s var(--vx-ease)}.vx-wizard .vx-card:hover:not(.vx-on){border-color:var(--vx-line-2)}.vx-wizard .vx-card.vx-on{border-color:var(--vx-cyan-b);background:var(--vx-sel-bg);box-shadow:var(--vx-sel-shadow)}.vx-wizard .vx-check{width:24px;height:24px;flex:none;border-radius:50%;border:1px solid var(--vx-line-2);background:transparent;display:grid;place-items:center;font-family:var(--vx-mono);font-size:12px;color:#00222a;transition:all .25s}.vx-wizard .vx-card.vx-on .vx-check{border-color:var(--vx-cyan-0);background:var(--vx-cyan-0)}.vx-wizard .vx-check>span{opacity:0;transition:opacity .2s}.vx-wizard .vx-card.vx-on .vx-check>span{opacity:1}.vx-wizard .vx-btn{height:44px;padding:0 18px;border-radius:10px;border:1px solid var(--vx-line);background:#ffffff08;color:var(--vx-txt-0);font:inherit;font-size:13.5px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:8px;transition:all .2s}.vx-wizard .vx-btn:hover:not(:disabled){border-color:var(--vx-line-2);background:#ffffff0f}.vx-wizard .vx-btn.vx-primary{border-color:#fff3;background:linear-gradient(180deg,var(--vx-cyan-0),var(--vx-cyan-d));color:#00222a;box-shadow:var(--vx-btn-shadow)}.vx-wizard .vx-btn.vx-primary:hover:not(:disabled){background:linear-gradient(180deg,var(--vx-cyan-1),var(--vx-cyan-0))}.vx-wizard .vx-btn.vx-ghost{border-color:transparent;background:transparent;color:var(--vx-txt-1)}.vx-wizard .vx-btn.vx-ghost:hover:not(:disabled){background:#ffffff0a;color:var(--vx-txt-0)}.vx-wizard .vx-btn:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}.vx-wizard .vx-meter{height:8px;border-radius:999px;background:var(--vx-bg-4);overflow:hidden}.vx-wizard .vx-meter>div{height:100%;border-radius:999px;transition:width .6s var(--vx-ease),background .4s}.vx-wizard .vx-keycap{min-width:56px;height:56px;padding:0 16px;border-radius:12px;display:grid;place-items:center;font-family:var(--vx-mono);font-size:16px;font-weight:500;background:linear-gradient(180deg,var(--vx-bg-3),var(--vx-bg-2));color:var(--vx-txt-0);border:1px solid var(--vx-line-2);box-shadow:0 4px 0 var(--vx-bg-0),inset 0 1px #ffffff14;transition:all .25s}.vx-wizard .vx-keycap.vx-hot{background:linear-gradient(180deg,#22d4ef40,#22d4ef14);color:var(--vx-cyan-1);border-color:var(--vx-cyan-b);box-shadow:0 4px #0d8ea399,inset 0 1px #ffffff14}.vx-wizard .vx-plus{font-family:var(--vx-mono);color:var(--vx-txt-3);font-size:18px}.vx-wizard .vx-pill{display:inline-flex;align-items:center;gap:8px;padding:7px 13px;border-radius:999px;border:1px solid var(--vx-line);background:#ffffff05;font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-txt-2)}.vx-wizard .vx-pill.vx-ok{border-color:#6ad48a66;color:var(--vx-good)}.vx-wizard .vx-pill.vx-busy{border-color:var(--vx-cyan-b);color:var(--vx-cyan-1)}.vx-wizard .vx-pill.vx-err{border-color:#f4636e73;color:var(--vx-bad)}@keyframes vxPulse{0%,to{opacity:1}50%{opacity:.35}}@keyframes vxPop{0%{opacity:0;transform:translateY(6px) scale(.98)}to{opacity:1;transform:none}}@keyframes vxRing{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:none}}@keyframes vxScan{0%{transform:translate(-100%)}to{transform:translate(100%)}}@keyframes vxBar{0%,to{transform:scaleY(.35)}50%{transform:scaleY(1)}}@keyframes vxSpin{to{transform:rotate(360deg)}}.vx-wizard .vx-spinner{width:13px;height:13px;border-radius:50%;border:2px solid rgba(34,212,239,.25);border-top-color:var(--vx-cyan-0);animation:vxSpin .7s linear infinite;flex:none}.welcome.svelte-1gicu21{flex:1;min-height:0;display:grid;grid-template-columns:1.1fr 1fr;gap:48px;align-items:center}.halo.svelte-1gicu21{position:relative;width:96px;height:96px;display:grid;place-items:center;margin-bottom:22px}.ring.svelte-1gicu21{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;border:1px solid rgba(34,212,239,.25);animation:vxPulse 2.4s infinite}.ring.inner.svelte-1gicu21{top:12px;right:12px;bottom:12px;left:12px;border-color:#22d4ef26;animation-delay:.6s}.halo.svelte-1gicu21 img:where(.svelte-1gicu21){width:52px;height:52px;border-radius:12px;box-shadow:0 0 16px #22d4ef66}h1.svelte-1gicu21{margin:12px 0 14px;font-size:clamp(30px,4vw,50px);line-height:1.02;letter-spacing:-.035em;font-weight:600}h1.svelte-1gicu21 span:where(.svelte-1gicu21){color:var(--vx-gold-1)}.intro.svelte-1gicu21 p:where(.svelte-1gicu21){margin:0;max-width:560px;font-size:15px;line-height:1.55;color:var(--vx-txt-1)}.reassure.svelte-1gicu21{margin-top:22px;display:inline-flex;align-items:center;gap:10px;padding:9px 14px;border:1px solid rgba(34,212,239,.25);border-radius:999px;background:#22d4ef0a;font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-cyan-2)}.reassure.svelte-1gicu21 span:where(.svelte-1gicu21){color:var(--vx-gold-1)}.cards.svelte-1gicu21{display:grid;grid-template-columns:1fr 1fr;gap:12px}.step-card.svelte-1gicu21{padding:16px 18px;background:linear-gradient(180deg,#ffffff05,#fff0);cursor:default}.head.svelte-1gicu21{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.glyph.svelte-1gicu21{font-family:var(--vx-mono);font-size:20px;color:var(--vx-cyan-1)}.num.svelte-1gicu21{font-family:var(--vx-mono);font-size:11px;color:var(--vx-txt-3)}.title.svelte-1gicu21{font-weight:600;font-size:14.5px;margin-bottom:4px}.desc.svelte-1gicu21{font-size:12.5px;line-height:1.45;color:var(--vx-txt-2)}@media (max-width: 1000px){.welcome.svelte-1gicu21{grid-template-columns:1fr;gap:24px;align-content:start}}.modal-backdrop.svelte-1c9i6zy{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b8;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);display:flex;align-items:center;justify-content:center;z-index:1200;padding:20px;animation:svelte-1c9i6zy-fadeIn .2s ease-out}@keyframes svelte-1c9i6zy-fadeIn{0%{opacity:0}to{opacity:1}}.modal-card.svelte-1c9i6zy{width:100%;max-width:580px;max-height:90vh;background:var(--vx-bg-1);border:1px solid var(--vx-line-2);border-radius:18px;box-shadow:0 24px 60px #000000b3,0 0 0 1px #22d4ef33;display:flex;flex-direction:column;overflow:hidden;color:var(--vx-txt-0)}.modal-header.svelte-1c9i6zy{display:flex;align-items:center;justify-content:space-between;padding:16px 22px;border-bottom:1px solid var(--vx-line);background:var(--vx-bg-2)}.modal-title-row.svelte-1c9i6zy{display:flex;align-items:center;gap:10px}.modal-glyph.svelte-1c9i6zy{font-size:20px}.modal-header.svelte-1c9i6zy h3:where(.svelte-1c9i6zy){margin:0;font-size:16px;font-weight:600;letter-spacing:-.01em;color:var(--vx-txt-0)}.close-btn.svelte-1c9i6zy{background:transparent;border:none;color:var(--vx-txt-2);font-size:16px;cursor:pointer;padding:6px;border-radius:8px;transition:all .2s;line-height:1}.close-btn.svelte-1c9i6zy:hover{color:var(--vx-txt-0);background:#ffffff14}.modal-body.svelte-1c9i6zy{padding:20px 22px;overflow-y:auto;display:flex;flex-direction:column;gap:16px}.modal-hint.svelte-1c9i6zy{margin:0;font-size:12.5px;line-height:1.5;color:var(--vx-txt-2)}.modal-hint.svelte-1c9i6zy code:where(.svelte-1c9i6zy),.field-hint.svelte-1c9i6zy code:where(.svelte-1c9i6zy){background:var(--vx-bg-4);color:var(--vx-cyan-1);padding:2px 5px;border-radius:4px;font-family:var(--vx-mono);font-size:11px;border:1px solid var(--vx-line)}.field-group.svelte-1c9i6zy{display:flex;flex-direction:column;gap:12px;background:#ffffff05;border:1px solid var(--vx-line);border-radius:14px;padding:16px 18px}.field.svelte-1c9i6zy{display:flex;flex-direction:column;gap:6px}.field-title.svelte-1c9i6zy{font-size:12.5px;font-weight:500;color:var(--vx-txt-1)}.vx-input.svelte-1c9i6zy{width:100%;height:38px;padding:0 12px;background:var(--vx-bg-0);border:1px solid var(--vx-line-2);border-radius:8px;color:var(--vx-txt-0);font-family:inherit;font-size:13px;outline:none;transition:border-color .2s,box-shadow .2s;box-sizing:border-box}.vx-input.svelte-1c9i6zy:focus{border-color:var(--vx-cyan-0);box-shadow:0 0 0 2px var(--vx-cyan-b)}.vx-input.svelte-1c9i6zy::placeholder{color:var(--vx-txt-3)}.field-hint.svelte-1c9i6zy{margin:-4px 0 4px;font-size:11px;line-height:1.45;color:var(--vx-txt-3)}.discovered-models.svelte-1c9i6zy{display:flex;flex-direction:column;gap:6px;margin-top:-4px}.model-tags.svelte-1c9i6zy{display:flex;flex-wrap:wrap;gap:6px}.tag-btn.svelte-1c9i6zy{font-size:11.5px;padding:3px 9px;border-radius:6px;background:var(--vx-bg-3);border:1px solid var(--vx-line-2);color:var(--vx-txt-2);cursor:pointer;transition:all .2s}.tag-btn.svelte-1c9i6zy:hover{color:var(--vx-txt-0);border-color:var(--vx-cyan-0)}.tag-btn.active.svelte-1c9i6zy{background:#22d4ef26;border-color:var(--vx-cyan-0);color:var(--vx-cyan-1);font-weight:600}.test-row.svelte-1c9i6zy{display:flex;align-items:center;gap:12px;margin-top:8px;flex-wrap:wrap}.btn-test.svelte-1c9i6zy{height:36px;padding:0 16px;border-radius:8px;background:var(--vx-bg-4);border:1px solid var(--vx-line-2);color:var(--vx-txt-0);font-size:12.5px;font-weight:600;cursor:pointer;transition:all .2s;display:inline-flex;align-items:center;gap:6px}.btn-test.svelte-1c9i6zy:hover:not(:disabled){background:var(--vx-line-2);border-color:var(--vx-cyan-0)}.btn-test.svelte-1c9i6zy:disabled{opacity:.5;cursor:not-allowed}.status-pill.svelte-1c9i6zy{padding:6px 12px;border-radius:8px;font-size:11.5px;font-weight:500;line-height:1.35;word-break:break-word;max-width:100%}.status-pill.success.svelte-1c9i6zy{background:#6ad48a26;color:var(--vx-good);border:1px solid rgba(106,212,138,.3)}.status-pill.error.svelte-1c9i6zy{background:#f4636e26;color:var(--vx-bad);border:1px solid rgba(244,99,110,.3)}.modal-footer.svelte-1c9i6zy{padding:14px 22px;border-top:1px solid var(--vx-line);background:var(--vx-bg-2);display:flex;align-items:center;justify-content:space-between;gap:12px}.footer-status.svelte-1c9i6zy{font-size:12px}.status-msg.ok.svelte-1c9i6zy{color:var(--vx-good);font-weight:500}.status-msg.warn.svelte-1c9i6zy{color:var(--vx-warn)}.footer-actions.svelte-1c9i6zy{display:flex;gap:10px}.engine-step.svelte-xv54mf{flex:1;min-height:0;display:flex;flex-direction:column;gap:10px}.head.svelte-xv54mf{display:flex;gap:20px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-xv54mf{max-width:760px;min-width:0}.copy.svelte-xv54mf .vx-title:where(.svelte-xv54mf){margin:4px 0 3px;font-size:26px}.copy.svelte-xv54mf .vx-lede:where(.svelte-xv54mf){margin:2px 0 0;font-size:13px;line-height:1.4}.gpu-toggle.svelte-xv54mf{flex:none;width:380px;display:flex;align-items:center;gap:12px;padding:8px 14px}.gpu-toggle.svelte-xv54mf:disabled{opacity:.55;cursor:default}.switch.svelte-xv54mf{width:44px;height:26px;border-radius:999px;position:relative;flex:none;background:var(--vx-bg-4);border:1px solid var(--vx-line-2);transition:background .3s}.switch.on.svelte-xv54mf{background:var(--vx-cyan-0)}.knob.svelte-xv54mf{position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 2px 6px #0006;transition:left .28s var(--vx-ease)}.switch.on.svelte-xv54mf .knob:where(.svelte-xv54mf){left:20px}.gpu-copy.svelte-xv54mf{display:block}.gpu-title.svelte-xv54mf{display:flex;align-items:center;gap:6px;font-weight:600;font-size:13px}.gpu-title.svelte-xv54mf .glyph:where(.svelte-xv54mf){font-family:var(--vx-mono);color:var(--vx-cyan-1)}.state.svelte-xv54mf{font-family:var(--vx-mono);font-size:10px;letter-spacing:.1em;color:var(--vx-txt-3);transition:color .3s}.state.on.svelte-xv54mf{color:var(--vx-cyan-1)}.gpu-desc.svelte-xv54mf{display:block;font-size:11px;color:var(--vx-txt-2);margin-top:2px;line-height:1.35}.engines.svelte-xv54mf{flex:1;min-height:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.engine-card.svelte-xv54mf{position:relative;padding:14px 18px;border-radius:14px;display:grid;grid-template-columns:1fr 144px;gap:10px 14px;align-content:start}.left-col.svelte-xv54mf{min-width:0}.corner.svelte-xv54mf{position:absolute;top:12px;right:12px;width:22px;height:22px}.engine-head.svelte-xv54mf{grid-column:1 / -1}.name-row.svelte-xv54mf{display:flex;align-items:center;gap:8px;margin-bottom:2px}.engine-glyph.svelte-xv54mf{font-family:var(--vx-mono);font-size:20px;color:var(--vx-cyan-1);line-height:1}.engine-name.svelte-xv54mf{font-size:17px;font-weight:600;letter-spacing:-.02em;line-height:1.1}.tagline.svelte-xv54mf{font-size:12px;color:var(--vx-txt-2);line-height:1.35;max-width:92%}.warn.svelte-xv54mf{margin-top:6px;padding:6px 9px;border-radius:8px;border:1px solid rgba(255,180,84,.3);background:#ffb4540f;color:var(--vx-warn);font-size:11px;line-height:1.35}.sizes.svelte-xv54mf{display:flex;gap:4px;margin-top:5px;flex-wrap:wrap;min-width:0}.size.svelte-xv54mf{height:40px;flex:1 1 0;max-width:96px;min-width:0;padding:0 4px;border-radius:8px;border:1px solid var(--vx-line);background:#ffffff05;color:var(--vx-txt-1);font-family:var(--vx-mono);cursor:pointer;transition:all .22s;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:2px;white-space:nowrap}.size.svelte-xv54mf:hover{border-color:var(--vx-line-2)}.size.on.svelte-xv54mf{border-color:var(--vx-cyan-b);background:#22d4ef1f;color:var(--vx-cyan-1)}.size-id.svelte-xv54mf{font-size:11.5px;font-weight:600;line-height:1.1;white-space:nowrap}.size-mb.svelte-xv54mf{font-size:9.5px;line-height:1.1;opacity:.75;white-space:nowrap}.remote-summary-box.svelte-xv54mf{margin-top:5px;padding:7px 10px;background:#00000040;border:1px solid var(--vx-line);border-radius:8px;display:flex;flex-direction:column;gap:4px}.remote-row.svelte-xv54mf{display:flex;justify-content:space-between;align-items:center;gap:8px;font-family:var(--vx-mono);font-size:10.5px}.remote-k.svelte-xv54mf{color:var(--vx-txt-2);flex:none}.remote-v.svelte-xv54mf{color:var(--vx-txt-0);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:240px;text-align:right}.remote-v-ok.svelte-xv54mf{color:var(--vx-good);font-weight:600}.remote-v-warn.svelte-xv54mf{color:var(--vx-warn);font-weight:600}.remote-btn-row.svelte-xv54mf{margin-top:6px}.remote-cfg-btn.svelte-xv54mf{width:100%;height:32px;font-size:11.5px}.metrics.svelte-xv54mf{margin-top:14px;display:flex;flex-direction:column;gap:7px}.metric.svelte-xv54mf{display:flex;flex-direction:column;transition:opacity .3s}.metric.dim.svelte-xv54mf{opacity:.45}.metric-head.svelte-xv54mf{display:flex;justify-content:space-between;font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-2);margin-bottom:3px;line-height:1.2}.metric-head.svelte-xv54mf span:where(.svelte-xv54mf):last-child{color:var(--vx-txt-1)}.right-col.svelte-xv54mf{width:144px;display:flex;flex-direction:column;gap:8px}.spark.svelte-xv54mf{width:144px;height:80px;box-sizing:border-box;padding:7px 9px;border-radius:10px;border:1px solid var(--vx-line);background:#00000040;display:flex;flex-direction:column}.spark-head.svelte-xv54mf{display:flex;justify-content:space-between;font-family:var(--vx-mono);font-size:10px;color:var(--vx-txt-2);margin-bottom:5px;flex:none;line-height:1.2}.spark-head.svelte-xv54mf span:where(.svelte-xv54mf):last-child{color:var(--vx-txt-0)}.spark-bars.svelte-xv54mf{display:flex;align-items:flex-end;gap:3px;flex:1;min-height:0}.spark-bars.svelte-xv54mf>div:where(.svelte-xv54mf){flex:1;border-radius:2px;background:var(--vx-cyan-0);transition:height .6s var(--vx-ease),opacity .4s}.status-row.svelte-xv54mf{flex:none;display:flex;justify-content:flex-end}@media (max-width: 1100px){.head.svelte-xv54mf{flex-direction:column;align-items:stretch;gap:10px}.gpu-toggle.svelte-xv54mf{width:100%}.engines.svelte-xv54mf{grid-template-columns:1fr}}.hotkey-step.svelte-1fbfhk3{flex:1;min-height:0;display:flex;flex-direction:column;gap:14px}.copy.svelte-1fbfhk3{max-width:820px;min-width:0}.body.svelte-1fbfhk3{flex:1;min-height:0;display:grid;grid-template-columns:minmax(300px,1fr) 1.6fr;gap:14px}.gestures.svelte-1fbfhk3{display:grid;grid-auto-rows:min-content;gap:10px;align-content:start}.gesture.svelte-1fbfhk3{padding:12px 16px;display:grid;grid-template-columns:1fr 130px;gap:14px;align-items:center}.g-name.svelte-1fbfhk3{font-weight:600;font-size:14.5px;margin-bottom:3px}.g-desc.svelte-1fbfhk3{font-size:12px;color:var(--vx-txt-2);line-height:1.4}.tracks.svelte-1fbfhk3{display:grid;gap:5px}.track-row.svelte-1fbfhk3{display:grid;grid-template-columns:24px 1fr;gap:6px;align-items:center}.track-label.svelte-1fbfhk3{font-family:var(--vx-mono);font-size:9.5px;color:var(--vx-txt-3);letter-spacing:.1em}.track.svelte-1fbfhk3{display:flex;gap:2px;height:9px}.track.svelte-1fbfhk3>div:where(.svelte-1fbfhk3){border-radius:2px;background:var(--vx-bg-3);transition:background .3s}.track.svelte-1fbfhk3>div.lit:where(.svelte-1fbfhk3){background:var(--vx-txt-2)}.track.svelte-1fbfhk3>div.on:where(.svelte-1fbfhk3){background:var(--vx-cyan-0)}.hidden-note.svelte-1fbfhk3{padding:10px 12px;border-radius:10px;border:1px dashed var(--vx-line-2);font-size:12px;line-height:1.45;color:var(--vx-txt-2)}.right.svelte-1fbfhk3{display:flex;flex-direction:column;gap:12px;min-height:0}.recorder.svelte-1fbfhk3{position:relative;overflow:hidden;flex:1;min-height:220px;border-radius:18px;border:1px dashed var(--vx-line-2);background:#ffffff04;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;cursor:pointer;font:inherit;color:inherit;transition:all .3s var(--vx-ease)}.recorder.rec.svelte-1fbfhk3{border-color:var(--vx-cyan-b);background:#22d4ef0d;box-shadow:0 0 0 1px #22d4ef26,0 0 40px #22d4ef1f}.recorder.done.svelte-1fbfhk3{border-color:var(--vx-cyan-b);background:var(--vx-bg-1);box-shadow:0 0 0 1px #22d4ef1a}.scan.svelte-1fbfhk3{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,transparent,rgba(34,212,239,.08),transparent);animation:vxScan 1.6s linear infinite;pointer-events:none}.rec-label.svelte-1fbfhk3{font-family:var(--vx-mono);font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--vx-txt-2);display:flex;align-items:center;gap:8px;transition:color .3s}.recorder.rec.svelte-1fbfhk3 .rec-label:where(.svelte-1fbfhk3){color:var(--vx-cyan-1)}.recorder.done.svelte-1fbfhk3 .rec-label:where(.svelte-1fbfhk3){color:var(--vx-good)}.dot.svelte-1fbfhk3{width:8px;height:8px;border-radius:50%;background:currentColor;box-shadow:0 0 10px currentColor;animation:vxPulse 1.4s infinite}.keycaps.svelte-1fbfhk3{display:flex;gap:10px;align-items:center;min-height:64px}.rec-hint.svelte-1fbfhk3{font-size:13px;color:var(--vx-txt-2);text-align:center;max-width:520px;line-height:1.5;padding:0 20px}.rec-hint.bad.svelte-1fbfhk3{color:var(--vx-warn)}.sys.svelte-1fbfhk3{flex:none;padding:14px 18px;border-radius:14px;border:1px solid var(--vx-line);background:var(--vx-bg-1);display:flex;gap:16px;align-items:center;animation:vxPop .3s var(--vx-ease)}.sys.ok.svelte-1fbfhk3{border-color:#6ad48a66}.sys-glyph.svelte-1fbfhk3{font-family:var(--vx-mono);font-size:26px;color:var(--vx-gold-1)}.sys.ok.svelte-1fbfhk3 .sys-glyph:where(.svelte-1fbfhk3){color:var(--vx-good)}.sys-copy.svelte-1fbfhk3{flex:1;min-width:0}.sys-title.svelte-1fbfhk3{font-weight:600;font-size:14px}.sys-desc.svelte-1fbfhk3{font-size:12.5px;color:var(--vx-txt-2);line-height:1.45;margin-top:2px}.sys-err.svelte-1fbfhk3{margin-top:6px;font-size:12px;color:var(--vx-bad);line-height:1.4}.sys-actions.svelte-1fbfhk3{display:flex;gap:8px;flex:none}@media (max-width: 1100px){.body.svelte-1fbfhk3{grid-template-columns:1fr}}.preview.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;color:var(--vx-cyan-0);background:radial-gradient(120% 120% at 50% 120%,rgba(34,212,239,.1),transparent 70%)}.preview.mono.svelte-y6l73v{color:#dfe6ee;background:none}.still.svelte-y6l73v,.clip.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover;display:block;pointer-events:none}.clip.svelte-y6l73v{opacity:0;transition:opacity .35s ease}.clip.ready.svelte-y6l73v{opacity:1}.bars.svelte-y6l73v{display:flex;align-items:flex-end;justify-content:center;gap:3px;width:64%;height:56%}.bars.svelte-y6l73v>div:where(.svelte-y6l73v){flex:1;min-height:10%;border-radius:2px;background:currentColor;transform-origin:bottom;animation-name:vxBar;animation-iteration-count:infinite;animation-timing-function:ease-in-out;opacity:.9}.wave.svelte-y6l73v{width:76%;height:46%;color:inherit;animation:svelte-y6l73v-waveShift 2.6s linear infinite}@keyframes svelte-y6l73v-waveShift{0%{transform:translate(0)}to{transform:translate(-16%)}}.ring-wrap.svelte-y6l73v{position:relative;width:46%;aspect-ratio:1;display:grid;place-items:center}.ring.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;border:1.5px solid currentColor;opacity:.4;animation:vxPulse 1.8s ease-in-out infinite}.ring.r2.svelte-y6l73v{top:22%;right:22%;bottom:22%;left:22%;animation-delay:.5s}.ring-core.svelte-y6l73v{width:26%;aspect-ratio:1;border-radius:50%;background:currentColor;animation:vxPulse 1.8s ease-in-out infinite;animation-delay:.25s}.dial.svelte-y6l73v{position:relative;width:62%;aspect-ratio:2 / 1;display:grid;place-items:end center}.dial-arc.svelte-y6l73v{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:999px 999px 0 0;border:1.5px solid currentColor;border-bottom:0;opacity:.35}.needle.svelte-y6l73v{position:absolute;bottom:0;left:50%;width:2px;height:82%;background:var(--vx-gold-1);transform-origin:bottom center;animation:svelte-y6l73v-needleSwing 2.2s ease-in-out infinite}@keyframes svelte-y6l73v-needleSwing{0%,to{transform:rotate(-38deg)}50%{transform:rotate(34deg)}}.terminal.svelte-y6l73v{width:76%;font-family:var(--vx-mono);font-size:9px;color:#7ab8ff;display:grid;gap:5px}.blocks.svelte-y6l73v{display:flex;gap:2px;height:10px}.blocks.svelte-y6l73v>div:where(.svelte-y6l73v){flex:1;background:#7ab8ff;transform-origin:bottom;animation:vxBar 1.1s ease-in-out infinite}.overlay-step.svelte-ek86vh{flex:1;min-height:0;display:flex;flex-direction:column;gap:14px}.head.svelte-ek86vh{display:flex;gap:24px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-ek86vh{max-width:720px;min-width:0}.choice.svelte-ek86vh{display:grid;grid-template-columns:1fr 1fr;gap:10px;flex:none;width:520px}.mode.svelte-ek86vh{height:66px;padding:0 16px;display:flex;align-items:center;gap:12px}.mode.off-on.svelte-ek86vh{border-color:var(--vx-line-2);background:var(--vx-bg-3);box-shadow:0 0 0 1px var(--vx-line-2)}.mode-glyph.svelte-ek86vh{font-family:var(--vx-mono);font-size:22px;color:var(--vx-txt-2)}.mode-glyph.on.svelte-ek86vh{color:var(--vx-cyan-1)}.mode-title.svelte-ek86vh{display:block;font-weight:600;font-size:14px}.mode-desc.svelte-ek86vh{display:block;font-size:12px;color:var(--vx-txt-2)}.body.svelte-ek86vh{flex:1;min-height:0;display:grid;grid-template-columns:1.7fr 1fr;gap:16px;transition:opacity .4s,filter .4s}.body.muted.svelte-ek86vh{opacity:.18;filter:grayscale(1) blur(1px);pointer-events:none}.styles.svelte-ek86vh,.position.svelte-ek86vh{display:flex;flex-direction:column;min-height:0}.style-grid.svelte-ek86vh{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:8px}.style-card.svelte-ek86vh{overflow:hidden;padding:0;display:flex;flex-direction:column;min-height:0}.thumb.svelte-ek86vh{position:relative;aspect-ratio:16 / 9;background:#05070a;overflow:hidden}.style-meta.svelte-ek86vh{flex:none;display:flex;align-items:center;justify-content:space-between;padding:8px 12px}.style-name.svelte-ek86vh{font-weight:600;font-size:13px}.style-sub.svelte-ek86vh{font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-2)}.style-glyph.svelte-ek86vh{font-family:var(--vx-mono);font-size:14px;color:var(--vx-txt-3);transition:color .3s}.style-glyph.on.svelte-ek86vh{color:var(--vx-cyan-1)}.screen.svelte-ek86vh{position:relative;aspect-ratio:16 / 10;border-radius:12px;border:1px solid var(--vx-line-2);background:linear-gradient(180deg,var(--vx-bg-2),var(--vx-bg-0));overflow:hidden;box-shadow:var(--vx-panel-shadow);margin-top:8px}.grid-lines.svelte-ek86vh{position:absolute;top:0;right:0;bottom:0;left:0;background-image:linear-gradient(to right,rgba(255,255,255,.03) 1px,transparent 1px),linear-gradient(to bottom,rgba(255,255,255,.03) 1px,transparent 1px);background-size:28px 28px}.taskbar.svelte-ek86vh{position:absolute;left:0;right:0;bottom:0;height:7%;background:#00000080;border-top:1px solid var(--vx-line)}.floating.svelte-ek86vh{position:absolute;left:50%;transform:translate(-50%,-50%);width:44%;aspect-ratio:16 / 9;border-radius:8px;overflow:hidden;border:1px solid rgba(34,212,239,.4);box-shadow:0 0 24px #22d4ef40;background:#05070a;transition:top .5s var(--vx-ease)}.pos-buttons.svelte-ek86vh{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:10px}.pos.svelte-ek86vh{height:46px;border-radius:10px;border:1px solid var(--vx-line);background:#ffffff05;color:var(--vx-txt-1);font:inherit;font-size:13px;font-weight:600;cursor:pointer;transition:all .25s;display:flex;align-items:center;justify-content:center;gap:8px}.pos.svelte-ek86vh:hover{border-color:var(--vx-line-2)}.pos.on.svelte-ek86vh{border-color:var(--vx-cyan-b);background:#22d4ef1f;color:var(--vx-cyan-1)}.pos-glyph.svelte-ek86vh{font-family:var(--vx-mono)}@media (max-width: 1100px){.head.svelte-ek86vh{flex-direction:column;align-items:stretch}.choice.svelte-ek86vh{width:100%}.body.svelte-ek86vh{grid-template-columns:1fr}.style-grid.svelte-ek86vh{grid-template-columns:repeat(2,1fr)}}.test-step.svelte-oqvphh{flex:1;min-height:0;display:flex;flex-direction:column;gap:14px}.head.svelte-oqvphh{display:flex;gap:24px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-oqvphh{max-width:640px;min-width:0}.combo.svelte-oqvphh{display:flex;gap:10px;align-items:center;flex:none}.gesture-pill.svelte-oqvphh{margin-left:10px;font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-txt-2);padding:6px 12px;border:1px solid var(--vx-line);border-radius:999px}.box.svelte-oqvphh{position:relative;flex:1;min-height:0;border-radius:18px;border:1px solid var(--vx-line);background:var(--vx-bg-1);transition:all .4s var(--vx-ease);overflow:hidden;display:flex;flex-direction:column}.box.live.svelte-oqvphh{border-color:var(--vx-cyan-b);box-shadow:0 0 40px #22d4ef26}.box.won.svelte-oqvphh{border-color:#6ad48a80;box-shadow:0 0 40px #6ad48a26}.box-head.svelte-oqvphh{flex:none;display:flex;align-items:center;justify-content:space-between;padding:10px 18px;border-bottom:1px solid var(--vx-line)}.file.svelte-oqvphh{font-family:var(--vx-mono);font-size:11.5px;color:var(--vx-txt-2)}.state.svelte-oqvphh{font-family:var(--vx-mono);font-size:11px;letter-spacing:.1em;display:flex;align-items:center;gap:8px;color:var(--vx-txt-3);transition:color .3s}.state.recording.svelte-oqvphh{color:var(--vx-cyan-0)}.state.transcribing.svelte-oqvphh{color:var(--vx-gold-1)}.state.success.svelte-oqvphh{color:var(--vx-good)}.dot.svelte-oqvphh{width:7px;height:7px;border-radius:50%;background:currentColor;box-shadow:0 0 8px currentColor;animation:vxPulse 1.4s infinite}textarea.svelte-oqvphh{display:block;flex:1;min-height:180px;width:100%;padding:22px;border:0;background:transparent;color:var(--vx-txt-0);font-family:inherit;font-size:19px;line-height:1.6;resize:none;caret-color:var(--vx-cyan-0);outline:none}.wave.svelte-oqvphh{position:absolute;left:0;right:0;bottom:0;height:64px;display:flex;align-items:center;justify-content:center;gap:4px;background:linear-gradient(180deg,transparent,rgba(34,212,239,.1));pointer-events:none}.wave.svelte-oqvphh>div:where(.svelte-oqvphh){width:4px;height:30px;border-radius:2px;background:var(--vx-cyan-0);transform-origin:center;animation-name:vxBar;animation-iteration-count:infinite;animation-timing-function:ease-in-out}.won-overlay.svelte-oqvphh{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;text-align:center;background:#0e1116db;animation:vxPop .35s var(--vx-ease)}.tick.svelte-oqvphh{width:84px;height:84px;margin:0 auto 16px;border-radius:50%;border:2px solid var(--vx-good);display:grid;place-items:center;color:var(--vx-good);font-family:var(--vx-mono);font-size:36px;box-shadow:0 0 30px #6ad48a59;animation:vxRing .5s var(--vx-ease)}.won-title.svelte-oqvphh{font-size:26px;font-weight:600;letter-spacing:-.02em}.won-sub.svelte-oqvphh{font-size:14px;color:var(--vx-txt-2);margin:6px 0 18px}.foot.svelte-oqvphh{flex:none;display:flex;justify-content:space-between;align-items:center;gap:20px;font-size:12.5px;color:var(--vx-txt-2)}.engine.svelte-oqvphh{font-family:var(--vx-mono);font-size:11px;white-space:nowrap}@media (max-width: 1000px){.head.svelte-oqvphh{flex-direction:column;align-items:stretch;gap:12px}}.voice-step.svelte-1yghr3b{flex:1;min-height:0;display:flex;flex-direction:column;gap:12px}.head.svelte-1yghr3b{display:flex;gap:20px;align-items:flex-end;justify-content:space-between;flex:none;min-width:0}.copy.svelte-1yghr3b{max-width:680px;min-width:0}.copy.svelte-1yghr3b .vx-lede:where(.svelte-1yghr3b){margin:4px 0 0;font-size:13px;line-height:1.45}.choice.svelte-1yghr3b{display:grid;grid-template-columns:1fr 1fr;gap:10px;flex:none;width:480px}.mode.svelte-1yghr3b{height:58px;padding:0 14px;display:flex;align-items:center;gap:10px}.mode.off-on.svelte-1yghr3b{border-color:var(--vx-line-2);background:var(--vx-bg-3);box-shadow:0 0 0 1px var(--vx-line-2)}.mode-glyph.svelte-1yghr3b{font-family:var(--vx-mono);font-size:20px;color:var(--vx-txt-2)}.mode-glyph.on.svelte-1yghr3b{color:var(--vx-cyan-1)}.mode-title.svelte-1yghr3b{display:block;font-weight:600;font-size:13.5px}.mode-desc.svelte-1yghr3b{display:block;font-size:11.5px;color:var(--vx-txt-2)}.toolbar.svelte-1yghr3b{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:8px 14px;border:1px solid var(--vx-line);border-radius:10px;background:#ffffff05;flex:none;transition:opacity .4s,filter .4s}.audition-panel.svelte-1yghr3b{display:flex;align-items:center;gap:14px;min-width:0}.audition-btn.svelte-1yghr3b{height:38px;padding:0 16px;display:inline-flex;align-items:center;gap:8px;font-size:13px;font-weight:600;border-radius:8px;background:#22d4ef17;border:1px solid var(--vx-cyan-0);color:var(--vx-cyan-0);cursor:pointer;transition:all .2s}.audition-btn.svelte-1yghr3b:hover:not(:disabled){background:#22d4ef2e;box-shadow:0 0 12px #22d4ef40}.audition-btn.svelte-1yghr3b:disabled{opacity:.4;cursor:not-allowed;border-color:var(--vx-line-2);color:var(--vx-txt-3);background:#ffffff08}.audition-btn.playing.svelte-1yghr3b{border-color:var(--vx-gold-1);color:var(--vx-gold-1);background:#eab3081f}.tri.svelte-1yghr3b{font-family:var(--vx-mono);font-size:14px;color:inherit}.stop-icon.svelte-1yghr3b{font-size:14px;color:inherit}.btn-text.svelte-1yghr3b{font-family:var(--vx-mono);font-size:12px;letter-spacing:.02em}.play-bars.svelte-1yghr3b{display:flex;align-items:center;gap:2.5px;height:18px;margin-left:4px}.play-bars.svelte-1yghr3b>div:where(.svelte-1yghr3b){width:3px;height:18px;border-radius:1.5px;background:currentColor;transform-origin:center;animation-name:vxBar;animation-iteration-count:infinite;animation-timing-function:ease-in-out}.audition-meta.svelte-1yghr3b{display:flex;flex-direction:column;gap:2px}.audition-label.svelte-1yghr3b{font-size:12px;color:var(--vx-cyan-0);font-weight:600}.audition-hint.svelte-1yghr3b{font-size:11px;font-family:var(--vx-mono)}.audition-hint.svelte-1yghr3b .ready:where(.svelte-1yghr3b){color:var(--vx-good)}.audition-hint.svelte-1yghr3b .good:where(.svelte-1yghr3b){color:var(--vx-cyan-0)}.audition-hint.svelte-1yghr3b .warn:where(.svelte-1yghr3b){color:var(--vx-gold-1)}.audition-hint.svelte-1yghr3b .bad:where(.svelte-1yghr3b){color:var(--vx-bad)}.audition-hint.svelte-1yghr3b .dim:where(.svelte-1yghr3b){color:var(--vx-txt-3)}.hf-bar.svelte-1yghr3b{display:flex;align-items:center;gap:12px;padding:4px 10px;border-radius:8px;border:1px solid transparent;background:#0003}.hf-bar.needed.svelte-1yghr3b{border-color:color-mix(in srgb,var(--vx-gold-1) 45%,transparent);background:color-mix(in srgb,var(--vx-gold-1) 6%,transparent)}.hf-header.svelte-1yghr3b{display:flex;flex-direction:column;gap:1px;text-align:right}.hf-title.svelte-1yghr3b{font-size:11.5px;font-weight:600}.hf-sub.svelte-1yghr3b{font-size:10px;color:var(--vx-txt-3)}.hf-control.svelte-1yghr3b{display:flex;flex-direction:column;gap:2px}.hf-input.svelte-1yghr3b{width:170px;padding:5px 8px;font-size:11.5px;font-family:inherit;color:inherit;background:#00000073;border:1px solid var(--vx-line);border-radius:6px;outline:none;transition:border-color .2s}.hf-input.svelte-1yghr3b:focus{border-color:var(--vx-cyan-0)}.hf-input[readonly].svelte-1yghr3b{color:var(--vx-txt-2);cursor:not-allowed}.hf-state.svelte-1yghr3b{font-size:9.5px;font-family:var(--vx-mono);color:var(--vx-txt-3);white-space:nowrap}.hf-state.ok.svelte-1yghr3b{color:var(--vx-good)}.hf-state.bad.svelte-1yghr3b{color:var(--vx-bad)}.non-commercial-notice.svelte-1yghr3b{flex:none;padding:8px 12px;border-radius:8px;border:1px solid color-mix(in srgb,var(--vx-gold-1) 45%,transparent);background:color-mix(in srgb,var(--vx-gold-1) 6%,transparent);font-size:12px;line-height:1.4}.gpu-toggle-row.svelte-1yghr3b{flex:none;display:flex;align-items:center;gap:8px;font-size:12.5px;padding:2px}.gpu-toggle-hint.svelte-1yghr3b{color:var(--vx-txt-3);font-size:11px}.grid.svelte-1yghr3b{flex:1;min-height:0;display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(2,minmax(0,1fr));gap:10px;transition:opacity .4s,filter .4s}.grid.muted.svelte-1yghr3b{opacity:.18;filter:grayscale(1) blur(1px);pointer-events:none}.card.svelte-1yghr3b{padding:12px 14px;display:flex;flex-direction:column;gap:8px;min-height:0;cursor:pointer;transition:all .2s}.card.locked.svelte-1yghr3b{opacity:.55}.card.locked.svelte-1yghr3b .name:where(.svelte-1yghr3b){color:var(--vx-txt-2)}.card-head.svelte-1yghr3b{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}.card-title-group.svelte-1yghr3b{display:flex;align-items:baseline;gap:8px;min-width:0}.name.svelte-1yghr3b{font-weight:600;font-size:14.5px;letter-spacing:-.01em;white-space:nowrap}.kind.svelte-1yghr3b{font-family:var(--vx-mono);font-size:10px;color:var(--vx-txt-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions.svelte-1yghr3b{display:grid}.dl.svelte-1yghr3b{height:30px;width:100%;font-size:11.5px;padding:0 10px}.bundled.svelte-1yghr3b{height:30px;display:flex;align-items:center;justify-content:center;border-radius:8px;border:1px dashed var(--vx-line);font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-3);text-align:center}.bundled.ok.svelte-1yghr3b{border-style:solid;border-color:#6ad48a59;color:var(--vx-good)}.metrics.svelte-1yghr3b{display:flex;flex-direction:column;gap:8px}.metric-head.svelte-1yghr3b{display:flex;justify-content:space-between;font-family:var(--vx-mono);font-size:10.5px;color:var(--vx-txt-2);margin-bottom:4px}.metric-head.svelte-1yghr3b span:where(.svelte-1yghr3b):last-child{color:var(--vx-txt-1)}.note.svelte-1yghr3b{font-size:11px;color:var(--vx-txt-2);line-height:1.35;margin-top:auto;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical}.bad.svelte-1yghr3b{color:var(--vx-bad);word-break:break-word}.note.svelte-1yghr3b .ok:where(.svelte-1yghr3b){color:var(--vx-good)}.play-error.svelte-1yghr3b{flex:none;font-size:12px;color:var(--vx-bad)}@media (max-width: 1100px){.grid.svelte-1yghr3b{grid-template-columns:repeat(2,1fr);grid-template-rows:repeat(3,minmax(0,1fr))}.head.svelte-1yghr3b{flex-direction:column;align-items:stretch}.choice.svelte-1yghr3b{width:100%}}@media (max-width: 800px){.toolbar.svelte-1yghr3b{flex-direction:column;align-items:stretch}.hf-header.svelte-1yghr3b{text-align:left}.hf-input.svelte-1yghr3b{width:100%}}.done-step.svelte-ujy0nl{flex:1;min-height:0;display:grid;grid-template-columns:.95fr 1fr 1fr;gap:18px;align-items:stretch}.hero.svelte-ujy0nl{display:flex;flex-direction:column;justify-content:center}.tick.svelte-ujy0nl{width:76px;height:76px;margin:0 0 20px;border-radius:50%;border:2px solid var(--vx-gold-0);display:grid;place-items:center;color:var(--vx-gold-1);font-family:var(--vx-mono);font-size:32px;box-shadow:0 0 30px var(--vx-gold-glow);animation:vxRing .6s var(--vx-ease)}.tick.warn.svelte-ujy0nl{border-color:var(--vx-bad);color:var(--vx-bad);box-shadow:0 0 30px #f4636e4d}h2.svelte-ujy0nl{margin:10px 0;font-size:clamp(28px,3.2vw,44px);letter-spacing:-.035em;line-height:1.02;font-weight:600}h2.svelte-ujy0nl span:where(.svelte-ujy0nl){color:var(--vx-gold-1)}h2.svelte-ujy0nl span.bad-word:where(.svelte-ujy0nl){color:var(--vx-bad)}.hero.svelte-ujy0nl p:where(.svelte-ujy0nl){margin:0 0 20px;font-size:14.5px;line-height:1.55;color:var(--vx-txt-1)}.summary.svelte-ujy0nl{display:grid;grid-template-columns:1fr 1fr;gap:10px 14px;padding:14px 16px;border-radius:14px;border:1px solid var(--vx-line);background:linear-gradient(180deg,rgba(34,212,239,.04),transparent)}.summary-value.svelte-ujy0nl{font-size:13px;font-weight:600;color:var(--vx-txt-0);margin-top:3px;word-break:break-word}.panel.svelte-ujy0nl{padding:20px;border-radius:18px;border:1px solid var(--vx-line);background:var(--vx-bg-1);display:flex;flex-direction:column;min-height:0}.panel.problems.svelte-ujy0nl{border-color:#f4636e66}.panel-head.svelte-ujy0nl{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.panel-title.svelte-ujy0nl{font-weight:600;font-size:16px;margin:6px 0 4px}.panel-desc.svelte-ujy0nl{font-size:13px;color:var(--vx-txt-2);line-height:1.5;margin-bottom:16px}.issue-list.svelte-ujy0nl{flex:1;min-height:0;overflow:auto;margin:10px 0 12px;display:grid;gap:10px;align-content:start}.issue.svelte-ujy0nl{border:1px solid var(--vx-line);border-radius:12px;background:#f4636e0a;padding:11px 12px}.issue-head.svelte-ujy0nl{display:flex;gap:9px;align-items:baseline}.issue-step.svelte-ujy0nl{flex:none;font-family:var(--vx-mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--vx-bad)}.issue-title.svelte-ujy0nl{font-size:13px;line-height:1.45;color:var(--vx-txt-0)}.issue-detail.svelte-ujy0nl{margin:8px 0 0;padding:8px 10px;border-radius:8px;background:#00000059;font-family:var(--vx-mono);font-size:11px;line-height:1.5;color:var(--vx-txt-2);white-space:pre-wrap;word-break:break-word;max-height:150px;overflow:auto}.problem-actions.svelte-ujy0nl{display:flex;gap:8px;margin-top:auto}.log-status.svelte-ujy0nl{margin-top:8px;font-size:12px;line-height:1.4;color:var(--vx-txt-2)}.mock-screen.svelte-ujy0nl{position:relative;flex:1;min-height:230px;border-radius:12px;border:1px solid var(--vx-line-2);background:linear-gradient(180deg,var(--vx-bg-2),var(--vx-bg-0));overflow:hidden}.mock-bar.svelte-ujy0nl{position:absolute;left:0;right:0;bottom:0;height:40px;background:#0000008c;border-top:1px solid var(--vx-line);display:flex;align-items:center;justify-content:flex-end;padding:0 14px;gap:12px}.mock-sys-icon.svelte-ujy0nl{font-size:11px;color:var(--vx-txt-3);opacity:.65;-webkit-user-select:none;user-select:none}.mock-sys-icon.chevron.svelte-ujy0nl{font-size:14px;margin-left:2px}.tray-btn-wrap.svelte-ujy0nl{position:relative;display:inline-flex;align-items:center;justify-content:center}.tray-btn.svelte-ujy0nl{width:32px;height:32px;border-radius:6px;border:1px solid transparent;background:transparent;cursor:pointer;display:grid;place-items:center;transition:all .2s}.tray-btn.svelte-ujy0nl:hover{background:#ffffff14}.tray-btn.on.svelte-ujy0nl{border-color:#ffffff40;background:#ffffff1f}.tray-btn.svelte-ujy0nl img:where(.svelte-ujy0nl){width:22px;height:22px;display:block;object-fit:contain}.tray-menu.svelte-ujy0nl{position:absolute;right:14px;bottom:48px;width:275px;padding:6px;border-radius:8px;border:1px solid rgba(255,255,255,.15);background:#1f232a;box-shadow:0 10px 30px #000000b3;animation:vxPop .18s var(--vx-ease);z-index:10}.tray-row.svelte-ujy0nl{width:100%;border:none;background:transparent;padding:6px 8px;border-radius:5px;display:flex;align-items:center;gap:8px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:13.5px;color:#e6edf3;text-align:left;cursor:pointer;transition:background .15s,color .15s}.tray-row.svelte-ujy0nl:hover{background:#ffffff14;color:#fff}.chk-gutter.svelte-ujy0nl{width:18px;height:18px;flex:none;display:flex;align-items:center;justify-content:center}.chk.svelte-ujy0nl{width:16px;height:16px;border-radius:4px;border:1px solid rgba(255,255,255,.3);background:#ffffff0f;display:flex;align-items:center;justify-content:center;transition:all .15s ease}.chk.on.svelte-ujy0nl{background:#1d8cf8;border-color:#38bdf8}.tray-icon.svelte-ujy0nl{width:20px;font-size:15px;display:flex;align-items:center;justify-content:center;flex:none}.tray-label.svelte-ujy0nl{flex:1;white-space:nowrap;letter-spacing:-.01em}.tray-label.no-icon.svelte-ujy0nl{padding-left:2px}.tray-sep.svelte-ujy0nl{height:1px;background:#ffffff1f;margin:5px 6px}.click-me.svelte-ujy0nl{position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;gap:2px;font-family:var(--vx-mono);font-size:11px;letter-spacing:.05em;color:var(--vx-cyan-1);white-space:nowrap;pointer-events:none;animation:svelte-ujy0nl-vxNudge 1.6s ease-in-out infinite}.arrow.svelte-ujy0nl{font-size:14px;font-weight:700;line-height:1}@keyframes svelte-ujy0nl-vxNudge{0%,to{transform:translate(-50%) translateY(0)}50%{transform:translate(-50%) translateY(4px)}}.where.svelte-ujy0nl{list-style:none;padding:0;margin:0 0 16px;display:grid;gap:2px}.where.svelte-ujy0nl li:where(.svelte-ujy0nl){display:flex;align-items:center;gap:9px;padding:7px 10px;font-size:12.5px;color:var(--vx-txt-1)}.where.svelte-ujy0nl .glyph:where(.svelte-ujy0nl){font-family:var(--vx-mono);color:var(--vx-cyan-2);width:16px}.where.svelte-ujy0nl .tag:where(.svelte-ujy0nl){margin-left:auto;font-family:var(--vx-mono);font-size:10px;color:var(--vx-txt-3)}.open-settings.svelte-ujy0nl{margin-top:auto;align-self:flex-start}.vx-btn.small.svelte-ujy0nl{height:34px;padding:0 12px;font-size:12px}@media (max-width: 1100px){.done-step.svelte-ujy0nl{grid-template-columns:1fr;align-content:start}}.vx-root.svelte-18pn5kx{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;overflow:hidden}.vx-titlebar.svelte-18pn5kx{height:46px;flex:none;display:flex;align-items:center;gap:9px;padding:0 18px;border-bottom:1px solid var(--vx-line);background:#0e1116b3;z-index:2}.vx-logo.svelte-18pn5kx{width:20px;height:20px;border-radius:5px}.vx-brand.svelte-18pn5kx{font-weight:600;font-size:14.5px;letter-spacing:-.01em}.vx-brand.svelte-18pn5kx span:where(.svelte-18pn5kx){color:var(--vx-cyan-0)}.vx-mono.svelte-18pn5kx{font-family:var(--vx-mono);font-size:11px;letter-spacing:.1em}.vx-dim.svelte-18pn5kx{color:var(--vx-txt-2)}.vx-faint.svelte-18pn5kx{color:var(--vx-txt-3)}.vx-spacer.svelte-18pn5kx{flex:1}.vx-screen.svelte-18pn5kx{flex:1;min-height:0;display:flex;flex-direction:column;padding:22px 32px 16px;overflow:auto;opacity:1;transform:none;transition:opacity .2s ease,transform .2s var(--vx-ease)}.vx-screen.vx-leaving.svelte-18pn5kx{opacity:0;transform:translateY(10px)}.vx-loading.svelte-18pn5kx{margin:auto;display:flex;align-items:center;gap:10px;color:var(--vx-txt-2);font-size:13.5px}.vx-footer.svelte-18pn5kx{flex:none;display:grid;grid-template-columns:170px 1fr auto;align-items:center;gap:28px;border-top:1px solid var(--vx-line);background:#0e1116cc;padding:10px 32px 12px;z-index:3}.vx-nav-left.svelte-18pn5kx,.vx-nav-right.svelte-18pn5kx{display:flex;align-items:center;gap:12px}.vx-nav-right.svelte-18pn5kx{justify-content:flex-end}.vx-skip.svelte-18pn5kx{font-weight:500;color:var(--vx-txt-3)}.vx-blocker.svelte-18pn5kx{max-width:340px;font-size:12px;line-height:1.35;color:var(--vx-txt-2);text-align:right}.vx-track.svelte-18pn5kx,.vx-track-cell.svelte-18pn5kx{display:flex;align-items:center;min-width:0}.vx-track-step.svelte-18pn5kx{display:flex;flex-direction:column;align-items:center;gap:6px;min-width:62px;padding:4px 6px;border:0;background:transparent;font:inherit;color:var(--vx-txt-3);cursor:pointer;transition:color .3s}.vx-track-step.svelte-18pn5kx:disabled{cursor:default}.vx-track-step.vx-done.svelte-18pn5kx{color:var(--vx-txt-1)}.vx-track-step.vx-cur.svelte-18pn5kx{color:var(--vx-txt-0)}.vx-ring.svelte-18pn5kx{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-family:var(--vx-mono);font-size:12px;border:1px solid var(--vx-line-2);background:transparent;color:var(--vx-txt-3);transition:all .35s var(--vx-ease)}.vx-track-step.vx-done.svelte-18pn5kx .vx-ring:where(.svelte-18pn5kx){border-color:#22d4ef66;background:#22d4ef1a;color:var(--vx-cyan-1)}.vx-track-step.vx-cur.svelte-18pn5kx .vx-ring:where(.svelte-18pn5kx){border-color:var(--vx-cyan-0);background:var(--vx-cyan-0);color:#00222a;box-shadow:0 0 16px #22d4ef73}.vx-track-label.svelte-18pn5kx{font-size:11px;font-weight:500;white-space:nowrap}.vx-track-step.vx-cur.svelte-18pn5kx .vx-track-label:where(.svelte-18pn5kx){font-weight:600}.vx-track-line.svelte-18pn5kx{flex:1;min-width:8px;height:2px;margin:0 2px 19px;border-radius:1px;background:var(--vx-bg-4);overflow:hidden}.vx-track-line.svelte-18pn5kx>div:where(.svelte-18pn5kx){height:100%;background:var(--vx-cyan-0);transition:width .5s var(--vx-ease)}.vx-toast.svelte-18pn5kx{position:fixed;left:50%;bottom:84px;transform:translate(-50%);display:flex;align-items:center;gap:14px;max-width:70vw;padding:11px 14px;border-radius:10px;border:1px solid rgba(244,99,110,.45);background:#2a1215;color:#ffb3b8;font-size:13px;box-shadow:var(--vx-panel-shadow);animation:vxPop .25s var(--vx-ease);z-index:20}.vx-toast.svelte-18pn5kx button:where(.svelte-18pn5kx){border:0;background:transparent;color:inherit;cursor:pointer;font-size:13px}@media (max-width: 1000px){.vx-footer.svelte-18pn5kx{grid-template-columns:110px 1fr auto;gap:16px;padding:10px 18px 12px}.vx-track-label.svelte-18pn5kx{display:none}.vx-track-line.svelte-18pn5kx{margin-bottom:0}.vx-screen.svelte-18pn5kx{padding:18px 20px 14px}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}main.svelte-15mrihi{background-color:var(--color-obsidian-950);width:100vw;height:100vh;padding:calc(var(--spacing,.25rem) * 5);color:var(--text);justify-content:center;align-items:flex-start;display:flex;overflow-y:auto}.card.svelte-15mrihi{gap:calc(var(--spacing,.25rem) * 4);flex-direction:column;width:100%;max-width:520px;display:flex}header.svelte-15mrihi{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 3);display:flex}.logo.svelte-15mrihi{height:calc(var(--spacing,.25rem) * 11);width:calc(var(--spacing,.25rem) * 11);border-radius:var(--radius-xl,.75rem);flex-shrink:0}h1.svelte-15mrihi{font-size:var(--text-lg,1.125rem);line-height:var(--tw-leading,var(--text-lg--line-height,calc(1.75 / 1.125)));--tw-leading:var(--leading-tight,1.25);line-height:var(--leading-tight,1.25);--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800);--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em);color:var(--color-white,#fff)}h2.svelte-15mrihi{margin-bottom:calc(var(--spacing,.25rem) * 1.5);--tw-font-weight:var(--font-weight-bold,700);font-size:11px;font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em);color:var(--color-obsidian-400);text-transform:uppercase}.sub.svelte-15mrihi{margin-top:calc(var(--spacing,.25rem) * 1);color:var(--color-obsidian-400);font-size:12.5px}.body.svelte-15mrihi{--tw-leading:var(--leading-relaxed,1.625);font-size:13px;line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-200)}.hint.svelte-15mrihi{--tw-leading:var(--leading-relaxed,1.625);font-size:11.5px;line-height:var(--leading-relaxed,1.625);color:var(--color-obsidian-400)}.notes-block.svelte-15mrihi{border-radius:var(--radius-lg,.5rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.notes-block.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.notes-block.svelte-15mrihi{padding:calc(var(--spacing,.25rem) * 3)}.notes.svelte-15mrihi{margin:calc(var(--spacing,.25rem) * 0);max-height:240px;font-family:var(--font-sans,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");--tw-leading:var(--leading-relaxed,1.625);font-size:12px;line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word;white-space:pre-wrap;color:var(--color-obsidian-200);overflow-y:auto}.warn.svelte-15mrihi{border-style:var(--tw-border-style);border-width:1px;border-color:#f99c0033;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.warn.svelte-15mrihi{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 20%,transparent)}}.warn.svelte-15mrihi{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.warn.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.warn.svelte-15mrihi{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12.5px;line-height:var(--leading-relaxed,1.625);color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.warn.svelte-15mrihi{color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.error.svelte-15mrihi{border-style:var(--tw-border-style);border-width:1px;border-color:#fb2c3633;border-radius:.25rem}@supports (color:color-mix(in lab,red,red)){.error.svelte-15mrihi{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.error.svelte-15mrihi{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.error.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.error.svelte-15mrihi{padding:calc(var(--spacing,.25rem) * 2.5);--tw-leading:var(--leading-relaxed,1.625);font-size:12.5px;line-height:var(--leading-relaxed,1.625);overflow-wrap:break-word;color:var(--color-red-400,oklch(70.4% .191 22.216))}.progress-block.svelte-15mrihi{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}.bar.svelte-15mrihi{height:calc(var(--spacing,.25rem) * 2);background-color:#ffffff0d;border-radius:3.40282e38px;width:100%;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.bar.svelte-15mrihi{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.fill.svelte-15mrihi{background-color:var(--color-accent-blue);height:100%;transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.2s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));border-radius:3.40282e38px}.bar.indeterminate.svelte-15mrihi .fill:where(.svelte-15mrihi){width:33.3333%;animation:var(--animate-pulse,pulse 2s cubic-bezier(.4, 0, .6, 1) infinite)}footer.svelte-15mrihi{margin-top:calc(var(--spacing,.25rem) * 1);justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 3);flex-wrap:wrap;display:flex}.left-actions.svelte-15mrihi{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 1);flex-direction:column;display:flex}.right-actions.svelte-15mrihi{align-items:center;gap:calc(var(--spacing,.25rem) * 2);margin-left:auto;display:flex}.btn-primary.svelte-15mrihi{cursor:pointer;border-radius:var(--radius-md,.375rem);background-color:var(--color-accent-blue);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-bold,700);font-size:12.5px;font-weight:var(--font-weight-bold,700);color:var(--color-white,#fff);--tw-shadow:0 4px 14px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-primary.svelte-15mrihi:hover{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-shadow:0 6px 18px var(--tw-shadow-color,#38bdf873);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-brightness:brightness(1.05);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.btn-secondary.svelte-15mrihi{cursor:pointer;border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--color-obsidian-800);padding-inline:calc(var(--spacing,.25rem) * 3.5);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-semibold,600);font-size:12.5px;font-weight:var(--font-weight-semibold,600);color:var(--color-obsidian-300);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1));justify-content:center;align-items:center;display:inline-flex}.btn-secondary.svelte-15mrihi:hover{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.btn-secondary.svelte-15mrihi:hover{border-color:color-mix(in oklab,var(--color-white,#fff) 10%,transparent)}}.btn-secondary.svelte-15mrihi:hover{background-color:var(--color-obsidian-700);color:var(--color-white,#fff)}.btn-secondary.svelte-15mrihi:disabled,.btn-primary.svelte-15mrihi:disabled{cursor:default;opacity:.6;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.link.svelte-15mrihi{cursor:pointer;border-style:var(--tw-border-style);padding:calc(var(--spacing,.25rem) * 0);text-align:left;--tw-font-weight:var(--font-weight-semibold,600);font-size:12px;font-weight:var(--font-weight-semibold,600);color:var(--color-accent-blue);text-underline-offset:2px;background-color:#0000;border-width:0;text-decoration-line:underline}.centered.svelte-15mrihi{justify-content:center;align-items:center;gap:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 8);flex-direction:column;display:flex}.spinner.svelte-15mrihi{height:calc(var(--spacing,.25rem) * 7);width:calc(var(--spacing,.25rem) * 7);animation:var(--animate-spin,spin 1s linear infinite);border-style:var(--tw-border-style);border-width:2.5px;border-color:#ffffff0d;border-radius:3.40282e38px}@supports (color:color-mix(in lab,red,red)){.spinner.svelte-15mrihi{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.spinner.svelte-15mrihi{border-top-color:var(--color-accent-blue)}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--color-obsidian-950:#08090b;--color-obsidian-900:#0d0e12;--color-obsidian-800:#14171f;--color-obsidian-700:#1e222d;--color-obsidian-300:#9ca3af;--color-obsidian-100:#e5e7eb;--color-accent-tangerine:#ff6b35;--color-accent-blue:#38bdf8;--color-accent-green:#10b981;--radius-desktop:6px;--animate-border-pulse:border-pulse 1.5s infinite;--animate-flash:flash 1s infinite;--transition-snappy:all .25s cubic-bezier(.175, .885, .32, 1.2);--transition-snappy-fast:all .15s cubic-bezier(.175, .885, .32, 1.275)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,var(--font-sans,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"));font-feature-settings:var(--default-font-feature-settings,initial);font-variation-settings:var(--default-font-variation-settings,initial);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace));font-feature-settings:var(--default-mono-font-feature-settings,initial);font-variation-settings:var(--default-mono-font-variation-settings,initial);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing,.25rem) * 0)}.-top-0\.5{top:calc(var(--spacing,.25rem) * -.5)}.top-0{top:calc(var(--spacing,.25rem) * 0)}.top-2\.5{top:calc(var(--spacing,.25rem) * 2.5)}.top-\[15\%\]{top:15%}.right-0{right:calc(var(--spacing,.25rem) * 0)}.right-3\.5{right:calc(var(--spacing,.25rem) * 3.5)}.right-6{right:calc(var(--spacing,.25rem) * 6)}.-bottom-0\.5{bottom:calc(var(--spacing,.25rem) * -.5)}.bottom-6{bottom:calc(var(--spacing,.25rem) * 6)}.left-0{left:calc(var(--spacing,.25rem) * 0)}.isolate{isolation:isolate}.z-10{z-index:10}.z-\[100\]{z-index:100}.z-\[200\]{z-index:200}.z-\[2000\]{z-index:2000}.col-span-full{grid-column:1/-1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing,.25rem) * 0)}.my-1{margin-block:calc(var(--spacing,.25rem) * 1)}.mt-0\.5{margin-top:calc(var(--spacing,.25rem) * .5)}.mt-1{margin-top:calc(var(--spacing,.25rem) * 1)}.mt-1\.5{margin-top:calc(var(--spacing,.25rem) * 1.5)}.mt-2{margin-top:calc(var(--spacing,.25rem) * 2)}.mt-2\.5{margin-top:calc(var(--spacing,.25rem) * 2.5)}.mt-3\.5{margin-top:calc(var(--spacing,.25rem) * 3.5)}.mt-4{margin-top:calc(var(--spacing,.25rem) * 4)}.mt-6{margin-top:calc(var(--spacing,.25rem) * 6)}.mb-1{margin-bottom:calc(var(--spacing,.25rem) * 1)}.mb-2{margin-bottom:calc(var(--spacing,.25rem) * 2)}.mb-3{margin-bottom:calc(var(--spacing,.25rem) * 3)}.mb-3\.5{margin-bottom:calc(var(--spacing,.25rem) * 3.5)}.mb-4{margin-bottom:calc(var(--spacing,.25rem) * 4)}.mb-5{margin-bottom:calc(var(--spacing,.25rem) * 5)}.ml-2\.5{margin-left:calc(var(--spacing,.25rem) * 2.5)}.ml-4{margin-left:calc(var(--spacing,.25rem) * 4)}.box-border{box-sizing:border-box}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\.5{height:calc(var(--spacing,.25rem) * 1.5)}.h-2{height:calc(var(--spacing,.25rem) * 2)}.h-3\.5{height:calc(var(--spacing,.25rem) * 3.5)}.h-4{height:calc(var(--spacing,.25rem) * 4)}.h-5{height:calc(var(--spacing,.25rem) * 5)}.h-7{height:calc(var(--spacing,.25rem) * 7)}.h-11{height:calc(var(--spacing,.25rem) * 11)}.h-16{height:calc(var(--spacing,.25rem) * 16)}.h-\[5px\]{height:5px}.h-\[70\%\]{height:70%}.h-full{height:100%}.h-screen{height:100vh}.max-h-60{max-height:calc(var(--spacing,.25rem) * 60)}.max-h-\[85vh\]{max-height:85vh}.max-h-\[180px\]{max-height:180px}.max-h-\[240px\]{max-height:240px}.max-h-\[340px\]{max-height:340px}.min-h-\[42px\]{min-height:42px}.min-h-\[70px\]{min-height:70px}.min-h-\[80px\]{min-height:80px}.min-h-\[150px\]{min-height:150px}.w-1\.5{width:calc(var(--spacing,.25rem) * 1.5)}.w-1\/3{width:33.3333%}.w-2{width:calc(var(--spacing,.25rem) * 2)}.w-4{width:calc(var(--spacing,.25rem) * 4)}.w-5{width:calc(var(--spacing,.25rem) * 5)}.w-7{width:calc(var(--spacing,.25rem) * 7)}.w-11{width:calc(var(--spacing,.25rem) * 11)}.w-16{width:calc(var(--spacing,.25rem) * 16)}.w-20{width:calc(var(--spacing,.25rem) * 20)}.w-\[2px\]{width:2px}.w-\[3px\]{width:3px}.w-\[5px\]{width:5px}.w-\[90\%\]{width:90%}.w-fit{width:fit-content}.w-full{width:100%}.w-screen{width:100vw}.max-w-\[280px\]{max-width:280px}.max-w-\[500px\]{max-width:500px}.max-w-\[520px\]{max-width:520px}.min-w-0{min-width:calc(var(--spacing,.25rem) * 0)}.min-w-\[36px\]{min-width:36px}.min-w-\[135px\]{min-width:135px}.min-w-\[190px\]{min-width:190px}.flex-1{flex:1}.flex-\[2\]{flex:2}.flex-shrink,.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-y-0\.5{--tw-translate-y:calc(var(--spacing,.25rem) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-\[1px\]{--tw-translate-y: -1px ;translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-\[0\.97\]{scale:.97}.scale-\[1\.01\]{scale:1.01}.scale-\[1\.02\]{scale:1.02}.scale-\[1\.18\]{scale:1.18}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.transform\!{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)!important}.animate-\[floating_4s_ease-in-out_infinite\]{animation:4s ease-in-out infinite floating}.animate-\[ripple_1\.6s_infinite_ease-out\]{animation:1.6s ease-out infinite ripple}.animate-border-pulse{animation:var(--animate-border-pulse)}.animate-flash{animation:var(--animate-flash)}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-y{resize:vertical}.list-none{list-style-type:none}.flex-col{flex-direction:column}.flex-row\!{flex-direction:row!important}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing,.25rem) * .5)}.gap-1{gap:calc(var(--spacing,.25rem) * 1)}.gap-1\.5{gap:calc(var(--spacing,.25rem) * 1.5)}.gap-2{gap:calc(var(--spacing,.25rem) * 2)}.gap-2\.5{gap:calc(var(--spacing,.25rem) * 2.5)}.gap-3{gap:calc(var(--spacing,.25rem) * 3)}.gap-3\.5{gap:calc(var(--spacing,.25rem) * 3.5)}.gap-4{gap:calc(var(--spacing,.25rem) * 4)}.gap-5{gap:calc(var(--spacing,.25rem) * 5)}.gap-\[2px\]{gap:2px}.gap-\[10px\]{gap:10px}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded\!{border-radius:.25rem!important}.rounded-\[99px_0_0_99px\]{border-radius:99px 0 0 99px}.rounded-\[var\(--radius\)\]{border-radius:var(--radius)}.rounded-desktop{border-radius:var(--radius-desktop)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg,.5rem)}.rounded-md{border-radius:var(--radius-md,.375rem)}.rounded-xl{border-radius:var(--radius-xl,.75rem)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[2\.5px\]{border-style:var(--tw-border-style);border-width:2.5px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-none\!{--tw-border-style:none!important;border-style:none!important}.border-solid{--tw-border-style:solid;border-style:solid}.border-\[\#f43f5e\]{border-color:#f43f5e}.border-\[\#fbbf24\]{border-color:#fbbf24}.border-\[var\(--accent\)\]{border-color:var(--accent)}.border-\[var\(--accent2\)\],.border-\[var\(--accent2\)\]\/25{border-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--accent2\)\]\/25{border-color:color-mix(in oklab,var(--accent2) 25%,transparent)}}.border-\[var\(--border\)\]{border-color:var(--border)}.border-\[var\(--color-accent-blue\)\]{border-color:var(--color-accent-blue)}.border-\[var\(--color-accent-blue\)\]\/15{border-color:#38bdf826}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-accent-blue\)\]\/15{border-color:color-mix(in oklab,var(--color-accent-blue) 15%,transparent)}}.border-\[var\(--color-accent-blue\)\]\/20{border-color:#38bdf833}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-accent-blue\)\]\/20{border-color:color-mix(in oklab,var(--color-accent-blue) 20%,transparent)}}.border-\[var\(--color-accent-blue\)\]\/25{border-color:#38bdf840}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-accent-blue\)\]\/25{border-color:color-mix(in oklab,var(--color-accent-blue) 25%,transparent)}}.border-amber-500\/20{border-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/20{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 20%,transparent)}}.border-amber-500\/25{border-color:#f99c0040}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/25{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 25%,transparent)}}.border-amber-500\/40{border-color:#f99c0066}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/40{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 40%,transparent)}}.border-amber-500\/70\!{border-color:#f99c00b3!important}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/70\!{border-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 70%,transparent)!important}}.border-emerald-500\/25{border-color:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/25{border-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 25%,transparent)}}.border-red-500{border-color:var(--color-red-500,oklch(63.7% .237 25.331))}.border-red-500\!{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.border-red-500\/20{border-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.border-red-500\/20{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 20%,transparent)}}.border-red-500\/25{border-color:#fb2c3640}@supports (color:color-mix(in lab,red,red)){.border-red-500\/25{border-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 25%,transparent)}}.border-slate-500\/30{border-color:#62748e4d}@supports (color:color-mix(in lab,red,red)){.border-slate-500\/30{border-color:color-mix(in oklab,var(--color-slate-500,oklch(55.4% .046 257.417)) 30%,transparent)}}.border-white\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.border-white\/5{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.border-white\/12{border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.border-white\/12{border-color:color-mix(in oklab,var(--color-white,#fff) 12%,transparent)}}.border-white\/15{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.border-white\/15{border-color:color-mix(in oklab,var(--color-white,#fff) 15%,transparent)}}.border-white\/\[0\.03\]{border-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.03\]{border-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.border-white\/\[0\.05\]{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.05\]{border-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.border-yellow-500\/30{border-color:#edb2004d}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/30{border-color:color-mix(in oklab,var(--color-yellow-500,oklch(79.5% .184 86.047)) 30%,transparent)}}.border-t-\[var\(--color-accent-blue\)\]{border-top-color:var(--color-accent-blue)}.bg-\[\#1e2436\]{background-color:#1e2436}.bg-\[\#39ff14\]{background-color:#39ff14}.bg-\[\#444\]{background-color:#444}.bg-\[\#ff6d00\]{background-color:#ff6d00}.bg-\[\#ffab00\]{background-color:#ffab00}.bg-\[rgba\(244\,63\,94\,0\.05\)\]{background-color:#f43f5e0d}.bg-\[rgba\(251\,191\,36\,0\.05\)\]{background-color:#fbbf240d}.bg-\[var\(--accent\)\]{background-color:var(--accent)}.bg-\[var\(--accent2\)\],.bg-\[var\(--accent2\)\]\/8{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--accent2\)\]\/8{background-color:color-mix(in oklab,var(--accent2) 8%,transparent)}}.bg-\[var\(--accent2\)\]\/10{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--accent2\)\]\/10{background-color:color-mix(in oklab,var(--accent2) 10%,transparent)}}.bg-\[var\(--accent2\)\]\/15{background-color:var(--accent2)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--accent2\)\]\/15{background-color:color-mix(in oklab,var(--accent2) 15%,transparent)}}.bg-\[var\(--bg\)\]{background-color:var(--bg)}.bg-\[var\(--border\)\]{background-color:var(--border)}.bg-\[var\(--color-accent-blue\)\]{background-color:var(--color-accent-blue)}.bg-\[var\(--color-accent-blue\)\]\/8{background-color:#38bdf814}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--color-accent-blue\)\]\/8{background-color:color-mix(in oklab,var(--color-accent-blue) 8%,transparent)}}.bg-\[var\(--color-accent-green\)\]{background-color:var(--color-accent-green)}.bg-\[var\(--color-obsidian-300\)\]{background-color:var(--color-obsidian-300)}.bg-\[var\(--color-obsidian-700\)\]{background-color:var(--color-obsidian-700)}.bg-\[var\(--color-obsidian-800\)\]{background-color:var(--color-obsidian-800)}.bg-\[var\(--color-obsidian-900\)\]{background-color:var(--color-obsidian-900)}.bg-\[var\(--color-obsidian-950\)\]{background-color:var(--color-obsidian-950)}.bg-\[var\(--surface2\)\]{background-color:var(--surface2)}.bg-accent-blue{background-color:var(--color-accent-blue)}.bg-accent-blue\!{background-color:var(--color-accent-blue)!important}.bg-amber-400{background-color:var(--color-amber-400,oklch(82.8% .189 84.429))}.bg-amber-500\/6{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/6{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 6%,transparent)}}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500,oklch(76.9% .188 70.08)) 10%,transparent)}}.bg-amber-950\/30{background-color:#4619014d}@supports (color:color-mix(in lab,red,red)){.bg-amber-950\/30{background-color:color-mix(in oklab,var(--color-amber-950,oklch(27.9% .077 45.635)) 30%,transparent)}}.bg-black\/25{background-color:#00000040}@supports (color:color-mix(in lab,red,red)){.bg-black\/25{background-color:color-mix(in oklab,var(--color-black,#000) 25%,transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black,#000) 40%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black,#000) 60%,transparent)}}.bg-cyan-500\/15{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.bg-cyan-500\/15{background-color:color-mix(in oklab,var(--color-cyan-500,oklch(71.5% .143 215.221)) 15%,transparent)}}.bg-emerald-500\/6{background-color:#00bb7f0f}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/6{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 6%,transparent)}}.bg-emerald-500\/15{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/15{background-color:color-mix(in oklab,var(--color-emerald-500,oklch(69.6% .17 162.48)) 15%,transparent)}}.bg-emerald-950\/80{background-color:#002c22cc}@supports (color:color-mix(in lab,red,red)){.bg-emerald-950\/80{background-color:color-mix(in oklab,var(--color-emerald-950,oklch(26.2% .051 172.552)) 80%,transparent)}}.bg-red-500{background-color:var(--color-red-500,oklch(63.7% .237 25.331))}.bg-red-500\/6{background-color:#fb2c360f}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/6{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 6%,transparent)}}.bg-red-500\/8{background-color:#fb2c3614}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/8{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 8%,transparent)}}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 10%,transparent)}}.bg-red-500\/15{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/15{background-color:color-mix(in oklab,var(--color-red-500,oklch(63.7% .237 25.331)) 15%,transparent)}}.bg-slate-500\/10{background-color:#62748e1a}@supports (color:color-mix(in lab,red,red)){.bg-slate-500\/10{background-color:color-mix(in oklab,var(--color-slate-500,oklch(55.4% .046 257.417)) 10%,transparent)}}.bg-transparent{background-color:#0000}.bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/5{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.bg-white\/\[0\.02\]{background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.02\]{background-color:color-mix(in oklab,var(--color-white,#fff) 2%,transparent)}}.bg-white\/\[0\.03\]{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.03\]{background-color:color-mix(in oklab,var(--color-white,#fff) 3%,transparent)}}.bg-white\/\[0\.05\]{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.05\]{background-color:color-mix(in oklab,var(--color-white,#fff) 5%,transparent)}}.bg-white\/\[0\.08\]{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-white,#fff) 8%,transparent)}}.bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500,oklch(79.5% .184 86.047)) 10%,transparent)}}.object-contain{object-fit:contain}.p-0{padding:calc(var(--spacing,.25rem) * 0)}.p-0\.5{padding:calc(var(--spacing,.25rem) * .5)}.p-1{padding:calc(var(--spacing,.25rem) * 1)}.p-1\.5{padding:calc(var(--spacing,.25rem) * 1.5)}.p-2{padding:calc(var(--spacing,.25rem) * 2)}.p-2\.5{padding:calc(var(--spacing,.25rem) * 2.5)}.p-3{padding:calc(var(--spacing,.25rem) * 3)}.p-4{padding:calc(var(--spacing,.25rem) * 4)}.p-5{padding:calc(var(--spacing,.25rem) * 5)}.p-6{padding:calc(var(--spacing,.25rem) * 6)}.p-10{padding:calc(var(--spacing,.25rem) * 10)}.p-\[3px\]{padding:3px}.p-\[30px\]{padding:30px}.px-1{padding-inline:calc(var(--spacing,.25rem) * 1)}.px-1\.5{padding-inline:calc(var(--spacing,.25rem) * 1.5)}.px-1\.5\!{padding-inline:calc(var(--spacing,.25rem) * 1.5)!important}.px-2{padding-inline:calc(var(--spacing,.25rem) * 2)}.px-2\.5{padding-inline:calc(var(--spacing,.25rem) * 2.5)}.px-3{padding-inline:calc(var(--spacing,.25rem) * 3)}.px-3\.5{padding-inline:calc(var(--spacing,.25rem) * 3.5)}.px-4{padding-inline:calc(var(--spacing,.25rem) * 4)}.px-5{padding-inline:calc(var(--spacing,.25rem) * 5)}.py-0\.5{padding-block:calc(var(--spacing,.25rem) * .5)}.py-0\.5\!{padding-block:calc(var(--spacing,.25rem) * .5)!important}.py-1{padding-block:calc(var(--spacing,.25rem) * 1)}.py-1\.5{padding-block:calc(var(--spacing,.25rem) * 1.5)}.py-2{padding-block:calc(var(--spacing,.25rem) * 2)}.py-5{padding-block:calc(var(--spacing,.25rem) * 5)}.pt-2{padding-top:calc(var(--spacing,.25rem) * 2)}.pt-3\.5{padding-top:calc(var(--spacing,.25rem) * 3.5)}.pt-4{padding-top:calc(var(--spacing,.25rem) * 4)}.pt-\[14px\]{padding-top:14px}.pr-9{padding-right:calc(var(--spacing,.25rem) * 9)}.pb-4{padding-bottom:calc(var(--spacing,.25rem) * 4)}.pl-3{padding-left:calc(var(--spacing,.25rem) * 3)}.pl-3\.5{padding-left:calc(var(--spacing,.25rem) * 3.5)}.pl-4{padding-left:calc(var(--spacing,.25rem) * 4)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace)}.text-2xl{font-size:var(--text-2xl,1.5rem);line-height:var(--tw-leading,var(--text-2xl--line-height,calc(2 / 1.5)))}.text-base{font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ))}.text-lg{font-size:var(--text-lg,1.125rem);line-height:var(--tw-leading,var(--text-lg--line-height,calc(1.75 / 1.125)))}.text-sm{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)))}.text-xl{font-size:var(--text-xl,1.25rem);line-height:var(--tw-leading,var(--text-xl--line-height,calc(1.75 / 1.25)))}.text-xs{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)))}.text-\[7px\]{font-size:7px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11\.5px\]{font-size:11.5px}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-\[12px\]\!{font-size:12px!important}.text-\[13\.5px\]{font-size:13.5px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[32px\]{font-size:32px}.leading-5{--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5)}.leading-6{--tw-leading:calc(var(--spacing,.25rem) * 6);line-height:calc(var(--spacing,.25rem) * 6)}.leading-\[1\.1\]{--tw-leading:1.1;line-height:1.1}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed,1.625);line-height:var(--leading-relaxed,1.625)}.font-\[850\]{--tw-font-weight:850;font-weight:850}.font-bold{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold,800);font-weight:var(--font-weight-extrabold,800)}.font-extrabold\!{--tw-font-weight:var(--font-weight-extrabold,800)!important;font-weight:var(--font-weight-extrabold,800)!important}.font-medium{--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500)}.font-normal{--tw-font-weight:var(--font-weight-normal,400);font-weight:var(--font-weight-normal,400)}.font-semibold{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600)}.tracking-\[-0\.5px\]{--tw-tracking:-.5px;letter-spacing:-.5px}.tracking-\[0\.06em\]{--tw-tracking:.06em;letter-spacing:.06em}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-tight{--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em)}.tracking-wide{--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em)}.tracking-wider{--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--accent\)\]{color:var(--accent)}.text-\[var\(--accent2\)\]{color:var(--accent2)}.text-\[var\(--color-accent-blue\)\]{color:var(--color-accent-blue)}.text-\[var\(--color-obsidian-200\)\]{color:var(--color-obsidian-200)}.text-\[var\(--color-obsidian-300\)\]{color:var(--color-obsidian-300)}.text-\[var\(--color-obsidian-400\)\]{color:var(--color-obsidian-400)}.text-\[var\(--text\)\]{color:var(--text)}.text-\[var\(--text-muted\)\]{color:var(--text-muted)}.text-accent-blue{color:var(--color-accent-blue)}.text-amber-200\/80{color:#fee685cc}@supports (color:color-mix(in lab,red,red)){.text-amber-200\/80{color:color-mix(in oklab,var(--color-amber-200,oklch(92.4% .12 95.746)) 80%,transparent)}}.text-amber-300\/90{color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.text-amber-300\/90{color:color-mix(in oklab,var(--color-amber-300,oklch(87.9% .169 91.605)) 90%,transparent)}}.text-amber-400{color:var(--color-amber-400,oklch(82.8% .189 84.429))}.text-black{color:var(--color-black,#000)}.text-black\!{color:var(--color-black,#000)!important}.text-cyan-200{color:var(--color-cyan-200,oklch(91.7% .08 205.041))}.text-cyan-300{color:var(--color-cyan-300,oklch(86.5% .127 207.078))}.text-emerald-200{color:var(--color-emerald-200,oklch(90.5% .093 164.15))}.text-emerald-300{color:var(--color-emerald-300,oklch(84.5% .143 164.978))}.text-emerald-300\/90{color:#5ee9b5e6}@supports (color:color-mix(in lab,red,red)){.text-emerald-300\/90{color:color-mix(in oklab,var(--color-emerald-300,oklch(84.5% .143 164.978)) 90%,transparent)}}.text-emerald-400{color:var(--color-emerald-400,oklch(76.5% .177 163.223))}.text-neutral-900{color:var(--color-neutral-900,oklch(20.5% 0 0))}.text-obsidian-300{color:var(--color-obsidian-300)}.text-red-300{color:var(--color-red-300,oklch(80.8% .114 19.571))}.text-red-400{color:var(--color-red-400,oklch(70.4% .191 22.216))}.text-slate-100{color:var(--color-slate-100,oklch(96.8% .007 247.896))}.text-slate-200{color:var(--color-slate-200,oklch(92.9% .013 255.508))}.text-slate-300{color:var(--color-slate-300,oklch(86.9% .022 252.894))}.text-white{color:var(--color-white,#fff)}.text-white\/30{color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.text-white\/30{color:color-mix(in oklab,var(--color-white,#fff) 30%,transparent)}}.text-yellow-200{color:var(--color-yellow-200,oklch(94.5% .129 101.54))}.text-yellow-500{color:var(--color-yellow-500,oklch(79.5% .184 86.047))}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.not-italic{font-style:normal}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.no-underline{text-decoration-line:none}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-55{opacity:.55}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_6px_\#ffab00\]{--tw-shadow:0 0 6px var(--tw-shadow-color,#ffab00);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_8px_var\(--color-accent-blue\)\]{--tw-shadow:0 0 8px var(--tw-shadow-color,var(--color-accent-blue));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_2px_6px_rgba\(56\,189\,248\,0\.05\)\]{--tw-shadow:0 2px 6px var(--tw-shadow-color,#38bdf80d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_4px_12px_rgba\(0\,0\,0\,0\.15\)\]{--tw-shadow:0 4px 12px var(--tw-shadow-color,#00000026);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_4px_14px_rgba\(56\,189\,248\,0\.3\)\]{--tw-shadow:0 4px 14px var(--tw-shadow-color,#38bdf84d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_6px_14px_rgba\(56\,189\,248\,0\.35\)\]{--tw-shadow:0 6px 14px var(--tw-shadow-color,#38bdf859);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_6px_18px_rgba\(56\,189\,248\,0\.45\)\]{--tw-shadow:0 6px 18px var(--tw-shadow-color,#38bdf873);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_10px_30px_rgba\(0\,0\,0\,0\.4\)\,_0_0_12px_rgba\(56\,189\,248\,0\.15\)\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#0006), 0 0 12px var(--tw-shadow-color,#38bdf826);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_10px_30px_rgba\(0\,0\,0\,0\.5\)\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000080);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[inset_0_2px_4px_rgba\(0\,0\,0\,0\.2\)\]{--tw-shadow:inset 0 2px 4px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2\!{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.ring-red-500\/20\!{--tw-ring-color:#fb2c3633!important}@supports (color:color-mix(in lab,red,red)){.ring-red-500\/20\!{--tw-ring-color:color-mix(in oklab, var(--color-red-500,oklch(63.7% .237 25.331)) 20%, transparent)!important}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.brightness-110{--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_0_6px_rgba\(234\,179\,8\,0\.3\)\]{--tw-drop-shadow-size:drop-shadow(0 0 6px var(--tw-drop-shadow-color,#eab3084d));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_0_10px_rgba\(56\,189\,248\,0\.6\)\]{--tw-drop-shadow-size:drop-shadow(0 0 10px var(--tw-drop-shadow-color,#38bdf899));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_2px_8px_rgba\(56\,189\,248\,0\.3\)\]{--tw-drop-shadow-size:drop-shadow(0 2px 8px var(--tw-drop-shadow-color,#38bdf84d));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_4px_24px_rgba\(56\,189\,248\,0\.35\)\]{--tw-drop-shadow-size:drop-shadow(0 4px 24px var(--tw-drop-shadow-color,#38bdf859));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter\!{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)!important}.backdrop-blur-\[4px\]{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-\[left\]{transition-property:left;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-250{--tw-duration:.25s;transition-duration:.25s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-\[50ms\]{--tw-duration:50ms;transition-duration:50ms}.ease-in-out{--tw-ease:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1));transition-timing-function:var(--ease-in-out,cubic-bezier(.4, 0, .2, 1))}.ease-out{--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.hover\:border-\[\#fbbf24\]\/80:hover{border-color:#fbbf24cc}.hover\:border-accent-blue:hover{border-color:var(--color-accent-blue)}.hover\:bg-\[var\(--accent2\)\]:hover{background-color:var(--accent2)}.hover\:bg-\[var\(--border\)\]:hover{background-color:var(--border)}.hover\:bg-black\/35:hover{background-color:#00000059}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/35:hover{background-color:color-mix(in oklab,var(--color-black,#000) 35%,transparent)}}.hover\:text-white:hover{color:var(--color-white,#fff)}}.focus\:border-accent-blue:focus{border-color:var(--color-accent-blue)}.focus\:border-red-500\!:focus{border-color:var(--color-red-500,oklch(63.7% .237 25.331))!important}.focus\:bg-black\/35:focus{background-color:#00000059}@supports (color:color-mix(in lab,red,red)){.focus\:bg-black\/35:focus{background-color:color-mix(in oklab,var(--color-black,#000) 35%,transparent)}}.focus\:ring-red-500\/20\!:focus{--tw-ring-color:#fb2c3633!important}@supports (color:color-mix(in lab,red,red)){.focus\:ring-red-500\/20\!:focus{--tw-ring-color:color-mix(in oklab, var(--color-red-500,oklch(63.7% .237 25.331)) 20%, transparent)!important}}.disabled\:opacity-50:disabled{opacity:.5}}section{flex-direction:column;gap:20px;max-width:650px;animation:.25s cubic-bezier(.175,.885,.32,1.15) forwards slideIn;display:flex}@keyframes slideIn{0%{opacity:0;transform:translateY(6px)scale(.995)}to{opacity:1;transform:none}}h2{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em);color:var(--color-obsidian-100);margin-bottom:2px;font-size:20px}h3{--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);--tw-tracking:var(--tracking-wider,.05em);letter-spacing:var(--tracking-wider,.05em);text-transform:uppercase;color:var(--color-accent-blue);margin-bottom:8px;font-size:11px}.field-group{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:#ffffff08;flex-direction:column;gap:16px;padding:18px 20px;transition:all .2s ease-out;display:flex}.field-group:hover{background-color:#ffffff0d;border-color:#ffffff1f}.field{cursor:pointer;justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 4);padding-top:4px;padding-bottom:4px;display:flex}.field.col{align-items:stretch;gap:calc(var(--spacing,.25rem) * 1.5);flex-direction:column;width:100%}.field span{color:var(--text);flex:1;font-size:13px;font-weight:500;transition:color .15s ease-out}.field:hover span{color:#fff}.field select{min-width:190px;padding:8px 36px 8px 12px;font-size:13px}.hint{color:var(--text-muted);margin-top:4px;font-size:11px;line-height:1.625}.hint code{background-color:var(--color-obsidian-950);color:var(--color-accent-blue);border:1px solid var(--border);border-radius:4px;padding:2px 6px;font-family:monospace;font-size:10px}.field-label-row{justify-content:space-between;align-items:center;width:100%;margin-bottom:2px;display:flex}.btn-add-inline{color:var(--accent2);cursor:pointer;border-radius:var(--radius);background:0 0;border:none;padding:4px 8px;font-size:11px;font-weight:700;transition:all .15s ease-out}.btn-add-inline:hover{color:#fff;background-color:#38bdf81a}.dynamic-list{flex-direction:column;gap:8px;width:100%;margin-top:4px;display:flex}.dynamic-list-row{align-items:center;gap:calc(var(--spacing,.25rem) * 2);width:100%;display:flex}.dynamic-list-row input,.dynamic-list-row select{min-width:calc(var(--spacing,.25rem) * 0)}.btn-remove-inline{box-sizing:border-box;color:#f87171;cursor:pointer;border-radius:var(--radius);background-color:#ef444414;border:1px solid #ef444433;justify-content:center;align-items:center;height:34px;padding:6px 12px;font-size:12px;font-weight:700;transition:all .15s ease-out;display:flex}.btn-remove-inline:hover{color:#fff;background-color:#ef4444;border-color:#ef4444;box-shadow:0 2px 8px #ef444440}.warning-alert{align-items:center;gap:calc(var(--spacing,.25rem) * 2);color:#f59e0b;border-radius:var(--radius);background-color:#f59e0b1a;border:1px solid #f59e0b40;margin-top:4px;padding:10px 14px;font-size:12px;font-weight:500;animation:.25s cubic-bezier(.175,.885,.32,1.15) forwards slideIn;display:flex}.btn-action{cursor:pointer;border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--surface2);padding:calc(var(--spacing,.25rem) * 1.5);padding-inline:calc(var(--spacing,.25rem) * 3.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--text);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.15s;--tw-ease:var(--ease-out,cubic-bezier(0, 0, .2, 1));transition-duration:.15s;transition-timing-function:var(--ease-out,cubic-bezier(0, 0, .2, 1))}.btn-action:hover{border-color:var(--text-muted);background-color:var(--border)}.btn-action:disabled{cursor:not-allowed;opacity:.5}.btn-action.primary{--tw-border-style:none;background-color:var(--accent);color:var(--color-white,#fff);border-style:none}.btn-action.primary:hover{opacity:.9}.btn-action.small{padding:calc(var(--spacing,.25rem) * 1);padding-inline:calc(var(--spacing,.25rem) * 2);font-size:11px}.btn-action.danger{border-color:#ff656833}@supports (color:color-mix(in lab,red,red)){.btn-action.danger{border-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 20%,transparent)}}.btn-action.danger{color:var(--color-red-400,oklch(70.4% .191 22.216))}.btn-action.danger:hover{border-color:var(--color-red-400,oklch(70.4% .191 22.216));background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.btn-action.danger:hover{background-color:color-mix(in oklab,var(--color-red-400,oklch(70.4% .191 22.216)) 10%,transparent)}}@keyframes border-pulse{0%,to{border-color:#f43f5e66}50%{border-color:#f43f5e}}@keyframes flash{0%,to{opacity:1}50%{opacity:.3}}:root{--bg:var(--color-obsidian-950);--surface:var(--color-obsidian-900);--surface2:var(--color-obsidian-800);--accent:var(--color-accent-blue);--accent2:var(--color-accent-blue);--text:var(--color-obsidian-100);--text-muted:var(--color-obsidian-300);--border:#ffffff0d;--radius:var(--radius-desktop);--recording-color:var(--color-accent-tangerine);--idle-color:var(--color-accent-blue);--speaking-color:var(--color-accent-green);--transition-spring:var(--transition-snappy);--transition-spring-fast:var(--transition-snappy-fast)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body,#app{width:100%;height:100%;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;font-family:Outfit,Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;overflow:hidden}html.overlay-window,body.overlay-window,body.overlay-window #app{box-shadow:none!important;background:0 0!important;border:none!important;outline:none!important;overflow:hidden!important}body.overlay-window *{box-shadow:none!important;outline:none!important}body.overlay-window ::-webkit-scrollbar{width:0!important;height:0!important;display:none!important}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#ffffff0f;border-radius:99px;transition:background .2s}::-webkit-scrollbar-thumb:hover{background:#ffffff26}.sr-only{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}button{cursor:pointer;font-family:inherit;font-size:inherit;background:0 0;border:none;outline:none}input,select,textarea{font-family:inherit;font-size:inherit;outline:none}select{-webkit-appearance:none;appearance:none;background:var(--surface2) url("data:image/svg+xml;utf8,") no-repeat right 12px center;color:var(--text);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;transition:var(--transition-snappy-fast);background-size:10px;padding:8px 36px 8px 12px;box-shadow:0 4px 12px #00000026}select:hover{background-color:var(--color-obsidian-700);border-color:#ffffff1f;transform:translateY(-1px)}select:focus{border-color:var(--accent2);box-shadow:0 0 0 2px #38bdf826}select option{background-color:var(--color-obsidian-900);color:var(--text);padding:10px 12px}select:-webkit-autofill{-webkit-text-fill-color:var(--text)!important;-webkit-box-shadow:0 0 0px 1000px var(--color-obsidian-900) inset!important}select:-webkit-autofill:hover{-webkit-text-fill-color:var(--text)!important;-webkit-box-shadow:0 0 0px 1000px var(--color-obsidian-900) inset!important}select:-webkit-autofill:focus{-webkit-text-fill-color:var(--text)!important;-webkit-box-shadow:0 0 0px 1000px var(--color-obsidian-900) inset!important}.interactive-spring{transition:var(--transition-snappy)}.interactive-spring:hover{transform:scale(1.02)translateY(-1px)}.interactive-spring:active{transform:scale(.97)translateY(0)}input[type=checkbox]{-webkit-appearance:none;appearance:none;background:var(--color-obsidian-700);cursor:pointer;width:36px;height:20px;transition:var(--transition-spring-fast);border:1px solid var(--border);border-radius:99px;outline:none;position:relative}input[type=checkbox]:before{content:"";background:var(--color-obsidian-300);width:14px;height:14px;transition:var(--transition-spring-fast);border-radius:50%;position:absolute;top:2px;left:2px}input[type=checkbox]:checked{background:var(--color-accent-blue);border-color:var(--color-accent-blue)}input[type=checkbox]:checked:before{background:#fff;left:18px;box-shadow:0 2px 4px #0003}input[type=checkbox]:hover{border-color:#ffffff26}input[type=number],input[type=text],input[type=password]{background:var(--color-obsidian-950);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);min-width:170px;transition:var(--transition-spring-fast);outline:none;padding:8px 12px;font-size:13px;box-shadow:inset 0 2px 4px #0003}input[type=number]:hover,input[type=text]:hover,input[type=password]:hover{background-color:var(--color-obsidian-900);border-color:#ffffff26}input[type=number]:focus,input[type=text]:focus,input[type=password]:focus{border-color:var(--accent2);background-color:var(--color-obsidian-950);box-shadow:0 0 0 2px #38bdf826,inset 0 2px 4px #0003}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false} diff --git a/dist/assets/index-BgZOpe3i.js b/dist/assets/index-ywDg7bM0.js similarity index 95% rename from dist/assets/index-BgZOpe3i.js rename to dist/assets/index-ywDg7bM0.js index 86321662..b69104ce 100644 --- a/dist/assets/index-BgZOpe3i.js +++ b/dist/assets/index-ywDg7bM0.js @@ -1,11 +1,11 @@ var $o=Object.defineProperty;var vl=s=>{throw TypeError(s)};var Go=(s,a,t)=>a in s?$o(s,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[a]=t;var Va=(s,a,t)=>Go(s,typeof a!="symbol"?a+"":a,t),or=(s,a,t)=>a.has(s)||vl("Cannot "+t);var F=(s,a,t)=>(or(s,a,"read from private field"),t?t.call(s):a.get(s)),lt=(s,a,t)=>a.has(s)?vl("Cannot add the same private member more than once"):a instanceof WeakSet?a.add(s):a.set(s,t),_t=(s,a,t,r)=>(or(s,a,"write to private field"),r?r.call(s,t):a.set(s,t),t),Vt=(s,a,t)=>(or(s,a,"access private method"),t);(function(){const a=document.createElement("link").relList;if(a&&a.supports&&a.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))r(l);new MutationObserver(l=>{for(const c of l)if(c.type==="childList")for(const u of c.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&r(u)}).observe(document,{childList:!0,subtree:!0});function t(l){const c={};return l.integrity&&(c.integrity=l.integrity),l.referrerPolicy&&(c.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?c.credentials="include":l.crossOrigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function r(l){if(l.ep)return;l.ep=!0;const c=t(l);fetch(l.href,c)}})();const Yo="5";var Ll,Rl,Nl;typeof window<"u"&&((Nl=(Rl=(Ll=window.__svelte)!=null?Ll:window.__svelte={}).v)!=null?Nl:Rl.v=new Set).add(Yo);let Vn=!1,Jo=!1;function Xo(){Vn=!0}Xo();const Zo=1,Qo=2,Bl=4,ec=8,tc=16,ac=1,sc=2,nc=4,ic=8,rc=16,lc=1,oc=2,ba=Symbol("uninitialized"),ql="http://www.w3.org/1999/xhtml",cc="http://www.w3.org/2000/svg",dc="http://www.w3.org/1998/Math/MathML",jl=!1;var Ur=Array.isArray,vc=Array.prototype.indexOf,zn=Array.prototype.includes,Ji=Array.from,Ul=Object.defineProperty,wn=Object.getOwnPropertyDescriptor,uc=Object.getOwnPropertyDescriptors,pc=Object.prototype,fc=Array.prototype,Kl=Object.getPrototypeOf,ul=Object.isExtensible;const Ps=()=>{};function Hl(s){for(var a=0;a{s=r,a=l});return{promise:t,resolve:s,reject:a}}function pl(s,a){if(Array.isArray(s))return s;if(!(Symbol.iterator in s))return Array.from(s);const t=[];for(const r of s)if(t.push(r),t.length===a)break;return t}const Ma=2,In=4,Xi=8,$l=1<<24,us=16,_s=32,Us=64,wr=128,ss=512,ya=1024,Sa=2048,ws=4096,Na=8192,ns=16384,un=32768,kr=1<<25,On=65536,Bi=1<<17,_c=1<<18,Fn=1<<19,hc=1<<20,bs=1<<25,on=65536,qi=1<<21,kn=1<<22,Bs=1<<23,sn=Symbol("$state"),gc=Symbol("legacy props"),mc=Symbol(""),Pi=Symbol("attributes"),xr=Symbol("class"),Tr=Symbol("style"),jn=Symbol("text"),Di=Symbol("form reset"),Zi=new class extends Error{constructor(){super(...arguments);Va(this,"name","StaleReactionError");Va(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}};var Vl;const bc=!!((Vl=globalThis.document)!=null&&Vl.contentType)&&globalThis.document.contentType.includes("xml");function Gl(s){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function yc(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function wc(s,a,t){throw new Error("https://svelte.dev/e/each_key_duplicate")}function kc(s){throw new Error("https://svelte.dev/e/effect_in_teardown")}function xc(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function Tc(s){throw new Error("https://svelte.dev/e/effect_orphan")}function Sc(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function Ec(s){throw new Error("https://svelte.dev/e/props_invalid_value")}function Cc(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function Ac(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function Mc(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function Pc(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}function Dc(){console.warn("https://svelte.dev/e/derived_inert")}function zc(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function Ic(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function Yl(s){return s===this.v}function Jl(s,a){return s!=s?a==a:s!==a||s!==null&&typeof s=="object"||typeof s=="function"}function Xl(s){return!Jl(s,this.v)}let da=null;function Ln(s){da=s}function Tt(s,a=!1,t){da={p:da,i:!1,c:null,e:null,s,x:null,r:xt,l:Vn&&!a?{s:null,u:null,$:[]}:null}}function St(s){var a=da,t=a.e;if(t!==null){a.e=null;for(var r of t)bo(r)}return a.i=!0,da=a.p,{}}function mi(){return!Vn||da!==null&&da.l===null}let Ys=[];function Zl(){var s=Ys;Ys=[],Hl(s)}function qs(s){if(Ys.length===0&&!Gn){var a=Ys;queueMicrotask(()=>{a===Ys&&Zl()})}Ys.push(s)}function Oc(){for(;Ys.length>0;)Zl()}function Ql(s){var a=xt;if(a===null)return Pt.f|=Bs,s;if(!(a.f&un)&&!(a.f&In))throw s;Vs(s,a)}function Vs(s,a){for(;a!==null;){if(a.f&wr){if(!(a.f&un))throw s;try{a.b.error(s);return}catch(t){s=t}}a=a.parent}throw s}const Lc=-7169;function ca(s,a){s.f=s.f&Lc|a}function Kr(s){s.f&ss||s.deps===null?ca(s,ya):ca(s,ws)}function eo(s){if(s!==null)for(const a of s)!(a.f&Ma)||!(a.f&on)||(a.f^=on,eo(a.deps))}function to(s,a,t){s.f&Sa?a.add(s):s.f&ws&&t.add(s),eo(s.deps),ca(s,ya)}function Hr(s,a,t){if(s==null)return a(void 0),t&&t(void 0),Ps;const r=Ts(()=>s.subscribe(a,t));return r.unsubscribe?()=>r.unsubscribe():r}const pn=[];function Rc(s,a){return{subscribe:bi(s,a).subscribe}}function bi(s,a=Ps){let t=null;const r=new Set;function l(v){if(Jl(s,v)&&(s=v,t)){const f=!pn.length;for(const h of r)h[1](),pn.push(h,s);if(f){for(let h=0;h{r.delete(h),r.size===0&&t&&(t(),t=null)}}return{set:l,update:c,subscribe:u}}function yi(s,a,t){const r=!Array.isArray(s),l=r?[s]:s;if(!l.every(Boolean))throw new Error("derived() expects stores as input, got a falsy value");const c=a.length<2;return Rc(t,(u,v)=>{let f=!1;const h=[];let b=0,m=Ps;const _=()=>{if(b)return;m();const A=a(r?h[0]:h,u,v);c?u(A):m=typeof A=="function"?A:Ps},x=l.map((A,q)=>Hr(A,T=>{h[q]=T,b&=~(1<{b|=1<a=t)(),a}let Sr=!1,Un=!1,Er=Symbol("unmounted");function Zt(s,a,t){var c;const r=(c=t[a])!=null?c:t[a]={store:null,source:uo(void 0),unsubscribe:Ps};if(r.store!==s&&!(Er in t))if(r.unsubscribe(),r.store=s!=null?s:null,s==null)r.source.v=void 0,r.unsubscribe=Ps;else{var l=!0;r.unsubscribe=Hr(s,u=>{l?r.source.v=u:o(r.source,u)}),l=!1}return s&&Er in t?bn(s):e(r.source)}function Ws(s,a){return Nc(s,a),a}function Ea(){const s={};function a(){er(()=>{for(var t in s)s[t].unsubscribe();Ul(s,Er,{enumerable:!1,value:!0})})}return[s,a]}function Nc(s,a){Sr=!0;try{s.set(a)}finally{Sr=!1}}function $s(){Un=!0}function Vc(s){var a=Un;try{return Un=!1,[s(),Un]}finally{Un=a}}let cr=null,fn=null,ot=null,$n=null,Aa=null,Cr=null,Gn=!1,dr=!1,yn=null,zi=null;var fl=0;let Fc=1;var Sn,Ls,Zs,En,Cn,Qs,An,Es,ti,Wa,ai,Rs,hs,gs,Mn,Pn,Bt,Ar,Kn,Mr,ao,so,Ii,Bc,Pr,gn;const $i=class $i{constructor(){lt(this,Bt);Va(this,"id",Fc++);lt(this,Sn,!1);Va(this,"linked",!0);lt(this,Ls,null);lt(this,Zs,null);Va(this,"async_deriveds",new Map);Va(this,"current",new Map);Va(this,"previous",new Map);Va(this,"unblocked",new Set);lt(this,En,new Set);lt(this,Cn,new Set);lt(this,Qs,new Set);lt(this,An,0);lt(this,Es,new Map);lt(this,ti,null);lt(this,Wa,[]);lt(this,ai,[]);lt(this,Rs,new Set);lt(this,hs,new Set);lt(this,gs,new Map);lt(this,Mn,new Set);Va(this,"is_fork",!1);lt(this,Pn,!1)}skip_effect(a){F(this,gs).has(a)||F(this,gs).set(a,{d:[],m:[]}),F(this,Mn).delete(a)}unskip_effect(a,t=r=>this.schedule(r)){var r=F(this,gs).get(a);if(r){F(this,gs).delete(a);for(var l of r.d)ca(l,Sa),t(l);for(l of r.m)ca(l,ws),t(l)}F(this,Mn).add(a)}capture(a,t,r=!1){a.v!==ba&&!this.previous.has(a)&&this.previous.set(a,a.v),a.f&Bs||(this.current.set(a,[t,r]),Aa==null||Aa.set(a,t)),this.is_fork||(a.v=t)}activate(){ot=this}deactivate(){ot=null,Aa=null}flush(){try{dr=!0,ot=this,Vt(this,Bt,Kn).call(this)}finally{fl=0,Cr=null,yn=null,zi=null,dr=!1,ot=null,Aa=null,nn.clear()}}discard(){for(const a of F(this,Cn))a(this);F(this,Cn).clear(),F(this,Qs).clear(),Vt(this,Bt,gn).call(this)}register_created_effect(a){F(this,ai).push(a)}increment(a,t){var r;if(_t(this,An,F(this,An)+1),a){let l=(r=F(this,Es).get(t))!=null?r:0;F(this,Es).set(t,l+1)}}decrement(a,t){var r;if(_t(this,An,F(this,An)-1),a){let l=(r=F(this,Es).get(t))!=null?r:0;l===1?F(this,Es).delete(t):F(this,Es).set(t,l-1)}F(this,Pn)||(_t(this,Pn,!0),qs(()=>{_t(this,Pn,!1),this.linked&&this.flush()}))}transfer_effects(a,t){for(const r of a)F(this,Rs).add(r);for(const r of t)F(this,hs).add(r);a.clear(),t.clear()}oncommit(a){F(this,En).add(a)}ondiscard(a){F(this,Cn).add(a)}on_fork_commit(a){F(this,Qs).add(a)}run_fork_commit_callbacks(){for(const a of F(this,Qs))a(this);F(this,Qs).clear()}settled(){var a;return((a=F(this,ti))!=null?a:_t(this,ti,Wl())).promise}static ensure(){var a;if(ot===null){const t=ot=new $i;Vt(a=t,Bt,Pr).call(a),!dr&&!Gn&&qs(()=>{F(t,Sn)||t.flush()})}return ot}apply(){{Aa=null;return}}schedule(a){var l;if(Cr=a,(l=a.b)!=null&&l.is_pending&&a.f&(In|Xi|$l)&&!(a.f&un)){a.b.defer_effect(a);return}for(var t=a;t.parent!==null;){t=t.parent;var r=t.f;if(yn!==null&&t===xt&&(Pt===null||!(Pt.f&Ma))&&!Sr)return;if(r&(Us|_s)){if(!(r&ya))return;t.f^=ya}}F(this,Wa).push(t)}};Sn=new WeakMap,Ls=new WeakMap,Zs=new WeakMap,En=new WeakMap,Cn=new WeakMap,Qs=new WeakMap,An=new WeakMap,Es=new WeakMap,ti=new WeakMap,Wa=new WeakMap,ai=new WeakMap,Rs=new WeakMap,hs=new WeakMap,gs=new WeakMap,Mn=new WeakMap,Pn=new WeakMap,Bt=new WeakSet,Ar=function(){if(this.is_fork)return!0;for(const r of F(this,Es).keys()){for(var a=r,t=!1;a.parent!==null;){if(F(this,gs).has(a)){t=!0;break}a=a.parent}if(!t)return!0}return!1},Kn=function(){var f,h,b,m;if(_t(this,Sn,!0),fl++>1e3&&(Vt(this,Bt,gn).call(this),jc()),!Vt(this,Bt,Ar).call(this)){for(const _ of F(this,Rs))F(this,hs).delete(_),ca(_,Sa),this.schedule(_);for(const _ of F(this,hs))ca(_,ws),this.schedule(_)}const a=F(this,Wa);_t(this,Wa,[]),this.apply();var t=yn=[],r=[],l=zi=[];for(const _ of a)try{Vt(this,Bt,Mr).call(this,_,t,r)}catch(x){throw ro(_),x}if(ot=null,l.length>0){var c=$i.ensure();for(const _ of l)c.schedule(_)}if(yn=null,zi=null,Vt(this,Bt,Ar).call(this)){Vt(this,Bt,Ii).call(this,r),Vt(this,Bt,Ii).call(this,t);for(const[_,x]of F(this,gs))io(_,x);l.length>0&&Vt(f=ot,Bt,Kn).call(f);return}const u=Vt(this,Bt,ao).call(this);if(u){Vt(h=u,Bt,so).call(h,this);return}F(this,Rs).clear(),F(this,hs).clear();for(const _ of F(this,En))_(this);F(this,En).clear(),$n=this,_l(r),_l(t),$n=null,(b=F(this,ti))==null||b.resolve();var v=ot;if(this.linked&&F(this,An)===0&&Vt(this,Bt,gn).call(this),F(this,Wa).length>0){v===null&&(v=this,Vt(this,Bt,Pr).call(this));const _=v;F(_,Wa).push(...F(this,Wa).filter(x=>!F(_,Wa).includes(x)))}v!==null&&Vt(m=v,Bt,Kn).call(m)},Mr=function(a,t,r){a.f^=ya;for(var l=a.first;l!==null;){var c=l.f,u=(c&(_s|Us))!==0,v=u&&(c&ya)!==0,f=v||(c&Na)!==0||F(this,gs).has(l);if(!f&&l.fn!==null){u?l.f^=ya:c&In?t.push(l):ki(l)&&(c&us&&F(this,hs).add(l),Nn(l));var h=l.first;if(h!==null){l=h;continue}}for(;l!==null;){var b=l.next;if(b!==null){l=b;break}l=l.parent}}},ao=function(){for(var a=F(this,Ls);a!==null;){if(!a.is_fork){for(const[t,[,r]]of this.current)if(a.current.has(t)&&!r)return a}a=F(a,Ls)}return null},so=function(a){var r;for(const[l,c]of a.current)!this.previous.has(l)&&a.previous.has(l)&&this.previous.set(l,a.previous.get(l)),this.current.set(l,c);for(const[l,c]of a.async_deriveds){const u=this.async_deriveds.get(l);u&&c.promise.then(u.resolve)}const t=l=>{var c=l.reactions;if(c!==null)for(const f of c){var u=f.f;if(u&Ma)t(f);else{var v=f;u&(kn|us)&&!this.async_deriveds.has(v)&&(F(this,hs).delete(v),ca(v,Sa),this.schedule(v))}}};for(const l of this.current.keys())t(l);this.oncommit(()=>a.discard()),Vt(r=a,Bt,gn).call(r),ot=this,Vt(this,Bt,Kn).call(this)},Ii=function(a){for(var t=0;t!this.current.has(_));if(l.length===0)a&&m.discard();else if(t.length>0){if(a)for(const _ of F(this,Mn))m.unskip_effect(_,x=>{var A;x.f&(us|kn)?m.schedule(x):Vt(A=m,Bt,Ii).call(A,[x])});m.activate();var c=new Set,u=new Map;for(var v of t)no(v,l,c,u);u=new Map;var f=[...m.current.keys()].filter(_=>this.current.has(_)?this.current.get(_)[0]!==_.v:!0);if(f.length>0)for(const _ of F(this,ai))!(_.f&(ns|Na|Bi))&&Wr(_,f,u)&&(_.f&(kn|us)?(ca(_,Sa),m.schedule(_)):F(m,Rs).add(_));if(F(m,Wa).length>0){m.apply();for(var h of F(m,Wa))Vt(b=m,Bt,Mr).call(b,h,[],[]);_t(m,Wa,[])}m.deactivate()}}}},Pr=function(){fn===null?cr=fn=this:(_t(fn,Zs,this),_t(this,Ls,fn)),fn=this},gn=function(){var a=F(this,Ls),t=F(this,Zs);a===null?cr=t:_t(a,Zs,t),t===null?fn=a:_t(t,Ls,a),this.linked=!1};let cn=$i;function qc(s){var a=Gn;Gn=!0;try{for(var t;;){if(Oc(),ot===null)return t;ot.flush()}}finally{Gn=a}}function jc(){try{Sc()}catch(s){Vs(s,Cr)}}let os=null;function _l(s){var a=s.length;if(a!==0){for(var t=0;t0)){nn.clear();for(const l of os){if(l.f&(ns|Na))continue;const c=[l];let u=l.parent;for(;u!==null;)os.has(u)&&(os.delete(u),c.push(u)),u=u.parent;for(let v=c.length-1;v>=0;v--){const f=c[v];f.f&(ns|Na)||Nn(f)}}os.clear()}}os=null}}function no(s,a,t,r){if(!t.has(s)&&(t.add(s),s.reactions!==null))for(const l of s.reactions){const c=l.f;c&Ma?no(l,a,t,r):c&(kn|us)&&!(c&Sa)&&Wr(l,a,r)&&(ca(l,Sa),$r(l))}}function Wr(s,a,t){const r=t.get(s);if(r!==void 0)return r;if(s.deps!==null)for(const l of s.deps){if(zn.call(a,l))return!0;if(l.f&Ma&&Wr(l,a,t))return t.set(l,!0),!0}return t.set(s,!1),!1}function $r(s){ot.schedule(s)}function io(s,a){if(!(s.f&_s&&s.f&ya)){s.f&Sa?a.d.push(s):s.f&ws&&a.m.push(s),ca(s,ya);for(var t=s.first;t!==null;)io(t,a),t=t.next}}function ro(s){ca(s,ya);for(var a=s.first;a!==null;)ro(a),a=a.next}function Uc(s){let a=0,t=dn(0),r;return()=>{Xr()&&(e(t),tr(()=>(a===0&&(r=Ts(()=>s(()=>Yn(t)))),a+=1,()=>{qs(()=>{a-=1,a===0&&(r==null||r(),r=void 0,Yn(t))})})))}}var Kc=On|Fn;function Hc(s,a,t,r){new Wc(s,a,t,r)}var Za,jr,Qa,en,Fa,es,Ra,$a,Cs,tn,Ns,Dn,si,ni,As,Gi,va,$c,Gc,Yc,Dr,Oi,Li,zr,Ir;class Wc{constructor(a,t,r,l){lt(this,va);Va(this,"parent");Va(this,"is_pending",!1);Va(this,"transform_error");lt(this,Za);lt(this,jr,null);lt(this,Qa);lt(this,en);lt(this,Fa);lt(this,es,null);lt(this,Ra,null);lt(this,$a,null);lt(this,Cs,null);lt(this,tn,0);lt(this,Ns,0);lt(this,Dn,!1);lt(this,si,new Set);lt(this,ni,new Set);lt(this,As,null);lt(this,Gi,Uc(()=>(_t(this,As,dn(F(this,tn))),()=>{_t(this,As,null)})));var c,u;_t(this,Za,a),_t(this,Qa,t),_t(this,en,v=>{var f=xt;f.b=this,f.f|=wr,r(v)}),this.parent=xt.b,this.transform_error=(u=l!=null?l:(c=this.parent)==null?void 0:c.transform_error)!=null?u:v=>v,_t(this,Fa,Zr(()=>{Vt(this,va,Dr).call(this)},Kc))}defer_effect(a){to(a,F(this,si),F(this,ni))}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!F(this,Qa).pending}update_pending_count(a,t){Vt(this,va,zr).call(this,a,t),_t(this,tn,F(this,tn)+a),!(!F(this,As)||F(this,Dn))&&(_t(this,Dn,!0),qs(()=>{_t(this,Dn,!1),F(this,As)&&Rn(F(this,As),F(this,tn))}))}get_effect_pending(){return F(this,Gi).call(this),e(F(this,As))}error(a){if(!F(this,Qa).onerror&&!F(this,Qa).failed)throw a;ot!=null&&ot.is_fork?(F(this,es)&&ot.skip_effect(F(this,es)),F(this,Ra)&&ot.skip_effect(F(this,Ra)),F(this,$a)&&ot.skip_effect(F(this,$a)),ot.on_fork_commit(()=>{Vt(this,va,Ir).call(this,a)})):Vt(this,va,Ir).call(this,a)}}Za=new WeakMap,jr=new WeakMap,Qa=new WeakMap,en=new WeakMap,Fa=new WeakMap,es=new WeakMap,Ra=new WeakMap,$a=new WeakMap,Cs=new WeakMap,tn=new WeakMap,Ns=new WeakMap,Dn=new WeakMap,si=new WeakMap,ni=new WeakMap,As=new WeakMap,Gi=new WeakMap,va=new WeakSet,$c=function(){try{_t(this,es,ts(()=>F(this,en).call(this,F(this,Za))))}catch(a){this.error(a)}},Gc=function(a){const t=F(this,Qa).failed;t&&_t(this,$a,ts(()=>{t(F(this,Za),()=>a,()=>()=>{})}))},Yc=function(){const a=F(this,Qa).pending;a&&(this.is_pending=!0,_t(this,Ra,ts(()=>a(F(this,Za)))),qs(()=>{var t=_t(this,Cs,document.createDocumentFragment()),r=Ds();t.append(r),_t(this,es,Vt(this,va,Li).call(this,()=>ts(()=>F(this,en).call(this,r)))),F(this,Ns)===0&&(F(this,Za).before(t),_t(this,Cs,null),rn(F(this,Ra),()=>{_t(this,Ra,null)}),Vt(this,va,Oi).call(this,ot))}))},Dr=function(){try{if(this.is_pending=this.has_pending_snippet(),_t(this,Ns,0),_t(this,tn,0),_t(this,es,ts(()=>{F(this,en).call(this,F(this,Za))})),F(this,Ns)>0){var a=_t(this,Cs,document.createDocumentFragment());tl(F(this,es),a);const t=F(this,Qa).pending;_t(this,Ra,ts(()=>t(F(this,Za))))}else Vt(this,va,Oi).call(this,ot)}catch(t){this.error(t)}},Oi=function(a){this.is_pending=!1,a.transfer_effects(F(this,si),F(this,ni))},Li=function(a){var t=xt,r=Pt,l=da;ks(F(this,Fa)),rs(F(this,Fa)),Ln(F(this,Fa).ctx);try{return cn.ensure(),a()}catch(c){return Ql(c),null}finally{ks(t),rs(r),Ln(l)}},zr=function(a,t){var r;if(!this.has_pending_snippet()){this.parent&&Vt(r=this.parent,va,zr).call(r,a,t);return}_t(this,Ns,F(this,Ns)+a),F(this,Ns)===0&&(Vt(this,va,Oi).call(this,t),F(this,Ra)&&rn(F(this,Ra),()=>{_t(this,Ra,null)}),F(this,Cs)&&(F(this,Za).before(F(this,Cs)),_t(this,Cs,null)))},Ir=function(a){F(this,es)&&(qa(F(this,es)),_t(this,es,null)),F(this,Ra)&&(qa(F(this,Ra)),_t(this,Ra,null)),F(this,$a)&&(qa(F(this,$a)),_t(this,$a,null));var t=F(this,Qa).onerror;let r=F(this,Qa).failed;var l=!1,c=!1;const u=()=>{if(l){Ic();return}l=!0,c&&Pc(),F(this,$a)!==null&&rn(F(this,$a),()=>{_t(this,$a,null)}),Vt(this,va,Li).call(this,()=>{Vt(this,va,Dr).call(this)})},v=f=>{try{c=!0,t==null||t(f,u),c=!1}catch(h){Vs(h,F(this,Fa)&&F(this,Fa).parent)}r&&_t(this,$a,Vt(this,va,Li).call(this,()=>{try{return ts(()=>{var h=xt;h.b=this,h.f|=wr,r(F(this,Za),()=>f,()=>u)})}catch(h){return Vs(h,F(this,Fa).parent),null}}))};qs(()=>{var f;try{f=this.transform_error(a)}catch(h){Vs(h,F(this,Fa)&&F(this,Fa).parent);return}f!==null&&typeof f=="object"&&typeof f.then=="function"?f.then(v,h=>Vs(h,F(this,Fa)&&F(this,Fa).parent)):v(f)})};function Jc(s,a,t,r){const l=mi()?Zn:Gr;var c=s.filter(_=>!_.settled);if(t.length===0&&c.length===0){r(a.map(l));return}var u=xt,v=Xc(),f=c.length===1?c[0].promise:c.length>1?Promise.all(c.map(_=>_.promise)):null;function h(_){if(!(u.f&ns)){v();try{r(_)}catch(x){Vs(x,u)}ji()}}var b=lo();if(t.length===0){f.then(()=>h(a.map(l))).finally(b);return}function m(){Promise.all(t.map(_=>Zc(_))).then(_=>h([...a.map(l),..._])).catch(_=>Vs(_,u)).finally(b)}f?f.then(()=>{v(),m(),ji()}):m()}function Xc(){var s=xt,a=Pt,t=da,r=ot;return function(c=!0){ks(s),rs(a),Ln(t),c&&!(s.f&ns)&&(r==null||r.activate(),r==null||r.apply())}}function ji(s=!0){ks(null),rs(null),Ln(null),s&&(ot==null||ot.deactivate())}function lo(){var s=xt,a=s.b,t=ot,r=a.is_rendered();return a.update_pending_count(1,t),t.increment(r,s),()=>{a.update_pending_count(-1,t),t.decrement(r,s)}}function Zn(s){var a=Ma|Sa;return xt!==null&&(xt.f|=Fn),{ctx:da,deps:null,effects:null,equals:Yl,f:a,fn:s,reactions:null,rv:0,v:ba,wv:0,parent:xt,ac:null}}const Si=Symbol("obsolete");function Zc(s,a,t){let r=xt;r===null&&yc();var l=void 0,c=dn(ba),u=!Pt,v=new Set;return cd(()=>{var x;var f=xt,h=Wl();l=h.promise;try{Promise.resolve(s()).then(h.resolve,A=>{A!==Zi&&h.reject(A)}).finally(ji)}catch(A){h.reject(A),ji()}var b=ot;if(u){if(f.f&un)var m=lo();if(r.b.is_rendered())(x=b.async_deriveds.get(f))==null||x.reject(Si);else for(const A of v.values())A.reject(Si);v.add(h),b.async_deriveds.set(f,h)}const _=(A,q=void 0)=>{m==null||m(),v.delete(h),q!==Si&&(b.activate(),q?(c.f|=Bs,Rn(c,q)):(c.f&Bs&&(c.f^=Bs),Rn(c,A)),b.deactivate())};h.promise.then(_,A=>_(null,A||"unknown"))}),er(()=>{for(const f of v)f.reject(Si)}),new Promise(f=>{function h(b){function m(){b===l?f(c):h(l)}b.then(m,m)}h(l)})}function ce(s){const a=Zn(s);return So(a),a}function Gr(s){const a=Zn(s);return a.equals=Xl,a}function Qc(s){var a=s.effects;if(a!==null){s.effects=null;for(var t=0;t0&&!vo&&td()}return a}function td(){vo=!1;for(const s of Ui){s.f&ya&&ca(s,ws);let a;try{a=ki(s)}catch{a=!0}a&&Nn(s)}Ui.clear()}function Yn(s){o(s,s.v+1)}function po(s,a,t){var r=s.reactions;if(r!==null)for(var l=mi(),c=r.length,u=0;u{if(ln===c)return v();var f=Pt,h=ln;rs(null),bl(c);var b=v();return rs(f),bl(h),b};return r&&t.set("length",S(s.length)),new Proxy(s,{defineProperty(v,f,h){(!("value"in h)||h.configurable===!1||h.enumerable===!1||h.writable===!1)&&Cc();var b=t.get(f);return b===void 0?u(()=>{var m=S(h.value);return t.set(f,m),m}):o(b,h.value,!0),!0},deleteProperty(v,f){var h=t.get(f);if(h===void 0){if(f in v){const b=u(()=>S(ba));t.set(f,b),Yn(l)}}else o(h,ba),Yn(l);return!0},get(v,f,h){var x;if(f===sn)return s;var b=t.get(f),m=f in v;if(b===void 0&&(!m||(x=wn(v,f))!=null&&x.writable)&&(b=u(()=>{var A=yt(m?v[f]:ba),q=S(A);return q}),t.set(f,b)),b!==void 0){var _=e(b);return _===ba?void 0:_}return Reflect.get(v,f,h)},getOwnPropertyDescriptor(v,f){var h=Reflect.getOwnPropertyDescriptor(v,f);if(h&&"value"in h){var b=t.get(f);b&&(h.value=e(b))}else if(h===void 0){var m=t.get(f),_=m==null?void 0:m.v;if(m!==void 0&&_!==ba)return{enumerable:!0,configurable:!0,value:_,writable:!0}}return h},has(v,f){var _;if(f===sn)return!0;var h=t.get(f),b=h!==void 0&&h.v!==ba||Reflect.has(v,f);if(h!==void 0||xt!==null&&(!b||(_=wn(v,f))!=null&&_.writable)){h===void 0&&(h=u(()=>{var x=b?yt(v[f]):ba,A=S(x);return A}),t.set(f,h));var m=e(h);if(m===ba)return!1}return b},set(v,f,h,b){var ne;var m=t.get(f),_=f in v;if(r&&f==="length")for(var x=h;xS(ba)),t.set(x+"",A))}if(m===void 0)(!_||(ne=wn(v,f))!=null&&ne.writable)&&(m=u(()=>S(void 0)),o(m,yt(h)),t.set(f,m));else{_=m.v!==ba;var q=u(()=>yt(h));o(m,q)}var T=Reflect.getOwnPropertyDescriptor(v,f);if(T!=null&&T.set&&T.set.call(b,h),!_){if(r&&typeof f=="string"){var D=t.get("length"),se=Number(f);Number.isInteger(se)&&se>=D.v&&o(D,se+1)}Yn(l)}return!0},ownKeys(v){e(l);var f=Reflect.ownKeys(v).filter(m=>{var _=t.get(m);return _===void 0||_.v!==ba});for(var[h,b]of t)b.v!==ba&&!(h in v)&&f.push(h);return f},setPrototypeOf(){Ac()}})}function hl(s){try{if(s!==null&&typeof s=="object"&&sn in s)return s[sn]}catch{}return s}function ad(s,a){return Object.is(hl(s),hl(a))}var Or,fo,_o,ho;function sd(){if(Or===void 0){Or=window,fo=/Firefox/.test(navigator.userAgent);var s=Element.prototype,a=Node.prototype,t=Text.prototype;_o=wn(a,"firstChild").get,ho=wn(a,"nextSibling").get,ul(s)&&(s[xr]=void 0,s[Pi]=null,s[Tr]=void 0,s.__e=void 0),ul(t)&&(t[jn]=void 0)}}function Ds(s=""){return document.createTextNode(s)}function ys(s){return _o.call(s)}function wi(s){return ho.call(s)}function n(s,a){return ys(s)}function ht(s,a=!1){{var t=ys(s);return t instanceof Comment&&t.data===""?wi(t):t}}function i(s,a=1,t=!1){let r=s;for(;a--;)r=wi(r);return r}function nd(s){s.textContent=""}function go(){return!1}function mo(s,a,t){return document.createElementNS(a!=null?a:ql,s,void 0)}let gl=!1;function id(){gl||(gl=!0,document.addEventListener("reset",s=>{Promise.resolve().then(()=>{var a;if(!s.defaultPrevented)for(const t of s.target.elements)(a=t[Di])==null||a.call(t)})},{capture:!0}))}function Qi(s){var a=Pt,t=xt;rs(null),ks(null);try{return s()}finally{rs(a),ks(t)}}function Jr(s,a,t,r=t){s.addEventListener(a,()=>Qi(t));const l=s[Di];l?s[Di]=()=>{l(),r(!0)}:s[Di]=()=>r(!0),id()}function rd(s){xt===null&&(Pt===null&&Tc(),xc()),zs&&kc()}function ld(s,a){var t=a.last;t===null?a.last=a.first=s:(t.next=s,s.prev=t,a.last=s)}function Is(s,a){var u;var t=xt;t!==null&&t.f&Na&&(s|=Na);var r={ctx:da,deps:null,nodes:null,f:s|Sa|ss,first:null,fn:a,last:null,next:null,parent:t,b:t&&t.b,prev:null,teardown:null,wv:0,ac:null};ot==null||ot.register_created_effect(r);var l=r;if(s&In)yn!==null?yn.push(r):cn.ensure().schedule(r);else if(a!==null){try{Nn(r)}catch(v){throw qa(r),v}l.deps===null&&l.teardown===null&&l.nodes===null&&l.first===l.last&&!(l.f&Fn)&&(l=l.first,s&us&&s&On&&l!==null&&(l.f|=On))}if(l!==null&&(l.parent=t,t!==null&&ld(l,t),Pt!==null&&Pt.f&Ma&&!(s&Us))){var c=Pt;((u=c.effects)!=null?u:c.effects=[]).push(l)}return r}function Xr(){return Pt!==null&&!ps}function er(s){const a=Is(Xi,null);return ca(a,ya),a.teardown=s,a}function pa(s){var l;rd();var a=xt.f,t=!Pt&&(a&_s)!==0&&(a&un)===0;if(t){var r=da;((l=r.e)!=null?l:r.e=[]).push(s)}else return bo(s)}function bo(s){return Is(In|hc,s)}function od(s){cn.ensure();const a=Is(Us|Fn,s);return(t={})=>new Promise(r=>{t.outro?rn(a,()=>{qa(a),r(void 0)}):(qa(a),r(void 0))})}function Ms(s){return Is(In,s)}function cd(s){return Is(kn|Fn,s)}function tr(s,a=0){return Is(Xi|a,s)}function w(s,a=[],t=[],r=[]){Jc(r,a,t,l=>{Is(Xi,()=>s(...l.map(e)))})}function Zr(s,a=0){var t=Is(us|a,s);return t}function ts(s){return Is(_s|Fn,s)}function yo(s){var a=s.teardown;if(a!==null){const t=zs,r=Pt;ml(!0),rs(null);try{a.call(null)}finally{ml(t),rs(r)}}}function Qr(s,a=!1){var t=s.first;for(s.first=s.last=null;t!==null;){const l=t.ac;l!==null&&Qi(()=>{l.abort(Zi)});var r=t.next;t.f&Us?t.parent=null:qa(t,a),t=r}}function dd(s){for(var a=s.first;a!==null;){var t=a.next;a.f&_s||qa(a),a=t}}function qa(s,a=!0){var t=!1;(a||s.f&_c)&&s.nodes!==null&&s.nodes.end!==null&&(wo(s.nodes.start,s.nodes.end),t=!0),ca(s,kr),Qr(s,a&&!t),Qn(s,0);var r=s.nodes&&s.nodes.t;if(r!==null)for(const c of r)c.stop();yo(s),s.f^=kr,s.f|=ns;var l=s.parent;l!==null&&l.first!==null&&ko(s),s.next=s.prev=s.teardown=s.ctx=s.deps=s.fn=s.nodes=s.ac=s.b=null}function wo(s,a){for(;s!==null;){var t=s===a?null:wi(s);s.remove(),s=t}}function ko(s){var a=s.parent,t=s.prev,r=s.next;t!==null&&(t.next=r),r!==null&&(r.prev=t),a!==null&&(a.first===s&&(a.first=r),a.last===s&&(a.last=t))}function rn(s,a,t=!0){var r=[];xo(s,r,!0);var l=()=>{t&&qa(s),a&&a()},c=r.length;if(c>0){var u=()=>--c||l();for(var v of r)v.out(u)}else l()}function xo(s,a,t){if(!(s.f&Na)){s.f^=Na;var r=s.nodes&&s.nodes.t;if(r!==null)for(const v of r)(v.is_global||t)&&a.push(v);for(var l=s.first;l!==null;){var c=l.next;if(!(l.f&Us)){var u=(l.f&On)!==0||(l.f&_s)!==0&&(s.f&us)!==0;xo(l,a,u?t:!1)}l=c}}}function el(s){To(s,!0)}function To(s,a){if(s.f&Na){s.f^=Na,s.f&ya||(ca(s,Sa),cn.ensure().schedule(s));for(var t=s.first;t!==null;){var r=t.next,l=(t.f&On)!==0||(t.f&_s)!==0;To(t,l?a:!1),t=r}var c=s.nodes&&s.nodes.t;if(c!==null)for(const u of c)(u.is_global||a)&&u.in()}}function tl(s,a){if(s.nodes)for(var t=s.nodes.start,r=s.nodes.end;t!==null;){var l=t===r?null:wi(t);a.append(t),t=l}}let Ri=!1,zs=!1;function ml(s){zs=s}let Pt=null,ps=!1;function rs(s){Pt=s}let xt=null;function ks(s){xt=s}let is=null;function So(s){Pt!==null&&(is===null?is=[s]:is.push(s))}let Ba=null,Ka=0,Xa=null;function vd(s){Xa=s}let Eo=1,Js=0,ln=Js;function bl(s){ln=s}function Co(){return++Eo}function ki(s){var a=s.f;if(a&Sa)return!0;if(a&Ma&&(s.f&=~on),a&ws){for(var t=s.deps,r=t.length,l=0;ls.wv)return!0}a&ss&&Aa===null&&ca(s,ya)}return!1}function Ao(s,a,t=!0){var r=s.reactions;if(r!==null&&!(is!==null&&zn.call(is,s)))for(var l=0;l{s.ac.abort(Zi)}),s.ac=null);try{s.f|=qi;var b=s.fn,m=b();s.f|=un;var _=s.deps,x=ot==null?void 0:ot.is_fork;if(Ba!==null){var A;if(x||Qn(s,Ka),_!==null&&Ka>0)for(_.length=Ka+Ba.length,A=0;At==null?void 0:t.call(this,c))}return s.startsWith("pointer")||s.startsWith("touch")||s==="wheel"?qs(()=>{a.addEventListener(s,l,r)}):a.addEventListener(s,l,r),l}function xs(s,a,t,r,l){var c={capture:r,passive:l},u=fd(s,a,t,c);(a===document.body||a===window||a===document||a instanceof HTMLMediaElement)&&er(()=>{a.removeEventListener(s,u,c)})}function N(s,a,t){var r;((r=a[Xs])!=null?r:a[Xs]={})[s]=t}function Qt(s){for(var a=0;a{throw se});throw _}}finally{s[Xs]=a,delete s.currentTarget,rs(b),ks(m)}}}var Fl;const vr=((Fl=globalThis==null?void 0:globalThis.window)==null?void 0:Fl.trustedTypes)&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:s=>s});function _d(s){var a;return(a=vr==null?void 0:vr.createHTML(s))!=null?a:s}function Io(s){var a=mo("template");return a.innerHTML=_d(s.replaceAll("","")),a.content}function vn(s,a){var t=xt;t.nodes===null&&(t.nodes={start:s,end:a,a:null,t:null})}function p(s,a){var t=(a&lc)!==0,r=(a&oc)!==0,l,c=!s.startsWith("");return()=>{l===void 0&&(l=Io(c?s:""+s),t||(l=ys(l)));var u=r||fo?document.importNode(l,!0):l.cloneNode(!0);if(t){var v=ys(u),f=u.lastChild;vn(v,f)}else vn(u,u);return u}}function hd(s,a,t="svg"){var r=!s.startsWith(""),l=`<${t}>${r?s:""+s}`,c;return()=>{if(!c){var u=Io(l),v=ys(u);c=ys(v)}var f=c.cloneNode(!0);return vn(f,f),f}}function Oo(s,a){return hd(s,a,"svg")}function Be(s=""){{var a=Ds(s+"");return vn(a,a),a}}function xi(){var s=document.createDocumentFragment(),a=document.createComment(""),t=Ds();return s.append(a,t),vn(a,t),s}function d(s,a){s!==null&&s.before(a)}const gd=["touchstart","touchmove"];function md(s){return gd.includes(s)}function y(s,a){var r;var t=a==null?"":typeof a=="object"?`${a}`:a;t!==((r=s[jn])!=null?r:s[jn]=s.nodeValue)&&(s[jn]=t,s.nodeValue=`${t}`)}function bd(s,a){return yd(s,a)}const Ei=new Map;function yd(s,{target:a,anchor:t,props:r={},events:l,context:c,intro:u=!0,transformError:v}){sd();var f=void 0,h=od(()=>{var b=t!=null?t:a.appendChild(Ds());Hc(b,{pending:()=>{}},x=>{Tt({});var A=da;c&&(A.c=c),l&&(r.$$events=l),f=s(x,r)||{},St()},v);var m=new Set,_=x=>{for(var A=0;A{var T;for(var x of m)for(const D of[a,document]){var A=Ei.get(D),q=A.get(x);--q==0?(D.removeEventListener(x,Rr),A.delete(x),A.size===0&&Ei.delete(D)):A.set(x,q)}Lr.delete(_),b!==t&&((T=b.parentNode)==null||T.removeChild(b))}});return wd.set(f,h),f}let wd=new WeakMap;var vs,ms,Ga,an,ii,ri,Yi;class kd{constructor(a,t=!0){Va(this,"anchor");lt(this,vs,new Map);lt(this,ms,new Map);lt(this,Ga,new Map);lt(this,an,new Set);lt(this,ii,!0);lt(this,ri,a=>{if(F(this,vs).has(a)){var t=F(this,vs).get(a),r=F(this,ms).get(t);if(r)el(r),F(this,an).delete(t);else{var l=F(this,Ga).get(t);l&&(F(this,ms).set(t,l.effect),F(this,Ga).delete(t),l.fragment.lastChild.remove(),this.anchor.before(l.fragment),r=l.effect)}for(const[c,u]of F(this,vs)){if(F(this,vs).delete(c),c===a)break;const v=F(this,Ga).get(u);v&&(qa(v.effect),F(this,Ga).delete(u))}for(const[c,u]of F(this,ms)){if(c===t||F(this,an).has(c))continue;const v=()=>{if(Array.from(F(this,vs).values()).includes(c)){var h=document.createDocumentFragment();tl(u,h),h.append(Ds()),F(this,Ga).set(c,{effect:u,fragment:h})}else qa(u);F(this,an).delete(c),F(this,ms).delete(c)};F(this,ii)||!r?(F(this,an).add(c),rn(u,v,!1)):v()}}});lt(this,Yi,a=>{F(this,vs).delete(a);const t=Array.from(F(this,vs).values());for(const[r,l]of F(this,Ga))t.includes(r)||(qa(l.effect),F(this,Ga).delete(r))});this.anchor=a,_t(this,ii,t)}ensure(a,t){var r=ot,l=go();if(t&&!F(this,ms).has(a)&&!F(this,Ga).has(a))if(l){var c=document.createDocumentFragment(),u=Ds();c.append(u),F(this,Ga).set(a,{effect:ts(()=>t(u)),fragment:c})}else F(this,ms).set(a,ts(()=>t(this.anchor)));if(F(this,vs).set(r,a),l){for(const[v,f]of F(this,ms))v===a?r.unskip_effect(f):r.skip_effect(f);for(const[v,f]of F(this,Ga))v===a?r.unskip_effect(f.effect):r.skip_effect(f.effect);r.oncommit(F(this,ri)),r.ondiscard(F(this,Yi))}else F(this,ri).call(this,r)}}vs=new WeakMap,ms=new WeakMap,Ga=new WeakMap,an=new WeakMap,ii=new WeakMap,ri=new WeakMap,Yi=new WeakMap;function qt(s){da===null&&Gl(),Vn&&da.l!==null?xd(da).m.push(s):pa(()=>{const a=Ts(s);if(typeof a=="function")return a})}function ar(s){da===null&&Gl(),qt(()=>()=>Ts(s))}function xd(s){var t;var a=s.l;return(t=a.u)!=null?t:a.u={a:[],b:[],m:[]}}function k(s,a,t=!1){var r=new kd(s),l=t?On:0;function c(u,v){r.ensure(u,v)}Zr(()=>{var u=!1;a((v,f=0)=>{u=!0,c(f,v)}),u||c(-1,null)},l)}function ft(s,a){return a}function Td(s,a,t){var m;for(var r=[],l=a.length,c,u=a.length,v=0;v{if(c){if(c.pending.delete(_),c.done.add(_),c.pending.size===0){var x=s.outrogroups;Nr(s,Ji(c.done)),x.delete(c),x.size===0&&(s.outrogroups=null)}}else u-=1},!1)}if(u===0){var f=r.length===0&&t!==null;if(f){var h=t,b=h.parentNode;nd(b),b.append(h),s.items.clear()}Nr(s,a,!f)}else c={pending:new Set(a),done:new Set},((m=s.outrogroups)!=null?m:s.outrogroups=new Set).add(c)}function Nr(s,a,t=!0){var r;if(s.pending.size>0){r=new Set;for(const u of s.pending.values())for(const v of u)r.add(s.items.get(v).e)}for(var l=0;l{var ne=t();return Ur(ne)?ne:ne==null?[]:Ji(ne)}),_,x=new Map,A=!0;function q(ne){se.effect.f&ns||(se.pending.delete(ne),se.fallback=b,Sd(se,_,u,a,r),b!==null&&(_.length===0?b.f&bs?(b.f^=bs,Hn(b,null,u)):el(b):rn(b,()=>{b=null})))}function T(ne){se.pending.delete(ne)}var D=Zr(()=>{_=e(m);for(var ne=_.length,fe=new Set,Q=ot,z=go(),I=0;Ic(u)):(b=ts(()=>c(_n!=null?_n:_n=Ds())),b.f|=bs)),ne>fe.size&&wc(),!A)if(x.set(Q,fe),z){for(const[j,V]of v)fe.has(j)||Q.skip_effect(V.e);Q.oncommit(q),Q.ondiscard(T)}else q(Q);e(m)}),se={effect:D,items:v,pending:x,outrogroups:null,fallback:b};A=!1}function qn(s){for(;s!==null&&!(s.f&_s);)s=s.next;return s}function Sd(s,a,t,r,l){var ee,j,V,oe,R,B,be,Pe,ue;var c=(r&ec)!==0,u=a.length,v=s.items,f=qn(s.effect.first),h,b=null,m,_=[],x=[],A,q,T,D;if(c)for(D=0;D0){var ge=r&Bl&&u===0?t:null;if(c){for(D=0;D{var K,J;if(m!==void 0)for(T of m)(J=(K=T.nodes)==null?void 0:K.a)==null||J.apply()})}function Ed(s,a,t,r,l,c,u,v){var f=u&Zo?u&tc?dn(t):uo(t,!1,!1):null,h=u&Qo?dn(l):null;return{v:f,i:h,e:ts(()=>(c(a,f!=null?f:t,h!=null?h:l,v),()=>{s.delete(r)}))}}function Hn(s,a,t){if(s.nodes)for(var r=s.nodes.start,l=s.nodes.end,c=a&&!(a.f&bs)?a.nodes.start:t;r!==null;){var u=wi(r);if(c.before(r),r===l)return;r=u}}function Os(s,a,t){a===null?s.effect.first=t:a.next=t,t===null?s.effect.last=a:t.prev=a}function wl(s,a,t=!1,r=!1,l=!1,c=!1){var u=s,v="";if(t)var f=s;w(()=>{var x;var h=xt;if(v!==(v=(x=a())!=null?x:"")){if(t){h.nodes=null,f.innerHTML=v,v!==""&&vn(ys(f),f.lastChild);return}if(h.nodes!==null&&(wo(h.nodes.start,h.nodes.end),h.nodes=null),v!==""){var b=r?cc:l?dc:void 0,m=mo(r?"svg":l?"math":"template",b);m.innerHTML=v;var _=r||l?m:m.content;if(vn(ys(_),_.lastChild),r||l)for(;ys(_);)u.before(ys(_));else u.before(_)}}})}function Fs(s,a,t){Ms(()=>{var r=Ts(()=>a(s,t==null?void 0:t())||{});if(r!=null&&r.destroy)return()=>r.destroy()})}function Lo(s){var a,t,r="";if(typeof s=="string"||typeof s=="number")r+=s;else if(typeof s=="object")if(Array.isArray(s)){var l=s.length;for(a=0;a=0;){var v=u+c;(u===0||kl.includes(r[u-1]))&&(v===r.length||kl.includes(r[v]))?r=(u===0?"":r.substring(0,u))+r.substring(v+1):u=v}}return r===""?null:r}function xl(s,a=!1){var t=a?" !important;":";",r="";for(var l of Object.keys(s)){var c=s[l];c!=null&&c!==""&&(r+=" "+l+": "+c+t)}return r}function ur(s){return s[0]!=="-"||s[1]!=="-"?s.toLowerCase():s}function Md(s,a){if(a){var t="",r,l;if(Array.isArray(a)?(r=a[0],l=a[1]):r=a,s){s=String(s).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var c=!1,u=0,v=!1,f=[];r&&f.push(...Object.keys(r).map(ur)),l&&f.push(...Object.keys(l).map(ur));var h=0,b=-1;const q=s.length;for(var m=0;m{Ro(s,s.__value)});a.observe(s,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),er(()=>{a.disconnect()})}function Tl(s,a,t=a){var r=new WeakSet,l=!0;Jr(s,"change",c=>{var h;var u=c?"[selected]":":checked",v;if(s.multiple)v=[].map.call(s.querySelectorAll(u),Jn);else{var f=(h=s.querySelector(u))!=null?h:s.querySelector("option:not([disabled])");v=f&&Jn(f)}t(v),s.__value=v,ot!==null&&r.add(ot)}),Ms(()=>{var c=a();if(s===document.activeElement){var u=ot;if(r.has(u))return}if(Ro(s,c,l),l&&c===void 0){var v=s.querySelector(":checked");v!==null&&(c=Jn(v),t(c))}s.__value=c,l=!1}),Pd(s)}function Jn(s){return"__value"in s?s.__value:s.value}const Dd=Symbol("is custom element"),zd=Symbol("is html"),Id=bc?"progress":"PROGRESS";function sr(s,a){var t=al(s);t.value===(t.value=a!=null?a:void 0)||s.value===a&&(a!==0||s.nodeName!==Id)||(s.value=a!=null?a:"")}function Od(s,a){var t=al(s);t.checked!==(t.checked=a!=null?a:void 0)&&(s.checked=a)}function mt(s,a,t,r){var l=al(s);l[a]!==(l[a]=t)&&(a==="loading"&&(s[mc]=t),t==null?s.removeAttribute(a):typeof t!="string"&&Ld(s).includes(a)?s[a]=t:s.setAttribute(a,t))}function al(s){var a;return(a=s[Pi])!=null?a:s[Pi]={[Dd]:s.nodeName.includes("-"),[zd]:s.namespaceURI===ql}}var Sl=new Map;function Ld(s){var a=s.getAttribute("is")||s.nodeName,t=Sl.get(a);if(t)return t;Sl.set(a,t=[]);for(var r,l=s,c=Element.prototype;c!==l;){r=uc(l);for(var u in r)r[u].set&&u!=="innerHTML"&&u!=="textContent"&&u!=="innerText"&&t.push(u);l=Kl(l)}return t}function We(s,a,t=a){var r=new WeakSet;Jr(s,"input",async l=>{var c=l?s.defaultValue:s.value;if(c=fr(s)?_r(c):c,t(c),ot!==null&&r.add(ot),await pd(),c!==(c=a())){var u=s.selectionStart,v=s.selectionEnd,f=s.value.length;if(s.value=c!=null?c:"",v!==null){var h=s.value.length;u===v&&v===f&&h>f?(s.selectionStart=h,s.selectionEnd=h):(s.selectionStart=u,s.selectionEnd=Math.min(v,h))}}}),Ts(a)==null&&s.value&&(t(fr(s)?_r(s.value):s.value),ot!==null&&r.add(ot)),tr(()=>{var l=a();if(s===document.activeElement){var c=ot;if(r.has(c))return}fr(s)&&l===_r(s.value)||s.type==="date"&&!l&&!s.value||l!==s.value&&(s.value=l!=null?l:"")})}function Xt(s,a,t=a){Jr(s,"change",r=>{var l=r?s.defaultChecked:s.checked;t(l)}),Ts(a)==null&&t(s.checked),tr(()=>{var r=a();s.checked=!!r})}function fr(s){var a=s.type;return a==="number"||a==="range"}function _r(s){return s===""?null:+s}function hr(s,a){return s===a||(s==null?void 0:s[sn])===a}function sl(s={},a,t,r){var l=da.r,c=xt;return Ms(()=>{var u,v;return tr(()=>{u=v,v=[],Ts(()=>{hr(t(...v),s)||(a(s,...v),u&&hr(t(...u),s)&&a(null,...u))})}),()=>{let f=c;for(;f!==l&&f.parent!==null&&f.parent.f&kr;)f=f.parent;const h=()=>{v&&hr(t(...v),s)&&a(null,...v)},b=f.teardown;f.teardown=()=>{h(),b==null||b()}}}),s}function Ct(s,a,t,r){var fe,Q;var l=!Vn||(t&sc)!==0,c=(t&ic)!==0,u=(t&rc)!==0,v=r,f=!0,h=void 0,b=()=>u&&l?(h!=null||(h=Zn(r)),e(h)):(f&&(f=!1,v=u?Ts(r):r),v);let m;if(c){var _=sn in s||gc in s;m=(Q=(fe=wn(s,a))==null?void 0:fe.set)!=null?Q:_&&a in s?z=>s[a]=z:void 0}var x,A=!1;c?[x,A]=Vc(()=>s[a]):x=s[a],x===void 0&&r!==void 0&&(x=b(),m&&(l&&Ec(),m(x)));var q;if(l?q=()=>{var z=s[a];return z===void 0?b():(f=!0,z)}:q=()=>{var z=s[a];return z!==void 0&&(v=void 0),z===void 0?v:z},l&&!(t&nc))return q;if(m){var T=s.$$legacy;return function(z,I){return arguments.length>0?((!l||!I||T||A)&&m(I?q():z),z):q()}}var D=!1,se=(t&ac?Zn:Gr)(()=>(D=!1,q()));c&&e(se);var ne=xt;return function(z,I){if(arguments.length>0){const L=I?e(se):l&&c?yt(z):z;return o(se,L),D=!0,v!==void 0&&(v=L),z}return zs&&D||ne.f&ns?se.v:e(se)}}const Rd="modulepreload",Nd=function(s){return"/"+s},El={},Vd=function(a,t,r){let l=Promise.resolve();if(t&&t.length>0){document.getElementsByTagName("link");const u=document.querySelector("meta[property=csp-nonce]"),v=(u==null?void 0:u.nonce)||(u==null?void 0:u.getAttribute("nonce"));l=Promise.allSettled(t.map(f=>{if(f=Nd(f),f in El)return;El[f]=!0;const h=f.endsWith(".css"),b=h?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${f}"]${b}`))return;const m=document.createElement("link");if(m.rel=h?"stylesheet":Rd,h||(m.as="script"),m.crossOrigin="",m.href=f,v&&m.setAttribute("nonce",v),document.head.appendChild(m),h)return new Promise((_,x)=>{m.addEventListener("load",_),m.addEventListener("error",()=>x(new Error(`Unable to preload CSS for ${f}`)))})}))}function c(u){const v=new Event("vite:preloadError",{cancelable:!0});if(v.payload=u,window.dispatchEvent(v),!v.defaultPrevented)throw u}return l.then(u=>{for(const v of u||[])v.status==="rejected"&&c(v.reason);return a().catch(c)})},nr="/assets/app_icon-CfHainhY.png";function Fd(s,a,t,r){if(typeof a=="function"?s!==a||!r:!a.has(s))throw new TypeError("Cannot read private member from an object whose class did not declare it");return t==="m"?r:t==="a"?r.call(s):r?r.value:a.get(s)}function Bd(s,a,t,r,l){if(typeof a=="function"?s!==a||!0:!a.has(s))throw new TypeError("Cannot write private member to an object whose class did not declare it");return a.set(s,t),t}var Ni;const ls="__TAURI_TO_IPC_KEY__";function qd(s,a=!1){return window.__TAURI_INTERNALS__.transformCallback(s,a)}async function E(s,a={},t){return window.__TAURI_INTERNALS__.invoke(s,a,t)}class jd{get rid(){return Fd(this,Ni,"f")}constructor(a){Ni.set(this,void 0),Bd(this,Ni,a)}async close(){return E("plugin:resources|close",{rid:this.rid})}}Ni=new WeakMap;var Ha;(function(s){s.WINDOW_RESIZED="tauri://resize",s.WINDOW_MOVED="tauri://move",s.WINDOW_CLOSE_REQUESTED="tauri://close-requested",s.WINDOW_DESTROYED="tauri://destroyed",s.WINDOW_FOCUS="tauri://focus",s.WINDOW_BLUR="tauri://blur",s.WINDOW_SCALE_FACTOR_CHANGED="tauri://scale-change",s.WINDOW_THEME_CHANGED="tauri://theme-changed",s.WINDOW_CREATED="tauri://window-created",s.WINDOW_SUSPENDED="tauri://suspended",s.WINDOW_RESUMED="tauri://resumed",s.WEBVIEW_CREATED="tauri://webview-created",s.DRAG_ENTER="tauri://drag-enter",s.DRAG_OVER="tauri://drag-over",s.DRAG_DROP="tauri://drag-drop",s.DRAG_LEAVE="tauri://drag-leave"})(Ha||(Ha={}));async function No(s,a){window.__TAURI_EVENT_PLUGIN_INTERNALS__.unregisterListener(s,a),await E("plugin:event|unlisten",{event:s,eventId:a})}async function ha(s,a,t){var r;const l=typeof(t==null?void 0:t.target)=="string"?{kind:"AnyLabel",label:t.target}:(r=t==null?void 0:t.target)!==null&&r!==void 0?r:{kind:"Any"};return E("plugin:event|listen",{event:s,target:l,handler:qd(a)}).then(c=>async()=>No(s,c))}async function Ud(s,a,t){return ha(s,r=>{No(s,r.id),a(r)},t)}async function Vo(s,a){await E("plugin:event|emit",{event:s,payload:a})}async function Kd(s,a,t){await E("plugin:event|emit_to",{target:typeof s=="string"?{kind:"AnyLabel",label:s}:s,event:a,payload:t})}const Hd={engine:{backend:"whisper-cpp",whisper_cpp:{model_dir:"",model_size:"tiny",device:"auto",threads:0,language:"auto"},moonshine:{model_size:"base",language:"en"},parakeet:{model_size:"tdt-0.6b-v3",language:"auto"},remote_openai:{endpoint:"http://localhost:8000/v1",api_key:null,model:"whisper-1",language:"",timeout_secs:30},s1_mini:{enabled:!1,styling:"semi-formal"}},audio:{vad_threshold:.5,input_device_index:null,evdev_device:null,noise_suppression:!1,gain:1,dynamic_stream:!0},ui:{show_overlay:!0,overlay_style:"mono_bars",overlay_position:"center",overlay_monitor:"primary",auto_show_settings:!1,show_notification:!1,show_command_overlay:!0,command_overlay_duration_secs:3},features:{remove_fillers:!0,custom_vocabulary:["VoxCtrl","Hey Vox"],spoken_punctuation:!0,auto_format_lists:!0,snippets:{},early_command_detection:!0},openai:{enabled:!1,model:"llama3.2:1b",mode:"clean",custom_prompt:null,system_prompt:"Fix grammar and punctuation only. Return only the corrected text, no commentary.",user_prompt:"{text}",endpoint:"http://localhost:11434",api_key:null,timeout_secs:8},tts:{enabled:!1,engine:"espeak",voice:"en-us-lessac-medium",voice_dir:"",stop_key:["KEY_ESCAPE"],response_overlay:!0,speed:1,gpu:!1,hf_token:null,pocket_tts:{voice:"alba",prewarm:!1,voice_dir:"",gpu:!1},inflect_micro:{model_dir:"",seed:0,noise_scale:.667,prewarm:!1},breeze_tts_2:{voice_mode:"prompt",cloned_voice:"alba",speaker_prompt:"A calm and clear female voice speaking at a natural pace",model_dir:"",prewarm:!1,gpu:!1},vox_cpm_2:{voice_mode:"prompt",cloned_voice:"alba",voice_dir:"",speaker_prompt:"A calm young female voice speaking clearly with a gentle tone.",ultimate_cloning:!1,model_dir:"",prewarm:!1,gpu:!1},memory_mode:"always_loaded",idle_unload_secs:900,snippets:{VoxCtrl:"Vox Control"}},mcp:{server_enabled:!1,record_timeout:15,visual_feedback:!0}},Ot=bi(Hd),Ss=bi(!1),Ki=bi(!1);let ei=!1,gr=null;async function Wd(){try{const s=await E("get_config");Ot.set(s),Ss.set(!1),Ki.set(!0),setTimeout(()=>{ei=!0},0)}catch(s){console.error("loadConfig:",s),Ki.set(!0),setTimeout(()=>{ei=!0},0)}}async function nl(s){await E("save_config",{newConfig:s}),Ss.set(!1)}Ot.subscribe(s=>{ei&&(gr&&clearTimeout(gr),gr=setTimeout(async()=>{try{await nl(s),console.log("Config auto-saved successfully!")}catch(a){console.error("Auto-saving config failed:",a)}},400))});Wd();ha("config-changed",s=>{ei=!1,Ot.set(s.payload),setTimeout(()=>{ei=!0},0)}).catch(s=>{console.error("Failed to setup config-changed listener:",s)});const ga=bi({recording:!1,processing:!1,speaking:!1,mcp_recording:!1,audio_ready:!0,word_count:0,active_target_id:"default",active_target_label:"Focused Window"}),$d=yi(ga,s=>s.recording),Gd=yi(ga,s=>s.speaking),Yd=yi(ga,s=>s.mcp_recording);yi(ga,s=>s.word_count);yi(ga,s=>{var a;return(a=s.active_target_label)!=null?a:"Focused Window"});let Fo=0;ha("status-tick",s=>{Fo=Date.now(),ga.set(s.payload)});E("get_status").then(ga.set).catch(console.error);const Jd=2e3,Xd=1e3;setInterval(()=>{Date.now()-Fo{})},Xd);var Zd=p('

                '),Qd=p(`

                Using the HF_TOKEN environment variable. It takes precedence over a saved - token and is not written to your config.

                `),ev=p('

                '),tv=p(`

                `),av=p('

                '),sv=p(`

                General

                Setup

                Run the first-launch setup wizard again

                Walks through the engine, model, hotkey, overlay and voice choices in one flow, and downloads + token and is not written to your config.

                `),ev=p('

                '),tv=p(`

                `),av=p('

                '),sv=p(`

                General

                Setup

                Run the first-launch setup wizard again

                Walks through the engine, model, hotkey, overlay and voice choices in one flow, and downloads whatever it needs. Your current settings stay in place until you change them in the wizard.

                Hugging Face Access Token

                Hugging Face access token

                Used by every gated model VoxCtrl can download — Pocket-TTS, Breeze-TTS-2, and VoxCPM2 in the TTS tab. Create a token at huggingface.co/settings/tokens and accept each model's license on its Hugging Face page before downloading. Enter it once here; the setup wizard reads and writes the same token, so the two always match.

                Updates

                VoxCtrl never checks for updates on its own. Press "Check now" to ask GitHub whether a newer - release has been published — that request carries nothing about you or your machine.

                Check now

                MCP Server

                How long transcribe_voice listens when the calling agent does not ask for a + release has been published — that request carries nothing about you or your machine.

                Check now

                MCP Server

                How long transcribe_voice listens when the calling agent does not ask for a specific timeout. An explicit timeout_seconds in the tool call still wins.

                Socket: /tmp/voxctrl-mcp.sock (Linux) / \\\\.\\pipe\\voxctrl-mcp (Windows)

                `);function nv(s,a){Tt(a,!0);let t=Ct(a,"cfg",15);function r(){Ot.set(t()),Ss.set(!0)}let l=S(null);const c=ce(()=>!!e(l)),u=ce(()=>{var O,X;return(X=(O=e(l))!=null?O:t().tts.hf_token)!=null?X:""});function v(O){if(e(c))return;const X=O.target.value;t(t().tts.hf_token=X.trim()?X.trim():null,!0),r()}let f=S(null),h=S(!1),b=S(null),m=S(null);async function _(){o(h,!0),o(m,null),o(b,null);try{o(b,await E("check_for_update"),!0)}catch(O){o(m,`${O}`)}finally{o(h,!1)}}async function x(){try{await E("open_update_window")}catch(O){o(m,`${O}`)}}async function A(){o(f,null);try{await E("open_setup_wizard")}catch(O){o(f,`${O}`)}}qt(()=>{E("hf_token_env").then(O=>o(l,O&&O.trim()?O.trim():null,!0)).catch(()=>o(l,null))});var q=sv(),T=i(n(q),2),D=i(n(T),2),se=i(n(D),2),ne=i(D,4);{var fe=O=>{var X=Zd(),ve=n(X);w(()=>{var Ae;return y(ve,`Could not open the wizard: ${(Ae=e(f))!=null?Ae:""}`)}),d(O,X)};k(ne,O=>{e(f)&&O(fe)})}var Q=i(T,2),z=i(n(Q),2),I=i(n(z),2),L=i(z,2);{var ge=O=>{var X=Qd();d(O,X)};k(L,O=>{e(c)&&O(ge)})}var ee=i(Q,2),j=i(n(ee),4),V=i(n(j),2),oe=n(V),R=i(j,2);{var B=O=>{var X=ev(),ve=n(X);w(()=>{var Ae;return y(ve,`VoxCtrl ${(Ae=e(b).current_version)!=null?Ae:""} is the latest release.`)}),d(O,X)},be=O=>{var X=tv(),ve=n(X),Ae=i(ve);w(()=>{var Fe,he;return y(ve,`Version ${(Fe=e(b).update.version)!=null?Fe:""} is available (you have ${(he=e(b).update.current_version)!=null?he:""}). `)}),N("click",Ae,x),d(O,X)};k(R,O=>{var X;e(b)&&!e(b).update?O(B):(X=e(b))!=null&&X.update&&O(be,1)})}var Pe=i(R,2);{var ue=O=>{var X=av(),ve=n(X);w(()=>{var Ae;return y(ve,`Could not check for updates: ${(Ae=e(m))!=null?Ae:""}`)}),d(O,X)};k(Pe,O=>{e(m)&&O(ue)})}var K=i(ee,2),J=i(n(K),2),Se=i(n(J),2),De=i(J,2),le=i(n(De),2),W=i(De,2),ae=i(n(W),2);w(()=>{sr(I,e(u)),I.readOnly=e(c),mt(I,"title",e(c)?"Set by the HF_TOKEN environment variable":void 0),V.disabled=e(h),y(oe,e(h)?"Checking…":"Check for updates")}),N("click",se,A),N("input",I,v),N("click",V,_),N("change",Se,r),Xt(Se,()=>t().mcp.server_enabled,O=>t(t().mcp.server_enabled=O,!0)),N("change",le,r),Xt(le,()=>t().mcp.visual_feedback,O=>t(t().mcp.visual_feedback=O,!0)),N("change",ae,r),We(ae,()=>t().mcp.record_timeout,O=>t(t().mcp.record_timeout=O,!0)),d(s,q),St()}Qt(["click","input","change"]);var iv=p(''),rv=p('
                '),lv=p('
                ');function sa(s,a){Tt(a,!0);let t=Ct(a,"value",15),r=Ct(a,"options",19,()=>[]),l=Ct(a,"disabled",3,!1),c=Ct(a,"defaultToFirst",3,!1),u=S(!1),v=S(null),f=S("");const h=4,b=8;function m(z){let I=z.parentElement;for(;I&&I!==document.body&&I!==document.documentElement;){const L=window.getComputedStyle(I);if(L.transform&&L.transform!=="none"||L.perspective&&L.perspective!=="none"||L.filter&&L.filter!=="none"||L.contain==="paint"||L.contain==="layout"||L.contain==="strict"||L.contain==="content"||L.willChange==="transform")return I;I=I.parentElement}return null}function _(){if(!e(v))return;const z=e(v).getBoundingClientRect(),I=m(e(v)),L=I?I.getBoundingClientRect():null,ge=L?L.left:0,ee=L?L.top:0,j=L?L.bottom:window.innerHeight,V=window.innerHeight-z.bottom-h-b,oe=z.top-h-b,R=V<160&&oe>V,B=Math.max(120,Math.floor(R?oe:V));o(f,R?`position: fixed; left: ${z.left-ge}px; width: ${z.width}px; bottom: ${j-z.top+h}px; max-height: ${B}px;`:`position: fixed; left: ${z.left-ge}px; width: ${z.width}px; top: ${z.bottom+h-ee}px; max-height: ${B}px;`,!0)}function x(){o(u,!e(u)),e(u)&&_()}let A=ce(()=>r().map(z=>typeof z=="string"?{value:z,label:z,disabled:!1}:{value:z.value,label:z.label,disabled:!!z.disabled}));pa(()=>{if(c()&&e(A).length>0&&!e(A).find(I=>I.value===t())){const I=e(A).find(L=>!L.disabled)||e(A)[0];I&&t()!==I.value&&(t(I.value),a.onchange&&a.onchange(I.value))}});let q=ce(()=>{const z=e(A).find(I=>I.value===t());if(z)return z.label;if(c()&&e(A).length>0){const I=e(A).find(L=>!L.disabled)||e(A)[0];if(I)return I.label}return t()!==void 0&&t()!==null?String(t()):""});pa(()=>{if(!e(u))return;const z=L=>{e(v)&&!e(v).contains(L.target)&&o(u,!1)},I=()=>_();return document.addEventListener("click",z),window.addEventListener("scroll",I,!0),window.addEventListener("resize",I),()=>{document.removeEventListener("click",z),window.removeEventListener("scroll",I,!0),window.removeEventListener("resize",I)}});function T(z){t(z),o(u,!1),a.onchange&&a.onchange(z)}var D=lv(),se=n(D),ne=n(se),fe=i(se,2);{var Q=z=>{var I=rv();pt(I,21,()=>e(A),ft,(L,ge)=>{var ee=iv();let j;var V=n(ee);w(()=>{j=Te(ee,1,"custom-dropdown-item svelte-1heock4",null,j,{selected:e(ge).value===t()}),ee.disabled=e(ge).disabled,y(V,e(ge).label)}),N("click",ee,oe=>{oe.preventDefault(),oe.stopPropagation(),T(e(ge).value)}),d(L,ee)}),w(()=>na(I,e(f))),d(z,I)};k(fe,z=>{e(u)&&!l()&&z(Q)})}sl(D,z=>o(v,z),()=>e(v)),w(()=>{se.disabled=l(),y(ne,e(q))}),N("click",se,x),d(s,D),St()}Qt(["click"]);var ov=p(''),cv=p('
                '),dv=p(`

                Design your own overlay style by adding a folder with an index.html and style.css to the folder below — it shows up here as a selectable style automatically. A working example @@ -23,14 +23,14 @@ var $o=Object.defineProperty;var vl=s=>{throw TypeError(s)};var Go=(s,a,t)=>a in where Whisper.cpp${Ve!=null?Ve:""}. Pick Whisper.cpp if memory matters more than Moonshine's latency.`),[()=>e(c)?` puts a quantized model in VRAM via ${h(e(c))}`:" uses a smaller quantized model"]),d(Ke,ye)};k(ze,Ke=>{e(ne)&&!e(u)&&Ke($e)})}var st=i(ze,2),it=i(n(st),2);sa(it,{get options(){return x},onchange:Se,get value(){return t().engine.moonshine.model_size},set value(Ke){t(t().engine.moonshine.model_size=Ke,!0)}});var H=i(st,2);{var M=Ke=>{var ye=Ev(),Ie=n(ye);{var Ye=et=>{var rt=kv();d(et,rt)},Ze=et=>{var rt=xv(),Ee=n(rt);w(()=>{var Ge;return y(Ee,`⏳ Downloading Moonshine ${(Ge=t().engine.moonshine.model_size)!=null?Ge:""} (ONNX)...`)}),d(et,rt)},Ve=et=>{var rt=Tv();d(et,rt)},at=et=>{var rt=Sv(),Ee=i(n(rt),2),Ge=n(Ee);w(()=>{var ct;return y(Ge,`Download ${(ct=t().engine.moonshine.model_size)!=null?ct:""}`)}),N("click",Ee,()=>J(t().engine.moonshine.model_size)),d(et,rt)};k(Ie,et=>{e(Q)?et(Ye):e(z)?et(Ze,1):e(fe)[t().engine.moonshine.model_size]?et(Ve,2):et(at,-1)})}d(Ke,ye)};k(H,Ke=>{e(ne)&&Ke(M)})}var C=i(H,2),ke=i(n(C),2);N("change",ke,r),We(ke,()=>t().engine.moonshine.language,Ke=>t(t().engine.moonshine.language=Ke,!0)),d(Y,_e)},U=Y=>{var _e=Ov(),me=i(n(_e),2);{var pe=C=>{var ke=Av();d(C,ke)};k(me,C=>{e(I)||C(pe)})}var ze=i(me,2),$e=i(n(ze),2);sa($e,{get options(){return A},onchange:oe,get value(){return t().engine.parakeet.model_size},set value(C){t(t().engine.parakeet.model_size=C,!0)}});var st=i(ze,2);{var it=C=>{var ke=Iv(),Ke=n(ke);{var ye=Ve=>{var at=Mv();d(Ve,at)},Ie=Ve=>{var at=Pv(),et=n(at);w(()=>{var rt;return y(et,`⏳ Downloading Parakeet ${(rt=t().engine.parakeet.model_size)!=null?rt:""} (ONNX INT8)...`)}),d(Ve,at)},Ye=Ve=>{var at=Dv();d(Ve,at)},Ze=Ve=>{var at=zv(),et=i(n(at),2),rt=n(et);w(()=>{var Ee;return y(rt,`Download ${(Ee=t().engine.parakeet.model_size)!=null?Ee:""}`)}),N("click",et,()=>V(t().engine.parakeet.model_size)),d(Ve,at)};k(Ke,Ve=>{e(ge)?Ve(ye):e(ee)?Ve(Ie,1):e(L)[t().engine.parakeet.model_size]?Ve(Ye,2):Ve(Ze,-1)})}d(C,ke)};k(st,C=>{e(I)&&C(it)})}var H=i(st,2),M=i(n(H),2);N("change",M,r),We(M,()=>t().engine.parakeet.language,C=>t(t().engine.parakeet.language=C,!0)),d(Y,_e)},te=Y=>{var _e=Vv(),me=i(n(_e),4),pe=i(n(me),2),ze=i(me,4),$e=i(n(ze),2),st=i(ze,4),it=i(n(st),2),H=i(st,2);{var M=Ee=>{var Ge=Rv(),ct=i(n(Ge),2);pt(ct,21,()=>e(be),ft,(vt,nt)=>{var wt=Lv();let dt;var Et=n(wt);w(()=>{dt=Te(wt,1,"tag-btn svelte-nfi4ak",null,dt,{active:t().engine.remote_openai.model===e(nt)}),y(Et,e(nt))}),N("click",wt,()=>{t(t().engine.remote_openai.model=e(nt),!0),r()}),d(vt,wt)}),d(Ee,Ge)};k(H,Ee=>{e(be).length>0&&Ee(M)})}var C=i(H,2),ke=i(n(C),2),Ke=i(C,4),ye=i(n(Ke),2),Ie=i(Ke,2),Ye=n(Ie),Ze=n(Ye);{var Ve=Ee=>{var Ge=Be("⏳ Testing Connection...");d(Ee,Ge)},at=Ee=>{var Ge=Be("🧪 Test Connection");d(Ee,Ge)};k(Ze,Ee=>{e(R)?Ee(Ve):Ee(at,-1)})}var et=i(Ye,2);{var rt=Ee=>{var Ge=Nv();let ct;var vt=n(Ge);{var nt=dt=>{var Et=Be();w(()=>{var Kt;return y(Et,`✔ ${(Kt=e(B).message)!=null?Kt:""}`)}),d(dt,Et)},wt=dt=>{var Et=Be();w(()=>{var Kt;return y(Et,`⚠️ ${(Kt=e(B).message)!=null?Kt:""}`)}),d(dt,Et)};k(vt,dt=>{e(B).success?dt(nt):dt(wt,-1)})}w(()=>ct=Te(Ge,1,"status-pill svelte-nfi4ak",null,ct,{success:e(B).success,error:!e(B).success})),d(Ee,Ge)};k(et,Ee=>{e(B)&&Ee(rt)})}w(()=>Ye.disabled=e(R)),N("change",pe,r),We(pe,()=>t().engine.remote_openai.endpoint,Ee=>t(t().engine.remote_openai.endpoint=Ee,!0)),N("change",$e,r),We($e,()=>t().engine.remote_openai.api_key,Ee=>t(t().engine.remote_openai.api_key=Ee,!0)),N("change",it,r),We(it,()=>t().engine.remote_openai.model,Ee=>t(t().engine.remote_openai.model=Ee,!0)),N("change",ke,r),We(ke,()=>t().engine.remote_openai.language,Ee=>t(t().engine.remote_openai.language=Ee,!0)),N("change",ye,r),We(ye,()=>t().engine.remote_openai.timeout_secs,Ee=>t(t().engine.remote_openai.timeout_secs=Ee,!0)),N("click",Ye,ue),d(Y,_e)};k(Je,Y=>{t().engine.backend==="whisper-cpp"?Y(de):t().engine.backend==="moonshine"?Y($,1):t().engine.backend==="parakeet"?Y(U,2):t().engine.backend==="remote-openai"&&Y(te,3)})}d(s,ve),St()}Qt(["click","change","keydown"]);var qv=p("

                "),jv=p('
                '),Uv=p(`

                Audio

                Input Device

                Microphone Monitor

                Only opens the microphone stream when recording is triggered, which saves power but cannot capture anything spoken while the microphone is still opening. Turn this off to keep the stream open: the last 300ms before you trigger recording is then kept and included, so a first word spoken early — the one carrying a voice command's "Hey Vox" or "Vox Control" — is not lost.

                Voice Activity Detection

                Processing

                Removes steady background noise (fans, hiss, hum) from the microphone before transcription, keeping speech intact. Takes effect on the next recording — no restart needed.

                `);function Kv(s,a){Tt(a,!0);let t=Ct(a,"cfg",15);function r(){Ot.set(t()),Ss.set(!0)}let l=S(yt([])),c=ce(()=>[{value:-1,label:"Default system device"},...e(l).map(O=>({value:O.index,label:O.name}))]),u=S(0),v=S(0),f=S(0),h=0,b=S(null),m;function _(){const O=e(u);O>e(v)?o(v,e(v)+(O-e(v))*.45):o(v,e(v)+(O-e(v))*.12),e(v)>e(f)?(o(f,e(v),!0),h=25):h>0?h--:o(f,Math.max(0,e(f)-.012),!0),m=requestAnimationFrame(_)}qt(async()=>{o(l,await E("list_audio_devices"),!0);try{await E("start_monitoring_audio"),o(b,await ha("audio-level",O=>{o(u,O.payload,!0)}),!0)}catch(O){console.error("Failed to start audio monitoring:",O)}m=requestAnimationFrame(_)}),ar(async()=>{m&&cancelAnimationFrame(m),e(b)&&e(b)();try{await E("stop_monitoring_audio")}catch(O){console.error("Failed to stop audio monitoring:",O)}});var x=Uv(),A=i(n(x),2),q=i(n(A),2),T=i(n(q),2);{let O=ce(()=>{var X;return(X=t().audio.input_device_index)!=null?X:-1});sa(T,{get value(){return e(O)},get options(){return e(c)},onchange:X=>{t(t().audio.input_device_index=X<0?null:X,!0),r()}})}var D=i(q,2),se=n(D),ne=i(n(se),2);let fe;var Q=i(ne,2),z=n(Q),I=i(se,2),L=n(I),ge=n(L);pt(ge,16,()=>Array(24),ft,(O,X,ve)=>{const Ae=ce(()=>ve/24),Fe=ce(()=>e(v)>=e(Ae)),he=ce(()=>ve>=17);var re=qv();let we;w(()=>we=Te(re,1,"vu-segment svelte-1msnq7i",null,we,{active:e(Fe),orange:e(he)})),d(O,re)});var ee=i(ge,2);{var j=O=>{var X=jv();w(ve=>na(X,`left: ${ve!=null?ve:""}%;`),[()=>Math.min(.99,e(f))*100]),d(O,X)};k(ee,O=>{e(f)>.01&&O(j)})}var V=i(D,2),oe=i(n(V),2),R=i(A,2),B=i(n(R),2),be=i(n(B),2),Pe=i(be,2),ue=n(Pe),K=i(R,2),J=i(n(K),2),Se=i(n(J),2),De=i(J,4),le=i(n(De),2),W=i(le,2),ae=n(W);w((O,X)=>{fe=Te(ne,1,"vu-status-dot svelte-1msnq7i",null,fe,{active:e(u)>.005}),y(z,e(u)>.005?"Signal Detected":"Listening..."),y(ue,O),y(ae,`${X!=null?X:""}×`)},[()=>t().audio.vad_threshold.toFixed(2),()=>t().audio.gain.toFixed(1)]),N("change",oe,r),Xt(oe,()=>t().audio.dynamic_stream,O=>t(t().audio.dynamic_stream=O,!0)),N("change",be,r),We(be,()=>t().audio.vad_threshold,O=>t(t().audio.vad_threshold=O,!0)),N("change",Se,r),Xt(Se,()=>t().audio.noise_suppression,O=>t(t().audio.noise_suppression=O,!0)),N("change",le,r),We(le,()=>t().audio.gain,O=>t(t().audio.gain=O,!0)),d(s,x),St()}Qt(["change"]);function ua(s){function a(){s.style.height="auto",s.style.height=`${s.scrollHeight}px`}s.addEventListener("input",a);const t=setTimeout(a,0);return{update(){a()},destroy(){clearTimeout(t),s.removeEventListener("input",a)}}}var Hv=p(''),Wv=p('
                Voice Command Router Settings

                Types dictated text into your active application by default. If your dictation contains Hey Vox <target_name> <text> or Vox Control <target_name> <text> (for example, "Hey Vox, Notes Hello world" or "Vox Control Notes Hello world"), VoxCtrl dynamically reroutes the text to that target instead.

                '),$v=p(' '),Gv=p('
                Shell Executor Settings
                Terminal Command Shell command

                Use inside the command string as a placeholder to substitute transcribed speech.

                '),Yv=p(' '),Jv=p('

                Each line starts with:

                '),Xv=p(`

                A strftime pattern, written in UTC. Common pieces: %Y year (2026), %m month (09), %d day (04), %H hour (17), %M minute, %S second, %b month name (Sep), %a weekday (Fri), %p AM/PM, %Z zone (UTC), %% a literal percent. Anything else is written as typed. - Default:

                `,1),Zv=p('
                Local File Writer Settings
                '),Qv=p('
                Network Socket settings
                '),eu=p('
                FIFO Named Pipe settings
                '),tu=p('
                Linux DBus emitter settings
                '),au=p(''),su=p(''),nu=p(' '),iu=p('
                Method
                Custom Post Body JSON Template

                Must be valid JSON. Use to substitute transcribed speech.

                ',1),ru=p(' '),lu=p('
                Webhook Secret Token (HMAC)
                Custom Webhook Body JSON Template

                Must be valid JSON. Use to substitute transcribed speech.

                ',1),ou=p('
                API Endpoint Client settings
                REST endpoint URL
                '),cu=p(' '),du=p('
                MCP Server Client settings
                Custom Socket/Pipe Path Optional override

                Leave empty to use defaults (/tmp/voxctrl-mcp.sock on Linux, \\\\.\\pipe\\voxctrl-mcp on Windows).

                MCP Tool Name
                Custom Tool Arguments JSON Template

                Must be valid JSON. Use to substitute transcribed speech.

                '),vu=p(' '),uu=p(''),pu=p(' '),fu=p(" "),_u=p(`

                Discards this target's stored conversation so the next dictation starts a new + Default:

                `,1),Zv=p('
                Local File Writer Settings
                '),Qv=p('
                Network Socket settings
                '),eu=p('
                FIFO Named Pipe settings
                '),tu=p('
                Linux DBus emitter settings
                '),au=p(''),su=p(''),nu=p(' '),iu=p('
                Method
                Custom Post Body JSON Template

                Must be valid JSON. Use to substitute transcribed speech.

                ',1),ru=p(' '),lu=p('
                Webhook Secret Token (HMAC)
                Custom Webhook Body JSON Template

                Must be valid JSON. Use to substitute transcribed speech.

                ',1),ou=p('
                API Endpoint Client settings
                REST endpoint URL
                '),cu=p(' '),du=p('
                MCP Server Client settings
                Custom Socket/Pipe Path Optional override

                Leave empty to use defaults (/tmp/voxctrl-mcp.sock on Linux, \\\\.\\pipe\\voxctrl-mcp on Windows).

                MCP Tool Name
                Custom Tool Arguments JSON Template

                Must be valid JSON. Use to substitute transcribed speech.

                '),vu=p(' '),uu=p(''),pu=p(' '),fu=p(" "),_u=p(`

                Discards this target's stored conversation so the next dictation starts a new thread. History is in-memory only and is never written to disk.

                `),hu=p(`
                Conversational LLM settings

                Sends each dictation to an OpenAI-compatible /v1/chat/completions endpoint — Hermes, Ollama, llama.cpp — - carrying the running conversation so the model keeps its context between turns.

                Server Base URL

                The /v1 suffix is optional — it is added automatically.

                Model

                Press Test & fetch models to confirm the server is reachable and + carrying the running conversation so the model keeps its context between turns.

                Server Base URL

                The /v1 suffix is optional — it is added automatically.

                Model

                Press Test & fetch models to confirm the server is reachable and pick from the ids it reports.

                API Key Optional
                System Prompt

                Sent ahead of every turn and never trimmed from the history window.

                Reply Handling

                Speaking the reply requires TTS to be enabled in the TTS tab.

                Conversation Memory Messages

                Most recent messages sent with each turn. 0 sends the whole conversation.

                Request Timeout Seconds
                Spoken Reset Phrase Optional

                Saying exactly this clears the conversation instead of sending it to the model. Casing and punctuation are ignored.

                `),gu=p('
                Output
                '),mu=p(`
                `);function Bo(s,a){Tt(a,!0);let t=Ct(a,"editingTarget",15),r=Ct(a,"isNested",3,!1),l=S(""),c=S(""),u=S(""),v=S(yt([])),f=S(!1),h=S(""),b=S(!1);const m="%Y-%m-%dT%H:%M:%SZ";let _=S(""),x=S(null);pa(()=>{var V,oe;const ee=(oe=(V=t())==null?void 0:V.file_timestamp_format)!=null?oe:"";if(!t()||t().delivery!=="file"||!t().file_timestamp){o(x,null),o(_,"");return}let j=!1;return E("preview_timestamp_format",{format:ee}).then(R=>{j||(o(_,R,!0),o(x,null))}).catch(R=>{j||(o(_,""),o(x,`${R}`))}),()=>{j=!0}});let A=ce(()=>!t()||t().delivery!=="exec"||(t().command||"").includes("{text}")?null:"Command must contain '{text}' placeholder."),q=ce(()=>{if(!e(l).trim())return null;try{JSON.parse(e(l))}catch(ee){return"Invalid JSON format: "+ee.message}return e(l).includes("{text}")?null:"Arguments must contain '{text}' placeholder."}),T=ce(()=>{if(!e(c).trim())return null;try{JSON.parse(e(c))}catch(ee){return"Invalid JSON format: "+ee.message}return e(c).includes("{text}")?null:"JSON template must contain '{text}' placeholder."}),D=ce(()=>{if(!e(u).trim())return null;try{JSON.parse(e(u))}catch(ee){return"Invalid JSON format: "+ee.message}return e(u).includes("{text}")?null:"JSON template must contain '{text}' placeholder."}),se=ce(()=>{if(!t()||t().delivery!=="chat")return null;const ee=(t().chat_url||"").trim();return ee?/^https?:\/\//i.test(ee)?null:"URL must start with http:// or https://":"A server base URL is required."}),ne=ce(()=>!t()||t().delivery!=="chat"||(t().chat_model||"").trim()?null:"A model name is required.");async function fe(){if(t()){o(f,!0);try{const ee=await E("test_chat_target",{target:t()});o(v,ee.models,!0),o(h,ee.message,!0),o(b,ee.success,!0),ee.success&&!t().chat_model&&ee.models.length>0&&t(t().chat_model=ee.models[0],!0)}catch(ee){o(v,[],!0),o(h,String(ee),!0),o(b,!1)}finally{o(f,!1)}}}async function Q(){if(t())try{const ee=await E("reset_chat_conversation",{targetId:t().id});o(h,`Conversation cleared (${ee} message(s) discarded).`),o(b,!0)}catch(ee){o(h,String(ee),!0),o(b,!1)}}qt(()=>{var ee,j,V,oe,R;t()&&(t().processing||t(t().processing={},!0),t().file_mode||t(t().file_mode="append",!0),t().file_timestamp_format||t(t().file_timestamp_format=m,!0),t((j=(ee=t()).chat_max_history)!=null?j:ee.chat_max_history=20,!0),t((oe=(V=t()).chat_timeout_secs)!=null?oe:V.chat_timeout_secs=120,!0),t((R=t()).chat_reply_mode||(R.chat_reply_mode="speak"),!0),o(l,t().mcp_args?JSON.stringify(t().mcp_args,null,2):`{ + easy to say and easy for speech recognition to catch.

                `);function Bo(s,a){Tt(a,!0);let t=Ct(a,"editingTarget",15),r=Ct(a,"isNested",3,!1),l=S(""),c=S(""),u=S(""),v=S(yt([])),f=S(!1),h=S(""),b=S(!1);const m="%Y-%m-%dT%H:%M:%SZ";let _=S(""),x=S(null);pa(()=>{var V,oe;const ee=(oe=(V=t())==null?void 0:V.file_timestamp_format)!=null?oe:"";if(!t()||t().delivery!=="file"||!t().file_timestamp){o(x,null),o(_,"");return}let j=!1;return E("preview_timestamp_format",{format:ee}).then(R=>{j||(o(_,R,!0),o(x,null))}).catch(R=>{j||(o(_,""),o(x,`${R}`))}),()=>{j=!0}});let A=ce(()=>!t()||t().delivery!=="exec"||(t().command||"").includes("{text}")?null:"Command must contain '{text}' placeholder."),q=ce(()=>{if(!e(l).trim())return null;try{JSON.parse(e(l))}catch(ee){return"Invalid JSON format: "+ee.message}return e(l).includes("{text}")?null:"Arguments must contain '{text}' placeholder."}),T=ce(()=>{if(!e(c).trim())return null;try{JSON.parse(e(c))}catch(ee){return"Invalid JSON format: "+ee.message}return e(c).includes("{text}")?null:"JSON template must contain '{text}' placeholder."}),D=ce(()=>{if(!e(u).trim())return null;try{JSON.parse(e(u))}catch(ee){return"Invalid JSON format: "+ee.message}return e(u).includes("{text}")?null:"JSON template must contain '{text}' placeholder."}),se=ce(()=>{if(!t()||t().delivery!=="chat")return null;const ee=(t().chat_url||"").trim();return ee?/^https?:\/\//i.test(ee)?null:"URL must start with http:// or https://":"A server base URL is required."}),ne=ce(()=>!t()||t().delivery!=="chat"||(t().chat_model||"").trim()?null:"A model name is required.");async function fe(){if(t()){o(f,!0);try{const ee=await E("test_chat_target",{target:t()});o(v,ee.models,!0),o(h,ee.message,!0),o(b,ee.success,!0),ee.success&&!t().chat_model&&ee.models.length>0&&t(t().chat_model=ee.models[0],!0)}catch(ee){o(v,[],!0),o(h,String(ee),!0),o(b,!1)}finally{o(f,!1)}}}async function Q(){if(t())try{const ee=await E("reset_chat_conversation",{targetId:t().id});o(h,`Conversation cleared (${ee} message(s) discarded).`),o(b,!0)}catch(ee){o(h,String(ee),!0),o(b,!1)}}qt(()=>{var ee,j,V,oe,R;t()&&(t().processing||t(t().processing={},!0),t().file_mode||t(t().file_mode="append",!0),t().file_timestamp_format||t(t().file_timestamp_format=m,!0),t((j=(ee=t()).chat_max_history)!=null?j:ee.chat_max_history=20,!0),t((oe=(V=t()).chat_timeout_secs)!=null?oe:V.chat_timeout_secs=120,!0),t((R=t()).chat_reply_mode||(R.chat_reply_mode="speak"),!0),o(l,t().mcp_args?JSON.stringify(t().mcp_args,null,2):`{ "text": "{text}" }`,!0),o(c,t().http_json_template?JSON.stringify(t().http_json_template,null,2):`{ "text": "{text}" @@ -38,14 +38,14 @@ var $o=Object.defineProperty;var vl=s=>{throw TypeError(s)};var Go=(s,a,t)=>a in "text": "{text}" }`,!0))});function z(){if(t()){if(t().id.trim()===""){alert("Target ID cannot be empty.");return}if(t().delivery==="file"&&t().file_timestamp&&e(x)){alert("Validation Error: "+e(x));return}if(t().delivery==="exec"&&e(A)){alert("Validation Error: "+e(A));return}if(t().delivery==="mcp"){if(e(q)){alert("Validation Error: "+e(q));return}try{t(t().mcp_args=JSON.parse(e(l)),!0)}catch{alert("Invalid JSON format in MCP Custom Tool Arguments.");return}}if(t().delivery==="http"){if(e(T)){alert("Validation Error: "+e(T));return}try{t(t().http_json_template=JSON.parse(e(c)),!0)}catch{alert("Invalid JSON format in HTTP Custom Post Body.");return}}if(t().delivery==="webhook"){if(e(D)){alert("Validation Error: "+e(D));return}try{t(t().webhook_json_template=JSON.parse(e(u)),!0)}catch{alert("Invalid JSON format in Webhook Custom Post Body.");return}}if(t().delivery==="chat"){const ee=e(se)||e(ne);if(ee){alert("Validation Error: "+ee);return}t(t().chat_max_history=Number(t().chat_max_history)||0,!0),t(t().chat_timeout_secs=Number(t().chat_timeout_secs)||120,!0)}a.onSave()}}var I=xi(),L=ht(I);{var ge=ee=>{var j=mu(),V=n(j),oe=n(V),R=n(oe),B=n(R),be=i(R,2),Pe=i(oe,2),ue=n(Pe);{var K=ye=>{var Ie=Hv(),Ye=i(n(Ie),2);w(()=>Ye.disabled=!a.isNew),We(Ye,()=>t().id,Ze=>t(t().id=Ze,!0)),d(ye,Ie)};k(ue,ye=>{r()||ye(K)})}var J=i(ue,2),Se=i(n(J),2),De=i(J,2),le=i(n(De)),W=n(le),ae=i(le,2),O=n(ae),X=i(De,2),ve=i(n(X),2);sa(ve,{options:[{value:"command",label:"Voice Command Router (Hey Vox / Vox Control keyword)"},{value:"inject",label:"Inject Text Directly (Simulate keyboard)"},{value:"clipboard",label:"Save to Clipboard"},{value:"exec",label:"Execute Command"},{value:"file",label:"Write to File"},{value:"pipe",label:"FIFO Named Pipe"},{value:"socket",label:"TCP / Unix Socket"},{value:"dbus",label:"DBus Signal"},{value:"http",label:"HTTP Custom Client"},{value:"webhook",label:"Send Webhook Event"},{value:"mcp",label:"Call MCP Server Tool"},{value:"speak",label:"Speak Text Aloud (TTS)"},{value:"chat",label:"Chat with a Local LLM (Hermes / OpenAI-compatible)"}],get value(){return t().delivery},set value(ye){t(t().delivery=ye,!0)}});var Ae=i(X,2);{var Fe=ye=>{var Ie=Wv();d(ye,Ie)};k(Ae,ye=>{t().delivery==="command"&&ye(Fe)})}var he=i(Ae,2);{var re=ye=>{var Ie=Gv(),Ye=i(n(Ie),2),Ze=i(n(Ye),2);mt(Ze,"placeholder","e.g. xdg-open {text}");var Ve=i(Ze,2),at=i(n(Ve));at.textContent="{text}";var et=i(Ve,2);{var rt=Ee=>{var Ge=$v(),ct=n(Ge);w(()=>{var vt;return y(ct,`⚠️ ${(vt=e(A))!=null?vt:""}`)}),d(Ee,Ge)};k(et,Ee=>{e(A)&&Ee(rt)})}w(()=>Te(Ze,1,`full-width-input ${e(A)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""}`,"svelte-oc07pw")),We(Ze,()=>t().command,Ee=>t(t().command=Ee,!0)),d(ye,Ie)};k(he,ye=>{t().delivery==="exec"&&ye(re)})}var we=i(he,2);{var Je=ye=>{var Ie=Zv(),Ye=i(n(Ie),2),Ze=i(n(Ye),2),Ve=i(Ye,2),at=i(n(Ve),2);sa(at,{options:[{value:"append",label:"Append (Add to end of file)"},{value:"prepend",label:"Prepend (Add to beginning of file)"}],get value(){return t().file_mode},set value(nt){t(t().file_mode=nt,!0)}});var et=i(Ve,2),rt=i(n(et),2),Ee=i(et,2),Ge=n(Ee),ct=i(Ee,2);{var vt=nt=>{var wt=Xv(),dt=ht(wt),Et=i(n(dt),2);mt(Et,"placeholder",m);var Kt=i(dt,2),ia=i(n(Kt),25);ia.textContent="%Y-%m-%dT%H:%M:%SZ";var ra=i(Kt,2);{var bt=Lt=>{var Ht=Yv(),ta=n(Ht);w(()=>{var Oe;return y(ta,`⚠️ ${(Oe=e(x))!=null?Oe:""}`)}),d(Lt,Ht)},ea=Lt=>{var Ht=Jv(),ta=i(n(Ht)),Oe=n(ta);w(()=>{var qe;return y(Oe,`[${(qe=e(_))!=null?qe:""}]`)}),d(Lt,Ht)};k(ra,Lt=>{e(x)?Lt(bt):e(_)&&Lt(ea,1)})}w(()=>Te(Et,1,Ia(e(x)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""))),We(Et,()=>t().file_timestamp_format,Lt=>t(t().file_timestamp_format=Lt,!0)),d(nt,wt)};k(ct,nt=>{t().file_timestamp&&nt(vt)})}We(Ze,()=>t().file_path,nt=>t(t().file_path=nt,!0)),We(rt,()=>t().file_prefix,nt=>t(t().file_prefix=nt,!0)),Xt(Ge,()=>t().file_timestamp,nt=>t(t().file_timestamp=nt,!0)),d(ye,Ie)};k(we,ye=>{t().delivery==="file"&&ye(Je)})}var de=i(we,2);{var $=ye=>{var Ie=Qv(),Ye=i(n(Ie),2),Ze=i(n(Ye),2),Ve=i(Ye,2),at=i(n(Ve),2),et=i(Ve,2),rt=i(n(et),2);We(Ze,()=>t().socket_host,Ee=>t(t().socket_host=Ee,!0)),We(at,()=>t().socket_port,Ee=>t(t().socket_port=Ee,!0)),We(rt,()=>t().socket_unix,Ee=>t(t().socket_unix=Ee,!0)),d(ye,Ie)};k(de,ye=>{t().delivery==="socket"&&ye($)})}var U=i(de,2);{var te=ye=>{var Ie=eu(),Ye=i(n(Ie),2),Ze=i(n(Ye),2),Ve=i(Ye,2),at=i(n(Ve),2);We(Ze,()=>t().pipe_path,et=>t(t().pipe_path=et,!0)),We(at,()=>t().response_pipe,et=>t(t().response_pipe=et,!0)),d(ye,Ie)};k(U,ye=>{t().delivery==="pipe"&&ye(te)})}var Y=i(U,2);{var _e=ye=>{var Ie=tu(),Ye=i(n(Ie),2),Ze=i(n(Ye),2);We(Ze,()=>t().dbus_signal,Ve=>t(t().dbus_signal=Ve,!0)),d(ye,Ie)};k(Y,ye=>{t().delivery==="dbus"&&ye(_e)})}var me=i(Y,2);{var pe=ye=>{var Ie=ou(),Ye=i(n(Ie),2),Ze=i(n(Ye),2);{var Ve=Ge=>{var ct=au();We(ct,()=>t().http_url,vt=>t(t().http_url=vt,!0)),d(Ge,ct)},at=Ge=>{var ct=su();We(ct,()=>t().webhook_url,vt=>t(t().webhook_url=vt,!0)),d(Ge,ct)};k(Ze,Ge=>{t().delivery==="http"?Ge(Ve):Ge(at,-1)})}var et=i(Ye,2);{var rt=Ge=>{var ct=iu(),vt=ht(ct),nt=i(n(vt),2);sa(nt,{options:[{value:"POST",label:"POST"},{value:"GET",label:"GET"},{value:"PUT",label:"PUT"}],get value(){return t().http_method},set value(bt){t(t().http_method=bt,!0)}});var wt=i(vt,2),dt=i(n(wt),2);mt(dt,"placeholder",'{"text": "{text}"}'),Ms(()=>We(dt,()=>e(c),bt=>o(c,bt))),Fs(dt,bt=>ua==null?void 0:ua(bt));var Et=i(dt,2),Kt=i(n(Et));Kt.textContent="{text}";var ia=i(Et,2);{var ra=bt=>{var ea=nu(),Lt=n(ea);w(()=>{var Ht;return y(Lt,`⚠️ ${(Ht=e(T))!=null?Ht:""}`)}),d(bt,ea)};k(ia,bt=>{e(T)&&bt(ra)})}w(()=>Te(dt,1,Ia(e(T)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""),"svelte-oc07pw")),d(Ge,ct)},Ee=Ge=>{var ct=lu(),vt=ht(ct),nt=i(n(vt),2),wt=i(vt,2),dt=i(n(wt),2);mt(dt,"placeholder",'{"text": "{text}"}'),Ms(()=>We(dt,()=>e(u),bt=>o(u,bt))),Fs(dt,bt=>ua==null?void 0:ua(bt));var Et=i(dt,2),Kt=i(n(Et));Kt.textContent="{text}";var ia=i(Et,2);{var ra=bt=>{var ea=ru(),Lt=n(ea);w(()=>{var Ht;return y(Lt,`⚠️ ${(Ht=e(D))!=null?Ht:""}`)}),d(bt,ea)};k(ia,bt=>{e(D)&&bt(ra)})}w(()=>Te(dt,1,Ia(e(D)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""),"svelte-oc07pw")),We(nt,()=>t().webhook_secret,bt=>t(t().webhook_secret=bt,!0)),d(Ge,ct)};k(et,Ge=>{t().delivery==="http"?Ge(rt):Ge(Ee,-1)})}d(ye,Ie)};k(me,ye=>{(t().delivery==="http"||t().delivery==="webhook")&&ye(pe)})}var ze=i(me,2);{var $e=ye=>{var Ie=du(),Ye=i(n(Ie),2),Ze=i(n(Ye),2),Ve=i(Ye,2),at=i(n(Ve),2),et=i(Ve,2),rt=i(n(et),2);mt(rt,"placeholder",'{"text": "{text}"}'),Ms(()=>We(rt,()=>e(l),nt=>o(l,nt))),Fs(rt,nt=>ua==null?void 0:ua(nt));var Ee=i(rt,2),Ge=i(n(Ee));Ge.textContent="{text}";var ct=i(Ee,2);{var vt=nt=>{var wt=cu(),dt=n(wt);w(()=>{var Et;return y(dt,`⚠️ ${(Et=e(q))!=null?Et:""}`)}),d(nt,wt)};k(ct,nt=>{e(q)&&nt(vt)})}w(()=>Te(rt,1,Ia(e(q)?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":""),"svelte-oc07pw")),We(Ze,()=>t().mcp_path,nt=>t(t().mcp_path=nt,!0)),We(at,()=>t().mcp_tool,nt=>t(t().mcp_tool=nt,!0)),d(ye,Ie)};k(ze,ye=>{t().delivery==="mcp"&&ye($e)})}var st=i(ze,2);{var it=ye=>{var Ie=hu(),Ye=i(n(Ie),4),Ze=i(n(Ye),2),Ve=i(Ze,4);{var at=ie=>{var xe=vu(),Ce=n(xe);w(()=>{var He;return y(Ce,`⚠️ ${(He=e(se))!=null?He:""}`)}),d(ie,xe)};k(Ve,ie=>{e(se)&&ie(at)})}var et=i(Ye,2),rt=n(et),Ee=i(n(rt),2),Ge=n(Ee),ct=i(rt,2);{var vt=ie=>{{let xe=ce(()=>e(v).map(Ce=>({value:Ce,label:Ce})));sa(ie,{get options(){return e(xe)},get value(){return t().chat_model},set value(Ce){t(t().chat_model=Ce,!0)}})}},nt=ie=>{var xe=uu();w(()=>Te(xe,1,`full-width-input ${e(ne)?"border-red-500! ring-2! ring-red-500/20!":""}`,"svelte-oc07pw")),We(xe,()=>t().chat_model,Ce=>t(t().chat_model=Ce,!0)),d(ie,xe)};k(ct,ie=>{e(v).length>0?ie(vt):ie(nt,-1)})}var wt=i(ct,4);{var dt=ie=>{var xe=pu(),Ce=n(xe);w(()=>{var He;return y(Ce,`⚠️ ${(He=e(ne))!=null?He:""}`)}),d(ie,xe)};k(wt,ie=>{e(ne)&&ie(dt)})}var Et=i(wt,2);{var Kt=ie=>{var xe=fu(),Ce=n(xe);w(()=>{Te(xe,1,`chat-status ${e(b)?"ok":"bad"}`,"svelte-oc07pw"),y(Ce,e(h))}),d(ie,xe)};k(Et,ie=>{e(h)&&ie(Kt)})}var ia=i(et,2),ra=i(n(ia),2),bt=i(ia,2),ea=i(n(bt),2);Ms(()=>We(ea,()=>t().chat_system_prompt,ie=>t(t().chat_system_prompt=ie,!0))),Fs(ea,ie=>ua==null?void 0:ua(ie));var Lt=i(bt,2),Ht=i(n(Lt),2);sa(Ht,{options:[{value:"speak",label:"Speak the reply aloud (TTS)"},{value:"inject",label:"Type the reply into the focused window"},{value:"clipboard",label:"Copy the reply to the clipboard"},{value:"none",label:"Discard the reply (fire and forget)"}],get value(){return t().chat_reply_mode},set value(ie){t(t().chat_reply_mode=ie,!0)}});var ta=i(Lt,2),Oe=i(n(ta),2),qe=i(ta,2),G=i(n(qe),2),g=i(qe,2),P=i(n(g),2),Me=i(g,2);{var Ue=ie=>{var xe=_u(),Ce=n(xe),He=n(Ce);N("click",He,Q),d(ie,xe)};k(Me,ie=>{a.isNew||ie(Ue)})}w(()=>{Te(Ze,1,`full-width-input ${e(se)?"border-red-500! ring-2! ring-red-500/20!":""}`,"svelte-oc07pw"),Ee.disabled=e(f),y(Ge,e(f)?"Connecting…":"Test & fetch models")}),We(Ze,()=>t().chat_url,ie=>t(t().chat_url=ie,!0)),N("click",Ee,fe),We(ra,()=>t().chat_api_key,ie=>t(t().chat_api_key=ie,!0)),We(Oe,()=>t().chat_max_history,ie=>t(t().chat_max_history=ie,!0)),We(G,()=>t().chat_timeout_secs,ie=>t(t().chat_timeout_secs=ie,!0)),We(P,()=>t().chat_reset_phrase,ie=>t(t().chat_reset_phrase=ie,!0)),d(ye,Ie)};k(st,ye=>{t().delivery==="chat"&&ye(it)})}var H=i(st,2);{var M=ye=>{var Ie=gu(),Ye=i(n(Ie),2),Ze=n(Ye);Xt(Ze,()=>t().strip_newlines,Ve=>t(t().strip_newlines=Ve,!0)),d(ye,Ie)};k(H,ye=>{(t().delivery==="inject"||t().delivery==="command")&&ye(M)})}var C=i(Pe,2),ke=n(C),Ke=i(ke,2);w(()=>{Te(j,1,`modal-backdrop ${r()?"target-modal-backdrop":""}`,"svelte-oc07pw"),y(B,a.isNew?"Create Target":"Edit Target"),y(W,t().label||"Obsidian Notes"),y(O,t().label||"Obsidian Notes")}),N("click",be,function(...ye){var Ie;(Ie=a.onCancel)==null||Ie.apply(this,ye)}),We(Se,()=>t().label,ye=>t(t().label=ye,!0)),N("click",ke,function(...ye){var Ie;(Ie=a.onCancel)==null||Ie.apply(this,ye)}),N("click",Ke,z),d(ee,j)};k(L,ee=>{t()&&ee(ge)})}d(s,I),St()}Qt(["click"]);var bu=p(`Your desktop decides which keys VoxCtrl may claim, and may ask you to confirm them. If a shortcut below shows different keys than you chose, that is your desktop's - choice and it wins.`),yu=p(''),wu=p('
                '),ku=p(' '),xu=p(''),Tu=p('
                '),Su=p(" ",1);function Eu(s,a){Tt(a,!0);let t=S(!1),r=S(!1),l=S(!1),c=S(null);async function u(){var _;o(l,!0),o(c,null);try{await E("open_shortcut_settings")}catch(x){o(c,(_=x==null?void 0:x.toString())!=null?_:"Could not open shortcut settings.",!0)}finally{o(l,!1)}}var v=Su(),f=ht(v);{var h=_=>{var x=wu();let A;var q=n(x),T=n(q),D=n(T),se=i(T,2),ne=n(se);{var fe=oe=>{var R=Be("Your desktop is handling these shortcuts");d(oe,R)},Q=oe=>{var R=Be("Reading keystrokes with a keyboard hook");d(oe,R)},z=oe=>{var R=Be("Reading input devices directly");d(oe,R)},I=oe=>{var R=Be("Starting up…");d(oe,R)},L=oe=>{var R=Be("Global shortcuts are not available");d(oe,R)};k(ne,oe=>{a.status.backend==="portal"?oe(fe):a.status.backend==="windows_hook"?oe(Q,1):a.status.backend==="evdev"?oe(z,2):a.status.backend==="starting"?oe(I,3):oe(L,-1)})}var ge=i(se,2);let ee;var j=i(q,2);{var V=oe=>{var R=yu(),B=n(R),be=n(B),Pe=i(B,2);{var ue=K=>{var J=bu();d(K,J)};k(Pe,K=>{a.status.backend==="portal"&&K(ue)})}w(()=>y(be,a.status.detail)),d(oe,R)};k(j,oe=>{e(t)&&oe(V)})}w(()=>{A=Te(x,1,"backend-banner svelte-1hl6idm",null,A,{private:a.status.is_private,warn:!a.status.is_private&&a.status.is_active,broken:!a.status.is_active}),mt(q,"aria-expanded",e(t)),y(D,a.status.is_private?"🔒":a.status.is_active?"⚠️":"⛔"),ee=Te(ge,0,"banner-chevron svelte-1hl6idm",null,ee,{expanded:e(t)})}),N("click",q,()=>o(t,!e(t))),d(_,x)};k(f,_=>{a.status&&_(h)})}var b=i(f,2);{var m=_=>{var x=Tu(),A=n(x),q=i(n(A),4);let T;var D=i(A,2);{var se=ne=>{var fe=xu(),Q=n(fe),z=n(Q),I=i(Q,2),L=n(I),ge=n(L),ee=i(I,2);{var j=V=>{var oe=ku(),R=n(oe);w(()=>y(R,e(c))),d(V,oe)};k(ee,V=>{e(c)&&V(j)})}w(()=>{y(z,a.status.manual_enable_hint),L.disabled=e(l),y(ge,e(l)?"Opening…":"Open Shortcut Settings")}),N("click",L,u),d(ne,fe)};k(D,ne=>{e(r)&&ne(se)})}w(()=>{mt(A,"aria-expanded",e(r)),T=Te(q,0,"banner-chevron svelte-1hl6idm",null,T,{expanded:e(r)})}),N("click",A,()=>o(r,!e(r))),d(_,x)};k(b,_=>{var x;(x=a.status)!=null&&x.needs_manual_enable&&_(m)})}d(s,v),St()}Qt(["click"]);function qo(){return{id:"new_target_"+Math.random().toString(36).substring(2,6),label:"New Target",delivery:"inject",file_prefix:"- ",file_timestamp:!0,file_timestamp_format:"%Y-%m-%dT%H:%M:%SZ",file_mode:"append",http_method:"POST",http_json_template:{text:"{text}"},webhook_json_template:{text:"{text}"},mcp_tool:"speak_text",mcp_args:{text:"{text}"},chat_max_history:20,chat_timeout_secs:120,chat_reply_mode:"speak",strip_newlines:!1,processing:{}}}const Cl={hold:"Hold keys to dictate (Release to transcribe)",toggle:"Tap once to start recording, tap again to finish",double_tap:"Double-tap hotkey to trigger recording",double_tap_hold:"Double-tap & hold keys to dictate (Release to transcribe)"},mr=["hold","toggle","double_tap","double_tap_hold"];function Gs(s,a){const t=[...s].sort().join(",");return`${a}:${t}`}function Al(s,a){return[...s].sort().join(",")===[...a].sort().join(",")}function Ml(s,a=!1){const t=new Map;for(const r of s){if(a&&r.disabled||!r.keys||r.keys.length===0)continue;const l=Gs(r.keys,r.gesture);t.set(l,(t.get(l)||0)+1)}return new Set([...t].filter(([,r])=>r>1).map(([r])=>r))}function Cu(s,a){const t=a.find(r=>r.id===s);return t?t.label:s==="default"?"Focused Window":s}function Au(s,a){return(s.target_ids&&s.target_ids.length>0?s.target_ids:[s.target_id]).map(r=>Cu(r,a)).join(", ")}function Mu(s,a){const t=a.find(r=>r.id===s);return t?`${t.label} (${t.delivery})`:s==="default"?"Focused Window":s}const Pu={ControlLeft:"KEY_LEFTCTRL",ControlRight:"KEY_RIGHTCTRL",AltLeft:"KEY_LEFTALT",AltRight:"KEY_RIGHTALT",ShiftLeft:"KEY_LEFTSHIFT",ShiftRight:"KEY_RIGHTSHIFT",MetaLeft:"KEY_LEFTMETA",MetaRight:"KEY_RIGHTMETA",OSLeft:"KEY_LEFTMETA",OSRight:"KEY_RIGHTMETA",Minus:"KEY_MINUS",Equal:"KEY_EQUAL",BracketLeft:"KEY_LEFTBRACE",BracketRight:"KEY_RIGHTBRACE",Backslash:"KEY_BACKSLASH",Semicolon:"KEY_SEMICOLON",Quote:"KEY_APOSTROPHE",Backquote:"KEY_GRAVE",Comma:"KEY_COMMA",Period:"KEY_DOT",Slash:"KEY_SLASH",IntlBackslash:"KEY_102ND",Numpad0:"KEY_KP0",Numpad1:"KEY_KP1",Numpad2:"KEY_KP2",Numpad3:"KEY_KP3",Numpad4:"KEY_KP4",Numpad5:"KEY_KP5",Numpad6:"KEY_KP6",Numpad7:"KEY_KP7",Numpad8:"KEY_KP8",Numpad9:"KEY_KP9",NumpadAdd:"KEY_KPPLUS",NumpadSubtract:"KEY_KPMINUS",NumpadMultiply:"KEY_KPASTERISK",NumpadDivide:"KEY_KPSLASH",NumpadDecimal:"KEY_KPDOT",NumpadEnter:"KEY_KPENTER",NumpadEqual:"KEY_KPEQUAL"};function il(s,a){const t=Pu[a];if(t)return t;const r=a.toUpperCase();return s==="Control"?"KEY_LEFTCTRL":s==="Alt"?"KEY_LEFTALT":s==="Shift"?"KEY_LEFTSHIFT":s==="Meta"||s==="OS"||s==="Super"?"KEY_LEFTMETA":r==="SPACE"?"KEY_SPACE":r==="ENTER"?"KEY_ENTER":r==="ESCAPE"||r==="ESC"?"KEY_ESC":r==="TAB"?"KEY_TAB":r==="BACKSPACE"?"KEY_BACKSPACE":r==="DELETE"?"KEY_DELETE":/^KEY[A-Z]$/.test(r)?`KEY_${r.slice(3)}`:r.startsWith("KEY")?r:r.startsWith("DIGIT")?`KEY_${r.replace("DIGIT","")}`:r.startsWith("ARROW")?`KEY_${r.replace("ARROW","")}`:r.startsWith("F")&&r.length>1?`KEY_${r}`:s.length===1?`KEY_${s.toUpperCase()}`:`KEY_${r}`}const Du=new Set(["KEY_LEFTCTRL","KEY_RIGHTCTRL","KEY_LEFTALT","KEY_RIGHTALT","KEY_LEFTSHIFT","KEY_RIGHTSHIFT","KEY_LEFTMETA","KEY_RIGHTMETA"]);function Vr(s){return s.length>0&&s.every(a=>Du.has(a))}var zu=p('
                ⚠️ Conflict detected: Some key bindings share the same key combination and gesture type. Disabling one of the conflicting binds will fix the problem.
                '),Iu=p('CONFLICT'),Ou=p('LLM'),Lu=p('S1-mini'),Ru=p(' '),Nu=p('needs a regular key'),Vu=p('not bound by your desktop'),Fu=p(' '),Bu=p('Delete? ',1),qu=p(''),ju=p('
                '),Uu=p('
                ⌨

                No keyboard bindings defined. Create a binding to link a physical hotkey to a routing target!

                '),Ku=p(''),Hu=p('
                ',1),Wu=p(''),$u=p('
                '),Gu=p(' '),Yu=p(`⚠️ This binding uses a gesture this system cannot deliver, so it will not fire. + choice and it wins.`),yu=p(''),wu=p('
                '),ku=p(' '),xu=p(''),Tu=p('
                '),Su=p(" ",1);function Eu(s,a){Tt(a,!0);let t=S(!1),r=S(!1),l=S(!1),c=S(null);async function u(){var _;o(l,!0),o(c,null);try{await E("open_shortcut_settings")}catch(x){o(c,(_=x==null?void 0:x.toString())!=null?_:"Could not open shortcut settings.",!0)}finally{o(l,!1)}}var v=Su(),f=ht(v);{var h=_=>{var x=wu();let A;var q=n(x),T=n(q),D=n(T),se=i(T,2),ne=n(se);{var fe=oe=>{var R=Be("Your desktop is handling these shortcuts");d(oe,R)},Q=oe=>{var R=Be("Reading keystrokes with a keyboard hook");d(oe,R)},z=oe=>{var R=Be("Reading input devices directly");d(oe,R)},I=oe=>{var R=Be("Starting up…");d(oe,R)},L=oe=>{var R=Be("Global shortcuts are not available");d(oe,R)};k(ne,oe=>{a.status.backend==="portal"?oe(fe):a.status.backend==="windows_hook"?oe(Q,1):a.status.backend==="evdev"?oe(z,2):a.status.backend==="starting"?oe(I,3):oe(L,-1)})}var ge=i(se,2);let ee;var j=i(q,2);{var V=oe=>{var R=yu(),B=n(R),be=n(B),Pe=i(B,2);{var ue=K=>{var J=bu();d(K,J)};k(Pe,K=>{a.status.backend==="portal"&&K(ue)})}w(()=>y(be,a.status.detail)),d(oe,R)};k(j,oe=>{e(t)&&oe(V)})}w(()=>{A=Te(x,1,"backend-banner svelte-1hl6idm",null,A,{private:a.status.is_private,warn:!a.status.is_private&&a.status.is_active,broken:!a.status.is_active}),mt(q,"aria-expanded",e(t)),y(D,a.status.is_private?"🔒":a.status.is_active?"⚠️":"⛔"),ee=Te(ge,0,"banner-chevron svelte-1hl6idm",null,ee,{expanded:e(t)})}),N("click",q,()=>o(t,!e(t))),d(_,x)};k(f,_=>{a.status&&_(h)})}var b=i(f,2);{var m=_=>{var x=Tu(),A=n(x),q=i(n(A),4);let T;var D=i(A,2);{var se=ne=>{var fe=xu(),Q=n(fe),z=n(Q),I=i(Q,2),L=n(I),ge=n(L),ee=i(I,2);{var j=V=>{var oe=ku(),R=n(oe);w(()=>y(R,e(c))),d(V,oe)};k(ee,V=>{e(c)&&V(j)})}w(()=>{y(z,a.status.manual_enable_hint),L.disabled=e(l),y(ge,e(l)?"Opening…":"Open Shortcut Settings")}),N("click",L,u),d(ne,fe)};k(D,ne=>{e(r)&&ne(se)})}w(()=>{mt(A,"aria-expanded",e(r)),T=Te(q,0,"banner-chevron svelte-1hl6idm",null,T,{expanded:e(r)})}),N("click",A,()=>o(r,!e(r))),d(_,x)};k(b,_=>{var x;(x=a.status)!=null&&x.needs_manual_enable&&_(m)})}d(s,v),St()}Qt(["click"]);function qo(){return{id:"new_target_"+Math.random().toString(36).substring(2,6),label:"New Target",delivery:"inject",file_prefix:"- ",file_timestamp:!0,file_timestamp_format:"%Y-%m-%dT%H:%M:%SZ",file_mode:"append",http_method:"POST",http_json_template:{text:"{text}"},webhook_json_template:{text:"{text}"},mcp_tool:"speak_text",mcp_args:{text:"{text}"},chat_max_history:20,chat_timeout_secs:120,chat_reply_mode:"speak",strip_newlines:!1,processing:{}}}const Cl={hold:"Hold keys to dictate (Release to transcribe)",toggle:"Tap once to start recording, tap again to finish",double_tap:"Double-tap hotkey to trigger recording",double_tap_hold:"Double-tap & hold keys to dictate (Release to transcribe)"},mr=["hold","toggle","double_tap","double_tap_hold"];function Gs(s,a){const t=[...s].sort().join(",");return`${a}:${t}`}function Al(s,a){return[...s].sort().join(",")===[...a].sort().join(",")}function Ml(s,a=!1){const t=new Map;for(const r of s){if(a&&r.disabled||!r.keys||r.keys.length===0)continue;const l=Gs(r.keys,r.gesture);t.set(l,(t.get(l)||0)+1)}return new Set([...t].filter(([,r])=>r>1).map(([r])=>r))}function Cu(s,a){const t=a.find(r=>r.id===s);return t?t.label:s==="default"?"Focused Window":s}function Au(s,a){return(s.target_ids&&s.target_ids.length>0?s.target_ids:[s.target_id]).map(r=>Cu(r,a)).join(", ")}function Mu(s,a){const t=a.find(r=>r.id===s);return t?`${t.label} (${t.delivery})`:s==="default"?"Focused Window":s}const Pu={ControlLeft:"KEY_LEFTCTRL",ControlRight:"KEY_RIGHTCTRL",AltLeft:"KEY_LEFTALT",AltRight:"KEY_RIGHTALT",ShiftLeft:"KEY_LEFTSHIFT",ShiftRight:"KEY_RIGHTSHIFT",MetaLeft:"KEY_LEFTMETA",MetaRight:"KEY_RIGHTMETA",OSLeft:"KEY_LEFTMETA",OSRight:"KEY_RIGHTMETA",Minus:"KEY_MINUS",Equal:"KEY_EQUAL",BracketLeft:"KEY_LEFTBRACE",BracketRight:"KEY_RIGHTBRACE",Backslash:"KEY_BACKSLASH",Semicolon:"KEY_SEMICOLON",Quote:"KEY_APOSTROPHE",Backquote:"KEY_GRAVE",Comma:"KEY_COMMA",Period:"KEY_DOT",Slash:"KEY_SLASH",IntlBackslash:"KEY_102ND",Numpad0:"KEY_KP0",Numpad1:"KEY_KP1",Numpad2:"KEY_KP2",Numpad3:"KEY_KP3",Numpad4:"KEY_KP4",Numpad5:"KEY_KP5",Numpad6:"KEY_KP6",Numpad7:"KEY_KP7",Numpad8:"KEY_KP8",Numpad9:"KEY_KP9",NumpadAdd:"KEY_KPPLUS",NumpadSubtract:"KEY_KPMINUS",NumpadMultiply:"KEY_KPASTERISK",NumpadDivide:"KEY_KPSLASH",NumpadDecimal:"KEY_KPDOT",NumpadEnter:"KEY_KPENTER",NumpadEqual:"KEY_KPEQUAL"};function il(s,a){const t=Pu[a];if(t)return t;const r=a.toUpperCase();return s==="Control"?"KEY_LEFTCTRL":s==="Alt"?"KEY_LEFTALT":s==="Shift"?"KEY_LEFTSHIFT":s==="Meta"||s==="OS"||s==="Super"?"KEY_LEFTMETA":r==="SPACE"?"KEY_SPACE":r==="ENTER"?"KEY_ENTER":r==="ESCAPE"||r==="ESC"?"KEY_ESC":r==="TAB"?"KEY_TAB":r==="BACKSPACE"?"KEY_BACKSPACE":r==="DELETE"?"KEY_DELETE":/^KEY[A-Z]$/.test(r)?`KEY_${r.slice(3)}`:r.startsWith("KEY")?r:r.startsWith("DIGIT")?`KEY_${r.replace("DIGIT","")}`:r.startsWith("ARROW")?`KEY_${r.replace("ARROW","")}`:r.startsWith("F")&&r.length>1?`KEY_${r}`:s.length===1?`KEY_${s.toUpperCase()}`:`KEY_${r}`}const Du=new Set(["KEY_LEFTCTRL","KEY_RIGHTCTRL","KEY_LEFTALT","KEY_RIGHTALT","KEY_LEFTSHIFT","KEY_RIGHTSHIFT","KEY_LEFTMETA","KEY_RIGHTMETA"]);function Vr(s){return s.length>0&&s.every(a=>Du.has(a))}var zu=p('
                ⚠️ Conflict detected: Some key bindings share the same key combination and gesture type. Disabling one of the conflicting binds will fix the problem.
                '),Iu=p('CONFLICT'),Ou=p('LLM'),Lu=p('S1-mini'),Ru=p(' '),Nu=p('needs a regular key'),Vu=p('not bound by your desktop'),Fu=p(' '),Bu=p('Delete? ',1),qu=p(''),ju=p('
                '),Uu=p('
                ⌨

                No keyboard bindings defined. Create a binding to link a physical hotkey to a routing target!

                '),Ku=p(''),Hu=p('
                ',1),Wu=p(''),$u=p('
                '),Gu=p(' '),Yu=p(`⚠️ This binding uses a gesture this system cannot deliver, so it will not fire. Pick one of the styles above.`),Ju=p(''),Xu=p(``),Zu=p(' '),Qu=p('
                ',1),ep=p(' '),tp=p('
                (Click / Tab here to record)',1),ap=p(''),sp=p(''),np=p('
                ⚠️
                '),ip=p('Your desktop will register this as .'),rp=p('⚠️ Warning: This key combination and gesture type conflicts with another existing binding.'),lp=p('⚠️ Validation Error: Prompt template MUST contain the placeholder.'),op=p('

                Prompt template MUST contain the placeholder. Leave empty to inherit the default user prompt.

                '),cp=p('
                System Prompt Override LLM Prompt

                Overrides the default system prompt configured in Settings → OpenAI API. Leave empty to inherit it.

                User Prompt Template LLM Prompt
                '),dp=p(''),vp=p('

                Hotkey Bindings

                Bind keyboard combinations to your output targets. Each hotkey supports customizable triggers (double-taps, holding keys, etc.)

                ',1);function up(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",r),[r,l]=Ea();let c=S(yt([])),u=S(yt([])),v=S(null),f=S(!1),h=S(null),b=S(null),m=S(null),_=S(!1),x=S(null),A=S(null),q=S(!1),T=S(!1),D=S(""),se=S("custom"),ne=S(""),fe=S(""),Q=ce(()=>Ml(e(u))),z=ce(()=>Ml(e(u),!0)),I=ce(()=>{if(!e(v)||!e(v).keys||e(v).keys.length===0)return!1;const M=Gs(e(v).keys,e(v).gesture);return e(u).some(C=>C.id!==e(v).id&&Gs(C.keys,C.gesture)===M)}),L=S(null);async function ge(){try{o(L,await E("check_hotkey_status"),!0)}catch(M){console.error("Failed to read hotkey status:",M)}}let ee=ce(()=>{var C,ke;const M=new Map;for(const Ke of(ke=(C=e(L))==null?void 0:C.shortcuts)!=null?ke:[])for(const ye of Ke.binding_ids)M.set(ye,Ke);return M});const j=ce(()=>{var M,C;return(C=(M=e(L))==null?void 0:M.supported_gestures)!=null&&C.length?mr.filter(ke=>e(L).supported_gestures.includes(ke)):mr}),V=ce(()=>mr.length-e(j).length),oe=ce(()=>{var ke,Ke;const M=e(j).map(ye=>({value:ye,label:Cl[ye]})),C=(ke=e(v))==null?void 0:ke.gesture;return C&&!e(j).includes(C)&&M.push({value:C,label:`${(Ke=Cl[C])!=null?Ke:C} — not supported on this system`}),M});qt(async()=>{o(c,await E("get_targets"),!0),o(u,await E("get_bindings"),!0),await ge()});async function R(){try{await E("save_targets",{targets:e(c)}),console.log("Targets auto-saved successfully!")}catch(M){console.error("Failed to save targets:",M)}}async function B(){try{await E("save_bindings",{bindings:e(u)}),console.log("Bindings auto-saved successfully!"),await ge()}catch(M){console.error("Failed to save bindings:",M)}}const be=M=>Au(M,e(c)),Pe=M=>Mu(M,e(c));function ue(){var M,C,ke,Ke;if(e(c).length===0){alert("Please create at least one Output Command before making a hotkey binding.");return}o(f,!0),o(X,null),o(O,[],!0),o(q,(Ke=(ke=(C=(M=t())==null?void 0:M.engine)==null?void 0:C.s1_mini)==null?void 0:ke.enabled)!=null?Ke:!1,!0),o(T,!1),o(D,""),o(se,"custom"),o(ne,""),o(fe,""),o(v,{id:"binding_"+Math.random().toString(36).substring(2,6),label:"New Binding",keys:[],gesture:e(j).includes("hold")?"hold":e(j)[0],target_id:e(c)[0].id,target_ids:[e(c)[0].id],tap_ms:300,hold_threshold_ms:200,disabled:!1,openai_enabled:!1,openai_model:"",openai_mode:"custom",openai_prompt:"",openai_system_prompt:"",s1_mini_enabled:e(q)},!0)}function K(M){var ke,Ke,ye,Ie;o(f,!1),o(X,null),o(O,[...M.keys],!0);const C=JSON.parse(JSON.stringify(M));C.target_ids||(C.target_ids=C.target_id?[C.target_id]:[]),C.s1_mini_enabled!==void 0&&C.s1_mini_enabled!==null?o(q,C.s1_mini_enabled,!0):o(q,(Ie=(ye=(Ke=(ke=t())==null?void 0:ke.engine)==null?void 0:Ke.s1_mini)==null?void 0:ye.enabled)!=null?Ie:!1,!0),o(T,C.openai_enabled===!0),o(D,C.openai_model||"",!0),o(se,C.openai_mode||"custom",!0),o(ne,C.openai_prompt||"",!0),o(fe,C.openai_system_prompt||"",!0),o(v,C,!0)}async function J(M){o(u,e(u).map(C=>C.id===M?{...C,disabled:!C.disabled}:C),!0),await B()}function Se(){if(!e(v))return;e(v).target_ids||(e(v).target_ids=[e(v).target_id]);const M=e(c).find(ke=>!e(v).target_ids.includes(ke.id)),C=M?M.id:e(c)[0].id;e(v).target_ids=[...e(v).target_ids,C]}function De(M){!e(v)||!e(v).target_ids||(e(v).target_ids=e(v).target_ids.filter((C,ke)=>ke!==M))}async function le(){var C;if(!e(v))return;if(e(v).id.trim()===""){alert("Binding ID cannot be empty.");return}if(e(v).keys.length===0){alert("Please capture at least one hotkey before saving.");return}if(!(!e(f)&&Al(e(v).keys,e(O))))try{const ke=await E("check_hotkey_keys",{keys:e(v).keys});if(!ke.accepted){o(X,ke,!0),alert((C=ke.message)!=null?C:"This key combination cannot be used as a shortcut.");return}}catch(ke){console.error("Failed to validate hotkey keys before saving:",ke)}if(e(T)&&e(se)==="custom"&&!e(ne).includes("{text}")){alert(`LLM Configuration Error: + double-taps get missed; lower it if they fire when you did not mean them to.`),Zu=p(' '),Qu=p('
                ',1),ep=p(' '),tp=p('
                (Click / Tab here to record)',1),ap=p(''),sp=p(''),np=p('
                ⚠️
                '),ip=p('Your desktop will register this as .'),rp=p('⚠️ Warning: This key combination and gesture type conflicts with another existing binding.'),lp=p('⚠️ Validation Error: Prompt template MUST contain the placeholder.'),op=p('

                Prompt template MUST contain the placeholder. Leave empty to inherit the default user prompt.

                '),cp=p('
                System Prompt Override LLM Prompt

                Overrides the default system prompt configured in Settings → OpenAI API. Leave empty to inherit it.

                User Prompt Template LLM Prompt
                '),dp=p(''),vp=p('

                Hotkey Bindings

                Bind keyboard combinations to your output targets. Each hotkey supports customizable triggers (double-taps, holding keys, etc.)

                ',1);function up(s,a){Tt(a,!0);const t=()=>Zt(Ot,"$config",r),[r,l]=Ea();let c=S(yt([])),u=S(yt([])),v=S(null),f=S(!1),h=S(null),b=S(null),m=S(null),_=S(!1),x=S(null),A=S(null),q=S(!1),T=S(!1),D=S(""),se=S("custom"),ne=S(""),fe=S(""),Q=ce(()=>Ml(e(u))),z=ce(()=>Ml(e(u),!0)),I=ce(()=>{if(!e(v)||!e(v).keys||e(v).keys.length===0)return!1;const M=Gs(e(v).keys,e(v).gesture);return e(u).some(C=>C.id!==e(v).id&&Gs(C.keys,C.gesture)===M)}),L=S(null);async function ge(){try{o(L,await E("check_hotkey_status"),!0)}catch(M){console.error("Failed to read hotkey status:",M)}}let ee=ce(()=>{var C,ke;const M=new Map;for(const Ke of(ke=(C=e(L))==null?void 0:C.shortcuts)!=null?ke:[])for(const ye of Ke.binding_ids)M.set(ye,Ke);return M});const j=ce(()=>{var M,C;return(C=(M=e(L))==null?void 0:M.supported_gestures)!=null&&C.length?mr.filter(ke=>e(L).supported_gestures.includes(ke)):mr}),V=ce(()=>mr.length-e(j).length),oe=ce(()=>{var ke,Ke;const M=e(j).map(ye=>({value:ye,label:Cl[ye]})),C=(ke=e(v))==null?void 0:ke.gesture;return C&&!e(j).includes(C)&&M.push({value:C,label:`${(Ke=Cl[C])!=null?Ke:C} — not supported on this system`}),M});qt(async()=>{o(c,await E("get_targets"),!0),o(u,await E("get_bindings"),!0),await ge()});async function R(){try{await E("save_targets",{targets:e(c)}),console.log("Targets auto-saved successfully!")}catch(M){console.error("Failed to save targets:",M)}}async function B(){try{await E("save_bindings",{bindings:e(u)}),console.log("Bindings auto-saved successfully!"),await ge()}catch(M){console.error("Failed to save bindings:",M)}}const be=M=>Au(M,e(c)),Pe=M=>Mu(M,e(c));function ue(){var M,C,ke,Ke;if(e(c).length===0){alert("Please create at least one Output Command before making a hotkey binding.");return}o(f,!0),o(X,null),o(O,[],!0),o(q,(Ke=(ke=(C=(M=t())==null?void 0:M.engine)==null?void 0:C.s1_mini)==null?void 0:ke.enabled)!=null?Ke:!1,!0),o(T,!1),o(D,""),o(se,"custom"),o(ne,""),o(fe,""),o(v,{id:"binding_"+Math.random().toString(36).substring(2,6),label:"New Binding",keys:[],gesture:e(j).includes("hold")?"hold":e(j)[0],target_id:e(c)[0].id,target_ids:[e(c)[0].id],tap_ms:300,hold_threshold_ms:200,disabled:!1,openai_enabled:!1,openai_model:"",openai_mode:"custom",openai_prompt:"",openai_system_prompt:"",s1_mini_enabled:e(q)},!0)}function K(M){var ke,Ke,ye,Ie;o(f,!1),o(X,null),o(O,[...M.keys],!0);const C=JSON.parse(JSON.stringify(M));C.target_ids||(C.target_ids=C.target_id?[C.target_id]:[]),C.s1_mini_enabled!==void 0&&C.s1_mini_enabled!==null?o(q,C.s1_mini_enabled,!0):o(q,(Ie=(ye=(Ke=(ke=t())==null?void 0:ke.engine)==null?void 0:Ke.s1_mini)==null?void 0:ye.enabled)!=null?Ie:!1,!0),o(T,C.openai_enabled===!0),o(D,C.openai_model||"",!0),o(se,C.openai_mode||"custom",!0),o(ne,C.openai_prompt||"",!0),o(fe,C.openai_system_prompt||"",!0),o(v,C,!0)}async function J(M){o(u,e(u).map(C=>C.id===M?{...C,disabled:!C.disabled}:C),!0),await B()}function Se(){if(!e(v))return;e(v).target_ids||(e(v).target_ids=[e(v).target_id]);const M=e(c).find(ke=>!e(v).target_ids.includes(ke.id)),C=M?M.id:e(c)[0].id;e(v).target_ids=[...e(v).target_ids,C]}function De(M){!e(v)||!e(v).target_ids||(e(v).target_ids=e(v).target_ids.filter((C,ke)=>ke!==M))}async function le(){var C;if(!e(v))return;if(e(v).id.trim()===""){alert("Binding ID cannot be empty.");return}if(e(v).keys.length===0){alert("Please capture at least one hotkey before saving.");return}if(!(!e(f)&&Al(e(v).keys,e(O))))try{const ke=await E("check_hotkey_keys",{keys:e(v).keys});if(!ke.accepted){o(X,ke,!0),alert((C=ke.message)!=null?C:"This key combination cannot be used as a shortcut.");return}}catch(ke){console.error("Failed to validate hotkey keys before saving:",ke)}if(e(T)&&e(se)==="custom"&&!e(ne).includes("{text}")){alert(`LLM Configuration Error: Your custom prompt template MUST contain the '{text}' placeholder so the model knows where to insert the transcribed text. Example: write a haiku about {text}`);return}if(e(v).openai_enabled=e(T),e(v).openai_model=e(D),e(v).openai_mode=e(se),e(v).openai_prompt=e(ne),e(v).openai_system_prompt=e(fe),e(v).s1_mini_enabled=e(q),e(v).target_ids&&e(v).target_ids.length>0){if(e(v).target_ids=e(v).target_ids.filter(Ke=>Ke.trim()!==""),e(v).target_ids.length===0){alert("Please assign at least one Output Command.");return}if(new Set(e(v).target_ids).size!==e(v).target_ids.length){alert(`Duplicate commands detected. -You cannot assign the same Output Command multiple times to a single keybind.`);return}e(v).target_id=e(v).target_ids[0]}else e(v).target_id="",e(v).target_ids=[];if(e(f)){if(e(u).some(ke=>ke.id===e(v).id)){alert("Binding with this ID already exists.");return}o(u,[...e(u),e(v)],!0)}else o(u,e(u).map(ke=>ke.id===e(v).id?e(v):ke),!0);o(v,null),o(h,null),await B()}async function W(M){o(u,e(u).filter(C=>C.id!==M),!0),await B()}let ae=S(yt([])),O=S(yt([]));pa(()=>{E("set_hotkeys_inhibited",{inhibited:e(h)==="keys"}).catch(M=>console.error("Failed to set hotkeys inhibited:",M))});let X=S(null),ve=ce(()=>e(L)===null||e(L).backend==="portal"||e(L).backend==="starting"),Ae=ce(()=>e(h)!=="keys"||!Vr(e(ae))||!e(ve)?null:"Keep holding and add a regular key — modifiers alone cannot be a shortcut.");async function Fe(M){if(!e(v)||M.length===0)return;if(Al(M,e(O))){o(X,null),e(v).keys=[...M];return}let C;try{C=await E("check_hotkey_keys",{keys:M})}catch(ke){console.error("Failed to validate hotkey keys:",ke),e(v).keys=[...M];return}o(X,C,!0),C.accepted&&e(v)&&(e(v).keys=[...M])}function he(M){if(!e(h)||!e(v))return;M.preventDefault(),M.stopPropagation();const C=il(M.key,M.code);if(e(h)==="keys"&&(e(ae).includes(C)||o(ae,[...e(ae),C],!0),M.key==="Escape")){const ke=[...e(ae)];o(ae,[],!0),o(h,null),Fe(ke)}}function re(M){if(!(!e(h)||!e(v))&&(M.preventDefault(),M.stopPropagation(),e(h)==="keys")){const C=[...e(ae)];o(ae,[],!0),o(h,null),Fe(C)}}function we(){if(e(h)){if(e(h)==="keys"&&e(ae).length>0){const M=[...e(ae)];o(ae,[],!0),Fe(M)}o(h,null)}}function Je(M){o(x,M,!0),o(_,!0),o(m,qo(),!0)}function de(){o(m,null),o(x,null)}async function $(){if(e(m)){if(e(c).some(M=>M.id===e(m).id)){alert("Target with this ID already exists.");return}o(c,[...e(c),e(m)],!0),e(x)!==null&&e(v)&&(e(v).target_ids||(e(v).target_ids=[]),e(v).target_ids[e(x)]=e(m).id),o(m,null),o(x,null),await R()}}var U=vp(),te=ht(U),Y=i(n(te),2);Eu(Y,{get status(){return e(L)}});var _e=i(Y,2),me=i(_e,2);{var pe=M=>{var C=zu();d(M,C)};k(me,M=>{e(Q).size>0&&M(pe)})}var ze=i(me,2);pt(ze,21,()=>e(u),ft,(M,C)=>{var ke=ju();let Ke;var ye=n(ke);{var Ie=ie=>{var xe=Iu();d(ie,xe)},Ye=ce(()=>!e(C).disabled&&e(C).keys&&e(C).keys.length>0&&e(z).has(Gs(e(C).keys,e(C).gesture)));k(ye,ie=>{e(Ye)&&ie(Ie)})}var Ze=i(ye,2),Ve=n(Ze),at=n(Ve);let et;var rt=n(at),Ee=i(at,2);{var Ge=ie=>{var xe=Ou();d(ie,xe)};k(Ee,ie=>{e(C).openai_enabled&&ie(Ge)})}var ct=i(Ee,2);{var vt=ie=>{var xe=Lu();d(ie,xe)};k(ct,ie=>{var xe,Ce,He,Xe;((Xe=e(C).s1_mini_enabled)!=null?Xe:(He=(Ce=(xe=t())==null?void 0:xe.engine)==null?void 0:Ce.s1_mini)!=null&&He.enabled)&&ie(vt)})}var nt=i(Ve,2),wt=n(nt);pt(wt,21,()=>e(C).keys,ft,(ie,xe)=>{var Ce=Ru(),He=n(Ce);w(Xe=>y(He,Xe),[()=>e(xe).replace("KEY_","")]),d(ie,Ce)});var dt=i(wt,2),Et=n(dt),Kt=i(dt,2);{var ia=ie=>{var xe=Nu();d(ie,xe)},ra=ce(()=>e(ve)&&Vr(e(C).keys));k(Kt,ie=>{e(ra)&&ie(ia)})}var bt=i(Kt,2);{var ea=ie=>{const xe=ce(()=>e(ee).get(e(C).id));var Ce=xi(),He=ht(Ce);{var Xe=zt=>{var Ft=Vu();d(zt,Ft)},Dt=zt=>{var Ft=Fu(),Wt=n(Ft);w(()=>{var $t;return y(Wt,`desktop: ${($t=e(xe).trigger_description)!=null?$t:""}`)}),d(zt,Ft)};k(He,zt=>{e(xe).bound?e(xe).trigger_description&&zt(Dt,1):zt(Xe)})}d(ie,Ce)},Lt=ce(()=>{var ie;return((ie=e(L))==null?void 0:ie.backend)==="portal"&&!e(C).disabled&&e(ee).get(e(C).id)});k(bt,ie=>{e(Lt)&&ie(ea)})}var Ht=i(nt,2),ta=n(Ht),Oe=i(Ht,2),qe=n(Oe),G=n(qe),g=i(qe,2),P=i(g,2);{var Me=ie=>{var xe=Bu(),Ce=i(ht(xe),2),He=i(Ce,2);N("click",Ce,()=>{W(e(C).id),o(b,null)}),N("click",He,()=>o(b,null)),d(ie,xe)},Ue=ie=>{var xe=qu();N("click",xe,()=>o(b,e(C).id,!0)),d(ie,xe)};k(P,ie=>{e(b)===e(C).id?ie(Me):ie(Ue,-1)})}w((ie,xe,Ce)=>{Ke=Te(ke,1,"binding-item glass svelte-w4d8v7",null,Ke,ie),et=Te(at,1,"binding-title svelte-w4d8v7",null,et,xe),y(rt,e(C).label||e(C).id),y(Et,e(C).gesture),y(ta,Ce),y(G,e(C).disabled?"Enable":"Disable")},[()=>({disabled:e(C).disabled,"has-conflict":e(C).keys&&e(C).keys.length>0&&e(Q).has(Gs(e(C).keys,e(C).gesture)),"active-conflict":!e(C).disabled&&e(C).keys&&e(C).keys.length>0&&e(z).has(Gs(e(C).keys,e(C).gesture))}),()=>({"has-conflict":!e(C).disabled&&e(C).keys&&e(C).keys.length>0&&e(z).has(Gs(e(C).keys,e(C).gesture))}),()=>be(e(C))]),N("click",qe,()=>J(e(C).id)),N("click",g,()=>K(e(C))),d(M,ke)},M=>{var C=Uu();d(M,C)});var $e=i(te,2);{var st=M=>{var C=dp(),ke=n(C),Ke=n(ke),ye=n(Ke),Ie=n(ye),Ye=i(ye,2),Ze=i(Ke,2),Ve=n(Ze),at=i(n(Ve),2),et=i(Ve,2),rt=i(n(et),2),Ee=i(et,2),Ge=n(Ee),ct=i(n(Ge),2),vt=i(Ge,2);pt(vt,21,()=>e(v).target_ids||[],ft,(tt,gt,It)=>{var ut=$u(),At=n(ut),jt=n(At),wa=n(jt),oa=i(jt,2);{var La=Le=>{var je=Hu(),Re=ht(je),Qe=i(Re,2),Jt=n(Qe);pt(Jt,17,()=>e(c),ft,(ka,xa)=>{var Ta=Ku(),la=n(Ta);w(_a=>{var Pa,Ca;Ta.disabled=_a,y(la,`${(Pa=e(xa).label)!=null?Pa:""} (${(Ca=e(xa).delivery)!=null?Ca:""})`)},[()=>e(v).target_ids.includes(e(xa).id)&&e(xa).id!==e(gt)]),N("click",Ta,_a=>{_a.preventDefault(),_a.stopPropagation(),e(v).target_ids[It]=e(xa).id,o(A,null)}),d(ka,Ta)});var Gt=i(Jt,2);N("click",Re,()=>o(A,null)),N("click",Gt,ka=>{ka.preventDefault(),ka.stopPropagation(),o(A,null),Je(It)}),d(Le,je)};k(oa,Le=>{e(A)===It&&Le(La)})}var ja=i(At,2);{var Z=Le=>{var je=Wu();N("click",je,()=>De(It)),d(Le,je)};k(ja,Le=>{It>0&&Le(Z)})}w(Le=>y(wa,Le),[()=>Pe(e(gt))]),N("click",jt,()=>o(A,e(A)===It?null:It,!0)),d(tt,ut)});var nt=i(Ee,2),wt=i(n(nt),2);sa(wt,{get options(){return e(oe)},get value(){return e(v).gesture},set value(tt){e(v).gesture=tt}});var dt=i(wt,2);{var Et=tt=>{var gt=Gu(),It=n(gt);w(()=>{var ut;return y(It,((ut=e(L))==null?void 0:ut.backend)==="mint_dbus"?"Your desktop delivers VoxCtrl's shortcuts itself and only reports the key going down, never coming back up — so hold and double-tap styles cannot work here and are not offered.":`${e(V)} gesture style${e(V)===1?"":"s"} are hidden because the way this system delivers shortcuts cannot produce them.`)}),d(tt,gt)};k(dt,tt=>{e(V)>0&&tt(Et)})}var Kt=i(dt,2);{var ia=tt=>{var gt=Yu();d(tt,gt)},ra=ce(()=>e(v).gesture&&!e(j).includes(e(v).gesture));k(Kt,tt=>{e(ra)&&tt(ia)})}var bt=i(nt,2);{var ea=tt=>{var gt=Ju(),It=i(n(gt),2),ut=i(It,2),At=n(ut);w(()=>y(At,e(v).gesture==="double_tap_hold"?"How long the second tap must stay held before recording starts. Keeps a plain double-tap from being read as a double-tap-and-hold.":"Minimum duration to keep keys pressed to count as a 'hold'.")),We(It,()=>e(v).hold_threshold_ms,jt=>e(v).hold_threshold_ms=jt),d(tt,gt)};k(bt,tt=>{(e(v).gesture==="hold"||e(v).gesture==="double_tap_hold")&&tt(ea)})}var Lt=i(bt,2);{var Ht=tt=>{var gt=Xu(),It=i(n(gt),2);We(It,()=>e(v).tap_ms,ut=>e(v).tap_ms=ut),d(tt,gt)};k(Lt,tt=>{(e(v).gesture==="double_tap"||e(v).gesture==="double_tap_hold")&&tt(Ht)})}var ta=i(Lt,2),Oe=n(ta),qe=i(n(Oe),2),G=n(qe);{var g=tt=>{var gt=Qu(),It=ht(gt),ut=i(n(It),2),At=n(ut),jt=i(It,2);{var wa=oa=>{var La=Zu(),ja=n(La);w(()=>y(ja,e(Ae))),d(oa,La)};k(jt,oa=>{e(Ae)&&oa(wa)})}w(oa=>y(At,oa),[()=>e(ae).length>0?e(ae).join(" + ").replace(/KEY_/g,""):"Press your physical shortcut combination now..."]),d(tt,gt)},P=tt=>{var gt=ap(),It=n(gt);{var ut=jt=>{var wa=tp(),oa=ht(wa);pt(oa,21,()=>e(v).keys,ft,(La,ja)=>{var Z=ep(),Le=n(Z);w(je=>y(Le,je),[()=>e(ja).replace("KEY_","")]),d(La,Z)}),d(jt,wa)},At=jt=>{var wa=Be("⚠️ Click/Focus here to press keys!");d(jt,wa)};k(It,jt=>{e(v).keys.length>0?jt(ut):jt(At,-1)})}d(tt,gt)};k(G,tt=>{e(h)==="keys"?tt(g):tt(P,-1)})}var Me=i(Oe,2);{var Ue=tt=>{var gt=sp(),It=i(n(gt),2),ut=i(n(It));w(()=>{var At;return y(ut,` ${(At=e(X).message)!=null?At:""}`)}),d(tt,gt)},ie=tt=>{var gt=np(),It=i(n(gt),2),ut=n(It);w(()=>y(ut,e(X).message)),d(tt,gt)},xe=tt=>{var gt=ip(),It=i(n(gt)),ut=n(It);w(()=>y(ut,e(X).accelerator)),d(tt,gt)};k(Me,tt=>{var gt;e(X)&&!e(X).accepted?tt(Ue):e(X)&&e(X).problem?tt(ie,1):(gt=e(X))!=null&>.accelerator&&e(ve)&&tt(xe,2)})}var Ce=i(Me,2);{var He=tt=>{var gt=rp();d(tt,gt)};k(Ce,tt=>{e(I)&&tt(He)})}var Xe=i(ta,2),Dt=i(n(Xe),2),zt=n(Dt),Ft=i(Dt,2);{var Wt=tt=>{var gt=cp(),It=n(gt),ut=i(n(It),2),At=i(It,2),jt=i(n(At),2);Ms(()=>We(jt,()=>e(fe),je=>o(fe,je))),Fs(jt,je=>ua==null?void 0:ua(je));var wa=i(At,2),oa=i(n(wa),2);mt(oa,"placeholder","e.g. write a haiku about {text}"),Ms(()=>We(oa,()=>e(ne),je=>o(ne,je))),Fs(oa,je=>ua==null?void 0:ua(je));var La=i(oa,2);{var ja=je=>{var Re=lp(),Qe=i(n(Re));Qe.textContent="{text}",d(je,Re)},Z=ce(()=>e(ne)&&!e(ne).includes("{text}")),Le=je=>{var Re=op(),Qe=i(n(Re));Qe.textContent="{text}",d(je,Re)};k(La,je=>{e(Z)?je(ja):je(Le,-1)})}w(je=>Te(oa,1,je,"svelte-w4d8v7"),[()=>Ia(e(ne)&&!e(ne).includes("{text}")?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":"")]),We(ut,()=>e(D),je=>o(D,je)),d(tt,gt)};k(Ft,tt=>{e(T)&&tt(Wt)})}var $t=i(Xe,2),fa=i(n($t),2),Yt=n(fa),ma=i(Ze,2),Oa=n(ma),Ya=i(Oa,2);w(tt=>{y(Ie,e(f)?"Create Hotkey Binding":"Edit Hotkey Binding"),at.disabled=!e(f),Te(qe,1,tt,"svelte-w4d8v7")},[()=>Ia(["border-2 rounded-desktop p-4 text-center cursor-pointer outline-none transition-all duration-200 flex flex-col items-center justify-center min-h-[70px]",e(h)==="keys"?"border-solid border-[#f43f5e] bg-[rgba(244,63,94,0.05)] animate-border-pulse":e(I)?"border-solid border-[#fbbf24] bg-[rgba(251,191,36,0.05)] hover:border-[#fbbf24]/80":"border-dashed border-white/5 bg-black/25 hover:border-accent-blue hover:bg-black/35 focus:border-accent-blue focus:bg-black/35"].join(" "))]),N("click",Ye,()=>{o(v,null),o(h,null)}),We(at,()=>e(v).id,tt=>e(v).id=tt),We(rt,()=>e(v).label,tt=>e(v).label=tt),N("click",ct,Se),N("click",qe,()=>o(h,"keys")),xs("focus",qe,()=>o(h,"keys")),xs("blur",qe,()=>we()),N("keydown",qe,he),N("keyup",qe,re),Xt(zt,()=>e(T),tt=>o(T,tt)),Xt(Yt,()=>e(q),tt=>o(q,tt)),N("click",Oa,()=>{o(v,null),o(h,null)}),N("click",Ya,le),d(M,C)};k($e,M=>{e(v)&&M(st)})}var it=i($e,2);{var H=M=>{Bo(M,{isNew:!0,get existingTargets(){return e(c)},isNested:!0,onSave:$,onCancel:de,get editingTarget(){return e(m)},set editingTarget(C){o(m,C,!0)}})};k(it,M=>{e(m)&&M(H)})}N("click",_e,ue),d(s,U),St(),l()}Qt(["click","keydown","keyup"]);var pp=p('
                '),fp=p('
                '),_p=p('
                '),hp=p('
                '),gp=p('
                '),mp=p('
                '),bp=p('
                Speech: Plays transcribed text via TTS
                '),yp=p('
                '),wp=p('Delete? ',1),kp=p(''),xp=p('
                '),Tp=p('
                🎯

                No output targets defined. Create one to route your transcription output!

                '),Sp=p(`

                Output Commands

                Define routing destinations where transcribed text is typed, copied, piped, or sent over network sockets.

                Saying a command by name. Start dictation and say “Hey Vox,” (or “VoxCtrl” / “Vox Control”), then the command's name, then what you want to send — for +You cannot assign the same Output Command multiple times to a single keybind.`);return}e(v).target_id=e(v).target_ids[0]}else e(v).target_id="",e(v).target_ids=[];if(e(f)){if(e(u).some(ke=>ke.id===e(v).id)){alert("Binding with this ID already exists.");return}o(u,[...e(u),e(v)],!0)}else o(u,e(u).map(ke=>ke.id===e(v).id?e(v):ke),!0);o(v,null),o(h,null),await B()}async function W(M){o(u,e(u).filter(C=>C.id!==M),!0),await B()}let ae=S(yt([])),O=S(yt([]));pa(()=>{E("set_hotkeys_inhibited",{inhibited:e(h)==="keys"}).catch(M=>console.error("Failed to set hotkeys inhibited:",M))});let X=S(null),ve=ce(()=>e(L)===null||e(L).backend==="portal"||e(L).backend==="starting"),Ae=ce(()=>e(h)!=="keys"||!Vr(e(ae))||!e(ve)?null:"Keep holding and add a regular key — modifiers alone cannot be a shortcut.");async function Fe(M){if(!e(v)||M.length===0)return;if(Al(M,e(O))){o(X,null),e(v).keys=[...M];return}let C;try{C=await E("check_hotkey_keys",{keys:M})}catch(ke){console.error("Failed to validate hotkey keys:",ke),e(v).keys=[...M];return}o(X,C,!0),C.accepted&&e(v)&&(e(v).keys=[...M])}function he(M){if(!e(h)||!e(v))return;M.preventDefault(),M.stopPropagation();const C=il(M.key,M.code);if(e(h)==="keys"&&(e(ae).includes(C)||o(ae,[...e(ae),C],!0),M.key==="Escape")){const ke=[...e(ae)];o(ae,[],!0),o(h,null),Fe(ke)}}function re(M){if(!(!e(h)||!e(v))&&(M.preventDefault(),M.stopPropagation(),e(h)==="keys")){const C=[...e(ae)];o(ae,[],!0),o(h,null),Fe(C)}}function we(){if(e(h)){if(e(h)==="keys"&&e(ae).length>0){const M=[...e(ae)];o(ae,[],!0),Fe(M)}o(h,null)}}function Je(M){o(x,M,!0),o(_,!0),o(m,qo(),!0)}function de(){o(m,null),o(x,null)}async function $(){if(e(m)){if(e(c).some(M=>M.id===e(m).id)){alert("Target with this ID already exists.");return}o(c,[...e(c),e(m)],!0),e(x)!==null&&e(v)&&(e(v).target_ids||(e(v).target_ids=[]),e(v).target_ids[e(x)]=e(m).id),o(m,null),o(x,null),await R()}}var U=vp(),te=ht(U),Y=i(n(te),2);Eu(Y,{get status(){return e(L)}});var _e=i(Y,2),me=i(_e,2);{var pe=M=>{var C=zu();d(M,C)};k(me,M=>{e(Q).size>0&&M(pe)})}var ze=i(me,2);pt(ze,21,()=>e(u),ft,(M,C)=>{var ke=ju();let Ke;var ye=n(ke);{var Ie=ie=>{var xe=Iu();d(ie,xe)},Ye=ce(()=>!e(C).disabled&&e(C).keys&&e(C).keys.length>0&&e(z).has(Gs(e(C).keys,e(C).gesture)));k(ye,ie=>{e(Ye)&&ie(Ie)})}var Ze=i(ye,2),Ve=n(Ze),at=n(Ve);let et;var rt=n(at),Ee=i(at,2);{var Ge=ie=>{var xe=Ou();d(ie,xe)};k(Ee,ie=>{e(C).openai_enabled&&ie(Ge)})}var ct=i(Ee,2);{var vt=ie=>{var xe=Lu();d(ie,xe)};k(ct,ie=>{var xe,Ce,He,Xe;((Xe=e(C).s1_mini_enabled)!=null?Xe:(He=(Ce=(xe=t())==null?void 0:xe.engine)==null?void 0:Ce.s1_mini)!=null&&He.enabled)&&ie(vt)})}var nt=i(Ve,2),wt=n(nt);pt(wt,21,()=>e(C).keys,ft,(ie,xe)=>{var Ce=Ru(),He=n(Ce);w(Xe=>y(He,Xe),[()=>e(xe).replace("KEY_","")]),d(ie,Ce)});var dt=i(wt,2),Et=n(dt),Kt=i(dt,2);{var ia=ie=>{var xe=Nu();d(ie,xe)},ra=ce(()=>e(ve)&&Vr(e(C).keys));k(Kt,ie=>{e(ra)&&ie(ia)})}var bt=i(Kt,2);{var ea=ie=>{const xe=ce(()=>e(ee).get(e(C).id));var Ce=xi(),He=ht(Ce);{var Xe=zt=>{var Ft=Vu();d(zt,Ft)},Dt=zt=>{var Ft=Fu(),Wt=n(Ft);w(()=>{var $t;return y(Wt,`desktop: ${($t=e(xe).trigger_description)!=null?$t:""}`)}),d(zt,Ft)};k(He,zt=>{e(xe).bound?e(xe).trigger_description&&zt(Dt,1):zt(Xe)})}d(ie,Ce)},Lt=ce(()=>{var ie;return((ie=e(L))==null?void 0:ie.backend)==="portal"&&!e(C).disabled&&e(ee).get(e(C).id)});k(bt,ie=>{e(Lt)&&ie(ea)})}var Ht=i(nt,2),ta=n(Ht),Oe=i(Ht,2),qe=n(Oe),G=n(qe),g=i(qe,2),P=i(g,2);{var Me=ie=>{var xe=Bu(),Ce=i(ht(xe),2),He=i(Ce,2);N("click",Ce,()=>{W(e(C).id),o(b,null)}),N("click",He,()=>o(b,null)),d(ie,xe)},Ue=ie=>{var xe=qu();N("click",xe,()=>o(b,e(C).id,!0)),d(ie,xe)};k(P,ie=>{e(b)===e(C).id?ie(Me):ie(Ue,-1)})}w((ie,xe,Ce)=>{Ke=Te(ke,1,"binding-item glass svelte-w4d8v7",null,Ke,ie),et=Te(at,1,"binding-title svelte-w4d8v7",null,et,xe),y(rt,e(C).label||e(C).id),y(Et,e(C).gesture),y(ta,Ce),y(G,e(C).disabled?"Enable":"Disable")},[()=>({disabled:e(C).disabled,"has-conflict":e(C).keys&&e(C).keys.length>0&&e(Q).has(Gs(e(C).keys,e(C).gesture)),"active-conflict":!e(C).disabled&&e(C).keys&&e(C).keys.length>0&&e(z).has(Gs(e(C).keys,e(C).gesture))}),()=>({"has-conflict":!e(C).disabled&&e(C).keys&&e(C).keys.length>0&&e(z).has(Gs(e(C).keys,e(C).gesture))}),()=>be(e(C))]),N("click",qe,()=>J(e(C).id)),N("click",g,()=>K(e(C))),d(M,ke)},M=>{var C=Uu();d(M,C)});var $e=i(te,2);{var st=M=>{var C=dp(),ke=n(C),Ke=n(ke),ye=n(Ke),Ie=n(ye),Ye=i(ye,2),Ze=i(Ke,2),Ve=n(Ze),at=i(n(Ve),2),et=i(Ve,2),rt=i(n(et),2),Ee=i(et,2),Ge=n(Ee),ct=i(n(Ge),2),vt=i(Ge,2);pt(vt,21,()=>e(v).target_ids||[],ft,(tt,gt,It)=>{var ut=$u(),At=n(ut),jt=n(At),wa=n(jt),oa=i(jt,2);{var La=Le=>{var je=Hu(),Re=ht(je),Qe=i(Re,2),Jt=n(Qe);pt(Jt,17,()=>e(c),ft,(ka,xa)=>{var Ta=Ku(),la=n(Ta);w(_a=>{var Pa,Ca;Ta.disabled=_a,y(la,`${(Pa=e(xa).label)!=null?Pa:""} (${(Ca=e(xa).delivery)!=null?Ca:""})`)},[()=>e(v).target_ids.includes(e(xa).id)&&e(xa).id!==e(gt)]),N("click",Ta,_a=>{_a.preventDefault(),_a.stopPropagation(),e(v).target_ids[It]=e(xa).id,o(A,null)}),d(ka,Ta)});var Gt=i(Jt,2);N("click",Re,()=>o(A,null)),N("click",Gt,ka=>{ka.preventDefault(),ka.stopPropagation(),o(A,null),Je(It)}),d(Le,je)};k(oa,Le=>{e(A)===It&&Le(La)})}var ja=i(At,2);{var Z=Le=>{var je=Wu();N("click",je,()=>De(It)),d(Le,je)};k(ja,Le=>{It>0&&Le(Z)})}w(Le=>y(wa,Le),[()=>Pe(e(gt))]),N("click",jt,()=>o(A,e(A)===It?null:It,!0)),d(tt,ut)});var nt=i(Ee,2),wt=i(n(nt),2);sa(wt,{get options(){return e(oe)},get value(){return e(v).gesture},set value(tt){e(v).gesture=tt}});var dt=i(wt,2);{var Et=tt=>{var gt=Gu(),It=n(gt);w(()=>{var ut;return y(It,((ut=e(L))==null?void 0:ut.backend)==="mint_dbus"?"Your desktop delivers VoxCtrl's shortcuts itself and only reports the key going down, never coming back up — so hold and double-tap styles cannot work here and are not offered.":`${e(V)} gesture style${e(V)===1?"":"s"} are hidden because the way this system delivers shortcuts cannot produce them.`)}),d(tt,gt)};k(dt,tt=>{e(V)>0&&tt(Et)})}var Kt=i(dt,2);{var ia=tt=>{var gt=Yu();d(tt,gt)},ra=ce(()=>e(v).gesture&&!e(j).includes(e(v).gesture));k(Kt,tt=>{e(ra)&&tt(ia)})}var bt=i(nt,2);{var ea=tt=>{var gt=Ju(),It=i(n(gt),2),ut=i(It,2),At=n(ut);w(()=>y(At,e(v).gesture==="double_tap_hold"?"How long the second tap must stay held before recording starts. Keeps a plain double-tap from being read as a double-tap-and-hold.":"Minimum duration to keep keys pressed to count as a 'hold'.")),We(It,()=>e(v).hold_threshold_ms,jt=>e(v).hold_threshold_ms=jt),d(tt,gt)};k(bt,tt=>{(e(v).gesture==="hold"||e(v).gesture==="double_tap_hold")&&tt(ea)})}var Lt=i(bt,2);{var Ht=tt=>{var gt=Xu(),It=i(n(gt),2);We(It,()=>e(v).tap_ms,ut=>e(v).tap_ms=ut),d(tt,gt)};k(Lt,tt=>{(e(v).gesture==="double_tap"||e(v).gesture==="double_tap_hold")&&tt(Ht)})}var ta=i(Lt,2),Oe=n(ta),qe=i(n(Oe),2),G=n(qe);{var g=tt=>{var gt=Qu(),It=ht(gt),ut=i(n(It),2),At=n(ut),jt=i(It,2);{var wa=oa=>{var La=Zu(),ja=n(La);w(()=>y(ja,e(Ae))),d(oa,La)};k(jt,oa=>{e(Ae)&&oa(wa)})}w(oa=>y(At,oa),[()=>e(ae).length>0?e(ae).join(" + ").replace(/KEY_/g,""):"Press your physical shortcut combination now..."]),d(tt,gt)},P=tt=>{var gt=ap(),It=n(gt);{var ut=jt=>{var wa=tp(),oa=ht(wa);pt(oa,21,()=>e(v).keys,ft,(La,ja)=>{var Z=ep(),Le=n(Z);w(je=>y(Le,je),[()=>e(ja).replace("KEY_","")]),d(La,Z)}),d(jt,wa)},At=jt=>{var wa=Be("⚠️ Click/Focus here to press keys!");d(jt,wa)};k(It,jt=>{e(v).keys.length>0?jt(ut):jt(At,-1)})}d(tt,gt)};k(G,tt=>{e(h)==="keys"?tt(g):tt(P,-1)})}var Me=i(Oe,2);{var Ue=tt=>{var gt=sp(),It=i(n(gt),2),ut=i(n(It));w(()=>{var At;return y(ut,` ${(At=e(X).message)!=null?At:""}`)}),d(tt,gt)},ie=tt=>{var gt=np(),It=i(n(gt),2),ut=n(It);w(()=>y(ut,e(X).message)),d(tt,gt)},xe=tt=>{var gt=ip(),It=i(n(gt)),ut=n(It);w(()=>y(ut,e(X).accelerator)),d(tt,gt)};k(Me,tt=>{var gt;e(X)&&!e(X).accepted?tt(Ue):e(X)&&e(X).problem?tt(ie,1):(gt=e(X))!=null&>.accelerator&&e(ve)&&tt(xe,2)})}var Ce=i(Me,2);{var He=tt=>{var gt=rp();d(tt,gt)};k(Ce,tt=>{e(I)&&tt(He)})}var Xe=i(ta,2),Dt=i(n(Xe),2),zt=n(Dt),Ft=i(Dt,2);{var Wt=tt=>{var gt=cp(),It=n(gt),ut=i(n(It),2),At=i(It,2),jt=i(n(At),2);Ms(()=>We(jt,()=>e(fe),je=>o(fe,je))),Fs(jt,je=>ua==null?void 0:ua(je));var wa=i(At,2),oa=i(n(wa),2);mt(oa,"placeholder","e.g. write a haiku about {text}"),Ms(()=>We(oa,()=>e(ne),je=>o(ne,je))),Fs(oa,je=>ua==null?void 0:ua(je));var La=i(oa,2);{var ja=je=>{var Re=lp(),Qe=i(n(Re));Qe.textContent="{text}",d(je,Re)},Z=ce(()=>e(ne)&&!e(ne).includes("{text}")),Le=je=>{var Re=op(),Qe=i(n(Re));Qe.textContent="{text}",d(je,Re)};k(La,je=>{e(Z)?je(ja):je(Le,-1)})}w(je=>Te(oa,1,je,"svelte-w4d8v7"),[()=>Ia(e(ne)&&!e(ne).includes("{text}")?"border-red-500! ring-2! ring-red-500/20! focus:border-red-500! focus:ring-red-500/20!":"")]),We(ut,()=>e(D),je=>o(D,je)),d(tt,gt)};k(Ft,tt=>{e(T)&&tt(Wt)})}var $t=i(Xe,2),fa=i(n($t),2),Yt=n(fa),ma=i(Ze,2),Oa=n(ma),Ya=i(Oa,2);w(tt=>{y(Ie,e(f)?"Create Hotkey Binding":"Edit Hotkey Binding"),at.disabled=!e(f),Te(qe,1,tt,"svelte-w4d8v7")},[()=>Ia(["border-2 rounded-desktop p-4 text-center cursor-pointer outline-none transition-all duration-200 flex flex-col items-center justify-center min-h-[70px]",e(h)==="keys"?"border-solid border-[#f43f5e] bg-[rgba(244,63,94,0.05)] animate-border-pulse":e(I)?"border-solid border-[#fbbf24] bg-[rgba(251,191,36,0.05)] hover:border-[#fbbf24]/80":"border-dashed border-white/5 bg-black/25 hover:border-accent-blue hover:bg-black/35 focus:border-accent-blue focus:bg-black/35"].join(" "))]),N("click",Ye,()=>{o(v,null),o(h,null)}),We(at,()=>e(v).id,tt=>e(v).id=tt),We(rt,()=>e(v).label,tt=>e(v).label=tt),N("click",ct,Se),N("click",qe,()=>o(h,"keys")),xs("focus",qe,()=>o(h,"keys")),xs("blur",qe,()=>we()),N("keydown",qe,he),N("keyup",qe,re),Xt(zt,()=>e(T),tt=>o(T,tt)),Xt(Yt,()=>e(q),tt=>o(q,tt)),N("click",Oa,()=>{o(v,null),o(h,null)}),N("click",Ya,le),d(M,C)};k($e,M=>{e(v)&&M(st)})}var it=i($e,2);{var H=M=>{Bo(M,{isNew:!0,get existingTargets(){return e(c)},isNested:!0,onSave:$,onCancel:de,get editingTarget(){return e(m)},set editingTarget(C){o(m,C,!0)}})};k(it,M=>{e(m)&&M(H)})}N("click",_e,ue),d(s,U),St(),l()}Qt(["click","keydown","keyup"]);var pp=p('

                '),fp=p('
                '),_p=p('
                '),hp=p('
                '),gp=p('
                '),mp=p('
                '),bp=p('
                Speech: Plays transcribed text via TTS
                '),yp=p('
                '),wp=p('Delete? ',1),kp=p(''),xp=p('
                '),Tp=p('
                🎯

                No output targets defined. Create one to route your transcription output!

                '),Sp=p(`

                Output Commands

                Define routing destinations where transcribed text is typed, copied, piped, or sent over network sockets.

                Saying a command by name. Start dictation and say “Hey Vox,” (or “VoxCtrl” / “Vox Control”), then the command's name, then what you want to send — for example “Hey Vox, notes, remember to call the plumber” or “VoxCtrl notes, remember to call the plumber” routes remember to call the plumber to the command named notes. Everything after the name is the text. Natural phrasing works too (“Hey Vox, add this to my notes: …”). Say nothing of the sort and diff --git a/dist/index.html b/dist/index.html index f4b89bc9..e36c89ed 100644 --- a/dist/index.html +++ b/dist/index.html @@ -16,8 +16,8 @@ - - + +

                diff --git a/src/lib/Settings/CommandsTab.svelte b/src/lib/Settings/CommandsTab.svelte index 0646345a..cacb9c82 100644 --- a/src/lib/Settings/CommandsTab.svelte +++ b/src/lib/Settings/CommandsTab.svelte @@ -268,24 +268,6 @@ @apply text-[11px] text-[var(--text-muted)]; } - .btn-action { - @apply bg-[var(--surface2)] text-[var(--text)] border border-[var(--border)] rounded-[var(--radius)] p-1.5 px-3.5 text-xs font-semibold cursor-pointer transition-all duration-150 ease-out; - } - .btn-action:hover { - @apply bg-[var(--border)] border-[var(--text-muted)]; - } - - .btn-action.small { - @apply p-1 px-2 text-[11px]; - } - - .btn-action.danger { - @apply text-red-400 border-red-400/20; - } - .btn-action.danger:hover { - @apply bg-red-400/10 border-red-400; - } - .btn-add-wide { @apply w-full bg-[var(--accent2)] text-white border-none rounded-[var(--radius)] py-1.5 text-xs font-bold cursor-pointer transition-all duration-150 ease-out mb-4 flex justify-center items-center gap-2 shadow-[0_2px_6px_rgba(56,189,248,0.15)]; } diff --git a/src/lib/Settings/GeneralTab.svelte b/src/lib/Settings/GeneralTab.svelte index fd20af30..45d1f02b 100644 --- a/src/lib/Settings/GeneralTab.svelte +++ b/src/lib/Settings/GeneralTab.svelte @@ -185,21 +185,10 @@ diff --git a/src/lib/Settings/HotkeysTab.svelte b/src/lib/Settings/HotkeysTab.svelte index ff604b6c..4c663bf4 100644 --- a/src/lib/Settings/HotkeysTab.svelte +++ b/src/lib/Settings/HotkeysTab.svelte @@ -959,31 +959,6 @@ @apply text-xs text-[var(--text-muted)] m-0; } - .btn-action { - @apply bg-[var(--surface2)] text-[var(--text)] border border-[var(--border)] rounded-[var(--radius)] p-1.5 px-3.5 text-xs font-semibold cursor-pointer transition-all duration-150 ease-out; - } - .btn-action:hover { - @apply bg-[var(--border)] border-[var(--text-muted)]; - } - - .btn-action.primary { - @apply bg-[var(--accent)] text-white border-none; - } - .btn-action.primary:hover { - @apply opacity-90; - } - - .btn-action.small { - @apply p-1 px-2 text-[11px]; - } - - .btn-action.danger { - @apply text-red-400 border-red-400/20; - } - .btn-action.danger:hover { - @apply bg-red-400/10 border-red-400; - } - .btn-add-wide { @apply w-full bg-[var(--accent2)] text-white border-none rounded-[var(--radius)] py-1.5 text-xs font-bold cursor-pointer transition-all duration-150 ease-out mb-4 flex justify-center items-center gap-2 shadow-[0_2px_6px_rgba(56,189,248,0.15)]; } @@ -1086,7 +1061,6 @@ @apply flex items-center gap-2 w-full; } - .btn-remove-inline { @apply flex items-center justify-center box-border bg-red-500/8 border border-red-500/20 text-red-400 cursor-pointer text-xs font-bold px-3 py-1.5 rounded-[var(--radius)] transition-all duration-150 ease-out h-[34px]; } @@ -1136,7 +1110,6 @@ @apply bg-[var(--color-obsidian-950)] text-[var(--color-accent-blue)] p-0.5 px-1 rounded font-mono text-[10px] border border-[var(--border)]; } - .validation-error-msg { @apply block mt-1 text-xs font-medium text-red-400 leading-normal; } diff --git a/src/lib/Settings/TargetEditorModal.svelte b/src/lib/Settings/TargetEditorModal.svelte index 38f5b413..561098ab 100644 --- a/src/lib/Settings/TargetEditorModal.svelte +++ b/src/lib/Settings/TargetEditorModal.svelte @@ -846,20 +846,6 @@ @apply text-[var(--text)]; } - .btn-action { - @apply bg-[var(--surface2)] text-[var(--text)] border border-[var(--border)] rounded-[var(--radius)] p-1.5 px-3.5 text-xs font-semibold cursor-pointer transition-all duration-150 ease-out; - } - .btn-action:hover { - @apply bg-[var(--border)] border-[var(--text-muted)]; - } - - .btn-action.small { - @apply p-1 px-2 text-[10px]; - } - .btn-action:disabled { - @apply opacity-50 cursor-not-allowed; - } - .chat-actions { @apply flex gap-2 items-center; } @@ -874,13 +860,6 @@ @apply text-red-400; } - .btn-action.primary { - @apply bg-[var(--accent)] text-white border-none; - } - .btn-action.primary:hover { - @apply opacity-90; - } - .full-width-input { @apply w-full!; } @@ -923,7 +902,6 @@ @apply bg-[var(--color-obsidian-950)] text-[var(--color-accent-blue)] p-0.5 px-1 rounded font-mono text-[10px] border border-[var(--border)]; } - .validation-error-msg { @apply block mt-1 text-xs font-medium text-red-400 leading-normal; } diff --git a/src/lib/Settings/tab.css b/src/lib/Settings/tab.css index 597f9645..f4ac403f 100644 --- a/src/lib/Settings/tab.css +++ b/src/lib/Settings/tab.css @@ -158,3 +158,32 @@ h3 { margin-top: 4px; animation: slideIn 0.25s cubic-bezier(0.175,0.885,0.32,1.15) forwards; } + +/* The Settings action button, shared by every tab and modal. Each component + used to carry its own scoped copy, and the copies drifted (small text was + 10px in one and 11px in others; disabled was styled in two different ways + and not at all elsewhere). */ +.btn-action { + @apply bg-[var(--surface2)] text-[var(--text)] border border-[var(--border)] rounded-[var(--radius)] p-1.5 px-3.5 text-xs font-semibold cursor-pointer transition-all duration-150 ease-out; +} +.btn-action:hover { + @apply bg-[var(--border)] border-[var(--text-muted)]; +} +.btn-action:disabled { + @apply opacity-50 cursor-not-allowed; +} +.btn-action.primary { + @apply bg-[var(--accent)] text-white border-none; +} +.btn-action.primary:hover { + @apply opacity-90; +} +.btn-action.small { + @apply p-1 px-2 text-[11px]; +} +.btn-action.danger { + @apply text-red-400 border-red-400/20; +} +.btn-action.danger:hover { + @apply bg-red-400/10 border-red-400; +} From 8fbaec37b7dd146604ec0da839caa6585e9a26e5 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 26 Sep 2026 00:05:13 +0000 Subject: [PATCH 13/14] Clear every clippy warning in the workspace MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit clippy --all-targets is now silent on every crate (default Linux features, and the app without the ONNX features). Beyond mechanical fixes: - voxctrl-audio: capture_loop took eleven arguments, eight of them the AudioRecorder's own fields cloned one by one; it now takes the recorder. Its AudioConfig field was never read — every setting reaches the recorder through live atomics — and a blanket allow(unused_variables) had hidden that. Field, constructor argument and allow are gone, and so is the crate's dependency on voxctrl-config, which nothing else used. - voxctrl-tts: TtsCommand::UpdateConfig boxes its TtsConfig, which was making every command on the TTS queue 568 bytes. - voxctrl-hotkeys portal: two branches of the kglobalshortcutsrc rewrite produced the same line; merged into one (same behaviour). - Tests holding the environment lock across .await do so deliberately (the environment must stay set for the whole test, and each tokio test has its own thread); documented on get_env_lock and allowed on those six tests. - voxctrl-text/reference.rs is a verbatim copy kept for a differential test, so it is exempted rather than rewritten. - The rest: async fn in trait impls (services, mcp tests), derived Default impls, strip_suffix, a c"" literal, is_empty beside a public len, is_none_or, sort_by_key, slice::from_ref, struct-update syntax in tests. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_015v84hAqhDBdwy7Q49gAWBR --- Cargo.lock | 1 - crates/voxctrl-audio/Cargo.toml | 1 - crates/voxctrl-audio/src/lib.rs | 36 ++--- crates/voxctrl-config/src/tests.rs | 54 ++++--- crates/voxctrl-config/src/tts.rs | 14 +- crates/voxctrl-dbus/src/lib.rs | 9 +- crates/voxctrl-hotkeys/src/portal.rs | 16 +- crates/voxctrl-inference/src/remote_openai.rs | 6 +- crates/voxctrl-mcp/src/lib.rs | 23 ++- crates/voxctrl-routing/src/targets.rs | 2 +- crates/voxctrl-routing/src/tests.rs | 8 +- crates/voxctrl-text/src/lib.rs | 6 +- crates/voxctrl-text/src/reference.rs | 3 +- crates/voxctrl-tts/src/engine.rs | 10 +- crates/voxctrl-tts/src/inflect/phonemes.rs | 4 + src-tauri/src/installer.rs | 3 + src-tauri/src/lib.rs | 17 +- src-tauri/src/services.rs | 151 ++++++++---------- src-tauri/src/tests.rs | 5 +- 19 files changed, 173 insertions(+), 196 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c7315f6c..4ef44e32 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6744,7 +6744,6 @@ dependencies = [ "thiserror 2.0.18", "tokio", "tracing", - "voxctrl-config", ] [[package]] diff --git a/crates/voxctrl-audio/Cargo.toml b/crates/voxctrl-audio/Cargo.toml index 3a618331..920ef4de 100644 --- a/crates/voxctrl-audio/Cargo.toml +++ b/crates/voxctrl-audio/Cargo.toml @@ -4,7 +4,6 @@ version.workspace = true edition.workspace = true [dependencies] -voxctrl-config = { workspace = true } thiserror = { workspace = true } anyhow = { workspace = true } tokio = { workspace = true } diff --git a/crates/voxctrl-audio/src/lib.rs b/crates/voxctrl-audio/src/lib.rs index cf18c412..fdb15820 100644 --- a/crates/voxctrl-audio/src/lib.rs +++ b/crates/voxctrl-audio/src/lib.rs @@ -14,7 +14,6 @@ use cpal::{ }; use crossbeam_channel::{Receiver, Sender}; use tracing::{info, warn}; -use voxctrl_config::AudioConfig; mod denoise; @@ -50,8 +49,9 @@ pub const PREROLL_MS: u32 = 300; /// A chunk of mono f32 audio at TARGET_SAMPLE_RATE Hz. pub type AudioChunk = Vec; +/// The capture supervisor. Every setting it follows is one of these live +/// flags, shared with the app, so a change takes effect without a restart. pub struct AudioRecorder { - config: AudioConfig, /// Currently recording (pushed to inference queue) recording: Arc, /// Currently monitoring (active settings tab VU meter level feed) @@ -71,7 +71,6 @@ pub struct AudioRecorder { impl AudioRecorder { pub fn new( - config: AudioConfig, recording: Arc, monitoring: Arc, dynamic_stream: Arc, @@ -80,7 +79,6 @@ impl AudioRecorder { noise_suppression: Arc, ) -> Self { Self { - config, recording, monitoring, dynamic_stream, @@ -128,19 +126,10 @@ impl AudioRecorder { level_tx: Option>, audio_ready: Option>, ) -> Result { - let recording = self.recording.clone(); - let monitoring = self.monitoring.clone(); - let dynamic_stream = self.dynamic_stream.clone(); - let input_device_index = self.input_device_index.clone(); - let gain = self.gain.clone(); - let noise_suppression = self.noise_suppression.clone(); - let wake = self.wake.clone(); - let cfg = self.config.clone(); - let handle = std::thread::Builder::new() .name("voxctrl-audio".into()) .spawn(move || { - if let Err(e) = capture_loop(cfg, gain, noise_suppression, recording, monitoring, dynamic_stream, input_device_index, audio_ready, tx, level_tx, wake) { + if let Err(e) = capture_loop(self, audio_ready, tx, level_tx) { warn!("Audio capture error: {e}"); } }) @@ -506,20 +495,21 @@ fn open_stream( Some(stream) } -#[allow(unused_assignments, unused_variables)] fn capture_loop( - cfg: AudioConfig, - gain: Arc, - noise_suppression: Arc, - recording: Arc, - monitoring: Arc, - dynamic_stream: Arc, - input_device_index: Arc, + recorder: AudioRecorder, audio_ready: Option>, tx: Sender, level_tx: Option>, - wake: Option>, ) -> Result<()> { + let AudioRecorder { + recording, + monitoring, + dynamic_stream, + input_device_index, + gain, + noise_suppression, + wake, + } = recorder; let host = cpal::default_host(); let mut current_idx = input_device_index.load(Ordering::SeqCst); diff --git a/crates/voxctrl-config/src/tests.rs b/crates/voxctrl-config/src/tests.rs index cc94879e..3cc9376f 100644 --- a/crates/voxctrl-config/src/tests.rs +++ b/crates/voxctrl-config/src/tests.rs @@ -147,13 +147,15 @@ fn tts_json(body: &str) -> TtsConfig { /// must hold that token exactly once. #[test] fn migrates_per_engine_hf_tokens_onto_one_key() { - let mut data = AppConfig::default(); - data.tts = tts_json( - r#"{"enabled": true, "engine": "pocket_tts", "voice": "v", - "stop_key": ["KEY_ESC"], "response_overlay": true, - "pocket_tts": {"voice": "alba", "hf_token": "hf_from_pocket"}, - "breeze_tts_2": {"hf_token": "hf_from_pocket"}}"#, - ); + let mut data = AppConfig { + tts: tts_json( + r#"{"enabled": true, "engine": "pocket_tts", "voice": "v", + "stop_key": ["KEY_ESC"], "response_overlay": true, + "pocket_tts": {"voice": "alba", "hf_token": "hf_from_pocket"}, + "breeze_tts_2": {"hf_token": "hf_from_pocket"}}"#, + ), + ..Default::default() + }; assert_eq!( data.tts.pocket_tts.legacy_hf_token.as_deref(), Some("hf_from_pocket"), @@ -177,11 +179,13 @@ fn migrates_per_engine_hf_tokens_onto_one_key() { /// A token set only on Breeze is lifted too — either copy will do. #[test] fn migrates_a_breeze_only_token() { - let mut data = AppConfig::default(); - data.tts = tts_json( - r#"{"enabled": false, "engine": "espeak", "voice": "v", "stop_key": [], - "response_overlay": true, "breeze_tts_2": {"hf_token": "hf_from_breeze"}}"#, - ); + let mut data = AppConfig { + tts: tts_json( + r#"{"enabled": false, "engine": "espeak", "voice": "v", "stop_key": [], + "response_overlay": true, "breeze_tts_2": {"hf_token": "hf_from_breeze"}}"#, + ), + ..Default::default() + }; assert!(migrate_hf_token(&mut data)); assert_eq!(data.tts.hf_token.as_deref(), Some("hf_from_breeze")); @@ -190,11 +194,13 @@ fn migrates_a_breeze_only_token() { /// A config that already has the single key keeps it, and needs no rewrite. #[test] fn a_config_with_one_token_is_left_alone() { - let mut data = AppConfig::default(); - data.tts = tts_json( - r#"{"enabled": false, "engine": "espeak", "voice": "v", "stop_key": [], - "response_overlay": true, "hf_token": "hf_single"}"#, - ); + let mut data = AppConfig { + tts: tts_json( + r#"{"enabled": false, "engine": "espeak", "voice": "v", "stop_key": [], + "response_overlay": true, "hf_token": "hf_single"}"#, + ), + ..Default::default() + }; assert!(!migrate_hf_token(&mut data), "nothing to migrate"); assert_eq!(data.tts.hf_token.as_deref(), Some("hf_single")); @@ -208,12 +214,14 @@ fn a_config_with_one_token_is_left_alone() { /// overwritten by it. #[test] fn the_single_token_wins_over_a_legacy_copy() { - let mut data = AppConfig::default(); - data.tts = tts_json( - r#"{"enabled": false, "engine": "espeak", "voice": "v", "stop_key": [], - "response_overlay": true, "hf_token": "hf_current", - "pocket_tts": {"hf_token": "hf_stale"}}"#, - ); + let mut data = AppConfig { + tts: tts_json( + r#"{"enabled": false, "engine": "espeak", "voice": "v", "stop_key": [], + "response_overlay": true, "hf_token": "hf_current", + "pocket_tts": {"hf_token": "hf_stale"}}"#, + ), + ..Default::default() + }; assert!(migrate_hf_token(&mut data)); assert_eq!(data.tts.hf_token.as_deref(), Some("hf_current")); diff --git a/crates/voxctrl-config/src/tts.rs b/crates/voxctrl-config/src/tts.rs index c0323987..09a225d4 100644 --- a/crates/voxctrl-config/src/tts.rs +++ b/crates/voxctrl-config/src/tts.rs @@ -26,21 +26,17 @@ pub enum TtsEngine { /// * `OnDemand` — the model is loaded the moment VoxCtrl knows it will be /// needed, kept "primed" while it keeps getting used, and dropped again after /// [`TtsConfig::idle_unload_secs`] of inactivity to give the memory back. -#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)] +#[derive(Default, Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "snake_case")] pub enum TtsMemoryMode { + /// The default: existing installs keep the behaviour they already had; + /// opting into the memory saving is a deliberate choice (it costs + /// first-word latency). + #[default] AlwaysLoaded, OnDemand, } -impl Default for TtsMemoryMode { - fn default() -> Self { - // Existing installs keep the behaviour they already had; opting into - // the memory saving is a deliberate choice (it costs first-word latency). - Self::AlwaysLoaded - } -} - /// 15 minutes — long enough that a back-and-forth conversation never pays the /// reload cost twice, short enough that an idle session gives the RAM back. pub const DEFAULT_TTS_IDLE_UNLOAD_SECS: u64 = 900; diff --git a/crates/voxctrl-dbus/src/lib.rs b/crates/voxctrl-dbus/src/lib.rs index 2da223d8..37355151 100644 --- a/crates/voxctrl-dbus/src/lib.rs +++ b/crates/voxctrl-dbus/src/lib.rs @@ -7,8 +7,9 @@ use tracing::info; // ── Shared state ────────────────────────────────────────────────────────────── -#[derive(Debug, Clone, PartialEq, Eq)] +#[derive(Default, Debug, Clone, PartialEq, Eq)] pub enum DictationStatus { + #[default] Idle, Recording, Transcribing, @@ -30,12 +31,6 @@ pub struct AppState { pub word_count: u32, } -impl Default for DictationStatus { - fn default() -> Self { - Self::Idle - } -} - // ── DBus service (Linux only) ──────────────────────────────────────────────── #[cfg(target_os = "linux")] diff --git a/crates/voxctrl-hotkeys/src/portal.rs b/crates/voxctrl-hotkeys/src/portal.rs index d7e7c562..0cc2234d 100644 --- a/crates/voxctrl-hotkeys/src/portal.rs +++ b/crates/voxctrl-hotkeys/src/portal.rs @@ -431,19 +431,9 @@ async fn update_kglobalshortcutsrc( if let Some(&(expected_desc, trigger_opt)) = group_details.get(key) { let default_key = trigger_opt.unwrap_or("none"); let parts: Vec<&str> = val.split(',').collect(); - if parts.len() >= 3 { - let cur_key = if parts[0] == "none" || parts[0].is_empty() { - default_key - } else { - parts[0] - }; - let def_key = if parts[1] == "none" || parts[1].is_empty() { - default_key - } else { - parts[1] - }; - new_lines.push(format!("{key}={cur_key},{def_key},{expected_desc}")); - } else if parts.len() == 2 { + // "current,default[,description]": keep both keys (filling + // an unset one with ours) and rewrite the description. + if parts.len() >= 2 { let cur_key = if parts[0] == "none" || parts[0].is_empty() { default_key } else { diff --git a/crates/voxctrl-inference/src/remote_openai.rs b/crates/voxctrl-inference/src/remote_openai.rs index 6a1151d4..c0241e3d 100644 --- a/crates/voxctrl-inference/src/remote_openai.rs +++ b/crates/voxctrl-inference/src/remote_openai.rs @@ -24,8 +24,7 @@ pub fn normalize_transcription_url(endpoint: &str) -> String { /// Normalizes an endpoint into the `/v1/models` URL for probing available models. pub fn normalize_models_url(endpoint: &str) -> String { let trimmed = endpoint.trim().trim_end_matches('/'); - if trimmed.ends_with("/audio/transcriptions") { - let base = &trimmed[..trimmed.len() - "/audio/transcriptions".len()]; + if let Some(base) = trimmed.strip_suffix("/audio/transcriptions") { format!("{base}/models") } else if trimmed.ends_with("/v1") { format!("{trimmed}/models") @@ -234,7 +233,6 @@ impl RemoteStreamingSession { let trailing_boundary = format!("\r\n--{boundary}--\r\n"); // Stream construction - let initial_bytes = Some(Bytes::from(preamble)); let trailing_bytes = Some(Bytes::from(trailing_boundary)); enum StreamState { @@ -244,7 +242,7 @@ impl RemoteStreamingSession { Done, } - let mut state = StreamState::Preamble(initial_bytes.unwrap()); + let mut state = StreamState::Preamble(Bytes::from(preamble)); let body_stream = futures_util::stream::poll_fn(move |_cx| { match &mut state { diff --git a/crates/voxctrl-mcp/src/lib.rs b/crates/voxctrl-mcp/src/lib.rs index cad8bd23..19b0114f 100644 --- a/crates/voxctrl-mcp/src/lib.rs +++ b/crates/voxctrl-mcp/src/lib.rs @@ -375,26 +375,21 @@ mod tests { } impl McpCallbacks for FakeApp { - fn transcribe_voice( - &self, - timeout_secs: f64, - ) -> impl std::future::Future> + Send { - async move { - self.seen.store(timeout_secs.to_bits(), Ordering::SeqCst); - Ok("hello".to_string()) - } + async fn transcribe_voice(&self, timeout_secs: f64) -> Result { + self.seen.store(timeout_secs.to_bits(), Ordering::SeqCst); + Ok("hello".to_string()) } - fn speak_text(&self, _text: String) -> impl std::future::Future> + Send { - async move { Ok(()) } + async fn speak_text(&self, _text: String) -> Result<()> { + Ok(()) } - fn get_status(&self) -> impl std::future::Future + Send { - async move { (false, false) } + async fn get_status(&self) -> (bool, bool) { + (false, false) } - fn default_record_timeout(&self) -> impl std::future::Future + Send { - async move { self.configured_timeout } + async fn default_record_timeout(&self) -> f64 { + self.configured_timeout } } diff --git a/crates/voxctrl-routing/src/targets.rs b/crates/voxctrl-routing/src/targets.rs index d8c8a954..d79d2fc0 100644 --- a/crates/voxctrl-routing/src/targets.rs +++ b/crates/voxctrl-routing/src/targets.rs @@ -1362,7 +1362,7 @@ pub fn parse_voice_command( next.is_whitespace() || next.is_ascii_punctuation() }; if is_boundary_start && is_boundary_end { - if found_pos.map_or(true, |p| pos < p) { + if found_pos.is_none_or(|p| pos < p) { found_pos = Some(pos); trigger_len = trigger.len(); } diff --git a/crates/voxctrl-routing/src/tests.rs b/crates/voxctrl-routing/src/tests.rs index a0e980be..71d087f6 100644 --- a/crates/voxctrl-routing/src/tests.rs +++ b/crates/voxctrl-routing/src/tests.rs @@ -45,7 +45,7 @@ fn test_mcp_config_roundtrip() { response_pipe: None, }; - save_targets(&[target.clone()], &temp_dir).unwrap(); + save_targets(std::slice::from_ref(&target), &temp_dir).unwrap(); let loaded = load_targets(&temp_dir).unwrap(); assert_eq!(loaded.len(), 1); @@ -197,11 +197,11 @@ fn test_hotkey_binding_multi_target_roundtrip() { assert_eq!(binding.resolved_target_ids(), vec!["target1", "target2"]); assert_eq!(binding.target_ids_string(), "target1,target2"); - save_bindings(&[binding.clone()], &temp_dir).unwrap(); + save_bindings(std::slice::from_ref(&binding), &temp_dir).unwrap(); let loaded = load_bindings(&temp_dir).unwrap(); assert_eq!(loaded.len(), 1); - save_bindings(&[binding.clone()], &temp_dir).unwrap(); + save_bindings(std::slice::from_ref(&binding), &temp_dir).unwrap(); let loaded = load_bindings(&temp_dir).unwrap(); assert_eq!(loaded.len(), 1); @@ -1341,7 +1341,7 @@ fn test_strip_newlines_config_roundtrip() { response_pipe: None, }; - save_targets(&[target.clone()], &temp_dir).unwrap(); + save_targets(std::slice::from_ref(&target), &temp_dir).unwrap(); let loaded = load_targets(&temp_dir).unwrap(); assert_eq!(loaded.len(), 1); diff --git a/crates/voxctrl-text/src/lib.rs b/crates/voxctrl-text/src/lib.rs index 538da0af..af73ac72 100644 --- a/crates/voxctrl-text/src/lib.rs +++ b/crates/voxctrl-text/src/lib.rs @@ -202,7 +202,7 @@ pub fn correct_custom_vocabulary(text: &str, custom_vocab: &[String]) -> String } // 1. Process multi-word phrases first (longest first) - multi_word.sort_by(|a, b| b.len().cmp(&a.len())); + multi_word.sort_by_key(|w| std::cmp::Reverse(w.len())); if !multi_word.is_empty() { let re_word = word_re(); @@ -390,7 +390,9 @@ mod tests { } /// The textbook full-table implementation, kept here as the reference the - /// rolling-row version with its early exit has to agree with. + /// rolling-row version with its early exit has to agree with — written + /// the textbook way on purpose, indices and all. + #[allow(clippy::needless_range_loop)] fn naive_distance(s1: &str, s2: &str) -> usize { let a: Vec = s1.chars().collect(); let b: Vec = s2.chars().collect(); diff --git a/crates/voxctrl-text/src/reference.rs b/crates/voxctrl-text/src/reference.rs index 1341f423..f40e640f 100644 --- a/crates/voxctrl-text/src/reference.rs +++ b/crates/voxctrl-text/src/reference.rs @@ -1,6 +1,7 @@ //! Reference copies of the pre-optimization implementations, kept only for the //! differential test below. Verbatim from 6195ee0. -#![allow(dead_code)] +// Verbatim, so they are exempt from lints as well as from use. +#![allow(dead_code, clippy::all)] use std::collections::HashMap; use regex::Regex; diff --git a/crates/voxctrl-tts/src/engine.rs b/crates/voxctrl-tts/src/engine.rs index 995ba0c8..9c00cdb2 100644 --- a/crates/voxctrl-tts/src/engine.rs +++ b/crates/voxctrl-tts/src/engine.rs @@ -50,7 +50,9 @@ pub enum TtsCommand { /// Live config swap — also how the memory policy reaches a running worker, /// so the tray toggle never has to tear down the engine (and its audio /// device) just to change it. - UpdateConfig(TtsConfig), + /// Boxed: the config is by far the largest payload, and unboxed it would + /// make every command on the queue that size. + UpdateConfig(Box), /// Load the model now (and restart the idle countdown) without speaking. /// Sent as soon as VoxCtrl knows speech is likely — e.g. the moment a /// recording starts — so the load overlaps with the user still talking. @@ -63,7 +65,7 @@ static ACTIVE_SINK: std::sync::Mutex>> = std: pub fn stop_current_playback() { let mut guard = ACTIVE_SINK.lock().unwrap(); if let Some(ref sink) = *guard { - let _ = sink.stop(); + sink.stop(); } *guard = None; } @@ -115,7 +117,7 @@ impl TtsEngineHandle { } pub fn update_config(&self, config: TtsConfig) { - let _ = self.tx.send(TtsCommand::UpdateConfig(config)); + let _ = self.tx.send(TtsCommand::UpdateConfig(Box::new(config))); } pub fn shutdown(&self) { @@ -310,7 +312,7 @@ impl TtsEngineWorker { new_cfg.engine, new_cfg.memory_mode ); let was_unloading = current_config.unloads_when_idle(); - current_config = new_cfg; + current_config = *new_cfg; // Switching to on-demand starts the clock now rather than // dropping a model that may be about to be used again. last_used = Instant::now(); diff --git a/crates/voxctrl-tts/src/inflect/phonemes.rs b/crates/voxctrl-tts/src/inflect/phonemes.rs index 5106535c..bc9c7a6a 100644 --- a/crates/voxctrl-tts/src/inflect/phonemes.rs +++ b/crates/voxctrl-tts/src/inflect/phonemes.rs @@ -280,6 +280,10 @@ impl PhonemeVocab { self.map.len() } + pub fn is_empty(&self) -> bool { + self.map.is_empty() + } + fn id(&self, symbol: &str) -> Option { self.map.get(symbol).copied() } diff --git a/src-tauri/src/installer.rs b/src-tauri/src/installer.rs index c1448e73..366b77d6 100644 --- a/src-tauri/src/installer.rs +++ b/src-tauri/src/installer.rs @@ -450,6 +450,7 @@ mod tests { } #[tokio::test] + #[allow(clippy::await_holding_lock)] // see get_env_lock async fn test_run_gui_installer_success() { let _lock = crate::test_utils::get_env_lock().lock().unwrap(); std::env::set_var("VOXCTRL_PKG_MANAGER_MOCK", "apt"); @@ -469,6 +470,7 @@ mod tests { } #[tokio::test] + #[allow(clippy::await_holding_lock)] // see get_env_lock async fn test_run_gui_installer_failure() { let _lock = crate::test_utils::get_env_lock().lock().unwrap(); std::env::set_var("VOXCTRL_PKG_MANAGER_MOCK", "apt"); @@ -488,6 +490,7 @@ mod tests { } #[tokio::test] + #[allow(clippy::await_holding_lock)] // see get_env_lock async fn test_run_gui_installer_without_pkexec_explains_itself() { // Without polkit the one-click setup cannot run at all. Failing with a // bare "setup failed" leaves the user with no way forward, so the error diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 1ae5ef84..e8a661b9 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -133,6 +133,13 @@ pub mod test_utils { use std::sync::{Mutex, OnceLock}; static ENV_LOCK: OnceLock> = OnceLock::new(); + /// Serializes tests that change process-wide environment variables. + /// + /// Async tests hold it across `.await` on purpose: the environment has to + /// stay set for the whole test. That is sound here because every + /// `#[tokio::test]` runs on its own thread and runtime, so a test waiting + /// for the lock blocks only itself; those tests allow + /// `clippy::await_holding_lock` for that reason. pub fn get_env_lock() -> &'static Mutex<()> { ENV_LOCK.get_or_init(|| Mutex::new(())) } @@ -231,7 +238,7 @@ pub fn run() { ) { } - let domain = b"libayatana-appindicator\0".as_ptr() as *const std::os::raw::c_char; + let domain = c"libayatana-appindicator".as_ptr(); g_log_set_handler(domain, 16, Some(dummy_log_handler), std::ptr::null_mut()); } } @@ -394,9 +401,7 @@ pub fn run() { let (audio_level_tx, audio_level_rx) = crossbeam_channel::bounded::(128); { - let audio_cfg = cfg_data.audio.clone(); let recorder = voxctrl_audio::AudioRecorder::new( - audio_cfg, app_state.recording.clone(), app_state.monitoring.clone(), app_state.dynamic_stream.clone(), @@ -531,13 +536,13 @@ pub fn run() { } // Start the TTS worker and the response-pipe listeners - services::setup_tts_and_fifos(&app.handle(), app_state.clone()); + services::setup_tts_and_fifos(app.handle(), app_state.clone()); // Register Speak target callback - services::register_speak_target(&app.handle()); + services::register_speak_target(app.handle()); // Register Command trigger target callback - services::register_command_trigger_target(&app.handle()); + services::register_command_trigger_target(app.handle()); // Setup watcher for hotkey permissions #[cfg(target_os = "linux")] diff --git a/src-tauri/src/services.rs b/src-tauri/src/services.rs index 32e74ea3..6e4fa822 100644 --- a/src-tauri/src/services.rs +++ b/src-tauri/src/services.rs @@ -6,91 +6,79 @@ use voxctrl_mcp::McpCallbacks; use crate::state::AppState; impl McpCallbacks for AppState { - fn transcribe_voice( - &self, - timeout_secs: f64, - ) -> impl std::future::Future> + Send { - async move { - use std::sync::atomic::Ordering; - use tokio::time::{sleep, Duration}; - - // Snapshot the current version counter BEFORE starting. The delivery - // thread increments it each time a new result is written to last_text. - // Polling for version > baseline_version guarantees we only accept a - // result from THIS recording session, never a stale prior-session value. - let baseline_version = self.last_text_version.load(Ordering::SeqCst); - - self.set_mcp_recording(true); - - // Start recording, interrupting any response being spoken. - self.begin_recording().await; - - // Spawn a timer to automatically stop recording after timeout_secs. - let recording = self.recording.clone(); - let audio_tx = self.audio_tx.clone(); - tokio::spawn(async move { - sleep(Duration::from_secs_f64(timeout_secs)).await; - recording.store(false, Ordering::SeqCst); - let _ = audio_tx.send(Vec::new()); - }); - - // Wait until recording stops (timer or manual stop). - while self.is_recording() { - sleep(Duration::from_millis(50)).await; - } + async fn transcribe_voice(&self, timeout_secs: f64) -> anyhow::Result { + use std::sync::atomic::Ordering; + use tokio::time::{sleep, Duration}; + + // Snapshot the current version counter BEFORE starting. The delivery + // thread increments it each time a new result is written to last_text. + // Polling for version > baseline_version guarantees we only accept a + // result from THIS recording session, never a stale prior-session value. + let baseline_version = self.last_text_version.load(Ordering::SeqCst); + + self.set_mcp_recording(true); + + // Start recording, interrupting any response being spoken. + self.begin_recording().await; + + // Spawn a timer to automatically stop recording after timeout_secs. + let recording = self.recording.clone(); + let audio_tx = self.audio_tx.clone(); + tokio::spawn(async move { + sleep(Duration::from_secs_f64(timeout_secs)).await; + recording.store(false, Ordering::SeqCst); + let _ = audio_tx.send(Vec::new()); + }); - self.set_mcp_recording(false); - - // Wait for inference + delivery to produce a new last_text. - // last_text is now written BEFORE delivery targets run, so this poll - // completes as soon as inference finishes rather than waiting for slow - // delivery targets. 3 s budget is kept as a safety net. - let poll_limit = 60; // 60 × 50 ms = 3.0 s - let mut text = String::new(); - for _ in 0..poll_limit { - sleep(Duration::from_millis(50)).await; - if self.last_text_version.load(Ordering::SeqCst) > baseline_version { - text = self.last_text.lock().await.clone(); - break; - } - } + // Wait until recording stops (timer or manual stop). + while self.is_recording() { + sleep(Duration::from_millis(50)).await; + } - if text.is_empty() { - Ok("(no speech detected)".to_string()) - } else { - Ok(text) + self.set_mcp_recording(false); + + // Wait for inference + delivery to produce a new last_text. + // last_text is now written BEFORE delivery targets run, so this poll + // completes as soon as inference finishes rather than waiting for slow + // delivery targets. 3 s budget is kept as a safety net. + let poll_limit = 60; // 60 × 50 ms = 3.0 s + let mut text = String::new(); + for _ in 0..poll_limit { + sleep(Duration::from_millis(50)).await; + if self.last_text_version.load(Ordering::SeqCst) > baseline_version { + text = self.last_text.lock().await.clone(); + break; } } + + if text.is_empty() { + Ok("(no speech detected)".to_string()) + } else { + Ok(text) + } } - fn speak_text( - &self, - text: String, - ) -> impl std::future::Future> + Send { - async move { - let handle = self.tts_handle.lock().await; - if let Some(ref tts) = *handle { - tts.speak(text); - } - Ok(()) + async fn speak_text(&self, text: String) -> anyhow::Result<()> { + let handle = self.tts_handle.lock().await; + if let Some(ref tts) = *handle { + tts.speak(text); } + Ok(()) } - fn get_status(&self) -> impl std::future::Future + Send { - async move { (self.is_recording(), self.is_speaking()) } + async fn get_status(&self) -> (bool, bool) { + (self.is_recording(), self.is_speaking()) } - fn default_record_timeout(&self) -> impl std::future::Future + Send { - async move { - let configured = self.config.lock().await.data.mcp.record_timeout; - // A zero or negative timeout would stop the recording before the - // user could say anything, so fall back to the config default - // rather than trusting a hand-edited config.json. - if configured.is_finite() && configured > 0.0 { - configured - } else { - voxctrl_config::McpConfig::default().record_timeout - } + async fn default_record_timeout(&self) -> f64 { + let configured = self.config.lock().await.data.mcp.record_timeout; + // A zero or negative timeout would stop the recording before the + // user could say anything, so fall back to the config default + // rather than trusting a hand-edited config.json. + if configured.is_finite() && configured > 0.0 { + configured + } else { + voxctrl_config::McpConfig::default().record_timeout } } } @@ -314,15 +302,14 @@ pub fn auto_download_speech_model_if_needed( // fetch, whether to open Settings — is a step the wizard asks about, so // making them here first would download the wrong model and bury the // wizard behind a window the user did not ask for. - if !cfg_data.ui.setup_completed { - if app.get_webview_window(crate::window::WIZARD_WINDOW).is_some() { - if let Err(e) = crate::window::open_wizard_window(&app.handle().clone()) { - tracing::error!("Could not open the setup wizard: {e}"); - } - return; + // + // Without a wizard window in this build, fall through to the old behaviour + // rather than leaving a new install with no visible setup at all. + if !cfg_data.ui.setup_completed && app.get_webview_window(crate::window::WIZARD_WINDOW).is_some() { + if let Err(e) = crate::window::open_wizard_window(app.handle()) { + tracing::error!("Could not open the setup wizard: {e}"); } - // No wizard window in this build: fall through to the old behaviour - // rather than leaving a new install with no visible setup at all. + return; } let show_settings = cfg_data.ui.auto_show_settings; diff --git a/src-tauri/src/tests.rs b/src-tauri/src/tests.rs index 42f92444..52722cf3 100644 --- a/src-tauri/src/tests.rs +++ b/src-tauri/src/tests.rs @@ -636,6 +636,7 @@ fn hotkey_status_honours_the_kde_manual_enable_test_override() { } #[tokio::test] +#[allow(clippy::await_holding_lock)] // see get_env_lock async fn open_shortcut_settings_prefers_the_kde_module_when_available() { let _lock = crate::test_utils::get_env_lock().lock().unwrap(); std::env::set_var("VOXCTRL_FAKE_COMMANDS", "kcmshell6,gnome-control-center"); @@ -649,6 +650,7 @@ async fn open_shortcut_settings_prefers_the_kde_module_when_available() { } #[tokio::test] +#[allow(clippy::await_holding_lock)] // see get_env_lock async fn open_shortcut_settings_falls_back_down_the_candidate_list() { // Only the last-resort GNOME panel is "installed" — the command must // still succeed by walking past every unavailable candidate first, @@ -665,6 +667,7 @@ async fn open_shortcut_settings_falls_back_down_the_candidate_list() { } #[tokio::test] +#[allow(clippy::await_holding_lock)] // see get_env_lock async fn open_shortcut_settings_explains_itself_when_nothing_is_installed() { let _lock = crate::test_utils::get_env_lock().lock().unwrap(); std::env::set_var("VOXCTRL_FAKE_COMMANDS", ""); @@ -784,7 +787,7 @@ async fn test_speak_target_delivery() { let spoken = Arc::new(Mutex::new(String::new())); let spoken_clone = spoken.clone(); - let _ = voxctrl_routing::targets::set_speak_callback(Arc::new(move |text| { + voxctrl_routing::targets::set_speak_callback(Arc::new(move |text| { *spoken_clone.lock().unwrap() = text.to_string(); })); From afd4d52cb65e250388a5fbb493f9344b8f9d1970 Mon Sep 17 00:00:00 2001 From: Josh Rufer Date: Sat, 26 Sep 2026 06:55:38 -0500 Subject: [PATCH 14/14] Bump version to v0.7.1 --- Cargo.lock | 32 ++++++++++++++++---------------- Cargo.toml | 2 +- package.json | 2 +- src-tauri/tauri.conf.json | 2 +- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4ef44e32..63f9534d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6695,7 +6695,7 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "voxctrl-app" -version = "0.7.0" +version = "0.7.1" dependencies = [ "anyhow", "chrono", @@ -6734,7 +6734,7 @@ dependencies = [ [[package]] name = "voxctrl-audio" -version = "0.7.0" +version = "0.7.1" dependencies = [ "anyhow", "cpal", @@ -6748,7 +6748,7 @@ dependencies = [ [[package]] name = "voxctrl-bugreport" -version = "0.7.0" +version = "0.7.1" dependencies = [ "chrono", "dirs 5.0.1", @@ -6766,7 +6766,7 @@ dependencies = [ [[package]] name = "voxctrl-config" -version = "0.7.0" +version = "0.7.1" dependencies = [ "dirs 5.0.1", "serde", @@ -6779,7 +6779,7 @@ dependencies = [ [[package]] name = "voxctrl-dbus" -version = "0.7.0" +version = "0.7.1" dependencies = [ "anyhow", "serde", @@ -6791,7 +6791,7 @@ dependencies = [ [[package]] name = "voxctrl-hotkeys" -version = "0.7.0" +version = "0.7.1" dependencies = [ "anyhow", "ashpd", @@ -6813,7 +6813,7 @@ dependencies = [ [[package]] name = "voxctrl-inference" -version = "0.7.0" +version = "0.7.1" dependencies = [ "anyhow", "bytes", @@ -6844,7 +6844,7 @@ dependencies = [ [[package]] name = "voxctrl-inject" -version = "0.7.0" +version = "0.7.1" dependencies = [ "anyhow", "arboard", @@ -6858,7 +6858,7 @@ dependencies = [ [[package]] name = "voxctrl-llm" -version = "0.7.0" +version = "0.7.1" dependencies = [ "anyhow", "reqwest 0.12.28", @@ -6872,7 +6872,7 @@ dependencies = [ [[package]] name = "voxctrl-llm-sidecar" -version = "0.7.0" +version = "0.7.1" dependencies = [ "encoding_rs", "llama-cpp-2", @@ -6884,7 +6884,7 @@ dependencies = [ [[package]] name = "voxctrl-mcp" -version = "0.7.0" +version = "0.7.1" dependencies = [ "anyhow", "serde", @@ -6896,7 +6896,7 @@ dependencies = [ [[package]] name = "voxctrl-routing" -version = "0.7.0" +version = "0.7.1" dependencies = [ "anyhow", "arboard", @@ -6922,14 +6922,14 @@ dependencies = [ [[package]] name = "voxctrl-text" -version = "0.7.0" +version = "0.7.1" dependencies = [ "regex", ] [[package]] name = "voxctrl-tts" -version = "0.7.0" +version = "0.7.1" dependencies = [ "anyhow", "cc", @@ -6953,7 +6953,7 @@ dependencies = [ [[package]] name = "voxctrl-update" -version = "0.7.0" +version = "0.7.1" dependencies = [ "anyhow", "futures-util", @@ -6971,7 +6971,7 @@ dependencies = [ [[package]] name = "voxctrl-winput" -version = "0.7.0" +version = "0.7.1" dependencies = [ "anyhow", "arboard", diff --git a/Cargo.toml b/Cargo.toml index e36fe76a..e5b8d1bb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ members = [ resolver = "2" [workspace.package] -version = "0.7.0" +version = "0.7.1" edition = "2021" authors = ["VoxCtrl Contributors"] license = "MIT" diff --git a/package.json b/package.json index 34484008..b2b24f56 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "voxctrl", "private": true, - "version": "0.7.0", + "version": "0.7.1", "type": "module", "scripts": { "predev": "pkill -x voxctrl 2>/dev/null || true; fuser -k 5173/tcp 2>/dev/null || true", diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index e097d7e0..09ac7605 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "VoxCtrl", - "version": "0.7.0", + "version": "0.7.1", "identifier": "ai.voxctrl.app", "build": { "frontendDist": "../dist",