From bba2e7d738ab962df44249f9a67d2da1a6f534d9 Mon Sep 17 00:00:00 2001 From: Odin Date: Tue, 18 Aug 2026 16:55:26 -0400 Subject: [PATCH] fix: close context-budget integration seams --- coverage-baseline.json | 4 +- src/agents/loop_bridge.py | 6 + src/agents/manager.py | 42 +-- src/config/migrations.py | 251 ++++++++++++++---- src/config/persistence.py | 19 +- src/discord/native_tools/agents_tasks.py | 67 +++-- src/discord/tool_loop.py | 12 + src/tools/autonomous_loop.py | 73 +++-- src/web/api/agents_loops.py | 7 +- src/web/api/llm_admin.py | 38 ++- src/web/api/self_update.py | 2 +- tests/test_chat_loop_recovery.py | 96 +++++++ tests/test_config_ceiling_migration.py | 243 ++++++++++++++++- tests/test_config_persistence.py | 25 ++ tests/test_context_budget_activation.py | 71 +++++ tests/test_loop_error_sanitization.py | 2 +- tests/test_native_agents_tasks.py | 96 ++++++- tests/test_scheduler_agents_reliability.py | 71 ++++- tests/test_trajectory_completeness.py | 2 +- tests/test_web_api_agents_loops.py | 6 +- tests/test_web_api_config_admin.py | 41 +++ tests/test_web_api_self_update.py | 4 +- tests/test_window_observer.py | 111 +++++++- ui/css/style.css | 26 +- .../{index-C9k2-t4j.js => index-1m7Kadw1.js} | 69 ++--- ...{index-CNUGEA9V.css => index-Dd0z3pui.css} | 2 +- ui/dist/index.html | 4 +- ui/js/pages/llm-config.js | 10 +- 28 files changed, 1213 insertions(+), 187 deletions(-) rename ui/dist/assets/{index-C9k2-t4j.js => index-1m7Kadw1.js} (95%) rename ui/dist/assets/{index-CNUGEA9V.css => index-Dd0z3pui.css} (84%) diff --git a/coverage-baseline.json b/coverage-baseline.json index 88fd9372..6c2fbf09 100644 --- a/coverage-baseline.json +++ b/coverage-baseline.json @@ -66,10 +66,10 @@ "statements": 30 }, "src/config/migrations.py": { - "covered": 184, + "covered": 243, "missing": 0, "percent": 100.0, - "statements": 184 + "statements": 243 }, "src/config/schema.py": { "covered": 706, diff --git a/src/agents/loop_bridge.py b/src/agents/loop_bridge.py index 5bc2d93e..67045e95 100644 --- a/src/agents/loop_bridge.py +++ b/src/agents/loop_bridge.py @@ -102,6 +102,7 @@ def spawn_agents_for_loop( max_context_chars: int = 750000, keep_recent_iterations: int = 30, budget_snapshot_provider_factory=None, + generation_plan_provider_factory=None, evidence_recorder=None, ) -> list[str]: """Spawn agents for a loop iteration. @@ -211,6 +212,11 @@ async def _bound_tool_cb( if budget_snapshot_provider_factory is not None else None ), + generation_plan_provider=( + generation_plan_provider_factory(model_override, effort_override) + if generation_plan_provider_factory is not None + else None + ), evidence_recorder=evidence_recorder, ) diff --git a/src/agents/manager.py b/src/agents/manager.py index aa9435ed..1f70855c 100644 --- a/src/agents/manager.py +++ b/src/agents/manager.py @@ -468,16 +468,18 @@ def spawn( max_context_chars: int = 750000, keep_recent_iterations: int = 30, budget_snapshot_provider: Callable | None = None, + generation_plan_provider: Callable | None = None, evidence_recorder: Callable | None = None, ) -> str: """Spawn a new agent. Returns agent_id on success, or 'Error: ...' string. - ``budget_snapshot_provider`` resolves the effective agent model's - ContextBudgetSnapshot per logical generation (live config reaches the - NEXT iteration; the in-flight one keeps its snapshot). Absent, the - spawn-frozen ``max_context_chars`` and the unknown-model fallback - ladder preserve pre-campaign budget behavior. The iteration callback - must implement the required ``generation_state=`` channel. + ``generation_plan_provider`` captures the authoritative serving + identity and ContextBudgetSnapshot once before pre-send compaction; + that exact plan is threaded through every physical attempt and rescue. + ``budget_snapshot_provider`` remains a compatibility fallback for + standalone callers that do not own a full serving identity. The + iteration callback must implement the required ``generation_state=`` + channel. """ # Check the live per-channel admission limit. Existing agents are # never evicted when the setting falls; only subsequent spawns see it. @@ -624,6 +626,7 @@ def spawn( max_context_chars=max_context_chars, keep_recent_iterations=keep_recent_iterations, budget_snapshot_provider=budget_snapshot_provider, + generation_plan_provider=generation_plan_provider, evidence_recorder=evidence_recorder, ) ) @@ -1016,6 +1019,7 @@ async def _run_agent( max_context_chars: int = 750000, keep_recent_iterations: int = 30, budget_snapshot_provider: Callable | None = None, + generation_plan_provider: Callable | None = None, evidence_recorder: Callable | None = None, ) -> None: """Execute an agent's tool loop until completion, error, or timeout. @@ -1095,14 +1099,22 @@ def _check_lifetime() -> bool: except asyncio.QueueEmpty: break - # Per-generation budget snapshot: the effective agent model's - # targets, resolved fresh each iteration (live config and a live - # model change reach the NEXT generation; retries and rescue - # rungs inside one generation reuse this snapshot). Provider - # failure or absence falls back to the spawn-frozen soft value - # and the unknown-model ladder — pre-campaign behavior. + # ONE authoritative plan is captured before any compaction for + # this logical generation. Its serving identity and budget snapshot + # then govern the soft pass, latch pass, physical request, and every + # rescue rung. Live config reaches only the next generation. + generation_state: dict = {} budget_snapshot = None - if budget_snapshot_provider is not None: + if generation_plan_provider is not None: + try: + plan = generation_plan_provider() + generation_state["plan"] = plan + budget_snapshot = plan.get("snapshot") if isinstance(plan, dict) else None + except Exception: + log.exception( + "agent generation plan provider failed (non-fatal); using fallback targets" + ) + elif budget_snapshot_provider is not None: try: budget_snapshot = budget_snapshot_provider() except Exception: @@ -1195,8 +1207,8 @@ def _check_lifetime() -> bool: except Exception: log.exception("agent overflow-latch compaction failed (non-fatal)") - # Call LLM with recovery support - generation_state: dict = {} + # Call LLM with recovery support using the plan captured before + # compaction (when one is available). response = await _call_llm_with_recovery( agent, iteration_callback, diff --git a/src/config/migrations.py b/src/config/migrations.py index 8d8bb71d..216450c6 100644 --- a/src/config/migrations.py +++ b/src/config/migrations.py @@ -18,6 +18,7 @@ from __future__ import annotations import contextlib +import hashlib import json import logging import os @@ -39,7 +40,7 @@ _CEILING_PATH = ("openai_codex", "context_compression", "max_context_chars") _MIGRATION_ID = "legacy_max_context_chars_to_auto" -_MARKER_VERSION = 2 +_MARKER_VERSION = 3 _COMPLETION_REASONS = frozenset( { "migrated", @@ -75,11 +76,44 @@ class _ScalarLexeme: token: str +def _config_identity(config_path: str | Path) -> str: + """Stable identity for the config rewrite target. + + The canonical path survives atomic config replacement (unlike inode + identity), makes symlink aliases rendezvous on one identity, and keeps two + config files in one directory distinct. + """ + target = Path(config_path).resolve() + material = b"odin-config-identity-v1\0" + os.fsencode(str(target)) + return hashlib.sha256(material).hexdigest() + + def ceiling_marker_path(config_path: str | Path) -> Path: - """Return the marker beside *config_path* as given (symlink unresolved).""" + """Return this config identity's marker in the unresolved data anchor.""" + launch = Path(config_path).absolute() + return launch.parent / "data" / "config_migrations" / ( + f"{_MIGRATION_ID}.{_config_identity(config_path)}.json" + ) + + +def _legacy_ceiling_marker_path(config_path: str | Path) -> Path: + """The pre-identity directory-wide marker, retained only for upgrade.""" return Path(config_path).absolute().parent / "data" / LEGACY_CEILING_MARKER_NAME +def _shared_ceiling_marker_path(config_path: str | Path) -> Path: + """Alias rendezvous marker beside the canonical rewrite target. + + Launch-local provenance remains in the durable data directory. This second + identity-bound record is what lets aliases in different launch directories + observe one completed migration. + """ + target = Path(config_path).resolve() + return target.parent / ".odin-data" / "config_migrations" / ( + f"{_MIGRATION_ID}.{_config_identity(config_path)}.json" + ) + + def _mapping_value(node: Node, key: str) -> Node | None: """Return one unambiguous mapping value; duplicate keys prove nothing.""" if not isinstance(node, MappingNode): @@ -146,6 +180,7 @@ def _classify_record(record: object) -> _MarkerKind: if set(record) == { "version", "migration", + "config_id", "state", "reason", "completed_at", @@ -154,6 +189,8 @@ def _classify_record(record: object) -> _MarkerKind: type(record["version"]) is int and record["version"] == _MARKER_VERSION and record["migration"] == _MIGRATION_ID + and isinstance(record["config_id"], str) + and len(record["config_id"]) == 64 and record["state"] == "completed" and isinstance(record["reason"], str) and record["reason"] in _COMPLETION_REASONS @@ -161,6 +198,27 @@ def _classify_record(record: object) -> _MarkerKind: ) return _MarkerKind.COMPLETE if valid else _MarkerKind.UNKNOWN + # Version 2 was validated but directory-wide. It can only be adopted when + # found at the legacy launch-local path, never mistaken for an identity- + # bound record at the new path. + if set(record) == { + "version", + "migration", + "state", + "reason", + "completed_at", + }: + valid = ( + type(record["version"]) is int + and record["version"] == 2 + and record["migration"] == _MIGRATION_ID + and record["state"] == "completed" + and isinstance(record["reason"], str) + and record["reason"] in _COMPLETION_REASONS + and _is_utc_timestamp(record["completed_at"]) + ) + return _MarkerKind.PREVERSIONED_COMPLETE if valid else _MarkerKind.UNKNOWN + # Round 1 recorded in-memory reinterpretation without rewriting config.yml. if set(record) == {"migration", "legacy_value", "migrated_at"}: valid = ( @@ -253,19 +311,20 @@ def _atomic_write_marker(marker: Path, record: dict[str, object]) -> None: os.close(directory_fd) -def _completion_record(reason: str) -> dict[str, object]: +def _completion_record(reason: str, config_id: str) -> dict[str, object]: return { "version": _MARKER_VERSION, "migration": _MIGRATION_ID, + "config_id": config_id, "state": "completed", "reason": reason, "completed_at": datetime.now(UTC).isoformat(), } -def _write_required(marker: Path, reason: str, purpose: str) -> None: +def _write_required(marker: Path, reason: str, purpose: str, config_id: str) -> None: try: - _atomic_write_marker(marker, _completion_record(reason)) + _atomic_write_marker(marker, _completion_record(reason, config_id)) except OSError as exc: log.error("Could not %s at %s: %s", purpose, marker, exc) raise MigrationCompletionError( @@ -273,9 +332,9 @@ def _write_required(marker: Path, reason: str, purpose: str) -> None: ) from exc -def _record_after_rewrite(marker: Path) -> None: +def _record_after_rewrite(marker: Path, config_id: str) -> None: try: - _atomic_write_marker(marker, _completion_record("migrated")) + _atomic_write_marker(marker, _completion_record("migrated", config_id)) except OSError as exc: # The ambiguous value is already gone. A later load takes the # non-legacy branch and safely retries this completion write. @@ -287,6 +346,30 @@ def _record_after_rewrite(marker: Path) -> None: ) +def _read_identity_marker(marker: Path, config_id: str) -> _MarkerKind: + kind = _read_marker(marker) + if kind is not _MarkerKind.COMPLETE: + return kind + try: + record = json.loads(marker.read_text(encoding="utf-8")) + except (OSError, UnicodeError, json.JSONDecodeError): + return _MarkerKind.UNREADABLE + return kind if record.get("config_id") == config_id else _MarkerKind.UNKNOWN + + +def _write_completion_pair( + marker: Path, + shared_marker: Path, + reason: str, + purpose: str, + config_id: str, +) -> None: + # Publish shared provenance first: once a launch-local marker says complete, + # every alias must already have a canonical rendezvous record to consult. + _write_required(shared_marker, reason, purpose, config_id) + _write_required(marker, reason, purpose, config_id) + + def _set_runtime_auto(data: dict) -> None: codex = data.get("openai_codex") if not isinstance(codex, dict): @@ -297,69 +380,131 @@ def _set_runtime_auto(data: dict) -> None: def apply_legacy_ceiling_migration(data: dict, config_path: str | Path, original_raw: str) -> None: - """Apply the versioned one-time legacy-ceiling migration. - - A vacuous completion write is mandatory. If it is blocked, startup fails - rather than pretending the one-time gate closed; this prevents a later - intentional 750000 from being erased on a subsequent load. - """ + """Apply the identity-bound one-time legacy-ceiling migration.""" + config_id = _config_identity(config_path) marker = ceiling_marker_path(config_path) - marker_kind = _read_marker(marker) + shared_marker = _shared_ceiling_marker_path(config_path) + marker_kind = _read_identity_marker(marker, config_id) + shared_kind = _read_identity_marker(shared_marker, config_id) - if marker_kind is _MarkerKind.COMPLETE: + invalid = { + _MarkerKind.EMPTY, + _MarkerKind.CORRUPT, + _MarkerKind.DIRECTORY, + _MarkerKind.UNKNOWN, + _MarkerKind.UNREADABLE, + } + for path, kind in ((marker, marker_kind), (shared_marker, shared_kind)): + if kind in invalid: + log.error( + "Ceiling-migration record at %s is %s; refusing to guess at migration provenance.", + path, + kind.value, + ) + raise MigrationCompletionError( + "ceiling-migration record is invalid or unreadable; inspect it before retrying" + ) + + if marker_kind is _MarkerKind.COMPLETE and shared_kind is _MarkerKind.COMPLETE: return - - if marker_kind is _MarkerKind.ROUND1_OPERATOR: + if shared_kind is _MarkerKind.COMPLETE: + # A different symlink alias already completed this config identity. _write_required( marker, - "prior_operator_saved", - "upgrade the ceiling-migration completion record", + "upgraded_preversioned_completion", + "record alias-local ceiling-migration completion", + config_id, ) return - - if marker_kind is _MarkerKind.PREVERSIONED_COMPLETE: + if marker_kind is _MarkerKind.COMPLETE: _write_required( - marker, + shared_marker, "upgraded_preversioned_completion", - "upgrade the ceiling-migration completion record", + "repair shared ceiling-migration completion", + config_id, ) return - - invalid = { - _MarkerKind.EMPTY, - _MarkerKind.CORRUPT, - _MarkerKind.DIRECTORY, - _MarkerKind.UNKNOWN, - _MarkerKind.UNREADABLE, - } - if marker_kind in invalid: - # Invalid prior state cannot safely distinguish an interrupted - # migration from a completed gate followed by an intentional 750000. - # Do not overwrite the only remaining provenance evidence. - log.error( - "Ceiling-migration record at %s is %s; refusing to guess at migration provenance.", - marker, - marker_kind.value, + if marker_kind in { + _MarkerKind.ROUND1_OPERATOR, + _MarkerKind.PREVERSIONED_COMPLETE, + }: + reason = ( + "prior_operator_saved" + if marker_kind is _MarkerKind.ROUND1_OPERATOR + else "upgraded_preversioned_completion" ) - raise MigrationCompletionError( - "ceiling-migration record is invalid or unreadable; inspect it before retrying" + _write_completion_pair( + marker, + shared_marker, + reason, + "upgrade the ceiling-migration completion record", + config_id, ) - + return if marker_kind is _MarkerKind.ROUND1_LEGACY: log.info("Upgrading round-1 legacy migration provenance at %s.", marker) - if not _is_shipped_legacy_literal(original_raw): + # Upgrade the old launch-directory marker only when no identity-bound marker + # exists. Its provenance remains fail-closed, but it no longer suppresses a + # distinct config in the same directory once one identity has been bound. + # A legacy marker plus any new identity marker is an already-upgraded + # directory; sibling identities must not inspect or inherit the old record. + legacy_marker = _legacy_ceiling_marker_path(config_path) + identity_dir = marker.parent + identity_markers_exist = False + try: + identity_markers_exist = identity_dir.is_dir() and any(identity_dir.iterdir()) + except OSError as exc: + raise MigrationCompletionError( + "could not inspect identity-bound ceiling-migration records" + ) from exc + legacy_kind = ( + _MarkerKind.MISSING if identity_markers_exist else _read_marker(legacy_marker) + ) + if legacy_kind is _MarkerKind.COMPLETE: + # A v3 legacy-path record is already bound. A different config in the + # same launch directory must ignore it rather than inherit completion. + try: + legacy_record = json.loads(legacy_marker.read_text(encoding="utf-8")) + except (OSError, UnicodeError, json.JSONDecodeError): + legacy_kind = _MarkerKind.UNREADABLE + else: + if legacy_record.get("config_id") != config_id: + legacy_kind = _MarkerKind.MISSING + if legacy_kind in invalid: + raise MigrationCompletionError( + "legacy ceiling-migration record is invalid or unreadable; inspect it before retrying" + ) + if legacy_kind in { + _MarkerKind.COMPLETE, + _MarkerKind.ROUND1_OPERATOR, + _MarkerKind.PREVERSIONED_COMPLETE, + }: + reason = ( + "prior_operator_saved" + if legacy_kind is _MarkerKind.ROUND1_OPERATOR + else "upgraded_preversioned_completion" + ) + _write_completion_pair(marker, shared_marker, reason, + "upgrade the ceiling-migration completion record", config_id) + # Bind the previously directory-wide provenance to the one config that + # adopted it. Later sibling configs can no longer inherit it. _write_required( - marker, - "not_applicable", - "record vacuous ceiling-migration completion", + legacy_marker, + reason, + "bind legacy ceiling-migration completion to its config", + config_id, ) return + if legacy_kind is _MarkerKind.ROUND1_LEGACY: + log.info("Upgrading round-1 legacy migration provenance at %s.", legacy_marker) + + if not _is_shipped_legacy_literal(original_raw): + _write_completion_pair(marker, shared_marker, "not_applicable", + "record vacuous ceiling-migration completion", config_id) + return try: - # Resolve only the rewrite target. Replacing the unresolved packaged - # config path would sever its /opt -> /etc symlink; the marker remains - # beside the unresolved path in the backed-up data directory. from .persistence import patch_config_paths patch_config_paths([(_CEILING_PATH, None)], path=Path(config_path).resolve()) @@ -367,8 +512,7 @@ def apply_legacy_ceiling_migration(data: dict, config_path: str | Path, original _set_runtime_auto(data) log.warning( "Could not rewrite legacy max_context_chars to auto (%s); " - "interpreting as auto for this boot only — the migration retries " - "next boot.", + "interpreting as auto for this boot only — the migration retries next boot.", exc, ) return @@ -381,4 +525,7 @@ def apply_legacy_ceiling_migration(data: dict, config_path: str | Path, original LEGACY_MAX_CONTEXT_CHARS, LEGACY_MAX_CONTEXT_CHARS, ) - _record_after_rewrite(marker) + # Shared first, then launch-local. Failure after rewrite is self-healing: + # the unambiguous null takes the vacuous branch on the next boot. + _record_after_rewrite(shared_marker, config_id) + _record_after_rewrite(marker, config_id) diff --git a/src/config/persistence.py b/src/config/persistence.py index 54d7eb19..51ed3774 100644 --- a/src/config/persistence.py +++ b/src/config/persistence.py @@ -136,18 +136,33 @@ def submitted_leaves( def walk(new: Mapping[str, Any], known: Any, model: Any, prefix: tuple[str, ...]) -> None: lookup = _field_lookup(model) if model is not None else {} for key, value in new.items(): - canonical, nested, aliases = lookup.get(str(key), (str(key), None, ())) + field = lookup.get(str(key)) + canonical, nested, aliases = field or (str(key), None, ()) path = (*prefix, canonical) if not isinstance(known, Mapping) or canonical not in known: # Validation dropped this path (unknown/removed field) — the # runtime ignores it, so disk must not carry it either. continue known_value = known[canonical] - if isinstance(value, Mapping) and isinstance(known_value, Mapping): + if ( + isinstance(value, Mapping) + and isinstance(known_value, Mapping) + and nested is not None + ): + # A nested BaseModel has schema-owned child fields, so preserve + # the ordinary leaf-only walk through those children. walk(value, known_value, nested, path) + elif isinstance(value, Mapping) and isinstance(known_value, Mapping) and field is None: + # Schema-less callers retain the historical recursive helper + # behavior. Config persistence always supplies a model class. + walk(value, known_value, None, path) elif aliases: out.append((path, known_value, aliases)) else: + # A schema-owned Mapping (for example context-budget overrides) + # is ONE normalized leaf. Its validator may canonicalize keys, + # so walking raw submitted keys against the validated mapping + # would drop aliases that changed spelling during validation. out.append((path, known_value)) walk(updates, validated, model_cls, ()) diff --git a/src/discord/native_tools/agents_tasks.py b/src/discord/native_tools/agents_tasks.py index 7d933ca0..ffcce5a7 100644 --- a/src/discord/native_tools/agents_tasks.py +++ b/src/discord/native_tools/agents_tasks.py @@ -202,21 +202,22 @@ def _generation_budget_snapshot(cfg, client, resolved_model, compressor, observe ) -def _gateway_client_for_config(gateway, config): - """Resolve a gateway client against an already-read root config. +def _gateway_serving_for_config(gateway, config): + """Resolve one serving identity against an already-read root config. - Production gateways accept that object for an atomic identity capture; - narrow test doubles retain their historical ``active_client`` shape. + Production gateways return the immutable provider/client/model/effort + tuple. Narrow test doubles retain their historical ``active_client`` shape; + the generation-plan builder normalizes that legacy value conservatively. """ capture = getattr(gateway, "capture_serving_identity", None) if capture is not None: - return capture(config).client + return capture(config) return gateway.active_client def _capture_agent_generation_plan( get_config, - get_client, + get_serving, get_compressor, *, model_override: str | None, @@ -233,7 +234,17 @@ def _capture_agent_generation_plan( mutation could otherwise change a rescue retry. """ cfg = get_config() - client = get_client(cfg) + serving = get_serving(cfg) + if hasattr(serving, "client") and hasattr(serving, "provider"): + provider = serving.provider + client = serving.client + else: + client = serving + provider = ( + "codex" + if client is None or hasattr(client, "reasoning_effort") + else str(getattr(client, "provider_name", "unknown")) + ) requested_effort, resolved_model = _agent_llm_policy( cfg, client, @@ -246,6 +257,7 @@ def _capture_agent_generation_plan( if effective_effort is None and hasattr(client, "reasoning_effort"): raise ValueError("Codex client has no resolved reasoning effort") return { + "provider": provider, "client": client, "effort": effective_effort, "model": resolved_model, @@ -588,12 +600,14 @@ async def _iteration_cb( prompt: str, channel: object, prev_context: str | None, + cancel_event: asyncio.Event, ) -> str: return await self._tool_loop.run_autonomous( prompt, channel, prev_context, str(message.author.id), + cancel_event=cancel_event, ) result = self._loop_manager.start_loop( @@ -632,12 +646,12 @@ async def _iteration_cb( f"(every {max(10, interval)}s, mode={mode}, max {max_iterations} iterations)" ) - def _handle_stop_loop(self, inp: dict) -> str: + async def _handle_stop_loop(self, inp: dict) -> str: """Stop an autonomous loop.""" loop_id = inp.get("loop_id", "") if not loop_id: return "A 'loop_id' is required." - result = self._loop_manager.stop_loop(loop_id) + result = await self._loop_manager.stop_loop(loop_id) # Lifecycle webhook: loop.stopped fire_and_forget( self._turn_recorder._emit_lifecycle_event( @@ -666,6 +680,7 @@ async def _agent_generate( tool_defs: list[dict], agent_effort: str, resolved_model, + provider: str = "codex", ): """One agent LLM generation through the shared recovery policy. @@ -695,7 +710,9 @@ async def _agent_generate( # deadline (or count a capacity failure) for a request that could not # legally be sent. preflight_incompatible_effort(client, model=resolved_model, effort=effective_effort) - breaker = self._llm_gateway.capacity_breaker_for(resolved_model) + breaker = self._llm_gateway.capacity_breaker_for( + resolved_model, provider=provider + ) policy = self._llm_gateway.recovery_policy() async def _attempt(): @@ -798,7 +815,7 @@ async def _iteration_cb( if plan is None: plan = _capture_agent_generation_plan( self._get_config, - lambda config: _gateway_client_for_config(self._llm_gateway, config), + lambda config: _gateway_serving_for_config(self._llm_gateway, config), self._get_context_compressor, model_override=model_override, effort_override=effort_override, @@ -813,6 +830,7 @@ async def _iteration_cb( tool_defs=tool_defs, agent_effort=plan["effort"], resolved_model=plan["model"], + provider=plan["provider"], ) return { "text": resp.text, @@ -912,11 +930,12 @@ async def _tool_exec_cb(tool_name: str, tool_input: dict) -> str: keep_recent_iterations=self._get_context_compressor().keep_recent_iterations if self._get_context_compressor() else 30, - budget_snapshot_provider=_make_budget_snapshot_provider( + generation_plan_provider=lambda: _capture_agent_generation_plan( self._get_config, - lambda: self._llm_gateway.active_client, + lambda config: _gateway_serving_for_config(self._llm_gateway, config), self._get_context_compressor, - model_override, + model_override=model_override, + effort_override=effort_override, observer=self._window_observer, ), evidence_recorder=_make_evidence_recorder(self._window_observer), @@ -1151,7 +1170,7 @@ async def _iteration_cb(messages, sys, tool_defs, *, generation_state: dict): if plan is None: plan = _capture_agent_generation_plan( self._get_config, - lambda config: _gateway_client_for_config(self._llm_gateway, config), + lambda config: _gateway_serving_for_config(self._llm_gateway, config), self._get_context_compressor, model_override=model_override, effort_override=effort_override, @@ -1166,6 +1185,7 @@ async def _iteration_cb(messages, sys, tool_defs, *, generation_state: dict): tool_defs=tool_defs, agent_effort=plan["effort"], resolved_model=plan["model"], + provider=plan["provider"], ) return { "text": resp.text or "", @@ -1221,12 +1241,17 @@ async def _tool_cb(tool_name, tool_input): context_compression_enabled=bool(cc), max_context_chars=cc.resolved_max_context_chars if cc else 750000, keep_recent_iterations=cc.keep_recent_iterations if cc else 30, - budget_snapshot_provider_factory=lambda mo: _make_budget_snapshot_provider( - self._get_config, - lambda: self._llm_gateway.active_client, - self._get_context_compressor, - mo, - observer=self._window_observer, + generation_plan_provider_factory=lambda mo, eo: ( + lambda: _capture_agent_generation_plan( + self._get_config, + lambda config: _gateway_serving_for_config( + self._llm_gateway, config + ), + self._get_context_compressor, + model_override=mo, + effort_override=eo, + observer=self._window_observer, + ) ), evidence_recorder=_make_evidence_recorder(self._window_observer), ) diff --git a/src/discord/tool_loop.py b/src/discord/tool_loop.py index 1230301a..82102212 100644 --- a/src/discord/tool_loop.py +++ b/src/discord/tool_loop.py @@ -2313,6 +2313,8 @@ async def run_autonomous( prev_context: str | None, user_id: str, policy: LoopPolicy = AUTONOMOUS_POLICY, + *, + cancel_event: asyncio.Event | None = None, ) -> str: """Run a single loop iteration through Codex with full tool access. @@ -2325,6 +2327,8 @@ async def run_autonomous( st = self._prepare_loop_turn(prompt, channel, prev_context, user_id, policy) for _iteration in range(st.loop_cap): + if cancel_event is not None and cancel_event.is_set(): + raise asyncio.CancelledError st._iteration_index = _iteration # ONE capture per uninterrupted loop generation (same contract as # chat): compaction thresholds, preflight, breaker admission, and @@ -2338,6 +2342,7 @@ async def run_autonomous( serving_identity=_serving, request_config=_config, budget_snapshot=_budget_snapshot, + cancel_event=cancel_event, ) if kind == "done": return val @@ -2352,6 +2357,8 @@ async def run_autonomous( # pipeline's format) st.messages.append({"role": "assistant", "content": build_assistant_content(response)}) + if cancel_event is not None and cancel_event.is_set(): + raise asyncio.CancelledError await self._execute_loop_tools(st, response) return await self._finalize_loop(st) @@ -2562,6 +2569,7 @@ async def _call_loop_llm( serving_identity=None, request_config=None, budget_snapshot=None, + cancel_event: asyncio.Event | None = None, ): """LLM call for one loop iteration with deadline-based recovery. @@ -2594,6 +2602,8 @@ async def _call_loop_llm( pin_kwargs["reasoning_effort"] = serving_identity.reasoning_effort async def _attempt(): + if cancel_event is not None and cancel_event.is_set(): + raise asyncio.CancelledError return await serving_identity.client.chat_with_tools( messages=st.messages, system=st.system_prompt, @@ -2636,6 +2646,8 @@ async def _attempt(): None if rescue_passes == 0 else generation_deadline - time.monotonic() ), ) + if cancel_event is not None and cancel_event.is_set(): + raise asyncio.CancelledError if pending_latch is not None: # Server-accepted evidence, per the settled latch rule. st._char_latch = pending_latch diff --git a/src/tools/autonomous_loop.py b/src/tools/autonomous_loop.py index 6f536ba2..4c529517 100644 --- a/src/tools/autonomous_loop.py +++ b/src/tools/autonomous_loop.py @@ -22,10 +22,10 @@ log = get_logger("autonomous_loop") # Type for the LLM iteration callback: -# Takes (goal_prompt, channel, iteration_context) -> response text +# Takes (goal_prompt, channel, iteration_context, cancel_event) -> response text # The callback should run the full Codex + tool loop internally. LoopIterationCallback = Callable[ - [str, Any, str | None], # (prompt, channel, previous_context) + [str, Any, str | None, asyncio.Event], Awaitable[str], ] @@ -131,30 +131,61 @@ def start_loop( ) return loop_id - def stop_loop(self, loop_id: str) -> str: - """Stop a loop by ID. Use 'all' to stop all loops.""" + async def stop_loop(self, loop_id: str) -> str: + """Cancel loop work and report stopped only after it has settled. + + The cooperative event reaches the tool loop and recovery layer; task + cancellation is the final authority that interrupts an admitted LLM + stream or an in-flight tool await. Awaiting the task closes the crucial + contract: once this method says ``stopped``, no retry or tool side + effect from that loop can begin afterward. + """ if loop_id == "all": - stopped = [] - for lid, info in list(self._loops.items()): - if info.status == "running": - info._cancel_event.set() - info.status = "stopped" - stopped.append(lid) - if not stopped: + running = [info for info in self._loops.values() if info.status == "running"] + if not running: return "No active loops to stop." - return f"Stopped {len(stopped)} loop(s): {', '.join(stopped)}" - - # mypy binds `info` to the non-Optional loop var of the 'all' - # branch above (which always returns) — false conflict. - info = self._loops.get(loop_id) # type: ignore[assignment] + current = asyncio.current_task() + for running_info in running: + self._request_stop(running_info) + await asyncio.gather( + *( + running_info._task + for running_info in running + if running_info._task is not None and running_info._task is not current + ), + return_exceptions=True, + ) + ids = ", ".join(running_info.id for running_info in running) + if any(running_info._task is current for running_info in running): + for running_info in running: + if running_info._task is current: + running_info.status = "stopped" + return f"Stop requested for {len(running)} loop(s): {ids}" + return f"Stopped {len(running)} loop(s): {ids}" + + info = self._loops.get(loop_id) if not info: return f"No loop found with ID `{loop_id}`." if info.status != "running": return f"Loop `{loop_id}` is not running (status: {info.status})." - info._cancel_event.set() - info.status = "stopped" + self._request_stop(info) + if info._task is asyncio.current_task(): + info.status = "stopped" + # A loop may invoke stop_loop on itself. It cannot await/cancel its + # own manager task from inside that task; cooperative cancellation + # stops the pipeline immediately after this tool call returns. + return f"Loop `{loop_id}` stop requested." + if info._task is not None: + await asyncio.gather(info._task, return_exceptions=True) return f"Loop `{loop_id}` stopped." + @staticmethod + def _request_stop(info: LoopInfo) -> None: + info._cancel_event.set() + task = info._task + if task is not None and task is not asyncio.current_task() and not task.done(): + task.cancel() + def list_loops(self) -> str: """Return a formatted list of all loops.""" if not self._loops: @@ -276,10 +307,14 @@ async def _run_loop( channel_id=info.channel_id, ) try: - response = await iteration_callback(prompt, channel, prev_context) + response = await iteration_callback( + prompt, channel, prev_context, info._cancel_event + ) finally: reset_turn(_turn_token) response = scrub_output_secrets(response.strip()) if response else "" + if info._cancel_event.is_set(): + break consecutive_errors = 0 # Reset on success except Exception as e: consecutive_errors += 1 diff --git a/src/web/api/agents_loops.py b/src/web/api/agents_loops.py index da3fa561..4f459720 100644 --- a/src/web/api/agents_loops.py +++ b/src/web/api/agents_loops.py @@ -8,6 +8,7 @@ from __future__ import annotations +import asyncio import time from aiohttp import web @@ -161,9 +162,11 @@ async def start_loop(request: web.Request) -> web.Response: # Build iteration callback (same pattern as _handle_start_loop) async def _iteration_cb( prompt: str, ch: object, prev_context: str | None, + cancel_event: asyncio.Event, ) -> str: return await bot.tool_loop.run_autonomous( prompt, ch, prev_context, requester_id, + cancel_event=cancel_event, ) result = bot.loop_manager.start_loop( @@ -184,7 +187,7 @@ async def _iteration_cb( @routes.delete("/api/loops/{loop_id}") async def stop_loop(request: web.Request) -> web.Response: lid = request.match_info["loop_id"] - result = bot.loop_manager.stop_loop(lid) + result = await bot.loop_manager.stop_loop(lid) is_error = "not found" in result.lower() or "not running" in result.lower() return web.json_response( {"result": result}, status=404 if is_error else 200 @@ -209,7 +212,7 @@ async def restart_loop(request: web.Request) -> web.Response: # Stop if running if info.status == "running": - bot.loop_manager.stop_loop(lid) + await bot.loop_manager.stop_loop(lid) # Find the channel try: diff --git a/src/web/api/llm_admin.py b/src/web/api/llm_admin.py index 77576b16..c6b2633b 100644 --- a/src/web/api/llm_admin.py +++ b/src/web/api/llm_admin.py @@ -962,7 +962,35 @@ async def get_context_windows(_request: web.Request) -> web.Response: } utilization = getattr(codex_cfg, "context_utilization", 60) cc = getattr(codex_cfg, "context_compression", None) - ceiling = getattr(cc, "max_context_chars", None) if cc is not None else None + configured_ceiling = ( + getattr(cc, "max_context_chars", None) if cc is not None else None + ) + desired_compression = cc.model_dump() if cc is not None else {} + effective_compression, ceiling_pending_restart = _boot_codex_group_status( + bot, "context_compression", desired_compression + ) + # The runtime compressor is boot-frozen. Prefer the shared boot snapshot + # used by /api/llm/status; a narrow embedding without it reports runtime + # truth directly from the compressor rather than pretending the saved + # restart-bound value is effective. + if effective_compression is not None: + runtime_ceiling = effective_compression.get("max_context_chars") + else: + compressor = getattr(bot, "context_compressor", None) + # Production stores the boot-frozen ContextCompressionConfig object + # directly; a few embedders wrap it as ``.config``. + runtime_cfg = getattr(compressor, "config", compressor) + runtime_available = runtime_cfg is not None and hasattr( + runtime_cfg, "max_context_chars" + ) + runtime_ceiling = ( + getattr(runtime_cfg, "max_context_chars", None) + if runtime_available + else configured_ceiling + ) + ceiling_pending_restart = ( + runtime_ceiling != configured_ceiling if runtime_available else None + ) evidence: dict = observer.view() if observer is not None else {"version": 1, "accounts": {}} # Resolve eligibility once for one internally-consistent management # snapshot. Re-reading a changing pool provider per model could pair a @@ -988,13 +1016,13 @@ async def get_context_windows(_request: web.Request) -> web.Response: model, overrides=overrides, utilization=utilization, - max_context_chars=ceiling, + max_context_chars=configured_ceiling, ) effective = resolve_context_budget( model, overrides=overrides, utilization=utilization, - max_context_chars=ceiling, + max_context_chars=runtime_ceiling, observed_clamp=clamp, ) out[model] = { @@ -1019,7 +1047,9 @@ async def get_context_windows(_request: web.Request) -> web.Response: return web.json_response( { "utilization": utilization, - "max_context_chars": ceiling, + "max_context_chars": configured_ceiling, + "runtime_max_context_chars": runtime_ceiling, + "max_context_chars_pending_restart": ceiling_pending_restart, "models": out, "clamps": clamp_rows, "evidence": evidence, diff --git a/src/web/api/self_update.py b/src/web/api/self_update.py index 795b78a7..6791bc5e 100644 --- a/src/web/api/self_update.py +++ b/src/web/api/self_update.py @@ -252,7 +252,7 @@ def _rollback(reason: str) -> web.Response: @routes.post("/api/loops/stop-all") async def stop_all_loops(_request: web.Request) -> web.Response: - result = bot.loop_manager.stop_loop("all") + result = await bot.loop_manager.stop_loop("all") return web.json_response({"result": result}) diff --git a/tests/test_chat_loop_recovery.py b/tests/test_chat_loop_recovery.py index c7b46be9..2f255001 100644 --- a/tests/test_chat_loop_recovery.py +++ b/tests/test_chat_loop_recovery.py @@ -1504,3 +1504,99 @@ def test_recovery_dimensions_pinned_on_both_policies(self): assert AUTONOMOUS_POLICY.durable_recovery_checkpointing is False assert AUTONOMOUS_POLICY.soft_compaction is True assert AUTONOMOUS_POLICY.latch_scope == "invocation" + + +class TestLoopCancellationPins: + async def test_cancelled_loop_refuses_llm_attempt(self): + calls = [] + + async def script(n, messages): + calls.append((n, messages)) + return SimpleNamespace(text="impossible", tool_calls=[], stop_reason="end_turn") + + gw = _Gateway(script) + runner = _runner(gw) + st = SimpleNamespace( + messages=_history(2, 100) + [{"role": "user", "content": "goal"}], + system_prompt="sys", + tools=[], + _boundary=SurfaceBoundary(request_start=2), + _char_latch=None, + context_recoveries=[], + _iteration_index=0, + ) + cancel = asyncio.Event() + cancel.set() + with pytest.raises(asyncio.CancelledError): + await runner._call_loop_llm(st, cancel_event=cancel) + assert calls == [] + + async def test_cancelled_autonomous_invocation_refuses_first_generation(self): + gateway = _Gateway(None) + gateway.active_client = object() + runner = _runner(gateway) + runner._prepare_loop_turn = lambda *_args: SimpleNamespace(loop_cap=1) + cancel = asyncio.Event() + cancel.set() + with pytest.raises(asyncio.CancelledError): + await runner.run_autonomous( + "goal", SimpleNamespace(id=1), None, "u", cancel_event=cancel + ) + + async def test_cancel_after_generation_blocks_tool_execution(self): + cancel = asyncio.Event() + tool_effects = [] + response = SimpleNamespace( + text="", + tool_calls=[SimpleNamespace(id="1", name="effect", input={})], + stop_reason="tool_use", + ) + gateway = _Gateway(None) + gateway.active_client = object() + runner = _runner(gateway) + state = SimpleNamespace(loop_cap=1, tool_calls_made=0, messages=[]) + runner._prepare_loop_turn = lambda *_args: state + runner._get_config = lambda: SimpleNamespace() + runner._capture_budget_snapshot = lambda *_args: None + runner._maybe_compress_loop = lambda *_args, **_kwargs: None + runner._record_loop_iteration = lambda *_args: False + + async def accepted(*_args, **_kwargs): + cancel.set() + return "ok", response + + async def forbidden(*_args, **_kwargs): + tool_effects.append("ran") + + runner._call_loop_llm = accepted + runner._execute_loop_tools = forbidden + with pytest.raises(asyncio.CancelledError): + await runner.run_autonomous( + "goal", SimpleNamespace(id=1), None, "u", cancel_event=cancel + ) + assert tool_effects == [] + + async def test_cancel_after_accepted_response_prevents_post_acceptance_work(self): + cancel = asyncio.Event() + + class _Client(SimpleNamespace): + async def chat_with_tools(self, **_kwargs): + cancel.set() + return SimpleNamespace(text="accepted", tool_calls=[], stop_reason="end_turn") + + client = _Client(model="gpt-5.6-sol", reasoning_effort="xhigh") + gateway = _Gateway(None) + gateway.client = client + gateway.codex_client = client + runner = _runner(gateway) + st = SimpleNamespace( + messages=[{"role": "user", "content": "goal"}], + system_prompt="sys", + tools=[], + _boundary=SurfaceBoundary(request_start=0), + _char_latch=None, + context_recoveries=[], + _iteration_index=0, + ) + with pytest.raises(asyncio.CancelledError): + await runner._call_loop_llm(st, cancel_event=cancel) diff --git a/tests/test_config_ceiling_migration.py b/tests/test_config_ceiling_migration.py index 627f25db..38baf39e 100644 --- a/tests/test_config_ceiling_migration.py +++ b/tests/test_config_ceiling_migration.py @@ -64,7 +64,7 @@ def test_literal_legacy_rewritten_once_with_one_warning(self, tmp_path, caplog): assert on_disk["openai_codex"]["model"] == "gpt-5.6-sol" marker = ceiling_marker_path(config_path) record = json.loads(marker.read_text()) - assert record["version"] == 2 + assert record["version"] == 3 assert record["state"] == "completed" assert record["reason"] == "migrated" assert len([r for r in caplog.records if r.levelno == logging.WARNING]) == 1 @@ -83,8 +83,9 @@ def test_valid_versioned_marker_gates_even_a_literal_750k(self, tmp_path): _atomic_write_marker( marker, { - "version": 2, + "version": 3, "migration": "legacy_max_context_chars_to_auto", + "config_id": marker.name.rsplit(".", 2)[-2], "state": "completed", "reason": "not_applicable", "completed_at": datetime.now(UTC).isoformat(), @@ -142,7 +143,7 @@ def test_non_legacy_values_marked_and_untouched(self, tmp_path): _migrate(config_path) assert config_path.read_text() == before record = json.loads(ceiling_marker_path(config_path).read_text()) - assert record["version"] == 2 + assert record["version"] == 3 assert record["reason"] == "not_applicable" def test_absent_sections_complete_vacuously(self, tmp_path): @@ -317,8 +318,9 @@ def test_rewrite_lands_on_target_marker_beside_link(self, tmp_path): ] is None ) - assert ceiling_marker_path(link) == opt / "data" / "context_ceiling_migration.json" - assert (opt / "data" / "context_ceiling_migration.json").is_file() + marker = ceiling_marker_path(link) + assert marker.parent == opt / "data" / "config_migrations" + assert marker.is_file() assert not (etc / "data").exists() @@ -391,7 +393,7 @@ def test_invalid_marker_never_counts_as_completion_or_gets_overwritten(self, tmp path = tmp_path / "config.yml" path.write_text(_LEGACY_YAML) marker = ceiling_marker_path(path) - marker.parent.mkdir() + marker.parent.mkdir(parents=True) if kind == "empty": marker.write_text("") elif kind == "corrupt": @@ -441,7 +443,7 @@ def test_round1_legacy_marker_does_not_suppress_rewrite(self, tmp_path): ] is None ) - assert json.loads(marker.read_text())["version"] == 2 + assert json.loads(marker.read_text())["version"] == 3 def test_round1_operator_marker_preserves_and_upgrades(self, tmp_path): path = tmp_path / "config.yml" @@ -463,7 +465,7 @@ def test_round1_operator_marker_preserves_and_upgrades(self, tmp_path): == LEGACY_MAX_CONTEXT_CHARS ) record = json.loads(marker.read_text()) - assert record["version"] == 2 + assert record["version"] == 3 assert record["reason"] == "prior_operator_saved" def test_preversioned_round2_completion_is_validated_then_upgraded(self, tmp_path): @@ -485,7 +487,7 @@ def test_preversioned_round2_completion_is_validated_then_upgraded(self, tmp_pat data["openai_codex"]["context_compression"]["max_context_chars"] == LEGACY_MAX_CONTEXT_CHARS ) - assert json.loads(marker.read_text())["version"] == 2 + assert json.loads(marker.read_text())["version"] == 3 @pytest.mark.parametrize( "record", @@ -692,3 +694,226 @@ def spy_close(fd): _atomic_write_marker(marker, {"ok": True}) assert closed assert not list(tmp_path.glob("*.tmp")) + +class TestConfigIdentityBinding: + def test_symlink_aliases_in_different_directories_share_completion(self, tmp_path): + real_dir = tmp_path / "real" + alias_a_dir = tmp_path / "alias-a" + alias_b_dir = tmp_path / "alias-b" + for directory in (real_dir, alias_a_dir, alias_b_dir): + directory.mkdir() + target = real_dir / "odin.yml" + target.write_text(_LEGACY_YAML) + alias_a = alias_a_dir / "config.yml" + alias_b = alias_b_dir / "other.yml" + alias_a.symlink_to(target) + alias_b.symlink_to(target) + + _migrate(alias_a) + assert yaml.safe_load(target.read_text())["openai_codex"][ + "context_compression" + ]["max_context_chars"] is None + + # A deliberate post-migration value must survive loading through a + # different launch alias whose local marker did not exist yet. + patch_config_paths( + [(("openai_codex", "context_compression", "max_context_chars"), 750_000)], + path=target, + ) + data = _migrate(alias_b) + assert data["openai_codex"]["context_compression"]["max_context_chars"] == 750_000 + assert yaml.safe_load(target.read_text())["openai_codex"][ + "context_compression" + ]["max_context_chars"] == 750_000 + assert ceiling_marker_path(alias_a).is_file() + assert ceiling_marker_path(alias_b).is_file() + assert json.loads(ceiling_marker_path(alias_a).read_text())["config_id"] == json.loads( + ceiling_marker_path(alias_b).read_text() + )["config_id"] + + def test_distinct_configs_in_one_directory_do_not_share_completion(self, tmp_path): + first = tmp_path / "first.yml" + second = tmp_path / "second.yml" + first.write_text(_LEGACY_YAML) + second.write_text(_LEGACY_YAML) + + _migrate(first) + _migrate(second) + + assert yaml.safe_load(first.read_text())["openai_codex"]["context_compression"][ + "max_context_chars" + ] is None + assert yaml.safe_load(second.read_text())["openai_codex"]["context_compression"][ + "max_context_chars" + ] is None + assert ceiling_marker_path(first) != ceiling_marker_path(second) + first_record = json.loads(ceiling_marker_path(first).read_text()) + second_record = json.loads(ceiling_marker_path(second).read_text()) + assert first_record["config_id"] != second_record["config_id"] + + def test_preidentity_directory_marker_is_bound_not_shared(self, tmp_path): + first = tmp_path / "first.yml" + second = tmp_path / "second.yml" + first.write_text(_LEGACY_YAML) + second.write_text(_LEGACY_YAML) + legacy = tmp_path / "data" / "context_ceiling_migration.json" + legacy.parent.mkdir() + legacy.write_text( + json.dumps( + { + "version": 2, + "migration": "legacy_max_context_chars_to_auto", + "state": "completed", + "reason": "not_applicable", + "completed_at": datetime.now(UTC).isoformat(), + } + ) + ) + + # The first config adopts the old provenance and therefore preserves a + # value the old migration had already classified as operator-authored. + first_data = _migrate(first) + assert first_data["openai_codex"]["context_compression"][ + "max_context_chars" + ] == 750_000 + + # The legacy marker is now identity-bound. A distinct sibling no longer + # inherits it and performs its own one-time rewrite. + second_data = _migrate(second) + assert second_data["openai_codex"]["context_compression"][ + "max_context_chars" + ] is None + assert json.loads(ceiling_marker_path(first).read_text())["config_id"] != json.loads( + ceiling_marker_path(second).read_text() + )["config_id"] + +class TestIdentityMarkerAdversarialBranches: + def test_identity_marker_reread_failure_is_fail_closed(self, tmp_path, monkeypatch): + import src.config.migrations as migrations + + path = tmp_path / "config.yml" + path.write_text(_LEGACY_YAML) + marker = ceiling_marker_path(path) + marker.parent.mkdir(parents=True) + config_id = marker.name.rsplit(".", 2)[-2] + migrations._atomic_write_marker( + marker, + { + "version": 3, + "migration": "legacy_max_context_chars_to_auto", + "config_id": config_id, + "state": "completed", + "reason": "not_applicable", + "completed_at": datetime.now(UTC).isoformat(), + }, + ) + real_read = type(marker).read_text + reads = 0 + + def fail_second_read(self, *args, **kwargs): + nonlocal reads + if self == marker: + reads += 1 + if reads == 2: + raise OSError("reread failed") + return real_read(self, *args, **kwargs) + + monkeypatch.setattr(type(marker), "read_text", fail_second_read) + with pytest.raises(MigrationCompletionError): + _migrate(path) + + def test_identity_directory_inspection_failure_is_fail_closed(self, tmp_path, monkeypatch): + path = tmp_path / "config.yml" + path.write_text(_LEGACY_YAML) + marker = ceiling_marker_path(path) + marker.parent.mkdir(parents=True) + real_iterdir = type(marker).iterdir + + def fail_iterdir(self): + if self == marker.parent: + raise OSError("cannot inspect") + return real_iterdir(self) + + monkeypatch.setattr(type(marker), "iterdir", fail_iterdir) + with pytest.raises(MigrationCompletionError, match="inspect identity-bound"): + _migrate(path) + + def test_corrupt_bound_legacy_marker_is_fail_closed(self, tmp_path): + path = tmp_path / "config.yml" + path.write_text(_LEGACY_YAML) + legacy = tmp_path / "data" / "context_ceiling_migration.json" + legacy.parent.mkdir() + legacy.write_text("{broken") + with pytest.raises(MigrationCompletionError, match="legacy ceiling-migration"): + _migrate(path) + + def test_bound_legacy_marker_for_other_identity_is_ignored(self, tmp_path): + import src.config.migrations as migrations + + path = tmp_path / "config.yml" + path.write_text(_LEGACY_YAML) + legacy = tmp_path / "data" / "context_ceiling_migration.json" + legacy.parent.mkdir() + migrations._atomic_write_marker( + legacy, + { + "version": 3, + "migration": "legacy_max_context_chars_to_auto", + "config_id": "f" * 64, + "state": "completed", + "reason": "not_applicable", + "completed_at": datetime.now(UTC).isoformat(), + }, + ) + data = _migrate(path) + assert data["openai_codex"]["context_compression"]["max_context_chars"] is None + + def test_round1_legacy_at_old_path_rewrites_and_binds(self, tmp_path): + path = tmp_path / "config.yml" + path.write_text(_LEGACY_YAML) + legacy = tmp_path / "data" / "context_ceiling_migration.json" + legacy.parent.mkdir() + legacy.write_text( + json.dumps( + { + "migration": "legacy_max_context_chars_to_auto", + "legacy_value": 750_000, + "migrated_at": datetime.now(UTC).isoformat(), + } + ) + ) + data = _migrate(path) + assert data["openai_codex"]["context_compression"]["max_context_chars"] is None + + def test_bound_legacy_marker_reread_failure_is_fail_closed(self, tmp_path, monkeypatch): + import src.config.migrations as migrations + + path = tmp_path / "config.yml" + path.write_text(_LEGACY_YAML) + legacy = tmp_path / "data" / "context_ceiling_migration.json" + legacy.parent.mkdir() + migrations._atomic_write_marker( + legacy, + { + "version": 3, + "migration": "legacy_max_context_chars_to_auto", + "config_id": migrations._config_identity(path), + "state": "completed", + "reason": "not_applicable", + "completed_at": datetime.now(UTC).isoformat(), + }, + ) + real_read = type(legacy).read_text + reads = 0 + + def fail_second_read(self, *args, **kwargs): + nonlocal reads + if self == legacy: + reads += 1 + if reads == 2: + raise OSError("reread failed") + return real_read(self, *args, **kwargs) + + monkeypatch.setattr(type(legacy), "read_text", fail_second_read) + with pytest.raises(MigrationCompletionError, match="legacy ceiling-migration"): + _migrate(path) diff --git a/tests/test_config_persistence.py b/tests/test_config_persistence.py index be63eaa4..745d9899 100644 --- a/tests/test_config_persistence.py +++ b/tests/test_config_persistence.py @@ -318,6 +318,31 @@ def test_without_the_schema_an_alias_is_still_dropped(self): {"search": {"search_db_path": "/old", "enabled": True}}, ) == [] + def test_schema_owned_mapping_persists_canonicalized_keys_as_one_leaf(self): + from src.config.schema import Config + + current = Config(discord={"token": "test"}).model_dump() + current["openai_codex"]["context_budget_overrides"] = { + "gpt-5.6-luna": 600_000, + } + leaves = submitted_leaves( + { + "openai_codex": { + "context_budget_overrides": { + "codex-auto-review": 600_000, + } + } + }, + current, + Config, + ) + assert leaves == [ + ( + ("openai_codex", "context_budget_overrides"), + {"gpt-5.6-luna": 600_000}, + ) + ] + def test_canonical_key_still_resolves_normally(self): from src.config.schema import Config diff --git a/tests/test_context_budget_activation.py b/tests/test_context_budget_activation.py index 1b983295..ddd9558d 100644 --- a/tests/test_context_budget_activation.py +++ b/tests/test_context_budget_activation.py @@ -615,3 +615,74 @@ async def chat_with_tools(self, **_kwargs): assert kind == "ok" assert observer.calls == 1 assert st.context_recoveries[0]["target_chars"] == 451_500 + +class TestIntegrationAgentGenerationSeams: + async def test_agent_soft_compaction_and_request_share_one_generation_snapshot( + self, monkeypatch + ): + from src.agents.manager import AgentManager + from src.llm.context_budget import resolve_context_budget + + snapshots = [ + resolve_context_budget("gpt-5.6-sol"), + resolve_context_budget("gpt-5.5", observed_clamp=200_000), + ] + reads = 0 + + def plan_provider(): + nonlocal reads + snap = snapshots[min(reads, 1)] + reads += 1 + return { + "provider": "codex", + "client": object(), + "model": snap.canonical_model, + "effort": "xhigh", + "snapshot": snap, + } + + seen_targets = [] + + def fake_soft(messages, **kwargs): + seen_targets.append(kwargs["max_context_chars"]) + return messages, 1 + + monkeypatch.setattr( + "src.llm.context_compressor.compress_tool_context", fake_soft + ) + calls = [] + + async def iteration(messages, system_prompt, tools, *, generation_state): + calls.append(generation_state["plan"]) + if len(calls) == 1: + return { + "text": "", + "tool_calls": [{"id": "1", "name": "noop", "arguments": {}}], + } + return {"text": "done", "tool_calls": []} + + async def tool_executor(*_args, **_kwargs): + return "x" * 500_000 + + manager = AgentManager() + agent_id = manager.spawn( + label="single-snapshot", + goal="g", + channel_id="c", + requester_id="u", + requester_name="user", + iteration_callback=iteration, + tool_executor_callback=tool_executor, + tools=[], + max_iterations=2, + context_compression_enabled=True, + generation_plan_provider=plan_provider, + ) + task = manager._agents[agent_id]._task + assert task is not None + await task + + assert reads == 2 + assert calls[0]["snapshot"] is snapshots[0] + assert calls[1]["snapshot"] is snapshots[1] + assert seen_targets == [snapshots[1].primary_chars] diff --git a/tests/test_loop_error_sanitization.py b/tests/test_loop_error_sanitization.py index c7f5163e..b805fcdc 100644 --- a/tests/test_loop_error_sanitization.py +++ b/tests/test_loop_error_sanitization.py @@ -32,7 +32,7 @@ async def test_history_and_channel_posts_carry_no_markup(self, monkeypatch): mgr = al.LoopManager() channel = _FakeChannel() - async def exploding_iteration(prompt, ch, prev_context): + async def exploding_iteration(prompt, ch, prev_context, cancel_event): raise RuntimeError("@everyone edge page") loop_id = mgr.start_loop( diff --git a/tests/test_native_agents_tasks.py b/tests/test_native_agents_tasks.py index cc22b100..9cc8e010 100644 --- a/tests/test_native_agents_tasks.py +++ b/tests/test_native_agents_tasks.py @@ -17,11 +17,13 @@ import pytest -from src.config.schema import ContextCompressionConfig +from src.config.schema import ContextCompressionConfig, OpenAICodexConfig from src.discord.background_task import MAX_STEPS from src.discord.native_tools.agents_tasks import ( AgentTaskDeps, AgentTaskTools, + _capture_agent_generation_plan, + _gateway_serving_for_config, _parse_spawn_overrides, ) from src.llm.model_breaker import ModelBreakerRegistry @@ -37,8 +39,8 @@ def _fake_gateway(client): """ registry = ModelBreakerRegistry() gw = SimpleNamespace(active_client=client) - gw.capacity_breaker_for = lambda model=None: registry.for_model( - "codex", str(model or getattr(client, "model", None) or "unknown") + gw.capacity_breaker_for = lambda model=None, *, provider=None: registry.for_model( + str(provider or "codex"), str(model or getattr(client, "model", None) or "unknown") ) gw.recovery_policy = lambda: RecoveryPolicy( deadline_seconds=0.2, backoff_base=0.01, backoff_cap=0.02, retry_after_cap=0.05 @@ -232,9 +234,9 @@ async def test_start_loop_success(self): async def test_stop_loop(self): t = _tools() - assert "'loop_id' is required" in t._handle_stop_loop({}) - t._loop_manager.stop_loop.return_value = "Loop stopped." - assert "stopped" in t._handle_stop_loop({"loop_id": "L1"}) + assert "'loop_id' is required" in await t._handle_stop_loop({}) + t._loop_manager.stop_loop = AsyncMock(return_value="Loop stopped.") + assert "stopped" in await t._handle_stop_loop({"loop_id": "L1"}) await asyncio.sleep(0) def test_list_loops(self): @@ -1235,3 +1237,85 @@ async def test_rescue_retry_reuses_the_first_attempt_plan(self): await cb([], "sys", [], generation_state=fresh) assert fresh["plan"]["model"] == "gpt-5.5" assert fresh["plan"]["snapshot"].primary_chars == 570_002 + +class TestIntegrationFrozenProviderBreaker: + async def test_rescue_after_provider_switch_uses_frozen_provider_breaker(self): + registry = ModelBreakerRegistry() + + class _Gateway: + def __init__(self): + self.live_provider = "codex" + self.active_client = SimpleNamespace( + model="gpt-5.6-sol", reasoning_effort="xhigh" + ) + self.recovery_policy = lambda: RecoveryPolicy( + deadline_seconds=0.2, + backoff_base=0.01, + backoff_cap=0.02, + retry_after_cap=0.05, + ) + + def capture_serving_identity(self, _config): + return SimpleNamespace( + provider=self.live_provider, + client=self.active_client, + model=self.active_client.model, + reasoning_effort=getattr(self.active_client, "reasoning_effort", None), + is_codex=self.live_provider == "codex", + ) + + def capacity_breaker_for(self, model=None, *, provider=None): + return registry.for_model(provider or self.live_provider, model or "unknown") + + def notify_generation_success(self, _response): + return None + + calls = [] + + class _Client: + model = "gpt-5.6-sol" + reasoning_effort = "xhigh" + + async def chat_with_tools(self, **_kwargs): + calls.append("called") + return SimpleNamespace( + text="ok", tool_calls=[], provenance_provider="codex" + ) + + gateway = _Gateway() + gateway.active_client = _Client() + cfg = SimpleNamespace( + openai_codex=OpenAICodexConfig( + model="gpt-5.6-sol", agent_reasoning_effort=None + ) + ) + plan = _capture_agent_generation_plan( + lambda: cfg, + lambda root: _gateway_serving_for_config(gateway, root), + lambda: ContextCompressionConfig(), + model_override=None, + effort_override=None, + ) + assert plan["provider"] == "codex" + + # Open only the newly-live Ollama breaker, then switch providers. A + # rescue governed by live identity would now fail before reaching the + # frozen Codex client. + live = registry.for_model("ollama", "gpt-5.6-sol") + while live.snapshot()["state"] != "open": + live.record_generation_failure() + gateway.live_provider = "ollama" + + tools = _tools(llm_gateway=gateway) + response = await tools._agent_generate( + plan["client"], + messages=[], + sys_prompt="s", + tool_defs=[], + agent_effort=plan["effort"], + resolved_model=plan["model"], + provider=plan["provider"], + ) + assert response.text == "ok" + assert calls == ["called"] + assert registry.for_model("codex", "gpt-5.6-sol").snapshot()["state"] == "closed" diff --git a/tests/test_scheduler_agents_reliability.py b/tests/test_scheduler_agents_reliability.py index 53a90423..4ae6eef5 100644 --- a/tests/test_scheduler_agents_reliability.py +++ b/tests/test_scheduler_agents_reliability.py @@ -59,7 +59,7 @@ async def _record_wait(_info, seconds): monkeypatch.setattr(manager, "_interruptible_wait", _record_wait) - async def _always_fail(_prompt, _channel, _prev): + async def _always_fail(_prompt, _channel, _prev, _cancel): raise RuntimeError("boom") await manager._run_loop(info, _SilentChannel(), _always_fail) @@ -79,7 +79,7 @@ async def _record_wait(_info, seconds): monkeypatch.setattr(manager, "_interruptible_wait", _record_wait) - async def _ok(_prompt, _channel, _prev): + async def _ok(_prompt, _channel, _prev, _cancel): return "done" await manager._run_loop(info, _SilentChannel(), _ok) @@ -94,7 +94,7 @@ async def test_shutdown_cancels_and_awaits_loop_tasks(): manager = LoopManager() started = asyncio.Event() - async def _forever(_prompt, _channel, _prev): + async def _forever(_prompt, _channel, _prev, _cancel): started.set() await asyncio.sleep(3600) @@ -356,3 +356,68 @@ def test_cleanup_removes_untriggered_loop_even_on_fresh_boot(monkeypatch): manager.cleanup_finished() assert info.id not in manager._loops + +async def test_stop_waits_until_inflight_iteration_is_cancelled_and_settled(): + """Once stop_loop reports stopped, no recovery retry or tool effect may + begin. Cancellation must reach the in-flight callback, not merely set the + manager's status for the next scheduled iteration.""" + manager = LoopManager() + started = asyncio.Event() + cancelled = asyncio.Event() + effects: list[str] = [] + + async def _recovering(_prompt, _channel, _prev, cancel_event): + started.set() + try: + await asyncio.sleep(3600) + effects.append("retry") + effects.append("tool") + return "impossible" + except asyncio.CancelledError: + assert cancel_event.is_set() + cancelled.set() + raise + + loop_id = manager.start_loop( + goal="g", + channel=_SilentChannel(), + requester_id="u", + requester_name="U", + iteration_callback=_recovering, + interval_seconds=10, + mode="silent", + max_iterations=100, + ) + await asyncio.wait_for(started.wait(), timeout=2) + result = await asyncio.wait_for(manager.stop_loop(loop_id), timeout=2) + + assert result == f"Loop `{loop_id}` stopped." + assert cancelled.is_set() + assert manager._loops[loop_id]._task.done() + await asyncio.sleep(0) + assert effects == [] + +async def test_self_stop_all_never_awaits_its_own_manager_task(): + manager = LoopManager() + outcome: list[str] = [] + + async def _self_stop(_prompt, _channel, _prev, cancel_event): + assert not cancel_event.is_set() + outcome.append(await manager.stop_loop("all")) + return "settled" + + loop_id = manager.start_loop( + goal="g", + channel=_SilentChannel(), + requester_id="u", + requester_name="U", + iteration_callback=_self_stop, + interval_seconds=10, + mode="silent", + max_iterations=2, + ) + task = manager._loops[loop_id]._task + assert task is not None + await asyncio.wait_for(task, timeout=2) + assert outcome == [f"Stop requested for 1 loop(s): {loop_id}"] + assert manager._loops[loop_id].status == "stopped" diff --git a/tests/test_trajectory_completeness.py b/tests/test_trajectory_completeness.py index 8d2d9a25..972984f9 100644 --- a/tests/test_trajectory_completeness.py +++ b/tests/test_trajectory_completeness.py @@ -470,7 +470,7 @@ async def send(self, *a, **k): chan = _Chan() - async def callback(prompt, channel, prev_context): + async def callback(prompt, channel, prev_context, cancel_event): stamps.append(dict(get_turn() or {})) mgr._loops[holder["lid"]]._cancel_event.set() return "ok" diff --git a/tests/test_web_api_agents_loops.py b/tests/test_web_api_agents_loops.py index 15d1c9e2..4833f20c 100644 --- a/tests/test_web_api_agents_loops.py +++ b/tests/test_web_api_agents_loops.py @@ -177,7 +177,9 @@ async def test_start_loop_manager_error(self): @pytest.mark.asyncio async def test_stop_loop_found_and_missing(self): bot = MagicMock() - bot.loop_manager.stop_loop.side_effect = ["Stopped loop.", "Loop not found."] + bot.loop_manager.stop_loop = AsyncMock( + side_effect=["Stopped loop.", "Loop not found."] + ) async with TestClient(TestServer(_app(register_loops, bot=bot))) as c: assert (await c.delete("/api/loops/L1")).status == 200 assert (await c.delete("/api/loops/L1")).status == 404 @@ -193,6 +195,7 @@ async def test_restart_missing_loop(self): async def test_restart_success(self): bot = MagicMock() bot.loop_manager._loops = {"L1": _loop_info(status="running", channel_id="123")} + bot.loop_manager.stop_loop = AsyncMock(return_value="Loop stopped.") bot.get_channel.return_value = MagicMock() bot.loop_manager.start_loop.return_value = "loop-new" async with TestClient(TestServer(_app(register_loops, bot=bot))) as c: @@ -214,6 +217,7 @@ async def test_restart_channel_gone(self): async def test_restart_manager_error(self): bot = MagicMock() bot.loop_manager._loops = {"L1": _loop_info(status="running", channel_id="123")} + bot.loop_manager.stop_loop = AsyncMock(return_value="Loop stopped.") bot.get_channel.return_value = MagicMock() bot.loop_manager.start_loop.return_value = "Error: too many loops" async with TestClient(TestServer(_app(register_loops, bot=bot))) as c: diff --git a/tests/test_web_api_config_admin.py b/tests/test_web_api_config_admin.py index 119cc654..68353ba5 100644 --- a/tests/test_web_api_config_admin.py +++ b/tests/test_web_api_config_admin.py @@ -333,6 +333,47 @@ async def test_update_config_persists_normalized_dropping_removed_keys(self, _ac assert "enabled" not in saved["grafana_alerts"] assert saved["grafana_alerts"]["cooldown_seconds"] == 612 + @pytest.mark.asyncio + async def test_context_budget_alias_persists_canonical_key_through_restart( + self, _active_config + ): + from pathlib import Path + + from ruamel.yaml import YAML + + from src.config.schema import Config as _Config + from src.config.schema import active_config_path, set_active_config_path + + path = Path("config.yml") + path.write_text("discord:\n token: fake\n") + previous = active_config_path() + set_active_config_path(path) + try: + app, bot = _app(register_discord_config) + async with TestClient(TestServer(app)) as c: + r = await c.put( + "/api/config", + json={ + "openai_codex": { + "context_budget_overrides": { + "codex-auto-review": 600_000, + } + } + }, + ) + assert r.status == 200 + assert (await r.json())["openai_codex"][ + "context_budget_overrides" + ] == {"gpt-5.6-luna": 600_000} + finally: + set_active_config_path(previous) + + expected = {"gpt-5.6-luna": 600_000} + assert bot.config.openai_codex.context_budget_overrides == expected + document = YAML().load(path.read_text()) + assert document["openai_codex"]["context_budget_overrides"] == expected + assert _Config(**document).openai_codex.context_budget_overrides == expected + @pytest.mark.asyncio async def test_blanking_the_workspace_normalizes_everywhere(self): """PR #239 round-8 follow-up: the persisted-config path, for real. diff --git a/tests/test_web_api_self_update.py b/tests/test_web_api_self_update.py index e15d28c3..913e23bd 100644 --- a/tests/test_web_api_self_update.py +++ b/tests/test_web_api_self_update.py @@ -11,7 +11,7 @@ from subprocess import CompletedProcess from types import SimpleNamespace -from unittest.mock import MagicMock, patch +from unittest.mock import AsyncMock, MagicMock, patch from aiohttp import web from aiohttp.test_utils import TestClient, TestServer @@ -295,7 +295,7 @@ def _false(cmd, **kw): class TestStopAllLoops: async def test_stop_all(self): bot = MagicMock() - bot.loop_manager.stop_loop.return_value = "stopped 3 loops" + bot.loop_manager.stop_loop = AsyncMock(return_value="stopped 3 loops") async with TestClient(TestServer(_app(bot))) as c: body = await (await c.post("/api/loops/stop-all")).json() assert body["result"] == "stopped 3 loops" diff --git a/tests/test_window_observer.py b/tests/test_window_observer.py index f7f119bb..1a90d4b3 100644 --- a/tests/test_window_observer.py +++ b/tests/test_window_observer.py @@ -805,9 +805,20 @@ async def cb(messages, system_prompt, tools, generation_state=None): # --------------------------------------------------------------------------- -def _api_app(observer, *, max_context_chars: int | None = None): +def _api_app( + observer, + *, + max_context_chars: int | None = None, + runtime_max_context_chars: int | None | object = Ellipsis, +): from src.web.api.llm_admin import register_context_windows + runtime_value = ( + max_context_chars + if runtime_max_context_chars is Ellipsis + else runtime_max_context_chars + ) + runtime_config = ContextCompressionConfig(max_context_chars=runtime_value) bot = SimpleNamespace( config=SimpleNamespace( openai_codex=SimpleNamespace( @@ -816,7 +827,14 @@ def _api_app(observer, *, max_context_chars: int | None = None): context_compression=ContextCompressionConfig(max_context_chars=max_context_chars), ) ), - context_compressor=SimpleNamespace(resolved_max_context_chars=750_000), + context_compressor=SimpleNamespace( + config=runtime_config, + resolved_max_context_chars=( + runtime_config.max_context_chars + if runtime_config.max_context_chars is not None + else 750_000 + ), + ), services=SimpleNamespace(window_observer=observer), ) routes = web.RouteTableDef() @@ -905,6 +923,95 @@ async def test_get_preserves_explicit_legacy_ceiling_verbatim(self, tmp_path): assert body["max_context_chars"] == 750_000 assert body["models"]["gpt-5.6-sol"]["configured"]["primary_chars"] == 750_000 + async def test_get_without_boot_snapshot_uses_configured_runtime_truth(self, tmp_path): + obs = _observer(tmp_path) + app = _api_app(obs, max_context_chars=500_000) + async with TestClient(TestServer(app)) as c: + body = await (await c.get("/api/context/windows")).json() + assert body["runtime_max_context_chars"] == 500_000 + assert body["max_context_chars_pending_restart"] is False + + async def test_get_prefers_boot_snapshot_for_runtime_ceiling(self, tmp_path): + from src.web.api.llm_admin import register_context_windows + + observer = _observer(tmp_path) + saved = ContextCompressionConfig(max_context_chars=500_000) + bot = SimpleNamespace( + config=SimpleNamespace( + openai_codex=SimpleNamespace( + context_budget_overrides={}, + context_utilization=60, + context_compression=saved, + ) + ), + context_compressor=saved, + services=SimpleNamespace(window_observer=observer), + ) + bot.boot_config_snapshot = { + "openai_codex": { + "context_compression": ContextCompressionConfig( + max_context_chars=750_000 + ).model_dump() + } + } + routes = web.RouteTableDef() + register_context_windows(routes, bot) + app = web.Application() + app.router.add_routes(routes) + async with TestClient(TestServer(app)) as client: + body = await (await client.get("/api/context/windows")).json() + + assert body["runtime_max_context_chars"] == 750_000 + assert body["max_context_chars_pending_restart"] is True + assert body["models"]["gpt-5.6-sol"]["effective"]["primary_chars"] == 750_000 + + async def test_get_uses_production_direct_boot_compressor_shape(self, tmp_path): + from src.web.api.llm_admin import register_context_windows + + observer = _observer(tmp_path) + saved = ContextCompressionConfig(max_context_chars=500_000) + boot = ContextCompressionConfig(max_context_chars=750_000) + bot = SimpleNamespace( + config=SimpleNamespace( + openai_codex=SimpleNamespace( + context_budget_overrides={}, + context_utilization=60, + context_compression=saved, + ) + ), + # OdinClient stores this config object directly, not under .config. + context_compressor=boot, + services=SimpleNamespace(window_observer=observer), + ) + routes = web.RouteTableDef() + register_context_windows(routes, bot) + app = web.Application() + app.router.add_routes(routes) + async with TestClient(TestServer(app)) as client: + body = await (await client.get("/api/context/windows")).json() + + assert body["runtime_max_context_chars"] == 750_000 + assert body["max_context_chars_pending_restart"] is True + assert body["models"]["gpt-5.6-sol"]["configured"]["primary_chars"] == 500_000 + assert body["models"]["gpt-5.6-sol"]["effective"]["primary_chars"] == 750_000 + + async def test_get_distinguishes_saved_ceiling_from_boot_frozen_runtime(self, tmp_path): + obs = _observer(tmp_path) + app = _api_app( + obs, + max_context_chars=500_000, + runtime_max_context_chars=750_000, + ) + async with TestClient(TestServer(app)) as c: + body = await (await c.get("/api/context/windows")).json() + + sol = body["models"]["gpt-5.6-sol"] + assert body["max_context_chars"] == 500_000 + assert body["runtime_max_context_chars"] == 750_000 + assert body["max_context_chars_pending_restart"] is True + assert sol["configured"]["primary_chars"] == 500_000 + assert sol["effective"]["primary_chars"] == 750_000 + async def test_failed_clear_returns_503_and_truthful_state(self, tmp_path, monkeypatch): obs = _observer(tmp_path) await obs.record_rescue(overflow=_overflow(), response=_acceptance()) diff --git a/ui/css/style.css b/ui/css/style.css index 0340344a..2988599a 100644 --- a/ui/css/style.css +++ b/ui/css/style.css @@ -4341,15 +4341,16 @@ a:focus-visible { .llm-context-budget-loading .spinner { width: 16px; height: 16px; } .llm-context-budget-error { color: var(--hm-danger); } .llm-context-budget-table-wrap { overflow-x: auto; } -.llm-context-budget-table { min-width: 1040px; table-layout: fixed; } +.llm-context-budget-table { min-width: 1120px; table-layout: fixed; } .llm-context-budget-table th { padding: 0 var(--hm-space-3); font-size: 0.58rem; } .llm-context-budget-table td { padding: var(--hm-space-3); font-size: var(--hm-text-xs); } -.llm-context-budget-table th:nth-child(1) { width: 17%; } -.llm-context-budget-table th:nth-child(2) { width: 13%; } -.llm-context-budget-table th:nth-child(3) { width: 22%; } -.llm-context-budget-table th:nth-child(4) { width: 14%; } -.llm-context-budget-table th:nth-child(5) { width: 15%; } -.llm-context-budget-table th:nth-child(6) { width: 19%; } +.llm-context-budget-table th:nth-child(1) { width: 15%; } +.llm-context-budget-table th:nth-child(2) { width: 11%; } +.llm-context-budget-table th:nth-child(3) { width: 19%; } +.llm-context-budget-table th:nth-child(4) { width: 12%; } +.llm-context-budget-table th:nth-child(5) { width: 13%; } +.llm-context-budget-table th:nth-child(6) { width: 14%; } +.llm-context-budget-table th:nth-child(7) { width: 16%; } .llm-context-budget-table tbody tr.has-clamp td { background: rgba(211, 148, 49, 0.035); } .llm-context-budget-table code, .llm-clamp-card code { @@ -4372,6 +4373,17 @@ a:focus-visible { } .llm-budget-reset:hover { color: var(--hm-accent); } .llm-budget-warning { color: var(--hm-warning-text) !important; } +.llm-budget-pending { + display: inline-flex; + margin-top: 0.3rem; + padding: 0.12rem 0.42rem; + color: var(--hm-warning-text); + background: rgba(217, 119, 6, 0.1); + border: 1px solid rgba(217, 119, 6, 0.23); + border-radius: var(--hm-radius-full); + font-size: 0.56rem; + font-weight: 650; +} .llm-budget-provenance { display: inline-flex; align-items: center; diff --git a/ui/dist/assets/index-C9k2-t4j.js b/ui/dist/assets/index-1m7Kadw1.js similarity index 95% rename from ui/dist/assets/index-C9k2-t4j.js rename to ui/dist/assets/index-1m7Kadw1.js index 3f443403..5f9eaac0 100644 --- a/ui/dist/assets/index-C9k2-t4j.js +++ b/ui/dist/assets/index-1m7Kadw1.js @@ -6,31 +6,31 @@ var Gm=Object.defineProperty;var Km=(e,t,s)=>t in e?Gm(e,t,{enumerable:!0,config * @vue/reactivity v3.5.38 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/let Rt;class Qo{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&Rt&&(Rt.active?(this.parent=Rt,this.index=(Rt.scopes||(Rt.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,s;if(this.scopes)for(t=0,s=this.scopes.length;t0&&--this._on===0){if(Rt===this)Rt=this.prevScope;else{let t=Rt;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let s,n;for(s=0,n=this.effects.length;s0)return;if(_i){let t=_i;for(_i=void 0;t;){const s=t.next;t.next=void 0,t.flags&=-9,t=s}}let e;for(;xi;){let t=xi;for(xi=void 0;t;){const s=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(n){e||(e=n)}t=s}}if(e)throw e}function xf(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function _f(e){let t,s=e.depsTail,n=s;for(;n;){const a=n.prevDep;n.version===-1?(n===s&&(s=a),tc(n),wg(n)):t=n,n.dep.activeLink=n.prevActiveLink,n.prevActiveLink=void 0,n=a}e.deps=t,e.depsTail=s}function mo(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(kf(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function kf(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Ni)||(e.globalVersion=Ni,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!mo(e))))return;e.flags|=2;const t=e.dep,s=ot,n=Hs;ot=e,Hs=!0;try{xf(e);const a=e.fn(e._value);(t.version===0||Lt(a,e._value))&&(e.flags|=128,e._value=a,t.version++)}catch(a){throw t.version++,a}finally{ot=s,Hs=n,_f(e),e.flags&=-3}}function tc(e,t=!1){const{dep:s,prevSub:n,nextSub:a}=e;if(n&&(n.nextSub=a,e.prevSub=void 0),a&&(a.prevSub=n,e.nextSub=void 0),s.subs===e&&(s.subs=n,!n&&s.computed)){s.computed.flags&=-5;for(let i=s.computed.deps;i;i=i.nextDep)tc(i,!0)}!t&&!--s.sc&&s.map&&s.map.delete(s.key)}function wg(e){const{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=void 0),s&&(s.prevDep=t,e.nextDep=void 0)}function Sg(e,t){e.effect instanceof Oi&&(e=e.effect.fn);const s=new Oi(e);t&&ze(s,t);try{s.run()}catch(a){throw s.stop(),a}const n=s.run.bind(s);return n.effect=s,n}function Tg(e){e.effect.stop()}let Hs=!0;const wf=[];function Tn(){wf.push(Hs),Hs=!1}function Cn(){const e=wf.pop();Hs=e===void 0?!0:e}function cd(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const s=ot;ot=void 0;try{t()}finally{ot=s}}}let Ni=0;class Cg{constructor(t,s){this.sub=t,this.dep=s,this.version=s.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class gr{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!ot||!Hs||ot===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==ot)s=this.activeLink=new Cg(ot,this),ot.deps?(s.prevDep=ot.depsTail,ot.depsTail.nextDep=s,ot.depsTail=s):ot.deps=ot.depsTail=s,Sf(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){const n=s.nextDep;n.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=n),s.prevDep=ot.depsTail,s.nextDep=void 0,ot.depsTail.nextDep=s,ot.depsTail=s,ot.deps===s&&(ot.deps=n)}return s}trigger(t){this.version++,Ni++,this.notify(t)}notify(t){Xo();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{ec()}}}function Sf(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let n=t.deps;n;n=n.nextDep)Sf(n)}const s=e.dep.subs;s!==e&&(e.prevSub=s,s&&(s.nextSub=e)),e.dep.subs=e}}const Dl=new WeakMap,Xn=Symbol(""),go=Symbol(""),Li=Symbol("");function qt(e,t,s){if(Hs&&ot){let n=Dl.get(e);n||Dl.set(e,n=new Map);let a=n.get(s);a||(n.set(s,a=new gr),a.map=n,a.key=s),a.track()}}function mn(e,t,s,n,a,i){const l=Dl.get(e);if(!l){Ni++;return}const r=o=>{o&&o.trigger()};if(Xo(),t==="clear")l.forEach(r);else{const o=xe(e),c=o&&ur(s);if(o&&s==="length"){const d=Number(n);l.forEach((u,f)=>{(f==="length"||f===Li||!Wt(f)&&f>=d)&&r(u)})}else switch((s!==void 0||l.has(void 0))&&r(l.get(s)),c&&r(l.get(Li)),t){case"add":o?c&&r(l.get("length")):(r(l.get(Xn)),Na(e)&&r(l.get(go)));break;case"delete":o||(r(l.get(Xn)),Na(e)&&r(l.get(go)));break;case"set":Na(e)&&r(l.get(Xn));break}}ec()}function Eg(e,t){const s=Dl.get(e);return s&&s.get(t)}function ya(e){const t=Je(e);return t===e?t:(qt(t,"iterate",Li),gs(e)?t:t.map(Vs))}function vr(e){return qt(e=Je(e),"iterate",Li),e}function en(e,t){return sn(e)?Ha(_n(e)?Vs(t):t):Vs(t)}const Ag={__proto__:null,[Symbol.iterator](){return zr(this,Symbol.iterator,e=>en(this,e))},concat(...e){return ya(this).concat(...e.map(t=>xe(t)?ya(t):t))},entries(){return zr(this,"entries",e=>(e[1]=en(this,e[1]),e))},every(e,t){return rn(this,"every",e,t,void 0,arguments)},filter(e,t){return rn(this,"filter",e,t,s=>s.map(n=>en(this,n)),arguments)},find(e,t){return rn(this,"find",e,t,s=>en(this,s),arguments)},findIndex(e,t){return rn(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return rn(this,"findLast",e,t,s=>en(this,s),arguments)},findLastIndex(e,t){return rn(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return rn(this,"forEach",e,t,void 0,arguments)},includes(...e){return Vr(this,"includes",e)},indexOf(...e){return Vr(this,"indexOf",e)},join(e){return ya(this).join(e)},lastIndexOf(...e){return Vr(this,"lastIndexOf",e)},map(e,t){return rn(this,"map",e,t,void 0,arguments)},pop(){return li(this,"pop")},push(...e){return li(this,"push",e)},reduce(e,...t){return dd(this,"reduce",e,t)},reduceRight(e,...t){return dd(this,"reduceRight",e,t)},shift(){return li(this,"shift")},some(e,t){return rn(this,"some",e,t,void 0,arguments)},splice(...e){return li(this,"splice",e)},toReversed(){return ya(this).toReversed()},toSorted(e){return ya(this).toSorted(e)},toSpliced(...e){return ya(this).toSpliced(...e)},unshift(...e){return li(this,"unshift",e)},values(){return zr(this,"values",e=>en(this,e))}};function zr(e,t,s){const n=vr(e),a=n[t]();return n!==e&&!gs(e)&&(a._next=a.next,a.next=()=>{const i=a._next();return i.done||(i.value=s(i.value)),i}),a}const Rg=Array.prototype;function rn(e,t,s,n,a,i){const l=vr(e),r=l!==e&&!gs(e),o=l[t];if(o!==Rg[t]){const u=o.apply(e,i);return r?Vs(u):u}let c=s;l!==e&&(r?c=function(u,f){return s.call(this,en(e,u),f,e)}:s.length>2&&(c=function(u,f){return s.call(this,u,f,e)}));const d=o.call(l,c,n);return r&&a?a(d):d}function dd(e,t,s,n){const a=vr(e),i=a!==e&&!gs(e);let l=s,r=!1;a!==e&&(i?(r=n.length===0,l=function(c,d,u){return r&&(r=!1,c=en(e,c)),s.call(this,c,en(e,d),u,e)}):s.length>3&&(l=function(c,d,u){return s.call(this,c,d,u,e)}));const o=a[t](l,...n);return r?en(e,o):o}function Vr(e,t,s){const n=Je(e);qt(n,"iterate",Li);const a=n[t](...s);return(a===-1||a===!1)&&Yi(s[0])?(s[0]=Je(s[0]),n[t](...s)):a}function li(e,t,s=[]){Tn(),Xo();const n=Je(e)[t].apply(e,s);return ec(),Cn(),n}const Ig=ws("__proto__,__v_isRef,__isVue"),Tf=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Wt));function Og(e){Wt(e)||(e=String(e));const t=Je(this);return qt(t,"has",e),t.hasOwnProperty(e)}class Cf{constructor(t=!1,s=!1){this._isReadonly=t,this._isShallow=s}get(t,s,n){if(s==="__v_skip")return t.__v_skip;const a=this._isReadonly,i=this._isShallow;if(s==="__v_isReactive")return!a;if(s==="__v_isReadonly")return a;if(s==="__v_isShallow")return i;if(s==="__v_raw")return n===(a?i?Nf:Of:i?If:Rf).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(n)?t:void 0;const l=xe(t);if(!a){let o;if(l&&(o=Ag[s]))return o;if(s==="hasOwnProperty")return Og}const r=Reflect.get(t,s,St(t)?t:n);if((Wt(s)?Tf.has(s):Ig(s))||(a||qt(t,"get",s),i))return r;if(St(r)){const o=l&&ur(s)?r:r.value;return a&&Qe(o)?Ml(o):o}return Qe(r)?a?Ml(r):zn(r):r}}class Ef extends Cf{constructor(t=!1){super(!1,t)}set(t,s,n,a){let i=t[s];const l=xe(t)&&ur(s);if(!this._isShallow){const c=sn(i);if(!gs(n)&&!sn(n)&&(i=Je(i),n=Je(n)),!l&&St(i)&&!St(n))return c||(i.value=n),!0}const r=l?Number(s)e,cl=e=>Reflect.getPrototypeOf(e);function Pg(e,t,s){return function(...n){const a=this.__v_raw,i=Je(a),l=Na(i),r=e==="entries"||e===Symbol.iterator&&l,o=e==="keys"&&l,c=a[e](...n),d=s?vo:t?Ha:Vs;return!t&&qt(i,"iterate",o?go:Xn),ze(Object.create(c),{next(){const{value:u,done:f}=c.next();return f?{value:u,done:f}:{value:r?[d(u[0]),d(u[1])]:d(u),done:f}}})}}function dl(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Fg(e,t){const s={get(a){const i=this.__v_raw,l=Je(i),r=Je(a);e||(Lt(a,r)&&qt(l,"get",a),qt(l,"get",r));const{has:o}=cl(l),c=t?vo:e?Ha:Vs;if(o.call(l,a))return c(i.get(a));if(o.call(l,r))return c(i.get(r));i!==l&&i.get(a)},get size(){const a=this.__v_raw;return!e&&qt(Je(a),"iterate",Xn),a.size},has(a){const i=this.__v_raw,l=Je(i),r=Je(a);return e||(Lt(a,r)&&qt(l,"has",a),qt(l,"has",r)),a===r?i.has(a):i.has(a)||i.has(r)},forEach(a,i){const l=this,r=l.__v_raw,o=Je(r),c=t?vo:e?Ha:Vs;return!e&&qt(o,"iterate",Xn),r.forEach((d,u)=>a.call(i,c(d),c(u),l))}};return ze(s,e?{add:dl("add"),set:dl("set"),delete:dl("delete"),clear:dl("clear")}:{add(a){const i=Je(this),l=cl(i),r=Je(a),o=!t&&!gs(a)&&!sn(a)?r:a;return l.has.call(i,o)||Lt(a,o)&&l.has.call(i,a)||Lt(r,o)&&l.has.call(i,r)||(i.add(o),mn(i,"add",o,o)),this},set(a,i){!t&&!gs(i)&&!sn(i)&&(i=Je(i));const l=Je(this),{has:r,get:o}=cl(l);let c=r.call(l,a);c||(a=Je(a),c=r.call(l,a));const d=o.call(l,a);return l.set(a,i),c?Lt(i,d)&&mn(l,"set",a,i):mn(l,"add",a,i),this},delete(a){const i=Je(this),{has:l,get:r}=cl(i);let o=l.call(i,a);o||(a=Je(a),o=l.call(i,a)),r&&r.call(i,a);const c=i.delete(a);return o&&mn(i,"delete",a,void 0),c},clear(){const a=Je(this),i=a.size!==0,l=a.clear();return i&&mn(a,"clear",void 0,void 0),l}}),["keys","values","entries",Symbol.iterator].forEach(a=>{s[a]=Pg(a,e,t)}),s}function br(e,t){const s=Fg(e,t);return(n,a,i)=>a==="__v_isReactive"?!e:a==="__v_isReadonly"?e:a==="__v_raw"?n:Reflect.get(et(s,a)&&a in n?s:n,a,i)}const $g={get:br(!1,!1)},Bg={get:br(!1,!0)},Ug={get:br(!0,!1)},Hg={get:br(!0,!0)},Rf=new WeakMap,If=new WeakMap,Of=new WeakMap,Nf=new WeakMap;function zg(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function zn(e){return sn(e)?e:yr(e,!1,Ng,$g,Rf)}function sc(e){return yr(e,!1,Dg,Bg,If)}function Ml(e){return yr(e,!0,Lg,Ug,Of)}function Vg(e){return yr(e,!0,Mg,Hg,Nf)}function yr(e,t,s,n,a){if(!Qe(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const i=a.get(e);if(i)return i;const l=zg(Qm(e));if(l===0)return e;const r=new Proxy(e,l===2?n:s);return a.set(e,r),r}function _n(e){return sn(e)?_n(e.__v_raw):!!(e&&e.__v_isReactive)}function sn(e){return!!(e&&e.__v_isReadonly)}function gs(e){return!!(e&&e.__v_isShallow)}function Yi(e){return e?!!e.__v_raw:!1}function Je(e){const t=e&&e.__v_raw;return t?Je(t):e}function Lf(e){return!et(e,"__v_skip")&&Object.isExtensible(e)&&uf(e,"__v_skip",!0),e}const Vs=e=>Qe(e)?zn(e):e,Ha=e=>Qe(e)?Ml(e):e;function St(e){return e?e.__v_isRef===!0:!1}function h(e){return Df(e,!1)}function nc(e){return Df(e,!0)}function Df(e,t){return St(e)?e:new jg(e,t)}class jg{constructor(t,s){this.dep=new gr,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?t:Je(t),this._value=s?t:Vs(t),this.__v_isShallow=s}get value(){return this.dep.track(),this._value}set value(t){const s=this._rawValue,n=this.__v_isShallow||gs(t)||sn(t);t=n?t:Je(t),Lt(t,s)&&(this._rawValue=t,this._value=n?t:Vs(t),this.dep.trigger())}}function qg(e){e.dep&&e.dep.trigger()}function tn(e){return St(e)?e.value:e}function Gg(e){return Re(e)?e():tn(e)}const Kg={get:(e,t,s)=>t==="__v_raw"?e:tn(Reflect.get(e,t,s)),set:(e,t,s,n)=>{const a=e[t];return St(a)&&!St(s)?(a.value=s,!0):Reflect.set(e,t,s,n)}};function ac(e){return _n(e)?e:new Proxy(e,Kg)}class Wg{constructor(t){this.__v_isRef=!0,this._value=void 0;const s=this.dep=new gr,{get:n,set:a}=t(s.track.bind(s),s.trigger.bind(s));this._get=n,this._set=a}get value(){return this._value=this._get()}set value(t){this._set(t)}}function Mf(e){return new Wg(e)}function Zg(e){const t=xe(e)?new Array(e.length):{};for(const s in e)t[s]=Pf(e,s);return t}class Jg{constructor(t,s,n){this._object=t,this._defaultValue=n,this.__v_isRef=!0,this._value=void 0,this._key=Wt(s)?s:String(s),this._raw=Je(t);let a=!0,i=t;if(!xe(t)||Wt(this._key)||!ur(this._key))do a=!Yi(i)||gs(i);while(a&&(i=i.__v_raw));this._shallow=a}get value(){let t=this._object[this._key];return this._shallow&&(t=tn(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&St(this._raw[this._key])){const s=this._object[this._key];if(St(s)){s.value=t;return}}this._object[this._key]=t}get dep(){return Eg(this._raw,this._key)}}class Yg{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function Qg(e,t,s){return St(e)?e:Re(e)?new Yg(e):Qe(e)&&arguments.length>1?Pf(e,t,s):h(e)}function Pf(e,t,s){return new Jg(e,t,s)}class Xg{constructor(t,s,n){this.fn=t,this.setter=s,this._value=void 0,this.dep=new gr(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Ni-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&ot!==this)return yf(this,!0),!0}get value(){const t=this.dep.track();return kf(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function ev(e,t,s=!1){let n,a;return Re(e)?n=e:(n=e.get,a=e.set),new Xg(n,a,s)}const tv={GET:"get",HAS:"has",ITERATE:"iterate"},sv={SET:"set",ADD:"add",DELETE:"delete",CLEAR:"clear"},ul={},Pl=new WeakMap;let Mn;function nv(){return Mn}function Ff(e,t=!1,s=Mn){if(s){let n=Pl.get(s);n||Pl.set(s,n=[]),n.push(e)}}function av(e,t,s=je){const{immediate:n,deep:a,once:i,scheduler:l,augmentJob:r,call:o}=s,c=_=>a?_:gs(_)||a===!1||a===0?gn(_,1):gn(_);let d,u,f,p,b=!1,y=!1;if(St(e)?(u=()=>e.value,b=gs(e)):_n(e)?(u=()=>c(e),b=!0):xe(e)?(y=!0,b=e.some(_=>_n(_)||gs(_)),u=()=>e.map(_=>{if(St(_))return _.value;if(_n(_))return c(_);if(Re(_))return o?o(_,2):_()})):Re(e)?t?u=o?()=>o(e,2):e:u=()=>{if(f){Tn();try{f()}finally{Cn()}}const _=Mn;Mn=d;try{return o?o(e,3,[p]):e(p)}finally{Mn=_}}:u=Ut,t&&a){const _=u,S=a===!0?1/0:a;u=()=>gn(_(),S)}const E=vf(),I=()=>{d.stop(),E&&E.active&&Jo(E.effects,d)};if(i&&t){const _=t;t=(...S)=>{const g=_(...S);return I(),g}}let x=y?new Array(e.length).fill(ul):ul;const m=_=>{if(!(!(d.flags&1)||!d.dirty&&!_))if(t){const S=d.run();if(_||a||b||(y?S.some((g,w)=>Lt(g,x[w])):Lt(S,x))){f&&f();const g=Mn;Mn=d;try{const w=[S,x===ul?void 0:y&&x[0]===ul?[]:x,p];x=S,o?o(t,3,w):t(...w)}finally{Mn=g}}}else d.run()};return r&&r(m),d=new Oi(u),d.scheduler=l?()=>l(m,!1):m,p=_=>Ff(_,!1,d),f=d.onStop=()=>{const _=Pl.get(d);if(_){if(o)o(_,4);else for(const S of _)S();Pl.delete(d)}},t?n?m(!0):x=d.run():l?l(m.bind(null,!0),!0):d.run(),I.pause=d.pause.bind(d),I.resume=d.resume.bind(d),I.stop=I,I}function gn(e,t=1/0,s){if(t<=0||!Qe(e)||e.__v_skip||(s=s||new Map,(s.get(e)||0)>=t))return e;if(s.set(e,t),t--,St(e))gn(e.value,t,s);else if(xe(e))for(let n=0;n{gn(n,t,s)});else if(dr(e)){for(const n in e)gn(e[n],t,s);for(const n of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,n)&&gn(e[n],t,s)}return e}/** +**/let Rt;class Qo{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&Rt&&(Rt.active?(this.parent=Rt,this.index=(Rt.scopes||(Rt.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,s;if(this.scopes)for(t=0,s=this.scopes.length;t0&&--this._on===0){if(Rt===this)Rt=this.prevScope;else{let t=Rt;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let s,n;for(s=0,n=this.effects.length;s0)return;if(_i){let t=_i;for(_i=void 0;t;){const s=t.next;t.next=void 0,t.flags&=-9,t=s}}let e;for(;xi;){let t=xi;for(xi=void 0;t;){const s=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(n){e||(e=n)}t=s}}if(e)throw e}function xf(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function _f(e){let t,s=e.depsTail,n=s;for(;n;){const a=n.prevDep;n.version===-1?(n===s&&(s=a),tc(n),wg(n)):t=n,n.dep.activeLink=n.prevActiveLink,n.prevActiveLink=void 0,n=a}e.deps=t,e.depsTail=s}function mo(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(kf(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function kf(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Ni)||(e.globalVersion=Ni,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!mo(e))))return;e.flags|=2;const t=e.dep,s=ot,n=zs;ot=e,zs=!0;try{xf(e);const a=e.fn(e._value);(t.version===0||Lt(a,e._value))&&(e.flags|=128,e._value=a,t.version++)}catch(a){throw t.version++,a}finally{ot=s,zs=n,_f(e),e.flags&=-3}}function tc(e,t=!1){const{dep:s,prevSub:n,nextSub:a}=e;if(n&&(n.nextSub=a,e.prevSub=void 0),a&&(a.prevSub=n,e.nextSub=void 0),s.subs===e&&(s.subs=n,!n&&s.computed)){s.computed.flags&=-5;for(let i=s.computed.deps;i;i=i.nextDep)tc(i,!0)}!t&&!--s.sc&&s.map&&s.map.delete(s.key)}function wg(e){const{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=void 0),s&&(s.prevDep=t,e.nextDep=void 0)}function Sg(e,t){e.effect instanceof Oi&&(e=e.effect.fn);const s=new Oi(e);t&&ze(s,t);try{s.run()}catch(a){throw s.stop(),a}const n=s.run.bind(s);return n.effect=s,n}function Tg(e){e.effect.stop()}let zs=!0;const wf=[];function Tn(){wf.push(zs),zs=!1}function Cn(){const e=wf.pop();zs=e===void 0?!0:e}function cd(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const s=ot;ot=void 0;try{t()}finally{ot=s}}}let Ni=0;class Cg{constructor(t,s){this.sub=t,this.dep=s,this.version=s.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class gr{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!ot||!zs||ot===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==ot)s=this.activeLink=new Cg(ot,this),ot.deps?(s.prevDep=ot.depsTail,ot.depsTail.nextDep=s,ot.depsTail=s):ot.deps=ot.depsTail=s,Sf(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){const n=s.nextDep;n.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=n),s.prevDep=ot.depsTail,s.nextDep=void 0,ot.depsTail.nextDep=s,ot.depsTail=s,ot.deps===s&&(ot.deps=n)}return s}trigger(t){this.version++,Ni++,this.notify(t)}notify(t){Xo();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{ec()}}}function Sf(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let n=t.deps;n;n=n.nextDep)Sf(n)}const s=e.dep.subs;s!==e&&(e.prevSub=s,s&&(s.nextSub=e)),e.dep.subs=e}}const Dl=new WeakMap,Xn=Symbol(""),go=Symbol(""),Li=Symbol("");function qt(e,t,s){if(zs&&ot){let n=Dl.get(e);n||Dl.set(e,n=new Map);let a=n.get(s);a||(n.set(s,a=new gr),a.map=n,a.key=s),a.track()}}function mn(e,t,s,n,a,i){const l=Dl.get(e);if(!l){Ni++;return}const r=o=>{o&&o.trigger()};if(Xo(),t==="clear")l.forEach(r);else{const o=xe(e),c=o&&ur(s);if(o&&s==="length"){const d=Number(n);l.forEach((u,f)=>{(f==="length"||f===Li||!Wt(f)&&f>=d)&&r(u)})}else switch((s!==void 0||l.has(void 0))&&r(l.get(s)),c&&r(l.get(Li)),t){case"add":o?c&&r(l.get("length")):(r(l.get(Xn)),Na(e)&&r(l.get(go)));break;case"delete":o||(r(l.get(Xn)),Na(e)&&r(l.get(go)));break;case"set":Na(e)&&r(l.get(Xn));break}}ec()}function Eg(e,t){const s=Dl.get(e);return s&&s.get(t)}function ya(e){const t=Je(e);return t===e?t:(qt(t,"iterate",Li),gs(e)?t:t.map(js))}function vr(e){return qt(e=Je(e),"iterate",Li),e}function tn(e,t){return nn(e)?Ha(_n(e)?js(t):t):js(t)}const Ag={__proto__:null,[Symbol.iterator](){return zr(this,Symbol.iterator,e=>tn(this,e))},concat(...e){return ya(this).concat(...e.map(t=>xe(t)?ya(t):t))},entries(){return zr(this,"entries",e=>(e[1]=tn(this,e[1]),e))},every(e,t){return rn(this,"every",e,t,void 0,arguments)},filter(e,t){return rn(this,"filter",e,t,s=>s.map(n=>tn(this,n)),arguments)},find(e,t){return rn(this,"find",e,t,s=>tn(this,s),arguments)},findIndex(e,t){return rn(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return rn(this,"findLast",e,t,s=>tn(this,s),arguments)},findLastIndex(e,t){return rn(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return rn(this,"forEach",e,t,void 0,arguments)},includes(...e){return Vr(this,"includes",e)},indexOf(...e){return Vr(this,"indexOf",e)},join(e){return ya(this).join(e)},lastIndexOf(...e){return Vr(this,"lastIndexOf",e)},map(e,t){return rn(this,"map",e,t,void 0,arguments)},pop(){return li(this,"pop")},push(...e){return li(this,"push",e)},reduce(e,...t){return dd(this,"reduce",e,t)},reduceRight(e,...t){return dd(this,"reduceRight",e,t)},shift(){return li(this,"shift")},some(e,t){return rn(this,"some",e,t,void 0,arguments)},splice(...e){return li(this,"splice",e)},toReversed(){return ya(this).toReversed()},toSorted(e){return ya(this).toSorted(e)},toSpliced(...e){return ya(this).toSpliced(...e)},unshift(...e){return li(this,"unshift",e)},values(){return zr(this,"values",e=>tn(this,e))}};function zr(e,t,s){const n=vr(e),a=n[t]();return n!==e&&!gs(e)&&(a._next=a.next,a.next=()=>{const i=a._next();return i.done||(i.value=s(i.value)),i}),a}const Rg=Array.prototype;function rn(e,t,s,n,a,i){const l=vr(e),r=l!==e&&!gs(e),o=l[t];if(o!==Rg[t]){const u=o.apply(e,i);return r?js(u):u}let c=s;l!==e&&(r?c=function(u,f){return s.call(this,tn(e,u),f,e)}:s.length>2&&(c=function(u,f){return s.call(this,u,f,e)}));const d=o.call(l,c,n);return r&&a?a(d):d}function dd(e,t,s,n){const a=vr(e),i=a!==e&&!gs(e);let l=s,r=!1;a!==e&&(i?(r=n.length===0,l=function(c,d,u){return r&&(r=!1,c=tn(e,c)),s.call(this,c,tn(e,d),u,e)}):s.length>3&&(l=function(c,d,u){return s.call(this,c,d,u,e)}));const o=a[t](l,...n);return r?tn(e,o):o}function Vr(e,t,s){const n=Je(e);qt(n,"iterate",Li);const a=n[t](...s);return(a===-1||a===!1)&&Yi(s[0])?(s[0]=Je(s[0]),n[t](...s)):a}function li(e,t,s=[]){Tn(),Xo();const n=Je(e)[t].apply(e,s);return ec(),Cn(),n}const Ig=ws("__proto__,__v_isRef,__isVue"),Tf=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Wt));function Og(e){Wt(e)||(e=String(e));const t=Je(this);return qt(t,"has",e),t.hasOwnProperty(e)}class Cf{constructor(t=!1,s=!1){this._isReadonly=t,this._isShallow=s}get(t,s,n){if(s==="__v_skip")return t.__v_skip;const a=this._isReadonly,i=this._isShallow;if(s==="__v_isReactive")return!a;if(s==="__v_isReadonly")return a;if(s==="__v_isShallow")return i;if(s==="__v_raw")return n===(a?i?Nf:Of:i?If:Rf).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(n)?t:void 0;const l=xe(t);if(!a){let o;if(l&&(o=Ag[s]))return o;if(s==="hasOwnProperty")return Og}const r=Reflect.get(t,s,St(t)?t:n);if((Wt(s)?Tf.has(s):Ig(s))||(a||qt(t,"get",s),i))return r;if(St(r)){const o=l&&ur(s)?r:r.value;return a&&Qe(o)?Ml(o):o}return Qe(r)?a?Ml(r):zn(r):r}}class Ef extends Cf{constructor(t=!1){super(!1,t)}set(t,s,n,a){let i=t[s];const l=xe(t)&&ur(s);if(!this._isShallow){const c=nn(i);if(!gs(n)&&!nn(n)&&(i=Je(i),n=Je(n)),!l&&St(i)&&!St(n))return c||(i.value=n),!0}const r=l?Number(s)e,cl=e=>Reflect.getPrototypeOf(e);function Pg(e,t,s){return function(...n){const a=this.__v_raw,i=Je(a),l=Na(i),r=e==="entries"||e===Symbol.iterator&&l,o=e==="keys"&&l,c=a[e](...n),d=s?vo:t?Ha:js;return!t&&qt(i,"iterate",o?go:Xn),ze(Object.create(c),{next(){const{value:u,done:f}=c.next();return f?{value:u,done:f}:{value:r?[d(u[0]),d(u[1])]:d(u),done:f}}})}}function dl(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Fg(e,t){const s={get(a){const i=this.__v_raw,l=Je(i),r=Je(a);e||(Lt(a,r)&&qt(l,"get",a),qt(l,"get",r));const{has:o}=cl(l),c=t?vo:e?Ha:js;if(o.call(l,a))return c(i.get(a));if(o.call(l,r))return c(i.get(r));i!==l&&i.get(a)},get size(){const a=this.__v_raw;return!e&&qt(Je(a),"iterate",Xn),a.size},has(a){const i=this.__v_raw,l=Je(i),r=Je(a);return e||(Lt(a,r)&&qt(l,"has",a),qt(l,"has",r)),a===r?i.has(a):i.has(a)||i.has(r)},forEach(a,i){const l=this,r=l.__v_raw,o=Je(r),c=t?vo:e?Ha:js;return!e&&qt(o,"iterate",Xn),r.forEach((d,u)=>a.call(i,c(d),c(u),l))}};return ze(s,e?{add:dl("add"),set:dl("set"),delete:dl("delete"),clear:dl("clear")}:{add(a){const i=Je(this),l=cl(i),r=Je(a),o=!t&&!gs(a)&&!nn(a)?r:a;return l.has.call(i,o)||Lt(a,o)&&l.has.call(i,a)||Lt(r,o)&&l.has.call(i,r)||(i.add(o),mn(i,"add",o,o)),this},set(a,i){!t&&!gs(i)&&!nn(i)&&(i=Je(i));const l=Je(this),{has:r,get:o}=cl(l);let c=r.call(l,a);c||(a=Je(a),c=r.call(l,a));const d=o.call(l,a);return l.set(a,i),c?Lt(i,d)&&mn(l,"set",a,i):mn(l,"add",a,i),this},delete(a){const i=Je(this),{has:l,get:r}=cl(i);let o=l.call(i,a);o||(a=Je(a),o=l.call(i,a)),r&&r.call(i,a);const c=i.delete(a);return o&&mn(i,"delete",a,void 0),c},clear(){const a=Je(this),i=a.size!==0,l=a.clear();return i&&mn(a,"clear",void 0,void 0),l}}),["keys","values","entries",Symbol.iterator].forEach(a=>{s[a]=Pg(a,e,t)}),s}function br(e,t){const s=Fg(e,t);return(n,a,i)=>a==="__v_isReactive"?!e:a==="__v_isReadonly"?e:a==="__v_raw"?n:Reflect.get(et(s,a)&&a in n?s:n,a,i)}const $g={get:br(!1,!1)},Bg={get:br(!1,!0)},Ug={get:br(!0,!1)},Hg={get:br(!0,!0)},Rf=new WeakMap,If=new WeakMap,Of=new WeakMap,Nf=new WeakMap;function zg(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function zn(e){return nn(e)?e:yr(e,!1,Ng,$g,Rf)}function sc(e){return yr(e,!1,Dg,Bg,If)}function Ml(e){return yr(e,!0,Lg,Ug,Of)}function Vg(e){return yr(e,!0,Mg,Hg,Nf)}function yr(e,t,s,n,a){if(!Qe(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const i=a.get(e);if(i)return i;const l=zg(Qm(e));if(l===0)return e;const r=new Proxy(e,l===2?n:s);return a.set(e,r),r}function _n(e){return nn(e)?_n(e.__v_raw):!!(e&&e.__v_isReactive)}function nn(e){return!!(e&&e.__v_isReadonly)}function gs(e){return!!(e&&e.__v_isShallow)}function Yi(e){return e?!!e.__v_raw:!1}function Je(e){const t=e&&e.__v_raw;return t?Je(t):e}function Lf(e){return!et(e,"__v_skip")&&Object.isExtensible(e)&&uf(e,"__v_skip",!0),e}const js=e=>Qe(e)?zn(e):e,Ha=e=>Qe(e)?Ml(e):e;function St(e){return e?e.__v_isRef===!0:!1}function h(e){return Df(e,!1)}function nc(e){return Df(e,!0)}function Df(e,t){return St(e)?e:new jg(e,t)}class jg{constructor(t,s){this.dep=new gr,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?t:Je(t),this._value=s?t:js(t),this.__v_isShallow=s}get value(){return this.dep.track(),this._value}set value(t){const s=this._rawValue,n=this.__v_isShallow||gs(t)||nn(t);t=n?t:Je(t),Lt(t,s)&&(this._rawValue=t,this._value=n?t:js(t),this.dep.trigger())}}function qg(e){e.dep&&e.dep.trigger()}function sn(e){return St(e)?e.value:e}function Gg(e){return Re(e)?e():sn(e)}const Kg={get:(e,t,s)=>t==="__v_raw"?e:sn(Reflect.get(e,t,s)),set:(e,t,s,n)=>{const a=e[t];return St(a)&&!St(s)?(a.value=s,!0):Reflect.set(e,t,s,n)}};function ac(e){return _n(e)?e:new Proxy(e,Kg)}class Wg{constructor(t){this.__v_isRef=!0,this._value=void 0;const s=this.dep=new gr,{get:n,set:a}=t(s.track.bind(s),s.trigger.bind(s));this._get=n,this._set=a}get value(){return this._value=this._get()}set value(t){this._set(t)}}function Mf(e){return new Wg(e)}function Zg(e){const t=xe(e)?new Array(e.length):{};for(const s in e)t[s]=Pf(e,s);return t}class Jg{constructor(t,s,n){this._object=t,this._defaultValue=n,this.__v_isRef=!0,this._value=void 0,this._key=Wt(s)?s:String(s),this._raw=Je(t);let a=!0,i=t;if(!xe(t)||Wt(this._key)||!ur(this._key))do a=!Yi(i)||gs(i);while(a&&(i=i.__v_raw));this._shallow=a}get value(){let t=this._object[this._key];return this._shallow&&(t=sn(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&St(this._raw[this._key])){const s=this._object[this._key];if(St(s)){s.value=t;return}}this._object[this._key]=t}get dep(){return Eg(this._raw,this._key)}}class Yg{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function Qg(e,t,s){return St(e)?e:Re(e)?new Yg(e):Qe(e)&&arguments.length>1?Pf(e,t,s):h(e)}function Pf(e,t,s){return new Jg(e,t,s)}class Xg{constructor(t,s,n){this.fn=t,this.setter=s,this._value=void 0,this.dep=new gr(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Ni-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&ot!==this)return yf(this,!0),!0}get value(){const t=this.dep.track();return kf(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function ev(e,t,s=!1){let n,a;return Re(e)?n=e:(n=e.get,a=e.set),new Xg(n,a,s)}const tv={GET:"get",HAS:"has",ITERATE:"iterate"},sv={SET:"set",ADD:"add",DELETE:"delete",CLEAR:"clear"},ul={},Pl=new WeakMap;let Mn;function nv(){return Mn}function Ff(e,t=!1,s=Mn){if(s){let n=Pl.get(s);n||Pl.set(s,n=[]),n.push(e)}}function av(e,t,s=je){const{immediate:n,deep:a,once:i,scheduler:l,augmentJob:r,call:o}=s,c=_=>a?_:gs(_)||a===!1||a===0?gn(_,1):gn(_);let d,u,f,p,b=!1,y=!1;if(St(e)?(u=()=>e.value,b=gs(e)):_n(e)?(u=()=>c(e),b=!0):xe(e)?(y=!0,b=e.some(_=>_n(_)||gs(_)),u=()=>e.map(_=>{if(St(_))return _.value;if(_n(_))return c(_);if(Re(_))return o?o(_,2):_()})):Re(e)?t?u=o?()=>o(e,2):e:u=()=>{if(f){Tn();try{f()}finally{Cn()}}const _=Mn;Mn=d;try{return o?o(e,3,[p]):e(p)}finally{Mn=_}}:u=Ut,t&&a){const _=u,S=a===!0?1/0:a;u=()=>gn(_(),S)}const E=vf(),I=()=>{d.stop(),E&&E.active&&Jo(E.effects,d)};if(i&&t){const _=t;t=(...S)=>{const g=_(...S);return I(),g}}let x=y?new Array(e.length).fill(ul):ul;const m=_=>{if(!(!(d.flags&1)||!d.dirty&&!_))if(t){const S=d.run();if(_||a||b||(y?S.some((g,w)=>Lt(g,x[w])):Lt(S,x))){f&&f();const g=Mn;Mn=d;try{const w=[S,x===ul?void 0:y&&x[0]===ul?[]:x,p];x=S,o?o(t,3,w):t(...w)}finally{Mn=g}}}else d.run()};return r&&r(m),d=new Oi(u),d.scheduler=l?()=>l(m,!1):m,p=_=>Ff(_,!1,d),f=d.onStop=()=>{const _=Pl.get(d);if(_){if(o)o(_,4);else for(const S of _)S();Pl.delete(d)}},t?n?m(!0):x=d.run():l?l(m.bind(null,!0),!0):d.run(),I.pause=d.pause.bind(d),I.resume=d.resume.bind(d),I.stop=I,I}function gn(e,t=1/0,s){if(t<=0||!Qe(e)||e.__v_skip||(s=s||new Map,(s.get(e)||0)>=t))return e;if(s.set(e,t),t--,St(e))gn(e.value,t,s);else if(xe(e))for(let n=0;n{gn(n,t,s)});else if(dr(e)){for(const n in e)gn(e[n],t,s);for(const n of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,n)&&gn(e[n],t,s)}return e}/** * @vue/runtime-core v3.5.38 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/const $f=[];function iv(e){$f.push(e)}function lv(){$f.pop()}function rv(e,t){}const ov={SETUP_FUNCTION:0,0:"SETUP_FUNCTION",RENDER_FUNCTION:1,1:"RENDER_FUNCTION",NATIVE_EVENT_HANDLER:5,5:"NATIVE_EVENT_HANDLER",COMPONENT_EVENT_HANDLER:6,6:"COMPONENT_EVENT_HANDLER",VNODE_HOOK:7,7:"VNODE_HOOK",DIRECTIVE_HOOK:8,8:"DIRECTIVE_HOOK",TRANSITION_HOOK:9,9:"TRANSITION_HOOK",APP_ERROR_HANDLER:10,10:"APP_ERROR_HANDLER",APP_WARN_HANDLER:11,11:"APP_WARN_HANDLER",FUNCTION_REF:12,12:"FUNCTION_REF",ASYNC_COMPONENT_LOADER:13,13:"ASYNC_COMPONENT_LOADER",SCHEDULER:14,14:"SCHEDULER",COMPONENT_UPDATE:15,15:"COMPONENT_UPDATE",APP_UNMOUNT_CLEANUP:16,16:"APP_UNMOUNT_CLEANUP"},cv={sp:"serverPrefetch hook",bc:"beforeCreate hook",c:"created hook",bm:"beforeMount hook",m:"mounted hook",bu:"beforeUpdate hook",u:"updated",bum:"beforeUnmount hook",um:"unmounted hook",a:"activated hook",da:"deactivated hook",ec:"errorCaptured hook",rtc:"renderTracked hook",rtg:"renderTriggered hook",0:"setup function",1:"render function",2:"watcher getter",3:"watcher callback",4:"watcher cleanup function",5:"native event handler",6:"component event handler",7:"vnode hook",8:"directive hook",9:"transition hook",10:"app errorHandler",11:"app warnHandler",12:"ref function",13:"async component loader",14:"scheduler flush",15:"component update",16:"app unmount cleanup function"};function ei(e,t,s,n){try{return n?e(...n):e()}catch(a){ua(a,t,s)}}function _s(e,t,s,n){if(Re(e)){const a=ei(e,t,s,n);return a&&Yo(a)&&a.catch(i=>{ua(i,t,s)}),a}if(xe(e)){const a=[];for(let i=0;i>>1,a=Xt[n],i=Mi(a);i=Mi(s)?Xt.push(e):Xt.splice(uv(t),0,e),e.flags|=1,Uf()}}function Uf(){Fl||(Fl=Bf.then(Hf))}function Di(e){xe(e)?Ma.push(...e):Pn&&e.id===-1?Pn.splice(Ta+1,0,e):e.flags&1||(Ma.push(e),e.flags|=1),Uf()}function ud(e,t,s=Qs+1){for(;sMi(s)-Mi(n));if(Ma.length=0,Pn){Pn.push(...t);return}for(Pn=t,Ta=0;Tae.id==null?e.flags&2?-1:1/0:e.id;function Hf(e){try{for(Qs=0;QsCa.emit(a,...i)),fl=[]):typeof window<"u"&&window.HTMLElement&&!((n=(s=window.navigator)==null?void 0:s.userAgent)!=null&&n.includes("jsdom"))?((t.__VUE_DEVTOOLS_HOOK_REPLAY__=t.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push(i=>{zf(i,t)}),setTimeout(()=>{Ca||(t.__VUE_DEVTOOLS_HOOK_REPLAY__=null,fl=[])},3e3)):fl=[]}let Bt=null,xr=null;function Pi(e){const t=Bt;return Bt=e,xr=e&&e.type.__scopeId||null,t}function fv(e){xr=e}function pv(){xr=null}const hv=e=>lc;function lc(e,t=Bt,s){if(!t||e._n)return e;const n=(...a)=>{n._d&&Ui(-1);const i=Pi(t);let l;try{l=e(...a)}finally{Pi(i),n._d&&Ui(1)}return l};return n._n=!0,n._c=!0,n._d=!0,n}function mv(e,t){if(Bt===null)return e;const s=tl(Bt),n=e.dirs||(e.dirs=[]);for(let a=0;a1)return s&&Re(t)?t.call(n&&n.proxy):t}}function gv(){return!!(ss()||ea)}const Vf=Symbol.for("v-scx"),jf=()=>Os(Vf);function vv(e,t){return Qi(e,null,t)}function bv(e,t){return Qi(e,null,{flush:"post"})}function qf(e,t){return Qi(e,null,{flush:"sync"})}function ts(e,t,s){return Qi(e,t,s)}function Qi(e,t,s=je){const{immediate:n,deep:a,flush:i,once:l}=s,r=ze({},s),o=t&&n||!t&&i!=="post";let c;if(ia){if(i==="sync"){const p=jf();c=p.__watcherHandles||(p.__watcherHandles=[])}else if(!o){const p=()=>{};return p.stop=Ut,p.resume=Ut,p.pause=Ut,p}}const d=$t;r.call=(p,b,y)=>_s(p,d,b,y);let u=!1;i==="post"?r.scheduler=p=>{kt(p,d&&d.suspense)}:i!=="sync"&&(u=!0,r.scheduler=(p,b)=>{b?p():ic(p)}),r.augmentJob=p=>{t&&(p.flags|=4),u&&(p.flags|=2,d&&(p.id=d.uid,p.i=d))};const f=av(e,t,r);return ia&&(c?c.push(f):o&&f()),f}function yv(e,t,s){const n=this.proxy,a=Me(e)?e.includes(".")?Gf(n,e):()=>n[e]:e.bind(n,n);let i;Re(t)?i=t:(i=t.handler,s=t);const l=ti(this),r=Qi(a,i.bind(n),s);return l(),r}function Gf(e,t){const s=t.split(".");return()=>{let n=e;for(let a=0;ae.__isTeleport,Zn=e=>e&&(e.disabled||e.disabled===""),xv=e=>e&&(e.defer||e.defer===""),fd=e=>typeof SVGElement<"u"&&e instanceof SVGElement,pd=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,bo=(e,t)=>{const s=e&&e.to;return Me(s)?t?t(s):null:s},_v={name:"Teleport",__isTeleport:!0,process(e,t,s,n,a,i,l,r,o,c){const{mc:d,pc:u,pbc:f,o:{insert:p,querySelector:b,createText:y,createComment:E,parentNode:I}}=c,x=Zn(t.props);let{dynamicChildren:m}=t;const _=(w,T,C)=>{w.shapeFlag&16&&d(w.children,T,C,a,i,l,r,o)},S=(w=t)=>{const T=Zn(w.props),C=w.target=bo(w.props,b),M=yo(C,w,y,p);C&&(l!=="svg"&&fd(C)?l="svg":l!=="mathml"&&pd(C)&&(l="mathml"),a&&a.isCE&&(a.ce._teleportTargets||(a.ce._teleportTargets=new Set)).add(C),T||(_(w,C,M),mi(w,!1)))},g=w=>{const T=()=>{if(Ln.get(w)===T){if(Ln.delete(w),Zn(w.props)){const C=I(w.el)||s;_(w,C,w.anchor),mi(w,!0)}S(w)}};Ln.set(w,T),kt(T,i)};if(e==null){const w=t.el=y(""),T=t.anchor=y("");if(p(w,s,n),p(T,s,n),xv(t.props)||i&&i.pendingBranch){g(t);return}x&&(_(t,s,T),mi(t,!0)),S()}else{t.el=e.el;const w=t.anchor=e.anchor,T=Ln.get(e);if(T){T.flags|=8,Ln.delete(e),g(t);return}t.targetStart=e.targetStart;const C=t.target=e.target,M=t.targetAnchor=e.targetAnchor,H=Zn(e.props),P=H?s:C,R=H?w:M;if(l==="svg"||fd(C)?l="svg":(l==="mathml"||pd(C))&&(l="mathml"),m?(f(e.dynamicChildren,m,P,a,i,l,r),vc(e,t,!0)):o||u(e,t,P,R,a,i,l,r,!1),x)H?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):pl(t,s,w,c,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const j=t.target=bo(t.props,b);j&&pl(t,j,null,c,0)}else H&&pl(t,C,M,c,1);mi(t,x)}},remove(e,t,s,{um:n,o:{remove:a}},i){const{shapeFlag:l,children:r,anchor:o,targetStart:c,targetAnchor:d,target:u,props:f}=e,p=i||!Zn(f),b=Ln.get(e);if(b&&(b.flags|=8,Ln.delete(e)),u&&(a(c),a(d)),i&&a(o),!b&&l&16)for(let y=0;y{e.isMounted=!0}),Sr(()=>{e.isUnmounting=!0}),e}const Es=[Function,Array],oc={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Es,onEnter:Es,onAfterEnter:Es,onEnterCancelled:Es,onBeforeLeave:Es,onLeave:Es,onAfterLeave:Es,onLeaveCancelled:Es,onBeforeAppear:Es,onAppear:Es,onAfterAppear:Es,onAppearCancelled:Es},Zf=e=>{const t=e.subTree;return t.component?Zf(t.component):t},Sv={name:"BaseTransition",props:oc,setup(e,{slots:t}){const s=ss(),n=rc();return()=>{const a=t.default&&_r(t.default(),!0),i=a&&a.length?Jf(a):s.subTree?Np():void 0;if(!i)return;const l=Je(e),{mode:r}=l;if(n.isLeaving)return jr(i);const o=hd(i);if(!o)return jr(i);let c=za(o,l,n,s,u=>c=u);o.type!==yt&&En(o,c);let d=s.subTree&&hd(s.subTree);if(d&&d.type!==yt&&!Us(d,o)&&Zf(s).type!==yt){let u=za(d,l,n,s);if(En(d,u),r==="out-in"&&o.type!==yt)return n.isLeaving=!0,u.afterLeave=()=>{n.isLeaving=!1,s.job.flags&8||s.update(),delete u.afterLeave,d=void 0},jr(i);r==="in-out"&&o.type!==yt?u.delayLeave=(f,p,b)=>{const y=Qf(n,d);y[String(d.key)]=d,f[As]=()=>{p(),f[As]=void 0,delete c.delayedLeave,d=void 0},c.delayedLeave=()=>{b(),delete c.delayedLeave,d=void 0}}:d=void 0}else d&&(d=void 0);return i}}};function Jf(e){let t=e[0];if(e.length>1){for(const s of e)if(s.type!==yt){t=s;break}}return t}const Yf=Sv;function Qf(e,t){const{leavingVNodes:s}=e;let n=s.get(t.type);return n||(n=Object.create(null),s.set(t.type,n)),n}function za(e,t,s,n,a){const{appear:i,mode:l,persisted:r=!1,onBeforeEnter:o,onEnter:c,onAfterEnter:d,onEnterCancelled:u,onBeforeLeave:f,onLeave:p,onAfterLeave:b,onLeaveCancelled:y,onBeforeAppear:E,onAppear:I,onAfterAppear:x,onAppearCancelled:m}=t,_=String(e.key),S=Qf(s,e),g=(C,M)=>{C&&_s(C,n,9,M)},w=(C,M)=>{const H=M[1];g(C,M),xe(C)?C.every(P=>P.length<=1)&&H():C.length<=1&&H()},T={mode:l,persisted:r,beforeEnter(C){let M=o;if(!s.isMounted)if(i)M=E||o;else return;C[As]&&C[As](!0);const H=S[_];H&&Us(e,H)&&H.el[As]&&H.el[As](),g(M,[C])},enter(C){if(S[_]===e)return;let M=c,H=d,P=u;if(!s.isMounted)if(i)M=I||c,H=x||d,P=m||u;else return;let R=!1;C[ri]=Q=>{R||(R=!0,Q?g(P,[C]):g(H,[C]),T.delayedLeave&&T.delayedLeave(),C[ri]=void 0)};const j=C[ri].bind(null,!1);M?w(M,[C,j]):j()},leave(C,M){const H=String(e.key);if(C[ri]&&C[ri](!0),s.isUnmounting)return M();g(f,[C]);let P=!1;C[As]=j=>{P||(P=!0,M(),j?g(y,[C]):g(b,[C]),C[As]=void 0,S[H]===e&&delete S[H])};const R=C[As].bind(null,!1);S[H]=e,p?w(p,[C,R]):R()},clone(C){const M=za(C,t,s,n,a);return a&&a(M),M}};return T}function jr(e){if(el(e))return e=nn(e),e.children=null,e}function hd(e){if(!el(e))return Wf(e.type)&&e.children?Jf(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:s}=e;if(s){if(t&16)return s[0];if(t&32&&Re(s.default))return s.default()}}function En(e,t){e.shapeFlag&6&&e.component?(e.transition=t,En(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function _r(e,t=!1,s){let n=[],a=0;for(let i=0;i1)for(let i=0;is.value,set:i=>s.value=i})}return s}function md(e,t){let s;return!!((s=Object.getOwnPropertyDescriptor(e,t))&&!s.configurable)}const Bl=new WeakMap;function Pa(e,t,s,n,a=!1){if(xe(e)){e.forEach((y,E)=>Pa(y,t&&(xe(t)?t[E]:t),s,n,a));return}if(kn(n)&&!a){n.shapeFlag&512&&n.type.__asyncResolved&&n.component.subTree.component&&Pa(e,t,s,n.component.subTree);return}const i=n.shapeFlag&4?tl(n.component):n.el,l=a?null:i,{i:r,r:o}=e,c=t&&t.r,d=r.refs===je?r.refs={}:r.refs,u=r.setupState,f=Je(u),p=u===je?Ra:y=>md(d,y)?!1:et(f,y),b=(y,E)=>!(E&&md(d,E));if(c!=null&&c!==o){if(gd(t),Me(c))d[c]=null,p(c)&&(u[c]=null);else if(St(c)){const y=t;b(c,y.k)&&(c.value=null),y.k&&(d[y.k]=null)}}if(Re(o))ei(o,r,12,[l,d]);else{const y=Me(o),E=St(o);if(y||E){const I=()=>{if(e.f){const x=y?p(o)?u[o]:d[o]:b()||!e.k?o.value:d[e.k];if(a)xe(x)&&Jo(x,i);else if(xe(x))x.includes(i)||x.push(i);else if(y)d[o]=[i],p(o)&&(u[o]=d[o]);else{const m=[i];b(o,e.k)&&(o.value=m),e.k&&(d[e.k]=m)}}else y?(d[o]=l,p(o)&&(u[o]=l)):E&&(b(o,e.k)&&(o.value=l),e.k&&(d[e.k]=l))};if(l){const x=()=>{I(),Bl.delete(e)};x.id=-1,Bl.set(e,x),kt(x,s)}else gd(e),I()}}}function gd(e){const t=Bl.get(e);t&&(t.flags|=8,Bl.delete(e))}let vd=!1;const xa=()=>{vd||(console.error("Hydration completed but contains mismatches."),vd=!0)},Ev=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Av=e=>e.namespaceURI.includes("MathML"),hl=e=>{if(e.nodeType===1){if(Ev(e))return"svg";if(Av(e))return"mathml"}},Ia=e=>e.nodeType===8;function Rv(e){const{mt:t,p:s,o:{patchProp:n,createText:a,nextSibling:i,parentNode:l,remove:r,insert:o,createComment:c}}=e,d=(m,_)=>{if(!_.hasChildNodes()){s(null,m,_),$l(),_._vnode=m;return}u(_.firstChild,m,null,null,null),$l(),_._vnode=m},u=(m,_,S,g,w,T=!1)=>{T=T||!!_.dynamicChildren;const C=Ia(m)&&m.data==="[",M=()=>y(m,_,S,g,w,C),{type:H,ref:P,shapeFlag:R,patchFlag:j}=_;let Q=m.nodeType;_.el=m,j===-2&&(T=!1,_.dynamicChildren=null);let U=null;switch(H){case Bn:Q!==3?_.children===""?(o(_.el=a(""),l(m),m),U=m):U=M():(m.data!==_.children&&(xa(),m.data=_.children),U=i(m));break;case yt:x(m)?(U=i(m),I(_.el=m.content.firstChild,m,S)):Q!==8||C?U=M():U=i(m);break;case ta:if(C&&(m=i(m),Q=m.nodeType),Q===1||Q===3){U=m;const O=!_.children.length;for(let N=0;N<_.staticCount;N++)O&&(_.children+=U.nodeType===1?U.outerHTML:U.data),N===_.staticCount-1&&(_.anchor=U),U=i(U);return C?i(U):U}else M();break;case Dt:C?U=b(m,_,S,g,w,T):U=M();break;default:if(R&1)(Q!==1||_.type.toLowerCase()!==m.tagName.toLowerCase())&&!x(m)?U=M():U=f(m,_,S,g,w,T);else if(R&6){_.slotScopeIds=w;const O=l(m);if(C?U=E(m):Ia(m)&&m.data==="teleport start"?U=E(m,m.data,"teleport end"):U=i(m),t(_,O,null,S,g,hl(O),T),kn(_)&&!_.type.__asyncResolved){let N;C?(N=ft(Dt),N.anchor=U?U.previousSibling:O.lastChild):N=m.nodeType===3?yc(""):ft("div"),N.el=m,_.component.subTree=N}}else R&64?Q!==8?U=M():U=_.type.hydrate(m,_,S,g,w,T,e,p):R&128&&(U=_.type.hydrate(m,_,S,g,hl(l(m)),w,T,e,u))}return P!=null&&Pa(P,null,g,_),U},f=(m,_,S,g,w,T)=>{T=T||!!_.dynamicChildren;const{type:C,props:M,patchFlag:H,shapeFlag:P,dirs:R,transition:j}=_,Q=C==="input"||C==="option";if(Q||H!==-1){R&&Xs(_,null,S,"created");let U=!1;if(x(m)){U=wp(null,j)&&S&&S.vnode.props&&S.vnode.props.appear;const N=m.content.firstChild;if(U){const Y=N.getAttribute("class");Y&&(N.$cls=Y),j.beforeEnter(N)}I(N,m,S),_.el=m=N}if(P&16&&!(M&&(M.innerHTML||M.textContent))){let N=p(m.firstChild,_,m,S,g,w,T);for(N&&!ml(m,1)&&xa();N;){const Y=N;N=N.nextSibling,r(Y)}}else if(P&8){let N=_.children;N[0]===` +**/const $f=[];function iv(e){$f.push(e)}function lv(){$f.pop()}function rv(e,t){}const ov={SETUP_FUNCTION:0,0:"SETUP_FUNCTION",RENDER_FUNCTION:1,1:"RENDER_FUNCTION",NATIVE_EVENT_HANDLER:5,5:"NATIVE_EVENT_HANDLER",COMPONENT_EVENT_HANDLER:6,6:"COMPONENT_EVENT_HANDLER",VNODE_HOOK:7,7:"VNODE_HOOK",DIRECTIVE_HOOK:8,8:"DIRECTIVE_HOOK",TRANSITION_HOOK:9,9:"TRANSITION_HOOK",APP_ERROR_HANDLER:10,10:"APP_ERROR_HANDLER",APP_WARN_HANDLER:11,11:"APP_WARN_HANDLER",FUNCTION_REF:12,12:"FUNCTION_REF",ASYNC_COMPONENT_LOADER:13,13:"ASYNC_COMPONENT_LOADER",SCHEDULER:14,14:"SCHEDULER",COMPONENT_UPDATE:15,15:"COMPONENT_UPDATE",APP_UNMOUNT_CLEANUP:16,16:"APP_UNMOUNT_CLEANUP"},cv={sp:"serverPrefetch hook",bc:"beforeCreate hook",c:"created hook",bm:"beforeMount hook",m:"mounted hook",bu:"beforeUpdate hook",u:"updated",bum:"beforeUnmount hook",um:"unmounted hook",a:"activated hook",da:"deactivated hook",ec:"errorCaptured hook",rtc:"renderTracked hook",rtg:"renderTriggered hook",0:"setup function",1:"render function",2:"watcher getter",3:"watcher callback",4:"watcher cleanup function",5:"native event handler",6:"component event handler",7:"vnode hook",8:"directive hook",9:"transition hook",10:"app errorHandler",11:"app warnHandler",12:"ref function",13:"async component loader",14:"scheduler flush",15:"component update",16:"app unmount cleanup function"};function ei(e,t,s,n){try{return n?e(...n):e()}catch(a){ua(a,t,s)}}function _s(e,t,s,n){if(Re(e)){const a=ei(e,t,s,n);return a&&Yo(a)&&a.catch(i=>{ua(i,t,s)}),a}if(xe(e)){const a=[];for(let i=0;i>>1,a=Xt[n],i=Mi(a);i=Mi(s)?Xt.push(e):Xt.splice(uv(t),0,e),e.flags|=1,Uf()}}function Uf(){Fl||(Fl=Bf.then(Hf))}function Di(e){xe(e)?Ma.push(...e):Pn&&e.id===-1?Pn.splice(Ta+1,0,e):e.flags&1||(Ma.push(e),e.flags|=1),Uf()}function ud(e,t,s=Xs+1){for(;sMi(s)-Mi(n));if(Ma.length=0,Pn){Pn.push(...t);return}for(Pn=t,Ta=0;Tae.id==null?e.flags&2?-1:1/0:e.id;function Hf(e){try{for(Xs=0;XsCa.emit(a,...i)),fl=[]):typeof window<"u"&&window.HTMLElement&&!((n=(s=window.navigator)==null?void 0:s.userAgent)!=null&&n.includes("jsdom"))?((t.__VUE_DEVTOOLS_HOOK_REPLAY__=t.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push(i=>{zf(i,t)}),setTimeout(()=>{Ca||(t.__VUE_DEVTOOLS_HOOK_REPLAY__=null,fl=[])},3e3)):fl=[]}let Bt=null,xr=null;function Pi(e){const t=Bt;return Bt=e,xr=e&&e.type.__scopeId||null,t}function fv(e){xr=e}function pv(){xr=null}const hv=e=>lc;function lc(e,t=Bt,s){if(!t||e._n)return e;const n=(...a)=>{n._d&&Ui(-1);const i=Pi(t);let l;try{l=e(...a)}finally{Pi(i),n._d&&Ui(1)}return l};return n._n=!0,n._c=!0,n._d=!0,n}function mv(e,t){if(Bt===null)return e;const s=tl(Bt),n=e.dirs||(e.dirs=[]);for(let a=0;a1)return s&&Re(t)?t.call(n&&n.proxy):t}}function gv(){return!!(ss()||ea)}const Vf=Symbol.for("v-scx"),jf=()=>Ns(Vf);function vv(e,t){return Qi(e,null,t)}function bv(e,t){return Qi(e,null,{flush:"post"})}function qf(e,t){return Qi(e,null,{flush:"sync"})}function ts(e,t,s){return Qi(e,t,s)}function Qi(e,t,s=je){const{immediate:n,deep:a,flush:i,once:l}=s,r=ze({},s),o=t&&n||!t&&i!=="post";let c;if(ia){if(i==="sync"){const p=jf();c=p.__watcherHandles||(p.__watcherHandles=[])}else if(!o){const p=()=>{};return p.stop=Ut,p.resume=Ut,p.pause=Ut,p}}const d=$t;r.call=(p,b,y)=>_s(p,d,b,y);let u=!1;i==="post"?r.scheduler=p=>{kt(p,d&&d.suspense)}:i!=="sync"&&(u=!0,r.scheduler=(p,b)=>{b?p():ic(p)}),r.augmentJob=p=>{t&&(p.flags|=4),u&&(p.flags|=2,d&&(p.id=d.uid,p.i=d))};const f=av(e,t,r);return ia&&(c?c.push(f):o&&f()),f}function yv(e,t,s){const n=this.proxy,a=Me(e)?e.includes(".")?Gf(n,e):()=>n[e]:e.bind(n,n);let i;Re(t)?i=t:(i=t.handler,s=t);const l=ti(this),r=Qi(a,i.bind(n),s);return l(),r}function Gf(e,t){const s=t.split(".");return()=>{let n=e;for(let a=0;ae.__isTeleport,Zn=e=>e&&(e.disabled||e.disabled===""),xv=e=>e&&(e.defer||e.defer===""),fd=e=>typeof SVGElement<"u"&&e instanceof SVGElement,pd=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,bo=(e,t)=>{const s=e&&e.to;return Me(s)?t?t(s):null:s},_v={name:"Teleport",__isTeleport:!0,process(e,t,s,n,a,i,l,r,o,c){const{mc:d,pc:u,pbc:f,o:{insert:p,querySelector:b,createText:y,createComment:E,parentNode:I}}=c,x=Zn(t.props);let{dynamicChildren:m}=t;const _=(w,T,C)=>{w.shapeFlag&16&&d(w.children,T,C,a,i,l,r,o)},S=(w=t)=>{const T=Zn(w.props),C=w.target=bo(w.props,b),M=yo(C,w,y,p);C&&(l!=="svg"&&fd(C)?l="svg":l!=="mathml"&&pd(C)&&(l="mathml"),a&&a.isCE&&(a.ce._teleportTargets||(a.ce._teleportTargets=new Set)).add(C),T||(_(w,C,M),mi(w,!1)))},g=w=>{const T=()=>{if(Ln.get(w)===T){if(Ln.delete(w),Zn(w.props)){const C=I(w.el)||s;_(w,C,w.anchor),mi(w,!0)}S(w)}};Ln.set(w,T),kt(T,i)};if(e==null){const w=t.el=y(""),T=t.anchor=y("");if(p(w,s,n),p(T,s,n),xv(t.props)||i&&i.pendingBranch){g(t);return}x&&(_(t,s,T),mi(t,!0)),S()}else{t.el=e.el;const w=t.anchor=e.anchor,T=Ln.get(e);if(T){T.flags|=8,Ln.delete(e),g(t);return}t.targetStart=e.targetStart;const C=t.target=e.target,M=t.targetAnchor=e.targetAnchor,H=Zn(e.props),P=H?s:C,R=H?w:M;if(l==="svg"||fd(C)?l="svg":(l==="mathml"||pd(C))&&(l="mathml"),m?(f(e.dynamicChildren,m,P,a,i,l,r),vc(e,t,!0)):o||u(e,t,P,R,a,i,l,r,!1),x)H?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):pl(t,s,w,c,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const j=t.target=bo(t.props,b);j&&pl(t,j,null,c,0)}else H&&pl(t,C,M,c,1);mi(t,x)}},remove(e,t,s,{um:n,o:{remove:a}},i){const{shapeFlag:l,children:r,anchor:o,targetStart:c,targetAnchor:d,target:u,props:f}=e,p=i||!Zn(f),b=Ln.get(e);if(b&&(b.flags|=8,Ln.delete(e)),u&&(a(c),a(d)),i&&a(o),!b&&l&16)for(let y=0;y{e.isMounted=!0}),Sr(()=>{e.isUnmounting=!0}),e}const As=[Function,Array],oc={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:As,onEnter:As,onAfterEnter:As,onEnterCancelled:As,onBeforeLeave:As,onLeave:As,onAfterLeave:As,onLeaveCancelled:As,onBeforeAppear:As,onAppear:As,onAfterAppear:As,onAppearCancelled:As},Zf=e=>{const t=e.subTree;return t.component?Zf(t.component):t},Sv={name:"BaseTransition",props:oc,setup(e,{slots:t}){const s=ss(),n=rc();return()=>{const a=t.default&&_r(t.default(),!0),i=a&&a.length?Jf(a):s.subTree?Np():void 0;if(!i)return;const l=Je(e),{mode:r}=l;if(n.isLeaving)return jr(i);const o=hd(i);if(!o)return jr(i);let c=za(o,l,n,s,u=>c=u);o.type!==yt&&En(o,c);let d=s.subTree&&hd(s.subTree);if(d&&d.type!==yt&&!Hs(d,o)&&Zf(s).type!==yt){let u=za(d,l,n,s);if(En(d,u),r==="out-in"&&o.type!==yt)return n.isLeaving=!0,u.afterLeave=()=>{n.isLeaving=!1,s.job.flags&8||s.update(),delete u.afterLeave,d=void 0},jr(i);r==="in-out"&&o.type!==yt?u.delayLeave=(f,p,b)=>{const y=Qf(n,d);y[String(d.key)]=d,f[Rs]=()=>{p(),f[Rs]=void 0,delete c.delayedLeave,d=void 0},c.delayedLeave=()=>{b(),delete c.delayedLeave,d=void 0}}:d=void 0}else d&&(d=void 0);return i}}};function Jf(e){let t=e[0];if(e.length>1){for(const s of e)if(s.type!==yt){t=s;break}}return t}const Yf=Sv;function Qf(e,t){const{leavingVNodes:s}=e;let n=s.get(t.type);return n||(n=Object.create(null),s.set(t.type,n)),n}function za(e,t,s,n,a){const{appear:i,mode:l,persisted:r=!1,onBeforeEnter:o,onEnter:c,onAfterEnter:d,onEnterCancelled:u,onBeforeLeave:f,onLeave:p,onAfterLeave:b,onLeaveCancelled:y,onBeforeAppear:E,onAppear:I,onAfterAppear:x,onAppearCancelled:m}=t,_=String(e.key),S=Qf(s,e),g=(C,M)=>{C&&_s(C,n,9,M)},w=(C,M)=>{const H=M[1];g(C,M),xe(C)?C.every(P=>P.length<=1)&&H():C.length<=1&&H()},T={mode:l,persisted:r,beforeEnter(C){let M=o;if(!s.isMounted)if(i)M=E||o;else return;C[Rs]&&C[Rs](!0);const H=S[_];H&&Hs(e,H)&&H.el[Rs]&&H.el[Rs](),g(M,[C])},enter(C){if(S[_]===e)return;let M=c,H=d,P=u;if(!s.isMounted)if(i)M=I||c,H=x||d,P=m||u;else return;let R=!1;C[ri]=Q=>{R||(R=!0,Q?g(P,[C]):g(H,[C]),T.delayedLeave&&T.delayedLeave(),C[ri]=void 0)};const j=C[ri].bind(null,!1);M?w(M,[C,j]):j()},leave(C,M){const H=String(e.key);if(C[ri]&&C[ri](!0),s.isUnmounting)return M();g(f,[C]);let P=!1;C[Rs]=j=>{P||(P=!0,M(),j?g(y,[C]):g(b,[C]),C[Rs]=void 0,S[H]===e&&delete S[H])};const R=C[Rs].bind(null,!1);S[H]=e,p?w(p,[C,R]):R()},clone(C){const M=za(C,t,s,n,a);return a&&a(M),M}};return T}function jr(e){if(el(e))return e=an(e),e.children=null,e}function hd(e){if(!el(e))return Wf(e.type)&&e.children?Jf(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:s}=e;if(s){if(t&16)return s[0];if(t&32&&Re(s.default))return s.default()}}function En(e,t){e.shapeFlag&6&&e.component?(e.transition=t,En(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function _r(e,t=!1,s){let n=[],a=0;for(let i=0;i1)for(let i=0;is.value,set:i=>s.value=i})}return s}function md(e,t){let s;return!!((s=Object.getOwnPropertyDescriptor(e,t))&&!s.configurable)}const Bl=new WeakMap;function Pa(e,t,s,n,a=!1){if(xe(e)){e.forEach((y,E)=>Pa(y,t&&(xe(t)?t[E]:t),s,n,a));return}if(kn(n)&&!a){n.shapeFlag&512&&n.type.__asyncResolved&&n.component.subTree.component&&Pa(e,t,s,n.component.subTree);return}const i=n.shapeFlag&4?tl(n.component):n.el,l=a?null:i,{i:r,r:o}=e,c=t&&t.r,d=r.refs===je?r.refs={}:r.refs,u=r.setupState,f=Je(u),p=u===je?Ra:y=>md(d,y)?!1:et(f,y),b=(y,E)=>!(E&&md(d,E));if(c!=null&&c!==o){if(gd(t),Me(c))d[c]=null,p(c)&&(u[c]=null);else if(St(c)){const y=t;b(c,y.k)&&(c.value=null),y.k&&(d[y.k]=null)}}if(Re(o))ei(o,r,12,[l,d]);else{const y=Me(o),E=St(o);if(y||E){const I=()=>{if(e.f){const x=y?p(o)?u[o]:d[o]:b()||!e.k?o.value:d[e.k];if(a)xe(x)&&Jo(x,i);else if(xe(x))x.includes(i)||x.push(i);else if(y)d[o]=[i],p(o)&&(u[o]=d[o]);else{const m=[i];b(o,e.k)&&(o.value=m),e.k&&(d[e.k]=m)}}else y?(d[o]=l,p(o)&&(u[o]=l)):E&&(b(o,e.k)&&(o.value=l),e.k&&(d[e.k]=l))};if(l){const x=()=>{I(),Bl.delete(e)};x.id=-1,Bl.set(e,x),kt(x,s)}else gd(e),I()}}}function gd(e){const t=Bl.get(e);t&&(t.flags|=8,Bl.delete(e))}let vd=!1;const xa=()=>{vd||(console.error("Hydration completed but contains mismatches."),vd=!0)},Ev=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Av=e=>e.namespaceURI.includes("MathML"),hl=e=>{if(e.nodeType===1){if(Ev(e))return"svg";if(Av(e))return"mathml"}},Ia=e=>e.nodeType===8;function Rv(e){const{mt:t,p:s,o:{patchProp:n,createText:a,nextSibling:i,parentNode:l,remove:r,insert:o,createComment:c}}=e,d=(m,_)=>{if(!_.hasChildNodes()){s(null,m,_),$l(),_._vnode=m;return}u(_.firstChild,m,null,null,null),$l(),_._vnode=m},u=(m,_,S,g,w,T=!1)=>{T=T||!!_.dynamicChildren;const C=Ia(m)&&m.data==="[",M=()=>y(m,_,S,g,w,C),{type:H,ref:P,shapeFlag:R,patchFlag:j}=_;let Q=m.nodeType;_.el=m,j===-2&&(T=!1,_.dynamicChildren=null);let U=null;switch(H){case Bn:Q!==3?_.children===""?(o(_.el=a(""),l(m),m),U=m):U=M():(m.data!==_.children&&(xa(),m.data=_.children),U=i(m));break;case yt:x(m)?(U=i(m),I(_.el=m.content.firstChild,m,S)):Q!==8||C?U=M():U=i(m);break;case ta:if(C&&(m=i(m),Q=m.nodeType),Q===1||Q===3){U=m;const O=!_.children.length;for(let N=0;N<_.staticCount;N++)O&&(_.children+=U.nodeType===1?U.outerHTML:U.data),N===_.staticCount-1&&(_.anchor=U),U=i(U);return C?i(U):U}else M();break;case Dt:C?U=b(m,_,S,g,w,T):U=M();break;default:if(R&1)(Q!==1||_.type.toLowerCase()!==m.tagName.toLowerCase())&&!x(m)?U=M():U=f(m,_,S,g,w,T);else if(R&6){_.slotScopeIds=w;const O=l(m);if(C?U=E(m):Ia(m)&&m.data==="teleport start"?U=E(m,m.data,"teleport end"):U=i(m),t(_,O,null,S,g,hl(O),T),kn(_)&&!_.type.__asyncResolved){let N;C?(N=ft(Dt),N.anchor=U?U.previousSibling:O.lastChild):N=m.nodeType===3?yc(""):ft("div"),N.el=m,_.component.subTree=N}}else R&64?Q!==8?U=M():U=_.type.hydrate(m,_,S,g,w,T,e,p):R&128&&(U=_.type.hydrate(m,_,S,g,hl(l(m)),w,T,e,u))}return P!=null&&Pa(P,null,g,_),U},f=(m,_,S,g,w,T)=>{T=T||!!_.dynamicChildren;const{type:C,props:M,patchFlag:H,shapeFlag:P,dirs:R,transition:j}=_,Q=C==="input"||C==="option";if(Q||H!==-1){R&&en(_,null,S,"created");let U=!1;if(x(m)){U=wp(null,j)&&S&&S.vnode.props&&S.vnode.props.appear;const N=m.content.firstChild;if(U){const Y=N.getAttribute("class");Y&&(N.$cls=Y),j.beforeEnter(N)}I(N,m,S),_.el=m=N}if(P&16&&!(M&&(M.innerHTML||M.textContent))){let N=p(m.firstChild,_,m,S,g,w,T);for(N&&!ml(m,1)&&xa();N;){const Y=N;N=N.nextSibling,r(Y)}}else if(P&8){let N=_.children;N[0]===` `&&(m.tagName==="PRE"||m.tagName==="TEXTAREA")&&(N=N.slice(1));const{textContent:Y}=m;Y!==N&&Y!==N.replace(/\r\n|\r/g,` -`)&&(ml(m,0)||xa(),m.textContent=_.children)}if(M){if(Q||!T||H&48){const N=m.tagName.includes("-");for(const Y in M)(Q&&(Y.endsWith("value")||Y==="indeterminate")||oa(Y)&&!xn(Y)||Y[0]==="."||N&&!xn(Y))&&n(m,Y,null,M[Y],void 0,S)}else if(M.onClick)n(m,"onClick",null,M.onClick,void 0,S);else if(H&4&&_n(M.style))for(const N in M.style)M.style[N]}let O;(O=M&&M.onVnodeBeforeMount)&&us(O,S,_),R&&Xs(_,null,S,"beforeMount"),((O=M&&M.onVnodeMounted)||R||U)&&Ep(()=>{O&&us(O,S,_),U&&j.enter(m),R&&Xs(_,null,S,"mounted")},g)}return m.nextSibling},p=(m,_,S,g,w,T,C)=>{C=C||!!_.dynamicChildren;const M=_.children,H=M.length;let P=!1;for(let R=0;R{const{slotScopeIds:C}=_;C&&(w=w?w.concat(C):C);const M=l(m),H=p(i(m),_,M,S,g,w,T);return H&&Ia(H)&&H.data==="]"?i(_.anchor=H):(xa(),o(_.anchor=c("]"),M,H),H)},y=(m,_,S,g,w,T)=>{if(ml(m.parentElement,1)||xa(),_.el=null,T){const H=E(m);for(;;){const P=i(m);if(P&&P!==H)r(P);else break}}const C=i(m),M=l(m);return r(m),s(null,_,M,C,S,g,hl(M),w),S&&(S.vnode.el=_.el,Cr(S,_.el)),C},E=(m,_="[",S="]")=>{let g=0;for(;m;)if(m=i(m),m&&Ia(m)&&(m.data===_&&g++,m.data===S)){if(g===0)return i(m);g--}return m},I=(m,_,S)=>{const g=_.parentNode;g&&g.replaceChild(m,_);let w=S;for(;w;)w.vnode.el===_&&(w.vnode.el=w.subTree.el=m),w=w.parent},x=m=>m.nodeType===1&&m.tagName==="TEMPLATE";return[d,u]}const bd="data-allow-mismatch",Iv={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function ml(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(bd);)e=e.parentElement;const s=e&&e.getAttribute(bd);if(s==null)return!1;if(s==="")return!0;{const n=s.split(",");return t===0&&n.includes("children")?!0:n.includes(Iv[t])}}const Ov=hr().requestIdleCallback||(e=>setTimeout(e,1)),Nv=hr().cancelIdleCallback||(e=>clearTimeout(e)),Lv=(e=1e4)=>t=>{const s=Ov(t,{timeout:e});return()=>Nv(s)};function Dv(e){const{top:t,left:s,bottom:n,right:a}=e.getBoundingClientRect(),{innerHeight:i,innerWidth:l}=window;return(t>0&&t0&&n0&&s0&&a(t,s)=>{const n=new IntersectionObserver(a=>{for(const i of a)if(i.isIntersecting){n.disconnect(),t();break}},e);return s(a=>{if(a instanceof Element){if(Dv(a))return t(),n.disconnect(),!1;n.observe(a)}}),()=>n.disconnect()},Pv=e=>t=>{if(e){const s=matchMedia(e);if(s.matches)t();else return s.addEventListener("change",t,{once:!0}),()=>s.removeEventListener("change",t)}},Fv=(e=[])=>(t,s)=>{Me(e)&&(e=[e]);let n=!1;const a=l=>{n||(n=!0,i(),t(),l.target.dispatchEvent(new l.constructor(l.type,l)))},i=()=>{s(l=>{for(const r of e)l.removeEventListener(r,a)})};return s(l=>{for(const r of e)l.addEventListener(r,a,{once:!0})}),i};function $v(e,t){if(Ia(e)&&e.data==="["){let s=1,n=e.nextSibling;for(;n;){if(n.nodeType===1){if(t(n)===!1)break}else if(Ia(n))if(n.data==="]"){if(--s===0)break}else n.data==="["&&s++;n=n.nextSibling}}else t(e)}const kn=e=>!!e.type.__asyncLoader;function Bv(e){Re(e)&&(e={loader:e});const{loader:t,loadingComponent:s,errorComponent:n,delay:a=200,hydrate:i,timeout:l,suspensible:r=!0,onError:o}=e;let c=null,d,u=0;const f=()=>(u++,c=null,p()),p=()=>{let b;return c||(b=c=t().catch(y=>{if(y=y instanceof Error?y:new Error(String(y)),o)return new Promise((E,I)=>{o(y,()=>E(f()),()=>I(y),u+1)});throw y}).then(y=>b!==c&&c?c:(y&&(y.__esModule||y[Symbol.toStringTag]==="Module")&&(y=y.default),d=y,y)))};return Xi({name:"AsyncComponentWrapper",__asyncLoader:p,__asyncHydrate(b,y,E){let I=!1;(y.bu||(y.bu=[])).push(()=>I=!0);const x=()=>{I||E()},m=i?()=>{const _=i(x,S=>$v(b,S));_&&(y.bum||(y.bum=[])).push(_)}:x;d?m():p().then(()=>!y.isUnmounted&&m())},get __asyncResolved(){return d},setup(){const b=$t;if(cc(b),d)return()=>gl(d,b);const y=S=>{c=null,ua(S,b,13,!n)};if(r&&b.suspense||ia)return p().then(S=>()=>gl(S,b)).catch(S=>(y(S),()=>n?ft(n,{error:S}):null));const E=h(!1),I=h(),x=h(!!a);let m,_;return xt(()=>{m!=null&&clearTimeout(m),_!=null&&clearTimeout(_)}),a&&(_=setTimeout(()=>{b.isUnmounted||(x.value=!1)},a)),l!=null&&(m=setTimeout(()=>{if(!b.isUnmounted&&!E.value&&!I.value){const S=new Error(`Async component timed out after ${l}ms.`);y(S),I.value=S}},l)),p().then(()=>{b.isUnmounted||(E.value=!0,b.parent&&el(b.parent.vnode)&&b.parent.update())}).catch(S=>{if(b.isUnmounted){c=null;return}y(S),I.value=S}),()=>{if(E.value&&d)return gl(d,b);if(I.value&&n)return ft(n,{error:I.value});if(s&&!x.value)return gl(s,b)}}})}function gl(e,t){const{ref:s,props:n,children:a,ce:i}=t.vnode,l=ft(e,n,a);return l.ref=s,l.ce=i,delete t.vnode.ce,l}const el=e=>e.type.__isKeepAlive,Uv={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const s=ss(),n=s.ctx;if(!n.renderer)return()=>{const x=t.default&&t.default();return x&&x.length===1?x[0]:x};const a=new Map,i=new Set;let l=null;const r=s.suspense,{renderer:{p:o,m:c,um:d,o:{createElement:u}}}=n,f=u("div");n.activate=(x,m,_,S,g)=>{const w=x.component;c(x,m,_,0,r),o(w.vnode,x,m,_,w,r,S,x.slotScopeIds,g),kt(()=>{w.isDeactivated=!1,w.a&&Da(w.a);const T=x.props&&x.props.onVnodeMounted;T&&us(T,w.parent,x)},r)},n.deactivate=x=>{const m=x.component;Hl(m.m),Hl(m.a),c(x,f,null,1,r),kt(()=>{m.da&&Da(m.da);const _=x.props&&x.props.onVnodeUnmounted;_&&us(_,m.parent,x),m.isDeactivated=!0},r)};function p(x){qr(x),d(x,s,r,!0)}function b(x){a.forEach((m,_)=>{const S=Ao(kn(m)?m.type.__asyncResolved||{}:m.type);S&&!x(S)&&y(_)})}function y(x){const m=a.get(x);m&&(!l||!Us(m,l))?p(m):l&&qr(l),a.delete(x),i.delete(x)}ts(()=>[e.include,e.exclude],([x,m])=>{x&&b(_=>gi(x,_)),m&&b(_=>!gi(m,_))},{flush:"post",deep:!0});let E=null;const I=()=>{E!=null&&(zl(s.subTree.type)?kt(()=>{a.set(E,vl(s.subTree))},s.subTree.suspense):a.set(E,vl(s.subTree)))};return We(I),wr(I),Sr(()=>{a.forEach(x=>{const{subTree:m,suspense:_}=s,S=vl(m);if(x.type===S.type&&x.key===S.key){qr(S);const g=S.component.da;g&&kt(g,_);return}p(x)})}),()=>{if(E=null,!t.default)return l=null;const x=t.default(),m=x[0];if(x.length>1)return l=null,x;if(!An(m)||!(m.shapeFlag&4)&&!(m.shapeFlag&128))return l=null,m;let _=vl(m);if(_.type===yt)return l=null,_;const S=_.type,g=Ao(kn(_)?_.type.__asyncResolved||{}:S),{include:w,exclude:T,max:C}=e;if(w&&(!g||!gi(w,g))||T&&g&&gi(T,g))return _.shapeFlag&=-257,l=_,m;const M=_.key==null?S:_.key,H=a.get(M);return _.el&&(_=nn(_),m.shapeFlag&128&&(m.ssContent=_)),E=M,H?(_.el=H.el,_.component=H.component,_.transition&&En(_,_.transition),_.shapeFlag|=512,i.delete(M),i.add(M)):(i.add(M),C&&i.size>parseInt(C,10)&&y(i.values().next().value)),_.shapeFlag|=256,l=_,zl(m.type)?m:_}}},Hv=Uv;function gi(e,t){return xe(e)?e.some(s=>gi(s,t)):Me(e)?e.split(",").includes(t):Ym(e)?(e.lastIndex=0,e.test(t)):!1}function Ds(e,t){Xf(e,"a",t)}function Ms(e,t){Xf(e,"da",t)}function Xf(e,t,s=$t){const n=e.__wdc||(e.__wdc=()=>{let a=s;for(;a;){if(a.isDeactivated)return;a=a.parent}return e()});if(kr(t,n,s),s){let a=s.parent;for(;a&&a.parent;)el(a.parent.vnode)&&zv(n,t,s,a),a=a.parent}}function zv(e,t,s,n){const a=kr(t,e,n,!0);xt(()=>{Jo(n[t],a)},s)}function qr(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function vl(e){return e.shapeFlag&128?e.ssContent:e}function kr(e,t,s=$t,n=!1){if(s){const a=s[e]||(s[e]=[]),i=t.__weh||(t.__weh=(...l)=>{Tn();const r=ti(s),o=_s(t,s,e,l);return r(),Cn(),o});return n?a.unshift(i):a.push(i),i}}const Rn=e=>(t,s=$t)=>{(!ia||e==="sp")&&kr(e,(...n)=>t(...n),s)},ep=Rn("bm"),We=Rn("m"),dc=Rn("bu"),wr=Rn("u"),Sr=Rn("bum"),xt=Rn("um"),tp=Rn("sp"),sp=Rn("rtg"),np=Rn("rtc");function ap(e,t=$t){kr("ec",e,t)}const uc="components",Vv="directives";function jv(e,t){return fc(uc,e,!0,t)||e}const ip=Symbol.for("v-ndc");function qv(e){return Me(e)?fc(uc,e,!1)||e:e||ip}function Gv(e){return fc(Vv,e)}function fc(e,t,s=!0,n=!1){const a=Bt||$t;if(a){const i=a.type;if(e===uc){const r=Ao(i,!1);if(r&&(r===t||r===it(t)||r===da(it(t))))return i}const l=yd(a[e]||i[e],t)||yd(a.appContext[e],t);return!l&&n?i:l}}function yd(e,t){return e&&(e[t]||e[it(t)]||e[da(it(t))])}function Kv(e,t,s,n){let a;const i=s&&s[n],l=xe(e);if(l||Me(e)){const r=l&&_n(e);let o=!1,c=!1;r&&(o=!gs(e),c=sn(e),e=vr(e)),a=new Array(e.length);for(let d=0,u=e.length;dt(r,o,void 0,i&&i[o]));else{const r=Object.keys(e);a=new Array(r.length);for(let o=0,c=r.length;o{const i=n.fn(...a);return i&&(i.key=n.key),i}:n.fn)}return e}function Zv(e,t,s={},n,a){if(Bt.ce||Bt.parent&&kn(Bt.parent)&&Bt.parent.ce){const c=Object.keys(s).length>0;return t!=="default"&&(s.name=t),Bi(),Vl(Dt,null,[ft("slot",s,n&&n())],c?-2:64)}let i=e[t];i&&i._c&&(i._d=!1),Bi();const l=i&&pc(i(s)),r=s.key||l&&l.key,o=Vl(Dt,{key:(r&&!Wt(r)?r:`_${t}`)+(!l&&n?"_fb":"")},l||(n?n():[]),l&&e._===1?64:-2);return!a&&o.scopeId&&(o.slotScopeIds=[o.scopeId+"-s"]),i&&i._c&&(i._d=!0),o}function pc(e){return e.some(t=>An(t)?!(t.type===yt||t.type===Dt&&!pc(t.children)):!0)?e:null}function Jv(e,t){const s={};for(const n in e)s[t&&/[A-Z]/.test(n)?`on:${n}`:La(n)]=e[n];return s}const xo=e=>e?Mp(e)?tl(e):xo(e.parent):null,wi=ze(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>xo(e.parent),$root:e=>xo(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>hc(e),$forceUpdate:e=>e.f||(e.f=()=>{ic(e.update)}),$nextTick:e=>e.n||(e.n=It.bind(e.proxy)),$watch:e=>yv.bind(e)}),Gr=(e,t)=>e!==je&&!e.__isScriptSetup&&et(e,t),_o={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:s,setupState:n,data:a,props:i,accessCache:l,type:r,appContext:o}=e;if(t[0]!=="$"){const f=l[t];if(f!==void 0)switch(f){case 1:return n[t];case 2:return a[t];case 4:return s[t];case 3:return i[t]}else{if(Gr(n,t))return l[t]=1,n[t];if(a!==je&&et(a,t))return l[t]=2,a[t];if(et(i,t))return l[t]=3,i[t];if(s!==je&&et(s,t))return l[t]=4,s[t];ko&&(l[t]=0)}}const c=wi[t];let d,u;if(c)return t==="$attrs"&&qt(e.attrs,"get",""),c(e);if((d=r.__cssModules)&&(d=d[t]))return d;if(s!==je&&et(s,t))return l[t]=4,s[t];if(u=o.config.globalProperties,et(u,t))return u[t]},set({_:e},t,s){const{data:n,setupState:a,ctx:i}=e;return Gr(a,t)?(a[t]=s,!0):n!==je&&et(n,t)?(n[t]=s,!0):et(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=s,!0)},has({_:{data:e,setupState:t,accessCache:s,ctx:n,appContext:a,props:i,type:l}},r){let o;return!!(s[r]||e!==je&&r[0]!=="$"&&et(e,r)||Gr(t,r)||et(i,r)||et(n,r)||et(wi,r)||et(a.config.globalProperties,r)||(o=l.__cssModules)&&o[r])},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:et(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}},Yv=ze({},_o,{get(e,t){if(t!==Symbol.unscopables)return _o.get(e,t,e)},has(e,t){return t[0]!=="_"&&!ag(t)}});function Qv(){return null}function Xv(){return null}function eb(e){}function tb(e){}function sb(){return null}function nb(){}function ab(e,t){return null}function ib(){return lp().slots}function lb(){return lp().attrs}function lp(e){const t=ss();return t.setupContext||(t.setupContext=Bp(t))}function Fi(e){return xe(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}function rb(e,t){const s=Fi(e);for(const n in t){if(n.startsWith("__skip"))continue;let a=s[n];a?xe(a)||Re(a)?a=s[n]={type:a,default:t[n]}:a.default=t[n]:a===null&&(a=s[n]={default:t[n]}),a&&t[`__skip_${n}`]&&(a.skipFactory=!0)}return s}function ob(e,t){return!e||!t?e||t:xe(e)&&xe(t)?e.concat(t):ze({},Fi(e),Fi(t))}function cb(e,t){const s={};for(const n in e)t.includes(n)||Object.defineProperty(s,n,{enumerable:!0,get:()=>e[n]});return s}function db(e){const t=ss(),s=ia;let n=e();Hi(),s&&$a(!1);const a=()=>{ti(t),s&&$a(!0)},i=()=>{ss()!==t&&t.scope.off(),Hi(),s&&$a(!1)};return Yo(n)&&(n=n.catch(l=>{throw a(),Promise.resolve().then(()=>Promise.resolve().then(i)),l})),[n,()=>{a(),Promise.resolve().then(i)}]}let ko=!0;function ub(e){const t=hc(e),s=e.proxy,n=e.ctx;ko=!1,t.beforeCreate&&xd(t.beforeCreate,e,"bc");const{data:a,computed:i,methods:l,watch:r,provide:o,inject:c,created:d,beforeMount:u,mounted:f,beforeUpdate:p,updated:b,activated:y,deactivated:E,beforeDestroy:I,beforeUnmount:x,destroyed:m,unmounted:_,render:S,renderTracked:g,renderTriggered:w,errorCaptured:T,serverPrefetch:C,expose:M,inheritAttrs:H,components:P,directives:R,filters:j}=t;if(c&&fb(c,n,null),l)for(const O in l){const N=l[O];Re(N)&&(n[O]=N.bind(s))}if(a){const O=a.call(s,s);Qe(O)&&(e.data=zn(O))}if(ko=!0,i)for(const O in i){const N=i[O],Y=Re(N)?N.bind(s,s):Re(N.get)?N.get.bind(s,s):Ut,we=!Re(N)&&Re(N.set)?N.set.bind(s):Ut,ke=J({get:Y,set:we});Object.defineProperty(n,O,{enumerable:!0,configurable:!0,get:()=>ke.value,set:ie=>ke.value=ie})}if(r)for(const O in r)rp(r[O],n,s,O);if(o){const O=Re(o)?o.call(s):o;Reflect.ownKeys(O).forEach(N=>{ki(N,O[N])})}d&&xd(d,e,"c");function U(O,N){xe(N)?N.forEach(Y=>O(Y.bind(s))):N&&O(N.bind(s))}if(U(ep,u),U(We,f),U(dc,p),U(wr,b),U(Ds,y),U(Ms,E),U(ap,T),U(np,g),U(sp,w),U(Sr,x),U(xt,_),U(tp,C),xe(M))if(M.length){const O=e.exposed||(e.exposed={});M.forEach(N=>{Object.defineProperty(O,N,{get:()=>s[N],set:Y=>s[N]=Y,enumerable:!0})})}else e.exposed||(e.exposed={});S&&e.render===Ut&&(e.render=S),H!=null&&(e.inheritAttrs=H),P&&(e.components=P),R&&(e.directives=R),C&&cc(e)}function fb(e,t,s=Ut){xe(e)&&(e=wo(e));for(const n in e){const a=e[n];let i;Qe(a)?"default"in a?i=Os(a.from||n,a.default,!0):i=Os(a.from||n):i=Os(a),St(i)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>i.value,set:l=>i.value=l}):t[n]=i}}function xd(e,t,s){_s(xe(e)?e.map(n=>n.bind(t.proxy)):e.bind(t.proxy),t,s)}function rp(e,t,s,n){let a=n.includes(".")?Gf(s,n):()=>s[n];if(Me(e)){const i=t[e];Re(i)&&ts(a,i)}else if(Re(e))ts(a,e.bind(s));else if(Qe(e))if(xe(e))e.forEach(i=>rp(i,t,s,n));else{const i=Re(e.handler)?e.handler.bind(s):t[e.handler];Re(i)&&ts(a,i,e)}}function hc(e){const t=e.type,{mixins:s,extends:n}=t,{mixins:a,optionsCache:i,config:{optionMergeStrategies:l}}=e.appContext,r=i.get(t);let o;return r?o=r:!a.length&&!s&&!n?o=t:(o={},a.length&&a.forEach(c=>Ul(o,c,l,!0)),Ul(o,t,l)),Qe(t)&&i.set(t,o),o}function Ul(e,t,s,n=!1){const{mixins:a,extends:i}=t;i&&Ul(e,i,s,!0),a&&a.forEach(l=>Ul(e,l,s,!0));for(const l in t)if(!(n&&l==="expose")){const r=pb[l]||s&&s[l];e[l]=r?r(e[l],t[l]):t[l]}return e}const pb={data:_d,props:kd,emits:kd,methods:vi,computed:vi,beforeCreate:Jt,created:Jt,beforeMount:Jt,mounted:Jt,beforeUpdate:Jt,updated:Jt,beforeDestroy:Jt,beforeUnmount:Jt,destroyed:Jt,unmounted:Jt,activated:Jt,deactivated:Jt,errorCaptured:Jt,serverPrefetch:Jt,components:vi,directives:vi,watch:mb,provide:_d,inject:hb};function _d(e,t){return t?e?function(){return ze(Re(e)?e.call(this,this):e,Re(t)?t.call(this,this):t)}:t:e}function hb(e,t){return vi(wo(e),wo(t))}function wo(e){if(xe(e)){const t={};for(let s=0;s{let d,u=je,f;return qf(()=>{const p=e[a];Lt(d,p)&&(d=p,c())}),{get(){return o(),s.get?s.get(d):d},set(p){const b=s.set?s.set(p):p;if(!Lt(b,d)&&!(u!==je&&Lt(p,u)))return;const y=n.vnode.props,E=!!(y&&(t in y||a in y||i in y)&&(`onUpdate:${t}`in y||`onUpdate:${a}`in y||`onUpdate:${i}`in y));E||(d=p,c()),n.emit(`update:${t}`,b),Lt(p,u)&&(Lt(p,b)&&!Lt(b,f)||E&&u!==je&&!Lt(b,d))&&c(),u=p,f=b}}});return r[Symbol.iterator]=()=>{let o=0;return{next(){return o<2?{value:o++?l||je:r,done:!1}:{done:!0}}}},r}const cp=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${it(t)}Modifiers`]||e[`${hs(t)}Modifiers`];function yb(e,t,...s){if(e.isUnmounted)return;const n=e.vnode.props||je;let a=s;const i=t.startsWith("update:"),l=i&&cp(n,t.slice(7));l&&(l.trim&&(a=s.map(d=>Me(d)?d.trim():d)),l.number&&(a=s.map(pr)));let r,o=n[r=La(t)]||n[r=La(it(t))];!o&&i&&(o=n[r=La(hs(t))]),o&&_s(o,e,6,a);const c=n[r+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[r])return;e.emitted[r]=!0,_s(c,e,6,a)}}const xb=new WeakMap;function dp(e,t,s=!1){const n=s?xb:t.emitsCache,a=n.get(e);if(a!==void 0)return a;const i=e.emits;let l={},r=!1;if(!Re(e)){const o=c=>{const d=dp(c,t,!0);d&&(r=!0,ze(l,d))};!s&&t.mixins.length&&t.mixins.forEach(o),e.extends&&o(e.extends),e.mixins&&e.mixins.forEach(o)}return!i&&!r?(Qe(e)&&n.set(e,null),null):(xe(i)?i.forEach(o=>l[o]=null):ze(l,i),Qe(e)&&n.set(e,l),l)}function Tr(e,t){return!e||!oa(t)?!1:(t=t.slice(2).replace(/Once$/,""),et(e,t[0].toLowerCase()+t.slice(1))||et(e,hs(t))||et(e,t))}function Cl(e){const{type:t,vnode:s,proxy:n,withProxy:a,propsOptions:[i],slots:l,attrs:r,emit:o,render:c,renderCache:d,props:u,data:f,setupState:p,ctx:b,inheritAttrs:y}=e,E=Pi(e);let I,x;try{if(s.shapeFlag&4){const _=a||n,S=_;I=ps(c.call(S,_,d,u,p,f,b)),x=r}else{const _=t;I=ps(_.length>1?_(u,{attrs:r,slots:l,emit:o}):_(u,null)),x=t.props?r:kb(r)}}catch(_){Si.length=0,ua(_,e,1),I=ft(yt)}let m=I;if(x&&y!==!1){const _=Object.keys(x),{shapeFlag:S}=m;_.length&&S&7&&(i&&_.some(cr)&&(x=wb(x,i)),m=nn(m,x,!1,!0))}return s.dirs&&(m=nn(m,null,!1,!0),m.dirs=m.dirs?m.dirs.concat(s.dirs):s.dirs),s.transition&&En(m,s.transition),I=m,Pi(E),I}function _b(e,t=!0){let s;for(let n=0;n{let t;for(const s in e)(s==="class"||s==="style"||oa(s))&&((t||(t={}))[s]=e[s]);return t},wb=(e,t)=>{const s={};for(const n in e)(!cr(n)||!(n.slice(9)in t))&&(s[n]=e[n]);return s};function Sb(e,t,s){const{props:n,children:a,component:i}=e,{props:l,children:r,patchFlag:o}=t,c=i.emitsOptions;if(t.dirs||t.transition)return!0;if(s&&o>=0){if(o&1024)return!0;if(o&16)return n?wd(n,l,c):!!l;if(o&8){const d=t.dynamicProps;for(let u=0;uObject.create(fp),hp=e=>Object.getPrototypeOf(e)===fp;function Tb(e,t,s,n=!1){const a={},i=pp();e.propsDefaults=Object.create(null),mp(e,t,a,i);for(const l in e.propsOptions[0])l in a||(a[l]=void 0);s?e.props=n?a:sc(a):e.type.props?e.props=a:e.props=i,e.attrs=i}function Cb(e,t,s,n){const{props:a,attrs:i,vnode:{patchFlag:l}}=e,r=Je(a),[o]=e.propsOptions;let c=!1;if((n||l>0)&&!(l&16)){if(l&8){const d=e.vnode.dynamicProps;for(let u=0;u{o=!0;const[f,p]=gp(u,t,!0);ze(l,f),p&&r.push(...p)};!s&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!i&&!o)return Qe(e)&&n.set(e,Oa),Oa;if(xe(i))for(let d=0;de==="_"||e==="_ctx"||e==="$stable",gc=e=>xe(e)?e.map(ps):[ps(e)],Ab=(e,t,s)=>{if(t._n)return t;const n=lc((...a)=>gc(t(...a)),s);return n._c=!1,n},vp=(e,t,s)=>{const n=e._ctx;for(const a in e){if(mc(a))continue;const i=e[a];if(Re(i))t[a]=Ab(a,i,n);else if(i!=null){const l=gc(i);t[a]=()=>l}}},bp=(e,t)=>{const s=gc(t);e.slots.default=()=>s},yp=(e,t,s)=>{for(const n in t)(s||!mc(n))&&(e[n]=t[n])},Rb=(e,t,s)=>{const n=e.slots=pp();if(e.vnode.shapeFlag&32){const a=t._;a?(yp(n,t,s),s&&uf(n,"_",a,!0)):vp(t,n)}else t&&bp(e,t)},Ib=(e,t,s)=>{const{vnode:n,slots:a}=e;let i=!0,l=je;if(n.shapeFlag&32){const r=t._;r?s&&r===1?i=!1:yp(a,t,s):(i=!t.$stable,vp(t,a)),l=t}else t&&(bp(e,t),l={default:1});if(i)for(const r in a)!mc(r)&&l[r]==null&&delete a[r]},kt=Ep;function xp(e){return kp(e)}function _p(e){return kp(e,Rv)}function kp(e,t){const s=hr();s.__VUE__=!0;const{insert:n,remove:a,patchProp:i,createElement:l,createText:r,createComment:o,setText:c,setElementText:d,parentNode:u,nextSibling:f,setScopeId:p=Ut,insertStaticContent:b}=e,y=(k,L,$,ee=null,Z=null,X=null,ue=void 0,oe=null,le=!!L.dynamicChildren)=>{if(k===L)return;k&&!Us(k,L)&&(ee=V(k),ie(k,Z,X,!0),k=null),L.patchFlag===-2&&(le=!1,L.dynamicChildren=null);const{type:te,ref:ne,shapeFlag:fe}=L;switch(te){case Bn:E(k,L,$,ee);break;case yt:I(k,L,$,ee);break;case ta:k==null&&x(L,$,ee,ue);break;case Dt:P(k,L,$,ee,Z,X,ue,oe,le);break;default:fe&1?S(k,L,$,ee,Z,X,ue,oe,le):fe&6?R(k,L,$,ee,Z,X,ue,oe,le):(fe&64||fe&128)&&te.process(k,L,$,ee,Z,X,ue,oe,le,_e)}ne!=null&&Z?Pa(ne,k&&k.ref,X,L||k,!L):ne==null&&k&&k.ref!=null&&Pa(k.ref,null,X,k,!0)},E=(k,L,$,ee)=>{if(k==null)n(L.el=r(L.children),$,ee);else{const Z=L.el=k.el;L.children!==k.children&&c(Z,L.children)}},I=(k,L,$,ee)=>{k==null?n(L.el=o(L.children||""),$,ee):L.el=k.el},x=(k,L,$,ee)=>{[k.el,k.anchor]=b(k.children,L,$,ee,k.el,k.anchor)},m=({el:k,anchor:L},$,ee)=>{let Z;for(;k&&k!==L;)Z=f(k),n(k,$,ee),k=Z;n(L,$,ee)},_=({el:k,anchor:L})=>{let $;for(;k&&k!==L;)$=f(k),a(k),k=$;a(L)},S=(k,L,$,ee,Z,X,ue,oe,le)=>{if(L.type==="svg"?ue="svg":L.type==="math"&&(ue="mathml"),k==null)g(L,$,ee,Z,X,ue,oe,le);else{const te=k.el&&k.el._isVueCE?k.el:null;try{te&&te._beginPatch(),C(k,L,Z,X,ue,oe,le)}finally{te&&te._endPatch()}}},g=(k,L,$,ee,Z,X,ue,oe)=>{let le,te;const{props:ne,shapeFlag:fe,transition:be,dirs:Te}=k;if(le=k.el=l(k.type,X,ne&&ne.is,ne),fe&8?d(le,k.children):fe&16&&T(k.children,le,null,ee,Z,Kr(k,X),ue,oe),Te&&Xs(k,null,ee,"created"),w(le,k,k.scopeId,ue,ee),ne){for(const Le in ne)Le!=="value"&&!xn(Le)&&i(le,Le,null,ne[Le],X,ee);"value"in ne&&i(le,"value",null,ne.value,X),(te=ne.onVnodeBeforeMount)&&us(te,ee,k)}Te&&Xs(k,null,ee,"beforeMount");const Ie=wp(Z,be);Ie&&be.beforeEnter(le),n(le,L,$),((te=ne&&ne.onVnodeMounted)||Ie||Te)&&kt(()=>{try{te&&us(te,ee,k),Ie&&be.enter(le),Te&&Xs(k,null,ee,"mounted")}finally{}},Z)},w=(k,L,$,ee,Z)=>{if($&&p(k,$),ee)for(let X=0;X{for(let te=le;te{const oe=L.el=k.el;let{patchFlag:le,dynamicChildren:te,dirs:ne}=L;le|=k.patchFlag&16;const fe=k.props||je,be=L.props||je;let Te;if($&&jn($,!1),(Te=be.onVnodeBeforeUpdate)&&us(Te,$,L,k),ne&&Xs(L,k,$,"beforeUpdate"),$&&jn($,!0),(fe.innerHTML&&be.innerHTML==null||fe.textContent&&be.textContent==null)&&d(oe,""),te?M(k.dynamicChildren,te,oe,$,ee,Kr(L,Z),X):ue||N(k,L,oe,null,$,ee,Kr(L,Z),X,!1),le>0){if(le&16)H(oe,fe,be,$,Z);else if(le&2&&fe.class!==be.class&&i(oe,"class",null,be.class,Z),le&4&&i(oe,"style",fe.style,be.style,Z),le&8){const Ie=L.dynamicProps;for(let Le=0;Le{Te&&us(Te,$,L,k),ne&&Xs(L,k,$,"updated")},ee)},M=(k,L,$,ee,Z,X,ue)=>{for(let oe=0;oe{if(L!==$){if(L!==je)for(const X in L)!xn(X)&&!(X in $)&&i(k,X,L[X],null,Z,ee);for(const X in $){if(xn(X))continue;const ue=$[X],oe=L[X];ue!==oe&&X!=="value"&&i(k,X,oe,ue,Z,ee)}"value"in $&&i(k,"value",L.value,$.value,Z)}},P=(k,L,$,ee,Z,X,ue,oe,le)=>{const te=L.el=k?k.el:r(""),ne=L.anchor=k?k.anchor:r("");let{patchFlag:fe,dynamicChildren:be,slotScopeIds:Te}=L;Te&&(oe=oe?oe.concat(Te):Te),k==null?(n(te,$,ee),n(ne,$,ee),T(L.children||[],$,ne,Z,X,ue,oe,le)):fe>0&&fe&64&&be&&k.dynamicChildren&&k.dynamicChildren.length===be.length?(M(k.dynamicChildren,be,$,Z,X,ue,oe),(L.key!=null||Z&&L===Z.subTree)&&vc(k,L,!0)):N(k,L,$,ne,Z,X,ue,oe,le)},R=(k,L,$,ee,Z,X,ue,oe,le)=>{L.slotScopeIds=oe,k==null?L.shapeFlag&512?Z.ctx.activate(L,$,ee,ue,le):j(L,$,ee,Z,X,ue,le):Q(k,L,le)},j=(k,L,$,ee,Z,X,ue)=>{const oe=k.component=Dp(k,ee,Z);if(el(k)&&(oe.ctx.renderer=_e),Pp(oe,!1,ue),oe.asyncDep){if(Z&&Z.registerDep(oe,U,ue),!k.el){const le=oe.subTree=ft(yt);I(null,le,L,$),k.placeholder=le.el}}else U(oe,k,L,$,Z,X,ue)},Q=(k,L,$)=>{const ee=L.component=k.component;if(Sb(k,L,$))if(ee.asyncDep&&!ee.asyncResolved){O(ee,L,$);return}else ee.next=L,ee.update();else L.el=k.el,ee.vnode=L},U=(k,L,$,ee,Z,X,ue)=>{const oe=()=>{if(k.isMounted){let{next:fe,bu:be,u:Te,parent:Ie,vnode:Le}=k;{const G=Sp(k);if(G){fe&&(fe.el=Le.el,O(k,fe,ue)),G.asyncDep.then(()=>{kt(()=>{k.isUnmounted||te()},Z)});return}}let De=fe,Be;jn(k,!1),fe?(fe.el=Le.el,O(k,fe,ue)):fe=Le,be&&Da(be),(Be=fe.props&&fe.props.onVnodeBeforeUpdate)&&us(Be,Ie,fe,Le),jn(k,!0);const qe=Cl(k),ct=k.subTree;k.subTree=qe,y(ct,qe,u(ct.el),V(ct),k,Z,X),fe.el=qe.el,De===null&&Cr(k,qe.el),Te&&kt(Te,Z),(Be=fe.props&&fe.props.onVnodeUpdated)&&kt(()=>us(Be,Ie,fe,Le),Z)}else{let fe;const{el:be,props:Te}=L,{bm:Ie,m:Le,parent:De,root:Be,type:qe}=k,ct=kn(L);if(jn(k,!1),Ie&&Da(Ie),!ct&&(fe=Te&&Te.onVnodeBeforeMount)&&us(fe,De,L),jn(k,!0),be&&He){const G=()=>{k.subTree=Cl(k),He(be,k.subTree,k,Z,null)};ct&&qe.__asyncHydrate?qe.__asyncHydrate(be,k,G):G()}else{Be.ce&&Be.ce._hasShadowRoot()&&Be.ce._injectChildStyle(qe,k.parent?k.parent.type:void 0);const G=k.subTree=Cl(k);y(null,G,$,ee,k,Z,X),L.el=G.el}if(Le&&kt(Le,Z),!ct&&(fe=Te&&Te.onVnodeMounted)){const G=L;kt(()=>us(fe,De,G),Z)}(L.shapeFlag&256||De&&kn(De.vnode)&&De.vnode.shapeFlag&256)&&k.a&&kt(k.a,Z),k.isMounted=!0,L=$=ee=null}};k.scope.on();const le=k.effect=new Oi(oe);k.scope.off();const te=k.update=le.run.bind(le),ne=k.job=le.runIfDirty.bind(le);ne.i=k,ne.id=k.uid,le.scheduler=()=>ic(ne),jn(k,!0),te()},O=(k,L,$)=>{L.component=k;const ee=k.vnode.props;k.vnode=L,k.next=null,Cb(k,L.props,ee,$),Ib(k,L.children,$),Tn(),ud(k),Cn()},N=(k,L,$,ee,Z,X,ue,oe,le=!1)=>{const te=k&&k.children,ne=k?k.shapeFlag:0,fe=L.children,{patchFlag:be,shapeFlag:Te}=L;if(be>0){if(be&128){we(te,fe,$,ee,Z,X,ue,oe,le);return}else if(be&256){Y(te,fe,$,ee,Z,X,ue,oe,le);return}}Te&8?(ne&16&&Se(te,Z,X),fe!==te&&d($,fe)):ne&16?Te&16?we(te,fe,$,ee,Z,X,ue,oe,le):Se(te,Z,X,!0):(ne&8&&d($,""),Te&16&&T(fe,$,ee,Z,X,ue,oe,le))},Y=(k,L,$,ee,Z,X,ue,oe,le)=>{k=k||Oa,L=L||Oa;const te=k.length,ne=L.length,fe=Math.min(te,ne);let be;for(be=0;bene?Se(k,Z,X,!0,!1,fe):T(L,$,ee,Z,X,ue,oe,le,fe)},we=(k,L,$,ee,Z,X,ue,oe,le)=>{let te=0;const ne=L.length;let fe=k.length-1,be=ne-1;for(;te<=fe&&te<=be;){const Te=k[te],Ie=L[te]=le?pn(L[te]):ps(L[te]);if(Us(Te,Ie))y(Te,Ie,$,null,Z,X,ue,oe,le);else break;te++}for(;te<=fe&&te<=be;){const Te=k[fe],Ie=L[be]=le?pn(L[be]):ps(L[be]);if(Us(Te,Ie))y(Te,Ie,$,null,Z,X,ue,oe,le);else break;fe--,be--}if(te>fe){if(te<=be){const Te=be+1,Ie=Tebe)for(;te<=fe;)ie(k[te],Z,X,!0),te++;else{const Te=te,Ie=te,Le=new Map;for(te=Ie;te<=be;te++){const Ne=L[te]=le?pn(L[te]):ps(L[te]);Ne.key!=null&&Le.set(Ne.key,te)}let De,Be=0;const qe=be-Ie+1;let ct=!1,G=0;const me=new Array(qe);for(te=0;te=qe){ie(Ne,Z,X,!0);continue}let Pe;if(Ne.key!=null)Pe=Le.get(Ne.key);else for(De=Ie;De<=be;De++)if(me[De-Ie]===0&&Us(Ne,L[De])){Pe=De;break}Pe===void 0?ie(Ne,Z,X,!0):(me[Pe-Ie]=te+1,Pe>=G?G=Pe:ct=!0,y(Ne,L[Pe],$,null,Z,X,ue,oe,le),Be++)}const Ce=ct?Ob(me):Oa;for(De=Ce.length-1,te=qe-1;te>=0;te--){const Ne=Ie+te,Pe=L[Ne],Ve=L[Ne+1],pt=Ne+1{const{el:X,type:ue,transition:oe,children:le,shapeFlag:te}=k;if(te&6){ke(k.component.subTree,L,$,ee);return}if(te&128){k.suspense.move(L,$,ee);return}if(te&64){ue.move(k,L,$,_e);return}if(ue===Dt){n(X,L,$);for(let fe=0;feoe.enter(X),Z));else{const{leave:fe,delayLeave:be,afterLeave:Te}=oe,Ie=()=>{k.ctx.isUnmounted?a(X):n(X,L,$)},Le=()=>{const De=X._isLeaving||!!X[As];X._isLeaving&&X[As](!0),oe.persisted&&!De?Ie():fe(X,()=>{Ie(),Te&&Te()})};be?be(X,Ie,Le):Le()}else n(X,L,$)},ie=(k,L,$,ee=!1,Z=!1)=>{const{type:X,props:ue,ref:oe,children:le,dynamicChildren:te,shapeFlag:ne,patchFlag:fe,dirs:be,cacheIndex:Te,memo:Ie}=k;if(fe===-2&&(Z=!1),oe!=null&&(Tn(),Pa(oe,null,$,k,!0),Cn()),Te!=null&&(L.renderCache[Te]=void 0),ne&256){L.ctx.deactivate(k);return}const Le=ne&1&&be,De=!kn(k);let Be;if(De&&(Be=ue&&ue.onVnodeBeforeUnmount)&&us(Be,L,k),ne&6)se(k.component,$,ee);else{if(ne&128){k.suspense.unmount($,ee);return}Le&&Xs(k,null,L,"beforeUnmount"),ne&64?k.type.remove(k,L,$,_e,ee):te&&!te.hasOnce&&(X!==Dt||fe>0&&fe&64)?Se(te,L,$,!1,!0):(X===Dt&&fe&384||!Z&&ne&16)&&Se(le,L,$),ee&&pe(k)}const qe=Ie!=null&&Te==null;(De&&(Be=ue&&ue.onVnodeUnmounted)||Le||qe)&&kt(()=>{Be&&us(Be,L,k),Le&&Xs(k,null,L,"unmounted"),qe&&(k.el=null)},$)},pe=k=>{const{type:L,el:$,anchor:ee,transition:Z}=k;if(L===Dt){F($,ee);return}if(L===ta){_(k);return}const X=()=>{a($),Z&&!Z.persisted&&Z.afterLeave&&Z.afterLeave()};if(k.shapeFlag&1&&Z&&!Z.persisted){const{leave:ue,delayLeave:oe}=Z,le=()=>ue($,X);oe?oe(k.el,X,le):le()}else X()},F=(k,L)=>{let $;for(;k!==L;)$=f(k),a(k),k=$;a(L)},se=(k,L,$)=>{const{bum:ee,scope:Z,job:X,subTree:ue,um:oe,m:le,a:te}=k;Hl(le),Hl(te),ee&&Da(ee),Z.stop(),X&&(X.flags|=8,ie(ue,k,L,$)),oe&&kt(oe,L),kt(()=>{k.isUnmounted=!0},L)},Se=(k,L,$,ee=!1,Z=!1,X=0)=>{for(let ue=X;ue{if(k.shapeFlag&6)return V(k.component.subTree);if(k.shapeFlag&128)return k.suspense.next();const L=f(k.anchor||k.el),$=L&&L[Kf];return $?f($):L};let de=!1;const ce=(k,L,$)=>{let ee;k==null?L._vnode&&(ie(L._vnode,null,null,!0),ee=L._vnode.component):y(L._vnode||null,k,L,null,null,null,$),L._vnode=k,de||(de=!0,ud(ee),$l(),de=!1)},_e={p:y,um:ie,m:ke,r:pe,mt:j,mc:T,pc:N,pbc:M,n:V,o:e};let ve,He;return t&&([ve,He]=t(_e)),{render:ce,hydrate:ve,createApp:vb(ce,ve)}}function Kr({type:e,props:t},s){return s==="svg"&&e==="foreignObject"||s==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:s}function jn({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function wp(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function vc(e,t,s=!1){const n=e.children,a=t.children;if(xe(n)&&xe(a))for(let i=0;i>1,e[s[r]]0&&(t[n]=s[i-1]),s[i]=n)}}for(i=s.length,l=s[i-1];i-- >0;)s[i]=l,l=t[l];return s}function Sp(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Sp(t)}function Hl(e){if(e)for(let t=0;te.__isSuspense;let To=0;const Nb={name:"Suspense",__isSuspense:!0,process(e,t,s,n,a,i,l,r,o,c){if(e==null)Db(t,s,n,a,i,l,r,o,c);else{if(i&&i.deps>0&&!e.suspense.isInFallback){t.suspense=e.suspense,t.suspense.vnode=t,t.el=e.el;return}Mb(e,t,s,n,a,l,r,o,c)}},hydrate:Pb,normalize:Fb},Lb=Nb;function $i(e,t){const s=e.props&&e.props[t];Re(s)&&s()}function Db(e,t,s,n,a,i,l,r,o){const{p:c,o:{createElement:d}}=o,u=d("div"),f=e.suspense=Cp(e,a,n,t,u,s,i,l,r,o);c(null,f.pendingBranch=e.ssContent,u,null,n,f,i,l),f.deps>0?($i(e,"onPending"),$i(e,"onFallback"),c(null,e.ssFallback,t,s,n,null,i,l),Fa(f,e.ssFallback)):f.resolve(!1,!0)}function Mb(e,t,s,n,a,i,l,r,{p:o,um:c,o:{createElement:d}}){const u=t.suspense=e.suspense;u.vnode=t,t.el=e.el;const f=t.ssContent,p=t.ssFallback,{activeBranch:b,pendingBranch:y,isInFallback:E,isHydrating:I}=u;if(y)u.pendingBranch=f,Us(y,f)?(o(y,f,u.hiddenContainer,null,a,u,i,l,r),u.deps<=0?u.resolve():E&&(I||(o(b,p,s,n,a,null,i,l,r),Fa(u,p)))):(u.pendingId=To++,I?(u.isHydrating=!1,u.activeBranch=y):c(y,a,u),u.deps=0,u.effects.length=0,u.hiddenContainer=d("div"),E?(o(null,f,u.hiddenContainer,null,a,u,i,l,r),u.deps<=0?u.resolve():(o(b,p,s,n,a,null,i,l,r),Fa(u,p))):b&&Us(b,f)?(o(b,f,s,n,a,u,i,l,r),u.resolve(!0)):(o(null,f,u.hiddenContainer,null,a,u,i,l,r),u.deps<=0&&u.resolve()));else if(b&&Us(b,f))o(b,f,s,n,a,u,i,l,r),Fa(u,f);else if($i(t,"onPending"),u.pendingBranch=f,f.shapeFlag&512?u.pendingId=f.component.suspenseId:u.pendingId=To++,o(null,f,u.hiddenContainer,null,a,u,i,l,r),u.deps<=0)u.resolve();else{const{timeout:x,pendingId:m}=u;x>0?setTimeout(()=>{u.pendingId===m&&u.fallback(p)},x):x===0&&u.fallback(p)}}function Cp(e,t,s,n,a,i,l,r,o,c,d=!1){const{p:u,m:f,um:p,n:b,o:{parentNode:y,remove:E}}=c;let I;const x=$b(e);x&&t&&t.pendingBranch&&(I=t.pendingId,t.deps++);const m=e.props?Ll(e.props.timeout):void 0,_=i,S={vnode:e,parent:t,parentComponent:s,namespace:l,container:n,hiddenContainer:a,deps:0,pendingId:To++,timeout:typeof m=="number"?m:-1,activeBranch:null,isFallbackMountPending:!1,pendingBranch:null,isInFallback:!d,isHydrating:d,isUnmounted:!1,effects:[],resolve(g=!1,w=!1){const{vnode:T,activeBranch:C,pendingBranch:M,pendingId:H,effects:P,parentComponent:R,container:j,isInFallback:Q}=S;let U=!1;if(S.isHydrating)S.isHydrating=!1;else if(!g){U=C&&M.transition&&M.transition.mode==="out-in";let Y=!1;U&&(C.transition.afterLeave=()=>{H===S.pendingId&&(f(M,j,i===_&&!Y?b(C):i,0),Di(P),Q&&T.ssFallback&&(T.ssFallback.el=null))}),C&&!S.isFallbackMountPending&&(y(C.el)===j&&(i=b(C),Y=!0),p(C,R,S,!0),!U&&Q&&T.ssFallback&&kt(()=>T.ssFallback.el=null,S)),U||f(M,j,i,0)}S.isFallbackMountPending=!1,Fa(S,M),S.pendingBranch=null,S.isInFallback=!1;let O=S.parent,N=!1;for(;O;){if(O.pendingBranch){O.effects.push(...P),N=!0;break}O=O.parent}!N&&!U&&Di(P),S.effects=[],x&&t&&t.pendingBranch&&I===t.pendingId&&(t.deps--,t.deps===0&&!w&&t.resolve()),$i(T,"onResolve")},fallback(g){if(!S.pendingBranch)return;const{vnode:w,activeBranch:T,parentComponent:C,container:M,namespace:H}=S;$i(w,"onFallback");const P=b(T),R=()=>{S.isFallbackMountPending=!1,S.isInFallback&&(u(null,g,M,P,C,null,H,r,o),Fa(S,g))},j=g.transition&&g.transition.mode==="out-in";j&&(S.isFallbackMountPending=!0,T.transition.afterLeave=R),S.isInFallback=!0,p(T,C,null,!0),j||R()},move(g,w,T){S.activeBranch&&f(S.activeBranch,g,w,T),S.container=g},next(){return S.activeBranch&&b(S.activeBranch)},registerDep(g,w,T){const C=!!S.pendingBranch;C&&S.deps++;const M=g.vnode.el;g.asyncDep.catch(H=>{ua(H,g,0)}).then(H=>{if(g.isUnmounted||S.isUnmounted||S.pendingId!==g.suspenseId)return;Hi(),g.asyncResolved=!0;const{vnode:P}=g;Co(g,H,!1),M&&(P.el=M);const R=!M&&g.subTree.el;w(g,P,y(M||g.subTree.el),M?null:b(g.subTree),S,l,T),R&&(P.placeholder=null,E(R)),Cr(g,P.el),C&&--S.deps===0&&S.resolve()})},unmount(g,w){S.isUnmounted=!0,S.activeBranch&&p(S.activeBranch,s,g,w),S.pendingBranch&&p(S.pendingBranch,s,g,w)}};return S}function Pb(e,t,s,n,a,i,l,r,o){const c=t.suspense=Cp(t,n,s,e.parentNode,document.createElement("div"),null,a,i,l,r,!0),d=o(e,c.pendingBranch=t.ssContent,s,c,i,l);return c.deps===0&&c.resolve(!1,!0),d}function Fb(e){const{shapeFlag:t,children:s}=e,n=t&32;e.ssContent=Td(n?s.default:s),e.ssFallback=n?Td(s.fallback):ft(yt)}function Td(e){let t;if(Re(e)){const s=aa&&e._c;s&&(e._d=!1,Bi()),e=e(),s&&(e._d=!0,t=Gt,Ap())}return xe(e)&&(e=_b(e)),e=ps(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter(s=>s!==e)),e}function Ep(e,t){t&&t.pendingBranch?xe(e)?t.effects.push(...e):t.effects.push(e):Di(e)}function Fa(e,t){e.activeBranch=t;const{vnode:s,parentComponent:n}=e;let a=t.el;for(;!a&&t.component;)t=t.component.subTree,a=t.el;s.el=a,n&&n.subTree===s&&(n.vnode.el=a,Cr(n,a))}function $b(e){const t=e.props&&e.props.suspensible;return t!=null&&t!==!1}const Dt=Symbol.for("v-fgt"),Bn=Symbol.for("v-txt"),yt=Symbol.for("v-cmt"),ta=Symbol.for("v-stc"),Si=[];let Gt=null;function Bi(e=!1){Si.push(Gt=e?null:[])}function Ap(){Si.pop(),Gt=Si[Si.length-1]||null}let aa=1;function Ui(e,t=!1){aa+=e,e<0&&Gt&&t&&(Gt.hasOnce=!0)}function Rp(e){return e.dynamicChildren=aa>0?Gt||Oa:null,Ap(),aa>0&&Gt&&Gt.push(e),e}function Bb(e,t,s,n,a,i){return Rp(bc(e,t,s,n,a,i,!0))}function Vl(e,t,s,n,a){return Rp(ft(e,t,s,n,a,!0))}function An(e){return e?e.__v_isVNode===!0:!1}function Us(e,t){return e.type===t.type&&e.key===t.key}function Ub(e){}const Ip=({key:e})=>e??null,El=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?Me(e)||St(e)||Re(e)?{i:Bt,r:e,k:t,f:!!s}:e:null);function bc(e,t=null,s=null,n=0,a=null,i=e===Dt?0:1,l=!1,r=!1){const o={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Ip(t),ref:t&&El(t),scopeId:xr,slotScopeIds:null,children:s,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:n,dynamicProps:a,dynamicChildren:null,appContext:null,ctx:Bt};return r?(xc(o,s),i&128&&e.normalize(o)):s&&(o.shapeFlag|=Me(s)?8:16),aa>0&&!l&&Gt&&(o.patchFlag>0||i&6)&&o.patchFlag!==32&&Gt.push(o),o}const ft=Hb;function Hb(e,t=null,s=null,n=0,a=null,i=!1){if((!e||e===ip)&&(e=yt),An(e)){const r=nn(e,t,!0);return s&&xc(r,s),aa>0&&!i&&Gt&&(r.shapeFlag&6?Gt[Gt.indexOf(e)]=r:Gt.push(r)),r.patchFlag=-2,r}if(Wb(e)&&(e=e.__vccOpts),t){t=Op(t);let{class:r,style:o}=t;r&&!Me(r)&&(t.class=Ji(r)),Qe(o)&&(Yi(o)&&!xe(o)&&(o=ze({},o)),t.style=Zi(o))}const l=Me(e)?1:zl(e)?128:Wf(e)?64:Qe(e)?4:Re(e)?2:0;return bc(e,t,s,n,a,l,i,!0)}function Op(e){return e?Yi(e)||hp(e)?ze({},e):e:null}function nn(e,t,s=!1,n=!1){const{props:a,ref:i,patchFlag:l,children:r,transition:o}=e,c=t?Lp(a||{},t):a,d={__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&Ip(c),ref:t&&t.ref?s&&i?xe(i)?i.concat(El(t)):[i,El(t)]:El(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:r,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Dt?l===-1?16:l|16:l,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:o,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&nn(e.ssContent),ssFallback:e.ssFallback&&nn(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return o&&n&&En(d,o.clone(d)),d}function yc(e=" ",t=0){return ft(Bn,null,e,t)}function zb(e,t){const s=ft(ta,null,e);return s.staticCount=t,s}function Np(e="",t=!1){return t?(Bi(),Vl(yt,null,e)):ft(yt,null,e)}function ps(e){return e==null||typeof e=="boolean"?ft(yt):xe(e)?ft(Dt,null,e.slice()):An(e)?pn(e):ft(Bn,null,String(e))}function pn(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:nn(e)}function xc(e,t){let s=0;const{shapeFlag:n}=e;if(t==null)t=null;else if(xe(t))s=16;else if(typeof t=="object")if(n&65){const a=t.default;a&&(a._c&&(a._d=!1),xc(e,a()),a._c&&(a._d=!0));return}else{s=32;const a=t._;!a&&!hp(t)?t._ctx=Bt:a===3&&Bt&&(Bt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else Re(t)?(t={default:t,_ctx:Bt},s=32):(t=String(t),n&64?(s=16,t=[yc(t)]):s=8);e.children=t,e.shapeFlag|=s}function Lp(...e){const t={};for(let s=0;s$t||Bt;let jl,$a;{const e=hr(),t=(s,n)=>{let a;return(a=e[s])||(a=e[s]=[]),a.push(n),i=>{a.length>1?a.forEach(l=>l(i)):a[0](i)}};jl=t("__VUE_INSTANCE_SETTERS__",s=>$t=s),$a=t("__VUE_SSR_SETTERS__",s=>ia=s)}const ti=e=>{const t=$t;return jl(e),e.scope.on(),()=>{e.scope.off(),jl(t)}},Hi=()=>{$t&&$t.scope.off(),jl(null)};function Mp(e){return e.vnode.shapeFlag&4}let ia=!1;function Pp(e,t=!1,s=!1){t&&$a(t);const{props:n,children:a}=e.vnode,i=Mp(e);Tb(e,n,i,t),Rb(e,a,s||t);const l=i?qb(e,t):void 0;return t&&$a(!1),l}function qb(e,t){const s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,_o);const{setup:n}=s;if(n){Tn();const a=e.setupContext=n.length>1?Bp(e):null,i=ti(e),l=ei(n,e,0,[e.props,a]),r=Yo(l);if(Cn(),i(),(r||e.sp)&&!kn(e)&&cc(e),r){if(l.then(Hi,Hi),t)return l.then(o=>{Co(e,o,t)}).catch(o=>{ua(o,e,0)});e.asyncDep=l}else Co(e,l,t)}else $p(e,t)}function Co(e,t,s){Re(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Qe(t)&&(e.setupState=ac(t)),$p(e,s)}let ql,Eo;function Fp(e){ql=e,Eo=t=>{t.render._rc&&(t.withProxy=new Proxy(t.ctx,Yv))}}const Gb=()=>!ql;function $p(e,t,s){const n=e.type;if(!e.render){if(!t&&ql&&!n.render){const a=n.template||hc(e).template;if(a){const{isCustomElement:i,compilerOptions:l}=e.appContext.config,{delimiters:r,compilerOptions:o}=n,c=ze(ze({isCustomElement:i,delimiters:r},l),o);n.render=ql(a,c)}}e.render=n.render||Ut,Eo&&Eo(e)}{const a=ti(e);Tn();try{ub(e)}finally{Cn(),a()}}}const Kb={get(e,t){return qt(e,"get",""),e[t]}};function Bp(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,Kb),slots:e.slots,emit:e.emit,expose:t}}function tl(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(ac(Lf(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in wi)return wi[s](e)},has(t,s){return s in t||s in wi}})):e.proxy}function Ao(e,t=!0){return Re(e)?e.displayName||e.name:e.name||t&&e.__name}function Wb(e){return Re(e)&&"__vccOpts"in e}const J=(e,t)=>ev(e,t,ia);function Va(e,t,s){try{Ui(-1);const n=arguments.length;return n===2?Qe(t)&&!xe(t)?An(t)?ft(e,null,[t]):ft(e,t):ft(e,null,t):(n>3?s=Array.prototype.slice.call(arguments,2):n===3&&An(s)&&(s=[s]),ft(e,t,s))}finally{Ui(1)}}function Zb(){}function Jb(e,t,s,n){const a=s[n];if(a&&Up(a,e))return a;const i=t();return i.memo=e.slice(),i.cacheIndex=n,s[n]=i}function Up(e,t){const s=e.memo;if(s.length!=t.length)return!1;for(let n=0;n0&&Gt&&Gt.push(e),!0}const Hp="3.5.38",Yb=Ut,Qb=cv,Xb=Ca,ey=zf,ty={createComponentInstance:Dp,setupComponent:Pp,renderComponentRoot:Cl,setCurrentRenderingInstance:Pi,isVNode:An,normalizeVNode:ps,getComponentPublicInstance:tl,ensureValidVNode:pc,pushWarningContext:iv,popWarningContext:lv},sy=ty,ny=null,ay=null,iy=null;/** +`)&&(ml(m,0)||xa(),m.textContent=_.children)}if(M){if(Q||!T||H&48){const N=m.tagName.includes("-");for(const Y in M)(Q&&(Y.endsWith("value")||Y==="indeterminate")||oa(Y)&&!xn(Y)||Y[0]==="."||N&&!xn(Y))&&n(m,Y,null,M[Y],void 0,S)}else if(M.onClick)n(m,"onClick",null,M.onClick,void 0,S);else if(H&4&&_n(M.style))for(const N in M.style)M.style[N]}let O;(O=M&&M.onVnodeBeforeMount)&&us(O,S,_),R&&en(_,null,S,"beforeMount"),((O=M&&M.onVnodeMounted)||R||U)&&Ep(()=>{O&&us(O,S,_),U&&j.enter(m),R&&en(_,null,S,"mounted")},g)}return m.nextSibling},p=(m,_,S,g,w,T,C)=>{C=C||!!_.dynamicChildren;const M=_.children,H=M.length;let P=!1;for(let R=0;R{const{slotScopeIds:C}=_;C&&(w=w?w.concat(C):C);const M=l(m),H=p(i(m),_,M,S,g,w,T);return H&&Ia(H)&&H.data==="]"?i(_.anchor=H):(xa(),o(_.anchor=c("]"),M,H),H)},y=(m,_,S,g,w,T)=>{if(ml(m.parentElement,1)||xa(),_.el=null,T){const H=E(m);for(;;){const P=i(m);if(P&&P!==H)r(P);else break}}const C=i(m),M=l(m);return r(m),s(null,_,M,C,S,g,hl(M),w),S&&(S.vnode.el=_.el,Cr(S,_.el)),C},E=(m,_="[",S="]")=>{let g=0;for(;m;)if(m=i(m),m&&Ia(m)&&(m.data===_&&g++,m.data===S)){if(g===0)return i(m);g--}return m},I=(m,_,S)=>{const g=_.parentNode;g&&g.replaceChild(m,_);let w=S;for(;w;)w.vnode.el===_&&(w.vnode.el=w.subTree.el=m),w=w.parent},x=m=>m.nodeType===1&&m.tagName==="TEMPLATE";return[d,u]}const bd="data-allow-mismatch",Iv={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function ml(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(bd);)e=e.parentElement;const s=e&&e.getAttribute(bd);if(s==null)return!1;if(s==="")return!0;{const n=s.split(",");return t===0&&n.includes("children")?!0:n.includes(Iv[t])}}const Ov=hr().requestIdleCallback||(e=>setTimeout(e,1)),Nv=hr().cancelIdleCallback||(e=>clearTimeout(e)),Lv=(e=1e4)=>t=>{const s=Ov(t,{timeout:e});return()=>Nv(s)};function Dv(e){const{top:t,left:s,bottom:n,right:a}=e.getBoundingClientRect(),{innerHeight:i,innerWidth:l}=window;return(t>0&&t0&&n0&&s0&&a(t,s)=>{const n=new IntersectionObserver(a=>{for(const i of a)if(i.isIntersecting){n.disconnect(),t();break}},e);return s(a=>{if(a instanceof Element){if(Dv(a))return t(),n.disconnect(),!1;n.observe(a)}}),()=>n.disconnect()},Pv=e=>t=>{if(e){const s=matchMedia(e);if(s.matches)t();else return s.addEventListener("change",t,{once:!0}),()=>s.removeEventListener("change",t)}},Fv=(e=[])=>(t,s)=>{Me(e)&&(e=[e]);let n=!1;const a=l=>{n||(n=!0,i(),t(),l.target.dispatchEvent(new l.constructor(l.type,l)))},i=()=>{s(l=>{for(const r of e)l.removeEventListener(r,a)})};return s(l=>{for(const r of e)l.addEventListener(r,a,{once:!0})}),i};function $v(e,t){if(Ia(e)&&e.data==="["){let s=1,n=e.nextSibling;for(;n;){if(n.nodeType===1){if(t(n)===!1)break}else if(Ia(n))if(n.data==="]"){if(--s===0)break}else n.data==="["&&s++;n=n.nextSibling}}else t(e)}const kn=e=>!!e.type.__asyncLoader;function Bv(e){Re(e)&&(e={loader:e});const{loader:t,loadingComponent:s,errorComponent:n,delay:a=200,hydrate:i,timeout:l,suspensible:r=!0,onError:o}=e;let c=null,d,u=0;const f=()=>(u++,c=null,p()),p=()=>{let b;return c||(b=c=t().catch(y=>{if(y=y instanceof Error?y:new Error(String(y)),o)return new Promise((E,I)=>{o(y,()=>E(f()),()=>I(y),u+1)});throw y}).then(y=>b!==c&&c?c:(y&&(y.__esModule||y[Symbol.toStringTag]==="Module")&&(y=y.default),d=y,y)))};return Xi({name:"AsyncComponentWrapper",__asyncLoader:p,__asyncHydrate(b,y,E){let I=!1;(y.bu||(y.bu=[])).push(()=>I=!0);const x=()=>{I||E()},m=i?()=>{const _=i(x,S=>$v(b,S));_&&(y.bum||(y.bum=[])).push(_)}:x;d?m():p().then(()=>!y.isUnmounted&&m())},get __asyncResolved(){return d},setup(){const b=$t;if(cc(b),d)return()=>gl(d,b);const y=S=>{c=null,ua(S,b,13,!n)};if(r&&b.suspense||ia)return p().then(S=>()=>gl(S,b)).catch(S=>(y(S),()=>n?ft(n,{error:S}):null));const E=h(!1),I=h(),x=h(!!a);let m,_;return xt(()=>{m!=null&&clearTimeout(m),_!=null&&clearTimeout(_)}),a&&(_=setTimeout(()=>{b.isUnmounted||(x.value=!1)},a)),l!=null&&(m=setTimeout(()=>{if(!b.isUnmounted&&!E.value&&!I.value){const S=new Error(`Async component timed out after ${l}ms.`);y(S),I.value=S}},l)),p().then(()=>{b.isUnmounted||(E.value=!0,b.parent&&el(b.parent.vnode)&&b.parent.update())}).catch(S=>{if(b.isUnmounted){c=null;return}y(S),I.value=S}),()=>{if(E.value&&d)return gl(d,b);if(I.value&&n)return ft(n,{error:I.value});if(s&&!x.value)return gl(s,b)}}})}function gl(e,t){const{ref:s,props:n,children:a,ce:i}=t.vnode,l=ft(e,n,a);return l.ref=s,l.ce=i,delete t.vnode.ce,l}const el=e=>e.type.__isKeepAlive,Uv={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const s=ss(),n=s.ctx;if(!n.renderer)return()=>{const x=t.default&&t.default();return x&&x.length===1?x[0]:x};const a=new Map,i=new Set;let l=null;const r=s.suspense,{renderer:{p:o,m:c,um:d,o:{createElement:u}}}=n,f=u("div");n.activate=(x,m,_,S,g)=>{const w=x.component;c(x,m,_,0,r),o(w.vnode,x,m,_,w,r,S,x.slotScopeIds,g),kt(()=>{w.isDeactivated=!1,w.a&&Da(w.a);const T=x.props&&x.props.onVnodeMounted;T&&us(T,w.parent,x)},r)},n.deactivate=x=>{const m=x.component;Hl(m.m),Hl(m.a),c(x,f,null,1,r),kt(()=>{m.da&&Da(m.da);const _=x.props&&x.props.onVnodeUnmounted;_&&us(_,m.parent,x),m.isDeactivated=!0},r)};function p(x){qr(x),d(x,s,r,!0)}function b(x){a.forEach((m,_)=>{const S=Ao(kn(m)?m.type.__asyncResolved||{}:m.type);S&&!x(S)&&y(_)})}function y(x){const m=a.get(x);m&&(!l||!Hs(m,l))?p(m):l&&qr(l),a.delete(x),i.delete(x)}ts(()=>[e.include,e.exclude],([x,m])=>{x&&b(_=>gi(x,_)),m&&b(_=>!gi(m,_))},{flush:"post",deep:!0});let E=null;const I=()=>{E!=null&&(zl(s.subTree.type)?kt(()=>{a.set(E,vl(s.subTree))},s.subTree.suspense):a.set(E,vl(s.subTree)))};return We(I),wr(I),Sr(()=>{a.forEach(x=>{const{subTree:m,suspense:_}=s,S=vl(m);if(x.type===S.type&&x.key===S.key){qr(S);const g=S.component.da;g&&kt(g,_);return}p(x)})}),()=>{if(E=null,!t.default)return l=null;const x=t.default(),m=x[0];if(x.length>1)return l=null,x;if(!An(m)||!(m.shapeFlag&4)&&!(m.shapeFlag&128))return l=null,m;let _=vl(m);if(_.type===yt)return l=null,_;const S=_.type,g=Ao(kn(_)?_.type.__asyncResolved||{}:S),{include:w,exclude:T,max:C}=e;if(w&&(!g||!gi(w,g))||T&&g&&gi(T,g))return _.shapeFlag&=-257,l=_,m;const M=_.key==null?S:_.key,H=a.get(M);return _.el&&(_=an(_),m.shapeFlag&128&&(m.ssContent=_)),E=M,H?(_.el=H.el,_.component=H.component,_.transition&&En(_,_.transition),_.shapeFlag|=512,i.delete(M),i.add(M)):(i.add(M),C&&i.size>parseInt(C,10)&&y(i.values().next().value)),_.shapeFlag|=256,l=_,zl(m.type)?m:_}}},Hv=Uv;function gi(e,t){return xe(e)?e.some(s=>gi(s,t)):Me(e)?e.split(",").includes(t):Ym(e)?(e.lastIndex=0,e.test(t)):!1}function Ms(e,t){Xf(e,"a",t)}function Ps(e,t){Xf(e,"da",t)}function Xf(e,t,s=$t){const n=e.__wdc||(e.__wdc=()=>{let a=s;for(;a;){if(a.isDeactivated)return;a=a.parent}return e()});if(kr(t,n,s),s){let a=s.parent;for(;a&&a.parent;)el(a.parent.vnode)&&zv(n,t,s,a),a=a.parent}}function zv(e,t,s,n){const a=kr(t,e,n,!0);xt(()=>{Jo(n[t],a)},s)}function qr(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function vl(e){return e.shapeFlag&128?e.ssContent:e}function kr(e,t,s=$t,n=!1){if(s){const a=s[e]||(s[e]=[]),i=t.__weh||(t.__weh=(...l)=>{Tn();const r=ti(s),o=_s(t,s,e,l);return r(),Cn(),o});return n?a.unshift(i):a.push(i),i}}const Rn=e=>(t,s=$t)=>{(!ia||e==="sp")&&kr(e,(...n)=>t(...n),s)},ep=Rn("bm"),We=Rn("m"),dc=Rn("bu"),wr=Rn("u"),Sr=Rn("bum"),xt=Rn("um"),tp=Rn("sp"),sp=Rn("rtg"),np=Rn("rtc");function ap(e,t=$t){kr("ec",e,t)}const uc="components",Vv="directives";function jv(e,t){return fc(uc,e,!0,t)||e}const ip=Symbol.for("v-ndc");function qv(e){return Me(e)?fc(uc,e,!1)||e:e||ip}function Gv(e){return fc(Vv,e)}function fc(e,t,s=!0,n=!1){const a=Bt||$t;if(a){const i=a.type;if(e===uc){const r=Ao(i,!1);if(r&&(r===t||r===it(t)||r===da(it(t))))return i}const l=yd(a[e]||i[e],t)||yd(a.appContext[e],t);return!l&&n?i:l}}function yd(e,t){return e&&(e[t]||e[it(t)]||e[da(it(t))])}function Kv(e,t,s,n){let a;const i=s&&s[n],l=xe(e);if(l||Me(e)){const r=l&&_n(e);let o=!1,c=!1;r&&(o=!gs(e),c=nn(e),e=vr(e)),a=new Array(e.length);for(let d=0,u=e.length;dt(r,o,void 0,i&&i[o]));else{const r=Object.keys(e);a=new Array(r.length);for(let o=0,c=r.length;o{const i=n.fn(...a);return i&&(i.key=n.key),i}:n.fn)}return e}function Zv(e,t,s={},n,a){if(Bt.ce||Bt.parent&&kn(Bt.parent)&&Bt.parent.ce){const c=Object.keys(s).length>0;return t!=="default"&&(s.name=t),Bi(),Vl(Dt,null,[ft("slot",s,n&&n())],c?-2:64)}let i=e[t];i&&i._c&&(i._d=!1),Bi();const l=i&&pc(i(s)),r=s.key||l&&l.key,o=Vl(Dt,{key:(r&&!Wt(r)?r:`_${t}`)+(!l&&n?"_fb":"")},l||(n?n():[]),l&&e._===1?64:-2);return!a&&o.scopeId&&(o.slotScopeIds=[o.scopeId+"-s"]),i&&i._c&&(i._d=!0),o}function pc(e){return e.some(t=>An(t)?!(t.type===yt||t.type===Dt&&!pc(t.children)):!0)?e:null}function Jv(e,t){const s={};for(const n in e)s[t&&/[A-Z]/.test(n)?`on:${n}`:La(n)]=e[n];return s}const xo=e=>e?Mp(e)?tl(e):xo(e.parent):null,wi=ze(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>xo(e.parent),$root:e=>xo(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>hc(e),$forceUpdate:e=>e.f||(e.f=()=>{ic(e.update)}),$nextTick:e=>e.n||(e.n=It.bind(e.proxy)),$watch:e=>yv.bind(e)}),Gr=(e,t)=>e!==je&&!e.__isScriptSetup&&et(e,t),_o={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:s,setupState:n,data:a,props:i,accessCache:l,type:r,appContext:o}=e;if(t[0]!=="$"){const f=l[t];if(f!==void 0)switch(f){case 1:return n[t];case 2:return a[t];case 4:return s[t];case 3:return i[t]}else{if(Gr(n,t))return l[t]=1,n[t];if(a!==je&&et(a,t))return l[t]=2,a[t];if(et(i,t))return l[t]=3,i[t];if(s!==je&&et(s,t))return l[t]=4,s[t];ko&&(l[t]=0)}}const c=wi[t];let d,u;if(c)return t==="$attrs"&&qt(e.attrs,"get",""),c(e);if((d=r.__cssModules)&&(d=d[t]))return d;if(s!==je&&et(s,t))return l[t]=4,s[t];if(u=o.config.globalProperties,et(u,t))return u[t]},set({_:e},t,s){const{data:n,setupState:a,ctx:i}=e;return Gr(a,t)?(a[t]=s,!0):n!==je&&et(n,t)?(n[t]=s,!0):et(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=s,!0)},has({_:{data:e,setupState:t,accessCache:s,ctx:n,appContext:a,props:i,type:l}},r){let o;return!!(s[r]||e!==je&&r[0]!=="$"&&et(e,r)||Gr(t,r)||et(i,r)||et(n,r)||et(wi,r)||et(a.config.globalProperties,r)||(o=l.__cssModules)&&o[r])},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:et(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}},Yv=ze({},_o,{get(e,t){if(t!==Symbol.unscopables)return _o.get(e,t,e)},has(e,t){return t[0]!=="_"&&!ag(t)}});function Qv(){return null}function Xv(){return null}function eb(e){}function tb(e){}function sb(){return null}function nb(){}function ab(e,t){return null}function ib(){return lp().slots}function lb(){return lp().attrs}function lp(e){const t=ss();return t.setupContext||(t.setupContext=Bp(t))}function Fi(e){return xe(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}function rb(e,t){const s=Fi(e);for(const n in t){if(n.startsWith("__skip"))continue;let a=s[n];a?xe(a)||Re(a)?a=s[n]={type:a,default:t[n]}:a.default=t[n]:a===null&&(a=s[n]={default:t[n]}),a&&t[`__skip_${n}`]&&(a.skipFactory=!0)}return s}function ob(e,t){return!e||!t?e||t:xe(e)&&xe(t)?e.concat(t):ze({},Fi(e),Fi(t))}function cb(e,t){const s={};for(const n in e)t.includes(n)||Object.defineProperty(s,n,{enumerable:!0,get:()=>e[n]});return s}function db(e){const t=ss(),s=ia;let n=e();Hi(),s&&$a(!1);const a=()=>{ti(t),s&&$a(!0)},i=()=>{ss()!==t&&t.scope.off(),Hi(),s&&$a(!1)};return Yo(n)&&(n=n.catch(l=>{throw a(),Promise.resolve().then(()=>Promise.resolve().then(i)),l})),[n,()=>{a(),Promise.resolve().then(i)}]}let ko=!0;function ub(e){const t=hc(e),s=e.proxy,n=e.ctx;ko=!1,t.beforeCreate&&xd(t.beforeCreate,e,"bc");const{data:a,computed:i,methods:l,watch:r,provide:o,inject:c,created:d,beforeMount:u,mounted:f,beforeUpdate:p,updated:b,activated:y,deactivated:E,beforeDestroy:I,beforeUnmount:x,destroyed:m,unmounted:_,render:S,renderTracked:g,renderTriggered:w,errorCaptured:T,serverPrefetch:C,expose:M,inheritAttrs:H,components:P,directives:R,filters:j}=t;if(c&&fb(c,n,null),l)for(const O in l){const N=l[O];Re(N)&&(n[O]=N.bind(s))}if(a){const O=a.call(s,s);Qe(O)&&(e.data=zn(O))}if(ko=!0,i)for(const O in i){const N=i[O],Y=Re(N)?N.bind(s,s):Re(N.get)?N.get.bind(s,s):Ut,we=!Re(N)&&Re(N.set)?N.set.bind(s):Ut,ke=J({get:Y,set:we});Object.defineProperty(n,O,{enumerable:!0,configurable:!0,get:()=>ke.value,set:ie=>ke.value=ie})}if(r)for(const O in r)rp(r[O],n,s,O);if(o){const O=Re(o)?o.call(s):o;Reflect.ownKeys(O).forEach(N=>{ki(N,O[N])})}d&&xd(d,e,"c");function U(O,N){xe(N)?N.forEach(Y=>O(Y.bind(s))):N&&O(N.bind(s))}if(U(ep,u),U(We,f),U(dc,p),U(wr,b),U(Ms,y),U(Ps,E),U(ap,T),U(np,g),U(sp,w),U(Sr,x),U(xt,_),U(tp,C),xe(M))if(M.length){const O=e.exposed||(e.exposed={});M.forEach(N=>{Object.defineProperty(O,N,{get:()=>s[N],set:Y=>s[N]=Y,enumerable:!0})})}else e.exposed||(e.exposed={});S&&e.render===Ut&&(e.render=S),H!=null&&(e.inheritAttrs=H),P&&(e.components=P),R&&(e.directives=R),C&&cc(e)}function fb(e,t,s=Ut){xe(e)&&(e=wo(e));for(const n in e){const a=e[n];let i;Qe(a)?"default"in a?i=Ns(a.from||n,a.default,!0):i=Ns(a.from||n):i=Ns(a),St(i)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>i.value,set:l=>i.value=l}):t[n]=i}}function xd(e,t,s){_s(xe(e)?e.map(n=>n.bind(t.proxy)):e.bind(t.proxy),t,s)}function rp(e,t,s,n){let a=n.includes(".")?Gf(s,n):()=>s[n];if(Me(e)){const i=t[e];Re(i)&&ts(a,i)}else if(Re(e))ts(a,e.bind(s));else if(Qe(e))if(xe(e))e.forEach(i=>rp(i,t,s,n));else{const i=Re(e.handler)?e.handler.bind(s):t[e.handler];Re(i)&&ts(a,i,e)}}function hc(e){const t=e.type,{mixins:s,extends:n}=t,{mixins:a,optionsCache:i,config:{optionMergeStrategies:l}}=e.appContext,r=i.get(t);let o;return r?o=r:!a.length&&!s&&!n?o=t:(o={},a.length&&a.forEach(c=>Ul(o,c,l,!0)),Ul(o,t,l)),Qe(t)&&i.set(t,o),o}function Ul(e,t,s,n=!1){const{mixins:a,extends:i}=t;i&&Ul(e,i,s,!0),a&&a.forEach(l=>Ul(e,l,s,!0));for(const l in t)if(!(n&&l==="expose")){const r=pb[l]||s&&s[l];e[l]=r?r(e[l],t[l]):t[l]}return e}const pb={data:_d,props:kd,emits:kd,methods:vi,computed:vi,beforeCreate:Jt,created:Jt,beforeMount:Jt,mounted:Jt,beforeUpdate:Jt,updated:Jt,beforeDestroy:Jt,beforeUnmount:Jt,destroyed:Jt,unmounted:Jt,activated:Jt,deactivated:Jt,errorCaptured:Jt,serverPrefetch:Jt,components:vi,directives:vi,watch:mb,provide:_d,inject:hb};function _d(e,t){return t?e?function(){return ze(Re(e)?e.call(this,this):e,Re(t)?t.call(this,this):t)}:t:e}function hb(e,t){return vi(wo(e),wo(t))}function wo(e){if(xe(e)){const t={};for(let s=0;s{let d,u=je,f;return qf(()=>{const p=e[a];Lt(d,p)&&(d=p,c())}),{get(){return o(),s.get?s.get(d):d},set(p){const b=s.set?s.set(p):p;if(!Lt(b,d)&&!(u!==je&&Lt(p,u)))return;const y=n.vnode.props,E=!!(y&&(t in y||a in y||i in y)&&(`onUpdate:${t}`in y||`onUpdate:${a}`in y||`onUpdate:${i}`in y));E||(d=p,c()),n.emit(`update:${t}`,b),Lt(p,u)&&(Lt(p,b)&&!Lt(b,f)||E&&u!==je&&!Lt(b,d))&&c(),u=p,f=b}}});return r[Symbol.iterator]=()=>{let o=0;return{next(){return o<2?{value:o++?l||je:r,done:!1}:{done:!0}}}},r}const cp=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${it(t)}Modifiers`]||e[`${hs(t)}Modifiers`];function yb(e,t,...s){if(e.isUnmounted)return;const n=e.vnode.props||je;let a=s;const i=t.startsWith("update:"),l=i&&cp(n,t.slice(7));l&&(l.trim&&(a=s.map(d=>Me(d)?d.trim():d)),l.number&&(a=s.map(pr)));let r,o=n[r=La(t)]||n[r=La(it(t))];!o&&i&&(o=n[r=La(hs(t))]),o&&_s(o,e,6,a);const c=n[r+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[r])return;e.emitted[r]=!0,_s(c,e,6,a)}}const xb=new WeakMap;function dp(e,t,s=!1){const n=s?xb:t.emitsCache,a=n.get(e);if(a!==void 0)return a;const i=e.emits;let l={},r=!1;if(!Re(e)){const o=c=>{const d=dp(c,t,!0);d&&(r=!0,ze(l,d))};!s&&t.mixins.length&&t.mixins.forEach(o),e.extends&&o(e.extends),e.mixins&&e.mixins.forEach(o)}return!i&&!r?(Qe(e)&&n.set(e,null),null):(xe(i)?i.forEach(o=>l[o]=null):ze(l,i),Qe(e)&&n.set(e,l),l)}function Tr(e,t){return!e||!oa(t)?!1:(t=t.slice(2).replace(/Once$/,""),et(e,t[0].toLowerCase()+t.slice(1))||et(e,hs(t))||et(e,t))}function Cl(e){const{type:t,vnode:s,proxy:n,withProxy:a,propsOptions:[i],slots:l,attrs:r,emit:o,render:c,renderCache:d,props:u,data:f,setupState:p,ctx:b,inheritAttrs:y}=e,E=Pi(e);let I,x;try{if(s.shapeFlag&4){const _=a||n,S=_;I=ps(c.call(S,_,d,u,p,f,b)),x=r}else{const _=t;I=ps(_.length>1?_(u,{attrs:r,slots:l,emit:o}):_(u,null)),x=t.props?r:kb(r)}}catch(_){Si.length=0,ua(_,e,1),I=ft(yt)}let m=I;if(x&&y!==!1){const _=Object.keys(x),{shapeFlag:S}=m;_.length&&S&7&&(i&&_.some(cr)&&(x=wb(x,i)),m=an(m,x,!1,!0))}return s.dirs&&(m=an(m,null,!1,!0),m.dirs=m.dirs?m.dirs.concat(s.dirs):s.dirs),s.transition&&En(m,s.transition),I=m,Pi(E),I}function _b(e,t=!0){let s;for(let n=0;n{let t;for(const s in e)(s==="class"||s==="style"||oa(s))&&((t||(t={}))[s]=e[s]);return t},wb=(e,t)=>{const s={};for(const n in e)(!cr(n)||!(n.slice(9)in t))&&(s[n]=e[n]);return s};function Sb(e,t,s){const{props:n,children:a,component:i}=e,{props:l,children:r,patchFlag:o}=t,c=i.emitsOptions;if(t.dirs||t.transition)return!0;if(s&&o>=0){if(o&1024)return!0;if(o&16)return n?wd(n,l,c):!!l;if(o&8){const d=t.dynamicProps;for(let u=0;uObject.create(fp),hp=e=>Object.getPrototypeOf(e)===fp;function Tb(e,t,s,n=!1){const a={},i=pp();e.propsDefaults=Object.create(null),mp(e,t,a,i);for(const l in e.propsOptions[0])l in a||(a[l]=void 0);s?e.props=n?a:sc(a):e.type.props?e.props=a:e.props=i,e.attrs=i}function Cb(e,t,s,n){const{props:a,attrs:i,vnode:{patchFlag:l}}=e,r=Je(a),[o]=e.propsOptions;let c=!1;if((n||l>0)&&!(l&16)){if(l&8){const d=e.vnode.dynamicProps;for(let u=0;u{o=!0;const[f,p]=gp(u,t,!0);ze(l,f),p&&r.push(...p)};!s&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!i&&!o)return Qe(e)&&n.set(e,Oa),Oa;if(xe(i))for(let d=0;de==="_"||e==="_ctx"||e==="$stable",gc=e=>xe(e)?e.map(ps):[ps(e)],Ab=(e,t,s)=>{if(t._n)return t;const n=lc((...a)=>gc(t(...a)),s);return n._c=!1,n},vp=(e,t,s)=>{const n=e._ctx;for(const a in e){if(mc(a))continue;const i=e[a];if(Re(i))t[a]=Ab(a,i,n);else if(i!=null){const l=gc(i);t[a]=()=>l}}},bp=(e,t)=>{const s=gc(t);e.slots.default=()=>s},yp=(e,t,s)=>{for(const n in t)(s||!mc(n))&&(e[n]=t[n])},Rb=(e,t,s)=>{const n=e.slots=pp();if(e.vnode.shapeFlag&32){const a=t._;a?(yp(n,t,s),s&&uf(n,"_",a,!0)):vp(t,n)}else t&&bp(e,t)},Ib=(e,t,s)=>{const{vnode:n,slots:a}=e;let i=!0,l=je;if(n.shapeFlag&32){const r=t._;r?s&&r===1?i=!1:yp(a,t,s):(i=!t.$stable,vp(t,a)),l=t}else t&&(bp(e,t),l={default:1});if(i)for(const r in a)!mc(r)&&l[r]==null&&delete a[r]},kt=Ep;function xp(e){return kp(e)}function _p(e){return kp(e,Rv)}function kp(e,t){const s=hr();s.__VUE__=!0;const{insert:n,remove:a,patchProp:i,createElement:l,createText:r,createComment:o,setText:c,setElementText:d,parentNode:u,nextSibling:f,setScopeId:p=Ut,insertStaticContent:b}=e,y=(k,L,$,ee=null,Z=null,X=null,ue=void 0,oe=null,le=!!L.dynamicChildren)=>{if(k===L)return;k&&!Hs(k,L)&&(ee=V(k),ie(k,Z,X,!0),k=null),L.patchFlag===-2&&(le=!1,L.dynamicChildren=null);const{type:te,ref:ne,shapeFlag:fe}=L;switch(te){case Bn:E(k,L,$,ee);break;case yt:I(k,L,$,ee);break;case ta:k==null&&x(L,$,ee,ue);break;case Dt:P(k,L,$,ee,Z,X,ue,oe,le);break;default:fe&1?S(k,L,$,ee,Z,X,ue,oe,le):fe&6?R(k,L,$,ee,Z,X,ue,oe,le):(fe&64||fe&128)&&te.process(k,L,$,ee,Z,X,ue,oe,le,_e)}ne!=null&&Z?Pa(ne,k&&k.ref,X,L||k,!L):ne==null&&k&&k.ref!=null&&Pa(k.ref,null,X,k,!0)},E=(k,L,$,ee)=>{if(k==null)n(L.el=r(L.children),$,ee);else{const Z=L.el=k.el;L.children!==k.children&&c(Z,L.children)}},I=(k,L,$,ee)=>{k==null?n(L.el=o(L.children||""),$,ee):L.el=k.el},x=(k,L,$,ee)=>{[k.el,k.anchor]=b(k.children,L,$,ee,k.el,k.anchor)},m=({el:k,anchor:L},$,ee)=>{let Z;for(;k&&k!==L;)Z=f(k),n(k,$,ee),k=Z;n(L,$,ee)},_=({el:k,anchor:L})=>{let $;for(;k&&k!==L;)$=f(k),a(k),k=$;a(L)},S=(k,L,$,ee,Z,X,ue,oe,le)=>{if(L.type==="svg"?ue="svg":L.type==="math"&&(ue="mathml"),k==null)g(L,$,ee,Z,X,ue,oe,le);else{const te=k.el&&k.el._isVueCE?k.el:null;try{te&&te._beginPatch(),C(k,L,Z,X,ue,oe,le)}finally{te&&te._endPatch()}}},g=(k,L,$,ee,Z,X,ue,oe)=>{let le,te;const{props:ne,shapeFlag:fe,transition:be,dirs:Te}=k;if(le=k.el=l(k.type,X,ne&&ne.is,ne),fe&8?d(le,k.children):fe&16&&T(k.children,le,null,ee,Z,Kr(k,X),ue,oe),Te&&en(k,null,ee,"created"),w(le,k,k.scopeId,ue,ee),ne){for(const Le in ne)Le!=="value"&&!xn(Le)&&i(le,Le,null,ne[Le],X,ee);"value"in ne&&i(le,"value",null,ne.value,X),(te=ne.onVnodeBeforeMount)&&us(te,ee,k)}Te&&en(k,null,ee,"beforeMount");const Ie=wp(Z,be);Ie&&be.beforeEnter(le),n(le,L,$),((te=ne&&ne.onVnodeMounted)||Ie||Te)&&kt(()=>{try{te&&us(te,ee,k),Ie&&be.enter(le),Te&&en(k,null,ee,"mounted")}finally{}},Z)},w=(k,L,$,ee,Z)=>{if($&&p(k,$),ee)for(let X=0;X{for(let te=le;te{const oe=L.el=k.el;let{patchFlag:le,dynamicChildren:te,dirs:ne}=L;le|=k.patchFlag&16;const fe=k.props||je,be=L.props||je;let Te;if($&&jn($,!1),(Te=be.onVnodeBeforeUpdate)&&us(Te,$,L,k),ne&&en(L,k,$,"beforeUpdate"),$&&jn($,!0),(fe.innerHTML&&be.innerHTML==null||fe.textContent&&be.textContent==null)&&d(oe,""),te?M(k.dynamicChildren,te,oe,$,ee,Kr(L,Z),X):ue||N(k,L,oe,null,$,ee,Kr(L,Z),X,!1),le>0){if(le&16)H(oe,fe,be,$,Z);else if(le&2&&fe.class!==be.class&&i(oe,"class",null,be.class,Z),le&4&&i(oe,"style",fe.style,be.style,Z),le&8){const Ie=L.dynamicProps;for(let Le=0;Le{Te&&us(Te,$,L,k),ne&&en(L,k,$,"updated")},ee)},M=(k,L,$,ee,Z,X,ue)=>{for(let oe=0;oe{if(L!==$){if(L!==je)for(const X in L)!xn(X)&&!(X in $)&&i(k,X,L[X],null,Z,ee);for(const X in $){if(xn(X))continue;const ue=$[X],oe=L[X];ue!==oe&&X!=="value"&&i(k,X,oe,ue,Z,ee)}"value"in $&&i(k,"value",L.value,$.value,Z)}},P=(k,L,$,ee,Z,X,ue,oe,le)=>{const te=L.el=k?k.el:r(""),ne=L.anchor=k?k.anchor:r("");let{patchFlag:fe,dynamicChildren:be,slotScopeIds:Te}=L;Te&&(oe=oe?oe.concat(Te):Te),k==null?(n(te,$,ee),n(ne,$,ee),T(L.children||[],$,ne,Z,X,ue,oe,le)):fe>0&&fe&64&&be&&k.dynamicChildren&&k.dynamicChildren.length===be.length?(M(k.dynamicChildren,be,$,Z,X,ue,oe),(L.key!=null||Z&&L===Z.subTree)&&vc(k,L,!0)):N(k,L,$,ne,Z,X,ue,oe,le)},R=(k,L,$,ee,Z,X,ue,oe,le)=>{L.slotScopeIds=oe,k==null?L.shapeFlag&512?Z.ctx.activate(L,$,ee,ue,le):j(L,$,ee,Z,X,ue,le):Q(k,L,le)},j=(k,L,$,ee,Z,X,ue)=>{const oe=k.component=Dp(k,ee,Z);if(el(k)&&(oe.ctx.renderer=_e),Pp(oe,!1,ue),oe.asyncDep){if(Z&&Z.registerDep(oe,U,ue),!k.el){const le=oe.subTree=ft(yt);I(null,le,L,$),k.placeholder=le.el}}else U(oe,k,L,$,Z,X,ue)},Q=(k,L,$)=>{const ee=L.component=k.component;if(Sb(k,L,$))if(ee.asyncDep&&!ee.asyncResolved){O(ee,L,$);return}else ee.next=L,ee.update();else L.el=k.el,ee.vnode=L},U=(k,L,$,ee,Z,X,ue)=>{const oe=()=>{if(k.isMounted){let{next:fe,bu:be,u:Te,parent:Ie,vnode:Le}=k;{const G=Sp(k);if(G){fe&&(fe.el=Le.el,O(k,fe,ue)),G.asyncDep.then(()=>{kt(()=>{k.isUnmounted||te()},Z)});return}}let De=fe,Be;jn(k,!1),fe?(fe.el=Le.el,O(k,fe,ue)):fe=Le,be&&Da(be),(Be=fe.props&&fe.props.onVnodeBeforeUpdate)&&us(Be,Ie,fe,Le),jn(k,!0);const qe=Cl(k),ct=k.subTree;k.subTree=qe,y(ct,qe,u(ct.el),V(ct),k,Z,X),fe.el=qe.el,De===null&&Cr(k,qe.el),Te&&kt(Te,Z),(Be=fe.props&&fe.props.onVnodeUpdated)&&kt(()=>us(Be,Ie,fe,Le),Z)}else{let fe;const{el:be,props:Te}=L,{bm:Ie,m:Le,parent:De,root:Be,type:qe}=k,ct=kn(L);if(jn(k,!1),Ie&&Da(Ie),!ct&&(fe=Te&&Te.onVnodeBeforeMount)&&us(fe,De,L),jn(k,!0),be&&He){const G=()=>{k.subTree=Cl(k),He(be,k.subTree,k,Z,null)};ct&&qe.__asyncHydrate?qe.__asyncHydrate(be,k,G):G()}else{Be.ce&&Be.ce._hasShadowRoot()&&Be.ce._injectChildStyle(qe,k.parent?k.parent.type:void 0);const G=k.subTree=Cl(k);y(null,G,$,ee,k,Z,X),L.el=G.el}if(Le&&kt(Le,Z),!ct&&(fe=Te&&Te.onVnodeMounted)){const G=L;kt(()=>us(fe,De,G),Z)}(L.shapeFlag&256||De&&kn(De.vnode)&&De.vnode.shapeFlag&256)&&k.a&&kt(k.a,Z),k.isMounted=!0,L=$=ee=null}};k.scope.on();const le=k.effect=new Oi(oe);k.scope.off();const te=k.update=le.run.bind(le),ne=k.job=le.runIfDirty.bind(le);ne.i=k,ne.id=k.uid,le.scheduler=()=>ic(ne),jn(k,!0),te()},O=(k,L,$)=>{L.component=k;const ee=k.vnode.props;k.vnode=L,k.next=null,Cb(k,L.props,ee,$),Ib(k,L.children,$),Tn(),ud(k),Cn()},N=(k,L,$,ee,Z,X,ue,oe,le=!1)=>{const te=k&&k.children,ne=k?k.shapeFlag:0,fe=L.children,{patchFlag:be,shapeFlag:Te}=L;if(be>0){if(be&128){we(te,fe,$,ee,Z,X,ue,oe,le);return}else if(be&256){Y(te,fe,$,ee,Z,X,ue,oe,le);return}}Te&8?(ne&16&&Se(te,Z,X),fe!==te&&d($,fe)):ne&16?Te&16?we(te,fe,$,ee,Z,X,ue,oe,le):Se(te,Z,X,!0):(ne&8&&d($,""),Te&16&&T(fe,$,ee,Z,X,ue,oe,le))},Y=(k,L,$,ee,Z,X,ue,oe,le)=>{k=k||Oa,L=L||Oa;const te=k.length,ne=L.length,fe=Math.min(te,ne);let be;for(be=0;bene?Se(k,Z,X,!0,!1,fe):T(L,$,ee,Z,X,ue,oe,le,fe)},we=(k,L,$,ee,Z,X,ue,oe,le)=>{let te=0;const ne=L.length;let fe=k.length-1,be=ne-1;for(;te<=fe&&te<=be;){const Te=k[te],Ie=L[te]=le?pn(L[te]):ps(L[te]);if(Hs(Te,Ie))y(Te,Ie,$,null,Z,X,ue,oe,le);else break;te++}for(;te<=fe&&te<=be;){const Te=k[fe],Ie=L[be]=le?pn(L[be]):ps(L[be]);if(Hs(Te,Ie))y(Te,Ie,$,null,Z,X,ue,oe,le);else break;fe--,be--}if(te>fe){if(te<=be){const Te=be+1,Ie=Tebe)for(;te<=fe;)ie(k[te],Z,X,!0),te++;else{const Te=te,Ie=te,Le=new Map;for(te=Ie;te<=be;te++){const Ne=L[te]=le?pn(L[te]):ps(L[te]);Ne.key!=null&&Le.set(Ne.key,te)}let De,Be=0;const qe=be-Ie+1;let ct=!1,G=0;const me=new Array(qe);for(te=0;te=qe){ie(Ne,Z,X,!0);continue}let Pe;if(Ne.key!=null)Pe=Le.get(Ne.key);else for(De=Ie;De<=be;De++)if(me[De-Ie]===0&&Hs(Ne,L[De])){Pe=De;break}Pe===void 0?ie(Ne,Z,X,!0):(me[Pe-Ie]=te+1,Pe>=G?G=Pe:ct=!0,y(Ne,L[Pe],$,null,Z,X,ue,oe,le),Be++)}const Ce=ct?Ob(me):Oa;for(De=Ce.length-1,te=qe-1;te>=0;te--){const Ne=Ie+te,Pe=L[Ne],Ve=L[Ne+1],pt=Ne+1{const{el:X,type:ue,transition:oe,children:le,shapeFlag:te}=k;if(te&6){ke(k.component.subTree,L,$,ee);return}if(te&128){k.suspense.move(L,$,ee);return}if(te&64){ue.move(k,L,$,_e);return}if(ue===Dt){n(X,L,$);for(let fe=0;feoe.enter(X),Z));else{const{leave:fe,delayLeave:be,afterLeave:Te}=oe,Ie=()=>{k.ctx.isUnmounted?a(X):n(X,L,$)},Le=()=>{const De=X._isLeaving||!!X[Rs];X._isLeaving&&X[Rs](!0),oe.persisted&&!De?Ie():fe(X,()=>{Ie(),Te&&Te()})};be?be(X,Ie,Le):Le()}else n(X,L,$)},ie=(k,L,$,ee=!1,Z=!1)=>{const{type:X,props:ue,ref:oe,children:le,dynamicChildren:te,shapeFlag:ne,patchFlag:fe,dirs:be,cacheIndex:Te,memo:Ie}=k;if(fe===-2&&(Z=!1),oe!=null&&(Tn(),Pa(oe,null,$,k,!0),Cn()),Te!=null&&(L.renderCache[Te]=void 0),ne&256){L.ctx.deactivate(k);return}const Le=ne&1&&be,De=!kn(k);let Be;if(De&&(Be=ue&&ue.onVnodeBeforeUnmount)&&us(Be,L,k),ne&6)se(k.component,$,ee);else{if(ne&128){k.suspense.unmount($,ee);return}Le&&en(k,null,L,"beforeUnmount"),ne&64?k.type.remove(k,L,$,_e,ee):te&&!te.hasOnce&&(X!==Dt||fe>0&&fe&64)?Se(te,L,$,!1,!0):(X===Dt&&fe&384||!Z&&ne&16)&&Se(le,L,$),ee&&pe(k)}const qe=Ie!=null&&Te==null;(De&&(Be=ue&&ue.onVnodeUnmounted)||Le||qe)&&kt(()=>{Be&&us(Be,L,k),Le&&en(k,null,L,"unmounted"),qe&&(k.el=null)},$)},pe=k=>{const{type:L,el:$,anchor:ee,transition:Z}=k;if(L===Dt){F($,ee);return}if(L===ta){_(k);return}const X=()=>{a($),Z&&!Z.persisted&&Z.afterLeave&&Z.afterLeave()};if(k.shapeFlag&1&&Z&&!Z.persisted){const{leave:ue,delayLeave:oe}=Z,le=()=>ue($,X);oe?oe(k.el,X,le):le()}else X()},F=(k,L)=>{let $;for(;k!==L;)$=f(k),a(k),k=$;a(L)},se=(k,L,$)=>{const{bum:ee,scope:Z,job:X,subTree:ue,um:oe,m:le,a:te}=k;Hl(le),Hl(te),ee&&Da(ee),Z.stop(),X&&(X.flags|=8,ie(ue,k,L,$)),oe&&kt(oe,L),kt(()=>{k.isUnmounted=!0},L)},Se=(k,L,$,ee=!1,Z=!1,X=0)=>{for(let ue=X;ue{if(k.shapeFlag&6)return V(k.component.subTree);if(k.shapeFlag&128)return k.suspense.next();const L=f(k.anchor||k.el),$=L&&L[Kf];return $?f($):L};let de=!1;const ce=(k,L,$)=>{let ee;k==null?L._vnode&&(ie(L._vnode,null,null,!0),ee=L._vnode.component):y(L._vnode||null,k,L,null,null,null,$),L._vnode=k,de||(de=!0,ud(ee),$l(),de=!1)},_e={p:y,um:ie,m:ke,r:pe,mt:j,mc:T,pc:N,pbc:M,n:V,o:e};let ve,He;return t&&([ve,He]=t(_e)),{render:ce,hydrate:ve,createApp:vb(ce,ve)}}function Kr({type:e,props:t},s){return s==="svg"&&e==="foreignObject"||s==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:s}function jn({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function wp(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function vc(e,t,s=!1){const n=e.children,a=t.children;if(xe(n)&&xe(a))for(let i=0;i>1,e[s[r]]0&&(t[n]=s[i-1]),s[i]=n)}}for(i=s.length,l=s[i-1];i-- >0;)s[i]=l,l=t[l];return s}function Sp(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Sp(t)}function Hl(e){if(e)for(let t=0;te.__isSuspense;let To=0;const Nb={name:"Suspense",__isSuspense:!0,process(e,t,s,n,a,i,l,r,o,c){if(e==null)Db(t,s,n,a,i,l,r,o,c);else{if(i&&i.deps>0&&!e.suspense.isInFallback){t.suspense=e.suspense,t.suspense.vnode=t,t.el=e.el;return}Mb(e,t,s,n,a,l,r,o,c)}},hydrate:Pb,normalize:Fb},Lb=Nb;function $i(e,t){const s=e.props&&e.props[t];Re(s)&&s()}function Db(e,t,s,n,a,i,l,r,o){const{p:c,o:{createElement:d}}=o,u=d("div"),f=e.suspense=Cp(e,a,n,t,u,s,i,l,r,o);c(null,f.pendingBranch=e.ssContent,u,null,n,f,i,l),f.deps>0?($i(e,"onPending"),$i(e,"onFallback"),c(null,e.ssFallback,t,s,n,null,i,l),Fa(f,e.ssFallback)):f.resolve(!1,!0)}function Mb(e,t,s,n,a,i,l,r,{p:o,um:c,o:{createElement:d}}){const u=t.suspense=e.suspense;u.vnode=t,t.el=e.el;const f=t.ssContent,p=t.ssFallback,{activeBranch:b,pendingBranch:y,isInFallback:E,isHydrating:I}=u;if(y)u.pendingBranch=f,Hs(y,f)?(o(y,f,u.hiddenContainer,null,a,u,i,l,r),u.deps<=0?u.resolve():E&&(I||(o(b,p,s,n,a,null,i,l,r),Fa(u,p)))):(u.pendingId=To++,I?(u.isHydrating=!1,u.activeBranch=y):c(y,a,u),u.deps=0,u.effects.length=0,u.hiddenContainer=d("div"),E?(o(null,f,u.hiddenContainer,null,a,u,i,l,r),u.deps<=0?u.resolve():(o(b,p,s,n,a,null,i,l,r),Fa(u,p))):b&&Hs(b,f)?(o(b,f,s,n,a,u,i,l,r),u.resolve(!0)):(o(null,f,u.hiddenContainer,null,a,u,i,l,r),u.deps<=0&&u.resolve()));else if(b&&Hs(b,f))o(b,f,s,n,a,u,i,l,r),Fa(u,f);else if($i(t,"onPending"),u.pendingBranch=f,f.shapeFlag&512?u.pendingId=f.component.suspenseId:u.pendingId=To++,o(null,f,u.hiddenContainer,null,a,u,i,l,r),u.deps<=0)u.resolve();else{const{timeout:x,pendingId:m}=u;x>0?setTimeout(()=>{u.pendingId===m&&u.fallback(p)},x):x===0&&u.fallback(p)}}function Cp(e,t,s,n,a,i,l,r,o,c,d=!1){const{p:u,m:f,um:p,n:b,o:{parentNode:y,remove:E}}=c;let I;const x=$b(e);x&&t&&t.pendingBranch&&(I=t.pendingId,t.deps++);const m=e.props?Ll(e.props.timeout):void 0,_=i,S={vnode:e,parent:t,parentComponent:s,namespace:l,container:n,hiddenContainer:a,deps:0,pendingId:To++,timeout:typeof m=="number"?m:-1,activeBranch:null,isFallbackMountPending:!1,pendingBranch:null,isInFallback:!d,isHydrating:d,isUnmounted:!1,effects:[],resolve(g=!1,w=!1){const{vnode:T,activeBranch:C,pendingBranch:M,pendingId:H,effects:P,parentComponent:R,container:j,isInFallback:Q}=S;let U=!1;if(S.isHydrating)S.isHydrating=!1;else if(!g){U=C&&M.transition&&M.transition.mode==="out-in";let Y=!1;U&&(C.transition.afterLeave=()=>{H===S.pendingId&&(f(M,j,i===_&&!Y?b(C):i,0),Di(P),Q&&T.ssFallback&&(T.ssFallback.el=null))}),C&&!S.isFallbackMountPending&&(y(C.el)===j&&(i=b(C),Y=!0),p(C,R,S,!0),!U&&Q&&T.ssFallback&&kt(()=>T.ssFallback.el=null,S)),U||f(M,j,i,0)}S.isFallbackMountPending=!1,Fa(S,M),S.pendingBranch=null,S.isInFallback=!1;let O=S.parent,N=!1;for(;O;){if(O.pendingBranch){O.effects.push(...P),N=!0;break}O=O.parent}!N&&!U&&Di(P),S.effects=[],x&&t&&t.pendingBranch&&I===t.pendingId&&(t.deps--,t.deps===0&&!w&&t.resolve()),$i(T,"onResolve")},fallback(g){if(!S.pendingBranch)return;const{vnode:w,activeBranch:T,parentComponent:C,container:M,namespace:H}=S;$i(w,"onFallback");const P=b(T),R=()=>{S.isFallbackMountPending=!1,S.isInFallback&&(u(null,g,M,P,C,null,H,r,o),Fa(S,g))},j=g.transition&&g.transition.mode==="out-in";j&&(S.isFallbackMountPending=!0,T.transition.afterLeave=R),S.isInFallback=!0,p(T,C,null,!0),j||R()},move(g,w,T){S.activeBranch&&f(S.activeBranch,g,w,T),S.container=g},next(){return S.activeBranch&&b(S.activeBranch)},registerDep(g,w,T){const C=!!S.pendingBranch;C&&S.deps++;const M=g.vnode.el;g.asyncDep.catch(H=>{ua(H,g,0)}).then(H=>{if(g.isUnmounted||S.isUnmounted||S.pendingId!==g.suspenseId)return;Hi(),g.asyncResolved=!0;const{vnode:P}=g;Co(g,H,!1),M&&(P.el=M);const R=!M&&g.subTree.el;w(g,P,y(M||g.subTree.el),M?null:b(g.subTree),S,l,T),R&&(P.placeholder=null,E(R)),Cr(g,P.el),C&&--S.deps===0&&S.resolve()})},unmount(g,w){S.isUnmounted=!0,S.activeBranch&&p(S.activeBranch,s,g,w),S.pendingBranch&&p(S.pendingBranch,s,g,w)}};return S}function Pb(e,t,s,n,a,i,l,r,o){const c=t.suspense=Cp(t,n,s,e.parentNode,document.createElement("div"),null,a,i,l,r,!0),d=o(e,c.pendingBranch=t.ssContent,s,c,i,l);return c.deps===0&&c.resolve(!1,!0),d}function Fb(e){const{shapeFlag:t,children:s}=e,n=t&32;e.ssContent=Td(n?s.default:s),e.ssFallback=n?Td(s.fallback):ft(yt)}function Td(e){let t;if(Re(e)){const s=aa&&e._c;s&&(e._d=!1,Bi()),e=e(),s&&(e._d=!0,t=Gt,Ap())}return xe(e)&&(e=_b(e)),e=ps(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter(s=>s!==e)),e}function Ep(e,t){t&&t.pendingBranch?xe(e)?t.effects.push(...e):t.effects.push(e):Di(e)}function Fa(e,t){e.activeBranch=t;const{vnode:s,parentComponent:n}=e;let a=t.el;for(;!a&&t.component;)t=t.component.subTree,a=t.el;s.el=a,n&&n.subTree===s&&(n.vnode.el=a,Cr(n,a))}function $b(e){const t=e.props&&e.props.suspensible;return t!=null&&t!==!1}const Dt=Symbol.for("v-fgt"),Bn=Symbol.for("v-txt"),yt=Symbol.for("v-cmt"),ta=Symbol.for("v-stc"),Si=[];let Gt=null;function Bi(e=!1){Si.push(Gt=e?null:[])}function Ap(){Si.pop(),Gt=Si[Si.length-1]||null}let aa=1;function Ui(e,t=!1){aa+=e,e<0&&Gt&&t&&(Gt.hasOnce=!0)}function Rp(e){return e.dynamicChildren=aa>0?Gt||Oa:null,Ap(),aa>0&&Gt&&Gt.push(e),e}function Bb(e,t,s,n,a,i){return Rp(bc(e,t,s,n,a,i,!0))}function Vl(e,t,s,n,a){return Rp(ft(e,t,s,n,a,!0))}function An(e){return e?e.__v_isVNode===!0:!1}function Hs(e,t){return e.type===t.type&&e.key===t.key}function Ub(e){}const Ip=({key:e})=>e??null,El=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?Me(e)||St(e)||Re(e)?{i:Bt,r:e,k:t,f:!!s}:e:null);function bc(e,t=null,s=null,n=0,a=null,i=e===Dt?0:1,l=!1,r=!1){const o={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Ip(t),ref:t&&El(t),scopeId:xr,slotScopeIds:null,children:s,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:n,dynamicProps:a,dynamicChildren:null,appContext:null,ctx:Bt};return r?(xc(o,s),i&128&&e.normalize(o)):s&&(o.shapeFlag|=Me(s)?8:16),aa>0&&!l&&Gt&&(o.patchFlag>0||i&6)&&o.patchFlag!==32&&Gt.push(o),o}const ft=Hb;function Hb(e,t=null,s=null,n=0,a=null,i=!1){if((!e||e===ip)&&(e=yt),An(e)){const r=an(e,t,!0);return s&&xc(r,s),aa>0&&!i&&Gt&&(r.shapeFlag&6?Gt[Gt.indexOf(e)]=r:Gt.push(r)),r.patchFlag=-2,r}if(Wb(e)&&(e=e.__vccOpts),t){t=Op(t);let{class:r,style:o}=t;r&&!Me(r)&&(t.class=Ji(r)),Qe(o)&&(Yi(o)&&!xe(o)&&(o=ze({},o)),t.style=Zi(o))}const l=Me(e)?1:zl(e)?128:Wf(e)?64:Qe(e)?4:Re(e)?2:0;return bc(e,t,s,n,a,l,i,!0)}function Op(e){return e?Yi(e)||hp(e)?ze({},e):e:null}function an(e,t,s=!1,n=!1){const{props:a,ref:i,patchFlag:l,children:r,transition:o}=e,c=t?Lp(a||{},t):a,d={__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&Ip(c),ref:t&&t.ref?s&&i?xe(i)?i.concat(El(t)):[i,El(t)]:El(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:r,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Dt?l===-1?16:l|16:l,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:o,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&an(e.ssContent),ssFallback:e.ssFallback&&an(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return o&&n&&En(d,o.clone(d)),d}function yc(e=" ",t=0){return ft(Bn,null,e,t)}function zb(e,t){const s=ft(ta,null,e);return s.staticCount=t,s}function Np(e="",t=!1){return t?(Bi(),Vl(yt,null,e)):ft(yt,null,e)}function ps(e){return e==null||typeof e=="boolean"?ft(yt):xe(e)?ft(Dt,null,e.slice()):An(e)?pn(e):ft(Bn,null,String(e))}function pn(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:an(e)}function xc(e,t){let s=0;const{shapeFlag:n}=e;if(t==null)t=null;else if(xe(t))s=16;else if(typeof t=="object")if(n&65){const a=t.default;a&&(a._c&&(a._d=!1),xc(e,a()),a._c&&(a._d=!0));return}else{s=32;const a=t._;!a&&!hp(t)?t._ctx=Bt:a===3&&Bt&&(Bt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else Re(t)?(t={default:t,_ctx:Bt},s=32):(t=String(t),n&64?(s=16,t=[yc(t)]):s=8);e.children=t,e.shapeFlag|=s}function Lp(...e){const t={};for(let s=0;s$t||Bt;let jl,$a;{const e=hr(),t=(s,n)=>{let a;return(a=e[s])||(a=e[s]=[]),a.push(n),i=>{a.length>1?a.forEach(l=>l(i)):a[0](i)}};jl=t("__VUE_INSTANCE_SETTERS__",s=>$t=s),$a=t("__VUE_SSR_SETTERS__",s=>ia=s)}const ti=e=>{const t=$t;return jl(e),e.scope.on(),()=>{e.scope.off(),jl(t)}},Hi=()=>{$t&&$t.scope.off(),jl(null)};function Mp(e){return e.vnode.shapeFlag&4}let ia=!1;function Pp(e,t=!1,s=!1){t&&$a(t);const{props:n,children:a}=e.vnode,i=Mp(e);Tb(e,n,i,t),Rb(e,a,s||t);const l=i?qb(e,t):void 0;return t&&$a(!1),l}function qb(e,t){const s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,_o);const{setup:n}=s;if(n){Tn();const a=e.setupContext=n.length>1?Bp(e):null,i=ti(e),l=ei(n,e,0,[e.props,a]),r=Yo(l);if(Cn(),i(),(r||e.sp)&&!kn(e)&&cc(e),r){if(l.then(Hi,Hi),t)return l.then(o=>{Co(e,o,t)}).catch(o=>{ua(o,e,0)});e.asyncDep=l}else Co(e,l,t)}else $p(e,t)}function Co(e,t,s){Re(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Qe(t)&&(e.setupState=ac(t)),$p(e,s)}let ql,Eo;function Fp(e){ql=e,Eo=t=>{t.render._rc&&(t.withProxy=new Proxy(t.ctx,Yv))}}const Gb=()=>!ql;function $p(e,t,s){const n=e.type;if(!e.render){if(!t&&ql&&!n.render){const a=n.template||hc(e).template;if(a){const{isCustomElement:i,compilerOptions:l}=e.appContext.config,{delimiters:r,compilerOptions:o}=n,c=ze(ze({isCustomElement:i,delimiters:r},l),o);n.render=ql(a,c)}}e.render=n.render||Ut,Eo&&Eo(e)}{const a=ti(e);Tn();try{ub(e)}finally{Cn(),a()}}}const Kb={get(e,t){return qt(e,"get",""),e[t]}};function Bp(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,Kb),slots:e.slots,emit:e.emit,expose:t}}function tl(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(ac(Lf(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in wi)return wi[s](e)},has(t,s){return s in t||s in wi}})):e.proxy}function Ao(e,t=!0){return Re(e)?e.displayName||e.name:e.name||t&&e.__name}function Wb(e){return Re(e)&&"__vccOpts"in e}const J=(e,t)=>ev(e,t,ia);function Va(e,t,s){try{Ui(-1);const n=arguments.length;return n===2?Qe(t)&&!xe(t)?An(t)?ft(e,null,[t]):ft(e,t):ft(e,null,t):(n>3?s=Array.prototype.slice.call(arguments,2):n===3&&An(s)&&(s=[s]),ft(e,t,s))}finally{Ui(1)}}function Zb(){}function Jb(e,t,s,n){const a=s[n];if(a&&Up(a,e))return a;const i=t();return i.memo=e.slice(),i.cacheIndex=n,s[n]=i}function Up(e,t){const s=e.memo;if(s.length!=t.length)return!1;for(let n=0;n0&&Gt&&Gt.push(e),!0}const Hp="3.5.38",Yb=Ut,Qb=cv,Xb=Ca,ey=zf,ty={createComponentInstance:Dp,setupComponent:Pp,renderComponentRoot:Cl,setCurrentRenderingInstance:Pi,isVNode:An,normalizeVNode:ps,getComponentPublicInstance:tl,ensureValidVNode:pc,pushWarningContext:iv,popWarningContext:lv},sy=ty,ny=null,ay=null,iy=null;/** * @vue/runtime-dom v3.5.38 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/let Ro;const Cd=typeof window<"u"&&window.trustedTypes;if(Cd)try{Ro=Cd.createPolicy("vue",{createHTML:e=>e})}catch{}const zp=Ro?e=>Ro.createHTML(e):e=>e,ly="http://www.w3.org/2000/svg",ry="http://www.w3.org/1998/Math/MathML",fn=typeof document<"u"?document:null,Ed=fn&&fn.createElement("template"),Vp={insert:(e,t,s)=>{t.insertBefore(e,s||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,s,n)=>{const a=t==="svg"?fn.createElementNS(ly,e):t==="mathml"?fn.createElementNS(ry,e):s?fn.createElement(e,{is:s}):fn.createElement(e);return e==="select"&&n&&n.multiple!=null&&a.setAttribute("multiple",n.multiple),a},createText:e=>fn.createTextNode(e),createComment:e=>fn.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>fn.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,n,a,i){const l=s?s.previousSibling:t.lastChild;if(a&&(a===i||a.nextSibling))for(;t.insertBefore(a.cloneNode(!0),s),!(a===i||!(a=a.nextSibling)););else{Ed.innerHTML=zp(n==="svg"?`${e}`:n==="mathml"?`${e}`:e);const r=Ed.content;if(n==="svg"||n==="mathml"){const o=r.firstChild;for(;o.firstChild;)r.appendChild(o.firstChild);r.removeChild(o)}t.insertBefore(r,s)}return[l?l.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}},In="transition",oi="animation",ja=Symbol("_vtc"),jp={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},qp=ze({},oc,jp),oy=e=>(e.displayName="Transition",e.props=qp,e),cy=oy((e,{slots:t})=>Va(Yf,Gp(e),t)),qn=(e,t=[])=>{xe(e)?e.forEach(s=>s(...t)):e&&e(...t)},Ad=e=>e?xe(e)?e.some(t=>t.length>1):e.length>1:!1;function Gp(e){const t={};for(const P in e)P in jp||(t[P]=e[P]);if(e.css===!1)return t;const{name:s="v",type:n,duration:a,enterFromClass:i=`${s}-enter-from`,enterActiveClass:l=`${s}-enter-active`,enterToClass:r=`${s}-enter-to`,appearFromClass:o=i,appearActiveClass:c=l,appearToClass:d=r,leaveFromClass:u=`${s}-leave-from`,leaveActiveClass:f=`${s}-leave-active`,leaveToClass:p=`${s}-leave-to`}=e,b=dy(a),y=b&&b[0],E=b&&b[1],{onBeforeEnter:I,onEnter:x,onEnterCancelled:m,onLeave:_,onLeaveCancelled:S,onBeforeAppear:g=I,onAppear:w=x,onAppearCancelled:T=m}=t,C=(P,R,j,Q)=>{P._enterCancelled=Q,Dn(P,R?d:r),Dn(P,R?c:l),j&&j()},M=(P,R)=>{P._isLeaving=!1,Dn(P,u),Dn(P,p),Dn(P,f),R&&R()},H=P=>(R,j)=>{const Q=P?w:x,U=()=>C(R,P,j);qn(Q,[R,U]),Rd(()=>{Dn(R,P?o:i),Zs(R,P?d:r),Ad(Q)||Id(R,n,y,U)})};return ze(t,{onBeforeEnter(P){qn(I,[P]),Zs(P,i),Zs(P,l)},onBeforeAppear(P){qn(g,[P]),Zs(P,o),Zs(P,c)},onEnter:H(!1),onAppear:H(!0),onLeave(P,R){P._isLeaving=!0;const j=()=>M(P,R);Zs(P,u),P._enterCancelled?(Zs(P,f),Io(P)):(Io(P),Zs(P,f)),Rd(()=>{P._isLeaving&&(Dn(P,u),Zs(P,p),Ad(_)||Id(P,n,E,j))}),qn(_,[P,j])},onEnterCancelled(P){C(P,!1,void 0,!0),qn(m,[P])},onAppearCancelled(P){C(P,!0,void 0,!0),qn(T,[P])},onLeaveCancelled(P){M(P),qn(S,[P])}})}function dy(e){if(e==null)return null;if(Qe(e))return[Wr(e.enter),Wr(e.leave)];{const t=Wr(e);return[t,t]}}function Wr(e){return Ll(e)}function Zs(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.add(s)),(e[ja]||(e[ja]=new Set)).add(t)}function Dn(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.remove(n));const s=e[ja];s&&(s.delete(t),s.size||(e[ja]=void 0))}function Rd(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let uy=0;function Id(e,t,s,n){const a=e._endId=++uy,i=()=>{a===e._endId&&n()};if(s!=null)return setTimeout(i,s);const{type:l,timeout:r,propCount:o}=Kp(e,t);if(!l)return n();const c=l+"end";let d=0;const u=()=>{e.removeEventListener(c,f),i()},f=p=>{p.target===e&&++d>=o&&u()};setTimeout(()=>{d(s[b]||"").split(", "),a=n(`${In}Delay`),i=n(`${In}Duration`),l=Od(a,i),r=n(`${oi}Delay`),o=n(`${oi}Duration`),c=Od(r,o);let d=null,u=0,f=0;t===In?l>0&&(d=In,u=l,f=i.length):t===oi?c>0&&(d=oi,u=c,f=o.length):(u=Math.max(l,c),d=u>0?l>c?In:oi:null,f=d?d===In?i.length:o.length:0);const p=d===In&&/\b(?:transform|all)(?:,|$)/.test(n(`${In}Property`).toString());return{type:d,timeout:u,propCount:f,hasTransform:p}}function Od(e,t){for(;e.lengthNd(s)+Nd(e[n])))}function Nd(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Io(e){return(e?e.ownerDocument:document).body.offsetHeight}function fy(e,t,s){const n=e[ja];n&&(t=(t?[t,...n]:[...n]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const Gl=Symbol("_vod"),_c=Symbol("_vsh"),Wp={name:"show",beforeMount(e,{value:t},{transition:s}){e[Gl]=e.style.display==="none"?"":e.style.display,s&&t?s.beforeEnter(e):ci(e,t)},mounted(e,{value:t},{transition:s}){s&&t&&s.enter(e)},updated(e,{value:t,oldValue:s},{transition:n}){!t!=!s&&(n?t?(n.beforeEnter(e),ci(e,!0),n.enter(e)):n.leave(e,()=>{ci(e,!1)}):ci(e,t))},beforeUnmount(e,{value:t}){ci(e,t)}};function ci(e,t){e.style.display=t?e[Gl]:"none",e[_c]=!t}function py(){Wp.getSSRProps=({value:e})=>{if(!e)return{style:{display:"none"}}}}const Zp=Symbol("");function hy(e){const t=ss();if(!t)return;const s=t.ut=(a=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach(i=>Kl(i,a))},n=()=>{const a=e(t.proxy);t.ce?Kl(t.ce,a):Oo(t.subTree,a),s(a)};dc(()=>{Di(n)}),We(()=>{ts(n,Ut,{flush:"post"});const a=new MutationObserver(n);a.observe(t.subTree.el.parentNode,{childList:!0}),xt(()=>a.disconnect())})}function Oo(e,t){if(e.shapeFlag&128){const s=e.suspense;e=s.activeBranch,s.pendingBranch&&!s.isHydrating&&s.effects.push(()=>{Oo(s.activeBranch,t)})}for(;e.component;)e=e.component.subTree;if(e.shapeFlag&1&&e.el)Kl(e.el,t);else if(e.type===Dt)e.children.forEach(s=>Oo(s,t));else if(e.type===ta){let{el:s,anchor:n}=e;for(;s&&(Kl(s,t),s!==n);)s=s.nextSibling}}function Kl(e,t){if(e.nodeType===1){const s=e.style;let n="";for(const a in t){const i=xg(t[a]);s.setProperty(`--${a}`,i),n+=`--${a}: ${i};`}s[Zp]=n}}const my=/(?:^|;)\s*display\s*:/;function gy(e,t,s){const n=e.style,a=Me(s);let i=!1;if(s&&!a){if(t)if(Me(t))for(const l of t.split(";")){const r=l.slice(0,l.indexOf(":")).trim();s[r]==null&&bi(n,r,"")}else for(const l in t)s[l]==null&&bi(n,l,"");for(const l in s){l==="display"&&(i=!0);const r=s[l];r!=null?by(e,l,!Me(t)&&t?t[l]:void 0,r)||bi(n,l,r):bi(n,l,"")}}else if(a){if(t!==s){const l=n[Zp];l&&(s+=";"+l),n.cssText=s,i=my.test(s)}}else t&&e.removeAttribute("style");Gl in e&&(e[Gl]=i?n.display:"",e[_c]&&(n.display="none"))}const Ld=/\s*!important$/;function bi(e,t,s){if(xe(s))s.forEach(n=>bi(e,t,n));else if(s==null&&(s=""),t.startsWith("--"))e.setProperty(t,s);else{const n=vy(e,t);Ld.test(s)?e.setProperty(hs(n),s.replace(Ld,""),"important"):e[n]=s}}const Dd=["Webkit","Moz","ms"],Zr={};function vy(e,t){const s=Zr[t];if(s)return s;let n=it(t);if(n!=="filter"&&n in e)return Zr[t]=n;n=da(n);for(let a=0;aJr||(ky.then(()=>Jr=0),Jr=Date.now());function Sy(e,t){const s=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=s.attached)return;const a=s.value;if(xe(a)){const i=n.stopImmediatePropagation;n.stopImmediatePropagation=()=>{i.call(n),n._stopped=!0};const l=a.slice(),r=[n];for(let o=0;oe.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Jp=(e,t,s,n,a,i)=>{const l=a==="svg";t==="class"?fy(e,n,l):t==="style"?gy(e,s,n):oa(t)?cr(t)||xy(e,t,s,n,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Ty(e,t,n,l))?(Fd(e,t,n),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Pd(e,t,n,l,i,t!=="value")):e._isVueCE&&(Cy(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!Me(n)))?Fd(e,it(t),n,i,t):(t==="true-value"?e._trueValue=n:t==="false-value"&&(e._falseValue=n),Pd(e,t,n,l))};function Ty(e,t,s,n){if(n)return!!(t==="innerHTML"||t==="textContent"||t in e&&Ud(t)&&Re(s));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const a=e.tagName;if(a==="IMG"||a==="VIDEO"||a==="CANVAS"||a==="SOURCE")return!1}return Ud(t)&&Me(s)?!1:t in e}function Cy(e,t){const s=e._def.props;if(!s)return!1;const n=it(t);return Array.isArray(s)?s.some(a=>it(a)===n):Object.keys(s).some(a=>it(a)===n)}const Hd={};function Yp(e,t,s){let n=Xi(e,t);dr(n)&&(n=ze({},n,t));class a extends Er{constructor(l){super(n,l,s)}}return a.def=n,a}const Ey=((e,t)=>Yp(e,t,dh)),Ay=typeof HTMLElement<"u"?HTMLElement:class{};class Er extends Ay{constructor(t,s={},n=Jl){super(),this._def=t,this._props=s,this._createApp=n,this._isVueCE=!0,this._instance=null,this._app=null,this._nonce=this._def.nonce,this._connected=!1,this._resolved=!1,this._patching=!1,this._dirty=!1,this._numberProps=null,this._styleChildren=new WeakSet,this._styleAnchors=new WeakMap,this._ob=null,this.shadowRoot&&n!==Jl?this._root=this.shadowRoot:t.shadowRoot!==!1?(this.attachShadow(ze({},t.shadowRootOptions,{mode:"open"})),this._root=this.shadowRoot):this._root=this}connectedCallback(){if(!this.isConnected)return;!this.shadowRoot&&!this._resolved&&this._parseSlots(),this._connected=!0;let t=this;for(;t=t&&(t.assignedSlot||t.parentNode||t.host);)if(t instanceof Er){this._parent=t;break}this._instance||(this._resolved?this._mount(this._def):t&&t._pendingResolve?this._pendingResolve=t._pendingResolve.then(()=>{this._pendingResolve=void 0,this._resolveDef()}):this._resolveDef())}_setParent(t=this._parent){t&&(this._instance.parent=t._instance,this._inheritParentContext(t))}_inheritParentContext(t=this._parent){t&&this._app&&Object.setPrototypeOf(this._app._context.provides,t._instance.provides)}disconnectedCallback(){this._connected=!1,It(()=>{this._connected||(this._ob&&(this._ob.disconnect(),this._ob=null),this._app&&this._app.unmount(),this._instance&&(this._instance.ce=void 0),this._app=this._instance=null,this._teleportTargets&&(this._teleportTargets.clear(),this._teleportTargets=void 0))})}_processMutations(t){for(const s of t)this._setAttr(s.attributeName)}_resolveDef(){if(this._pendingResolve)return;for(let n=0;n{this._resolved=!0,this._pendingResolve=void 0;const{props:i,styles:l}=n;let r;if(i&&!xe(i))for(const o in i){const c=i[o];(c===Number||c&&c.type===Number)&&(o in this._props&&(this._props[o]=Ll(this._props[o])),(r||(r=Object.create(null)))[it(o)]=!0)}this._numberProps=r,this._resolveProps(n),this.shadowRoot&&this._applyStyles(l),this._mount(n)},s=this._def.__asyncLoader;s?this._pendingResolve=s().then(n=>{n.configureApp=this._def.configureApp,t(this._def=n,!0)}):t(this._def)}_mount(t){this._app=this._createApp(t),this._inheritParentContext(),t.configureApp&&t.configureApp(this._app),this._app._ceVNode=this._createVNode(),this._app.mount(this._root);const s=this._instance&&this._instance.exposed;if(s)for(const n in s)et(this,n)||Object.defineProperty(this,n,{get:()=>tn(s[n])})}_resolveProps(t){const{props:s}=t,n=xe(s)?s:Object.keys(s||{});for(const a of Object.keys(this))a[0]!=="_"&&n.includes(a)&&this._setProp(a,this[a]);for(const a of n.map(it))Object.defineProperty(this,a,{get(){return this._getProp(a)},set(i){this._setProp(a,i,!0,!this._patching)}})}_setAttr(t){if(t.startsWith("data-v-"))return;const s=this.hasAttribute(t);let n=s?this.getAttribute(t):Hd;const a=it(t);s&&this._numberProps&&this._numberProps[a]&&(n=Ll(n)),this._setProp(a,n,!1,!0)}_getProp(t){return this._props[t]}_setProp(t,s,n=!0,a=!1){if(s!==this._props[t]&&(this._dirty=!0,s===Hd?delete this._props[t]:(this._props[t]=s,t==="key"&&this._app&&(this._app._ceVNode.key=s)),a&&this._instance&&this._update(),n)){const i=this._ob;i&&(this._processMutations(i.takeRecords()),i.disconnect()),s===!0?this.setAttribute(hs(t),""):typeof s=="string"||typeof s=="number"?this.setAttribute(hs(t),s+""):s||this.removeAttribute(hs(t)),i&&i.observe(this,{attributes:!0})}}_update(){const t=this._createVNode();this._app&&(t.appContext=this._app._context),ch(t,this._root)}_createVNode(){const t={};this.shadowRoot||(t.onVnodeMounted=t.onVnodeUpdated=this._renderSlots.bind(this));const s=ft(this._def,ze(t,this._props));return this._instance||(s.ce=n=>{this._instance=n,n.ce=this,n.isCE=!0;const a=(i,l)=>{this.dispatchEvent(new CustomEvent(i,dr(l[0])?ze({detail:l},l[0]):{detail:l}))};n.emit=(i,...l)=>{a(i,l),hs(i)!==i&&a(hs(i),l)},this._setParent()}),s}_applyStyles(t,s,n){if(!t)return;if(s){if(s===this._def||this._styleChildren.has(s))return;this._styleChildren.add(s)}const a=this._nonce,i=this.shadowRoot,l=n?this._getStyleAnchor(n)||this._getStyleAnchor(this._def):this._getRootStyleInsertionAnchor(i);let r=null;for(let o=t.length-1;o>=0;o--){const c=document.createElement("style");a&&c.setAttribute("nonce",a),c.textContent=t[o],i.insertBefore(c,r||l),r=c,o===0&&(n||this._styleAnchors.set(this._def,c),s&&this._styleAnchors.set(s,c))}}_getStyleAnchor(t){if(!t)return null;const s=this._styleAnchors.get(t);return s&&s.parentNode===this.shadowRoot?s:(s&&this._styleAnchors.delete(t),null)}_getRootStyleInsertionAnchor(t){for(let s=0;s(delete e.props.mode,e),Ny=Oy({name:"TransitionGroup",props:ze({},qp,{tag:String,moveClass:String}),setup(e,{slots:t}){const s=ss(),n=rc();let a,i;return wr(()=>{if(!a.length)return;const l=e.moveClass||`${e.name||"v"}-move`;if(!Fy(a[0].el,s.vnode.el,l)){a=[];return}a.forEach(Dy),a.forEach(My);const r=a.filter(Py);Io(s.vnode.el),r.forEach(o=>{const c=o.el,d=c.style;Zs(c,l),d.transform=d.webkitTransform=d.transitionDuration="";const u=c[Wl]=f=>{f&&f.target!==c||(!f||f.propertyName.endsWith("transform"))&&(c.removeEventListener("transitionend",u),c[Wl]=null,Dn(c,l))};c.addEventListener("transitionend",u)}),a=[]}),()=>{const l=Je(e),r=Gp(l);let o=l.tag||Dt;if(a=[],i)for(let c=0;c{r.split(/\s+/).forEach(o=>o&&n.classList.remove(o))}),s.split(/\s+/).forEach(r=>r&&n.classList.add(r)),n.style.display="none";const i=t.nodeType===1?t:t.parentNode;i.appendChild(n);const{hasTransform:l}=Kp(n);return i.removeChild(n),l}const Hn=e=>{const t=e.props["onUpdate:modelValue"]||!1;return xe(t)?s=>Da(t,s):t};function $y(e){e.target.composing=!0}function Vd(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Ns=Symbol("_assign");function jd(e,t,s){return t&&(e=e.trim()),s&&(e=pr(e)),e}const Zl={created(e,{modifiers:{lazy:t,trim:s,number:n}},a){e[Ns]=Hn(a);const i=n||a.props&&a.props.type==="number";vn(e,t?"change":"input",l=>{l.target.composing||e[Ns](jd(e.value,s,i))}),(s||i)&&vn(e,"change",()=>{e.value=jd(e.value,s,i)}),t||(vn(e,"compositionstart",$y),vn(e,"compositionend",Vd),vn(e,"change",Vd))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:s,modifiers:{lazy:n,trim:a,number:i}},l){if(e[Ns]=Hn(l),e.composing)return;const r=(i||e.type==="number")&&!/^0\d/.test(e.value)?pr(e.value):e.value,o=t??"";if(r===o)return;const c=e.getRootNode();(c instanceof Document||c instanceof ShadowRoot)&&c.activeElement===e&&e.type!=="range"&&(n&&t===s||a&&e.value.trim()===o)||(e.value=o)}},kc={deep:!0,created(e,t,s){e[Ns]=Hn(s),vn(e,"change",()=>{const n=e._modelValue,a=qa(e),i=e.checked,l=e[Ns];if(xe(n)){const r=mr(n,a),o=r!==-1;if(i&&!o)l(n.concat(a));else if(!i&&o){const c=[...n];c.splice(r,1),l(c)}}else if(ca(n)){const r=new Set(n);i?r.add(a):r.delete(a),l(r)}else l(nh(e,i))})},mounted:qd,beforeUpdate(e,t,s){e[Ns]=Hn(s),qd(e,t,s)}};function qd(e,{value:t,oldValue:s},n){e._modelValue=t;let a;if(xe(t))a=mr(t,n.props.value)>-1;else if(ca(t))a=t.has(n.props.value);else{if(t===s)return;a=Sn(t,nh(e,!0))}e.checked!==a&&(e.checked=a)}const wc={created(e,{value:t},s){e.checked=Sn(t,s.props.value),e[Ns]=Hn(s),vn(e,"change",()=>{e[Ns](qa(e))})},beforeUpdate(e,{value:t,oldValue:s},n){e[Ns]=Hn(n),t!==s&&(e.checked=Sn(t,n.props.value))}},sh={deep:!0,created(e,{value:t,modifiers:{number:s}},n){const a=ca(t);vn(e,"change",()=>{const i=Array.prototype.filter.call(e.options,l=>l.selected).map(l=>s?pr(qa(l)):qa(l));e[Ns](e.multiple?a?new Set(i):i:i[0]),e._assigning=!0,It(()=>{e._assigning=!1})}),e[Ns]=Hn(n)},mounted(e,{value:t}){Gd(e,t)},beforeUpdate(e,t,s){e[Ns]=Hn(s)},updated(e,{value:t}){e._assigning||Gd(e,t)}};function Gd(e,t){const s=e.multiple,n=xe(t);if(!(s&&!n&&!ca(t))){for(let a=0,i=e.options.length;aString(c)===String(r)):l.selected=mr(t,r)>-1}else l.selected=t.has(r);else if(Sn(qa(l),t)){e.selectedIndex!==a&&(e.selectedIndex=a);return}}!s&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function qa(e){return"_value"in e?e._value:e.value}function nh(e,t){const s=t?"_trueValue":"_falseValue";return s in e?e[s]:t}const ah={created(e,t,s){bl(e,t,s,null,"created")},mounted(e,t,s){bl(e,t,s,null,"mounted")},beforeUpdate(e,t,s,n){bl(e,t,s,n,"beforeUpdate")},updated(e,t,s,n){bl(e,t,s,n,"updated")}};function ih(e,t){switch(e){case"SELECT":return sh;case"TEXTAREA":return Zl;default:switch(t){case"checkbox":return kc;case"radio":return wc;default:return Zl}}}function bl(e,t,s,n,a){const l=ih(e.tagName,s.props&&s.props.type)[a];l&&l(e,t,s,n)}function By(){Zl.getSSRProps=({value:e})=>({value:e}),wc.getSSRProps=({value:e},t)=>{if(t.props&&Sn(t.props.value,e))return{checked:!0}},kc.getSSRProps=({value:e},t)=>{if(xe(e)){if(t.props&&mr(e,t.props.value)>-1)return{checked:!0}}else if(ca(e)){if(t.props&&e.has(t.props.value))return{checked:!0}}else if(e)return{checked:!0}},ah.getSSRProps=(e,t)=>{if(typeof t.type!="string")return;const s=ih(t.type.toUpperCase(),t.props&&t.props.type);if(s.getSSRProps)return s.getSSRProps(e,t)}}const Uy=["ctrl","shift","alt","meta"],Hy={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Uy.some(s=>e[`${s}Key`]&&!t.includes(s))},zy=(e,t)=>{if(!e)return e;const s=e._withMods||(e._withMods={}),n=t.join(".");return s[n]||(s[n]=((a,...i)=>{for(let l=0;l{const s=e._withKeys||(e._withKeys={}),n=t.join(".");return s[n]||(s[n]=(a=>{if(!("key"in a))return;const i=hs(a.key);if(t.some(l=>l===i||Vy[l]===i))return e(a)}))},lh=ze({patchProp:Jp},Vp);let Ti,Kd=!1;function rh(){return Ti||(Ti=xp(lh))}function oh(){return Ti=Kd?Ti:_p(lh),Kd=!0,Ti}const ch=((...e)=>{rh().render(...e)}),qy=((...e)=>{oh().hydrate(...e)}),Jl=((...e)=>{const t=rh().createApp(...e),{mount:s}=t;return t.mount=n=>{const a=fh(n);if(!a)return;const i=t._component;!Re(i)&&!i.render&&!i.template&&(i.template=a.innerHTML),a.nodeType===1&&(a.textContent="");const l=s(a,!1,uh(a));return a instanceof Element&&(a.removeAttribute("v-cloak"),a.setAttribute("data-v-app","")),l},t}),dh=((...e)=>{const t=oh().createApp(...e),{mount:s}=t;return t.mount=n=>{const a=fh(n);if(a)return s(a,!0,uh(a))},t});function uh(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function fh(e){return Me(e)?document.querySelector(e):e}let Wd=!1;const Gy=()=>{Wd||(Wd=!0,By(),py())},Ky=Object.freeze(Object.defineProperty({__proto__:null,BaseTransition:Yf,BaseTransitionPropsValidators:oc,Comment:yt,DeprecationTypes:iy,EffectScope:Qo,ErrorCodes:ov,ErrorTypeStrings:Qb,Fragment:Dt,KeepAlive:Hv,ReactiveEffect:Oi,Static:ta,Suspense:Lb,Teleport:wv,Text:Bn,TrackOpTypes:tv,Transition:cy,TransitionGroup:Ly,TriggerOpTypes:sv,VueElement:Er,assertNumber:rv,callWithAsyncErrorHandling:_s,callWithErrorHandling:ei,camelize:it,capitalize:da,cloneVNode:nn,compatUtils:ay,computed:J,createApp:Jl,createBlock:Vl,createCommentVNode:Np,createElementBlock:Bb,createElementVNode:bc,createHydrationRenderer:_p,createPropsRestProxy:cb,createRenderer:xp,createSSRApp:dh,createSlots:Wv,createStaticVNode:zb,createTextVNode:yc,createVNode:ft,customRef:Mf,defineAsyncComponent:Bv,defineComponent:Xi,defineCustomElement:Yp,defineEmits:Xv,defineExpose:eb,defineModel:nb,defineOptions:tb,defineProps:Qv,defineSSRCustomElement:Ey,defineSlots:sb,devtools:Xb,effect:Sg,effectScope:_g,getCurrentInstance:ss,getCurrentScope:vf,getCurrentWatcher:nv,getTransitionRawChildren:_r,guardReactiveProps:Op,h:Va,handleError:ua,hasInjectionContext:gv,hydrate:qy,hydrateOnIdle:Lv,hydrateOnInteraction:Fv,hydrateOnMediaQuery:Pv,hydrateOnVisible:Mv,initCustomFormatter:Zb,initDirectivesForSSR:Gy,inject:Os,isMemoSame:Up,isProxy:Yi,isReactive:_n,isReadonly:sn,isRef:St,isRuntimeOnly:Gb,isShallow:gs,isVNode:An,markRaw:Lf,mergeDefaults:rb,mergeModels:ob,mergeProps:Lp,nextTick:It,nodeOps:Vp,normalizeClass:Ji,normalizeProps:og,normalizeStyle:Zi,onActivated:Ds,onBeforeMount:ep,onBeforeUnmount:Sr,onBeforeUpdate:dc,onDeactivated:Ms,onErrorCaptured:ap,onMounted:We,onRenderTracked:np,onRenderTriggered:sp,onScopeDispose:kg,onServerPrefetch:tp,onUnmounted:xt,onUpdated:wr,onWatcherCleanup:Ff,openBlock:Bi,patchProp:Jp,popScopeId:pv,provide:ki,proxyRefs:ac,pushScopeId:fv,queuePostFlushCb:Di,reactive:zn,readonly:Ml,ref:h,registerRuntimeCompiler:Fp,render:ch,renderList:Kv,renderSlot:Zv,resolveComponent:jv,resolveDirective:Gv,resolveDynamicComponent:qv,resolveFilter:ny,resolveTransitionHooks:za,setBlockTracking:Ui,setDevtoolsHook:ey,setTransitionHooks:En,shallowReactive:sc,shallowReadonly:Vg,shallowRef:nc,ssrContextKey:Vf,ssrUtils:sy,stop:Tg,toDisplayString:mf,toHandlerKey:La,toHandlers:Jv,toRaw:Je,toRef:Qg,toRefs:Zg,toValue:Gg,transformVNodeArgs:Ub,triggerRef:qg,unref:tn,useAttrs:lb,useCssModule:Iy,useCssVars:hy,useHost:Qp,useId:Tv,useModel:bb,useSSRContext:jf,useShadowRoot:Ry,useSlots:ib,useTemplateRef:Cv,useTransitionState:rc,vModelCheckbox:kc,vModelDynamic:ah,vModelRadio:wc,vModelSelect:sh,vModelText:Zl,vShow:Wp,version:Hp,warn:Yb,watch:ts,watchEffect:vv,watchPostEffect:bv,watchSyncEffect:qf,withAsyncContext:db,withCtx:lc,withDefaults:ab,withDirectives:mv,withKeys:jy,withMemo:Jb,withModifiers:zy,withScopeId:hv},Symbol.toStringTag,{value:"Module"}));/** +**/let Ro;const Cd=typeof window<"u"&&window.trustedTypes;if(Cd)try{Ro=Cd.createPolicy("vue",{createHTML:e=>e})}catch{}const zp=Ro?e=>Ro.createHTML(e):e=>e,ly="http://www.w3.org/2000/svg",ry="http://www.w3.org/1998/Math/MathML",fn=typeof document<"u"?document:null,Ed=fn&&fn.createElement("template"),Vp={insert:(e,t,s)=>{t.insertBefore(e,s||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,s,n)=>{const a=t==="svg"?fn.createElementNS(ly,e):t==="mathml"?fn.createElementNS(ry,e):s?fn.createElement(e,{is:s}):fn.createElement(e);return e==="select"&&n&&n.multiple!=null&&a.setAttribute("multiple",n.multiple),a},createText:e=>fn.createTextNode(e),createComment:e=>fn.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>fn.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,n,a,i){const l=s?s.previousSibling:t.lastChild;if(a&&(a===i||a.nextSibling))for(;t.insertBefore(a.cloneNode(!0),s),!(a===i||!(a=a.nextSibling)););else{Ed.innerHTML=zp(n==="svg"?`${e}`:n==="mathml"?`${e}`:e);const r=Ed.content;if(n==="svg"||n==="mathml"){const o=r.firstChild;for(;o.firstChild;)r.appendChild(o.firstChild);r.removeChild(o)}t.insertBefore(r,s)}return[l?l.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}},In="transition",oi="animation",ja=Symbol("_vtc"),jp={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},qp=ze({},oc,jp),oy=e=>(e.displayName="Transition",e.props=qp,e),cy=oy((e,{slots:t})=>Va(Yf,Gp(e),t)),qn=(e,t=[])=>{xe(e)?e.forEach(s=>s(...t)):e&&e(...t)},Ad=e=>e?xe(e)?e.some(t=>t.length>1):e.length>1:!1;function Gp(e){const t={};for(const P in e)P in jp||(t[P]=e[P]);if(e.css===!1)return t;const{name:s="v",type:n,duration:a,enterFromClass:i=`${s}-enter-from`,enterActiveClass:l=`${s}-enter-active`,enterToClass:r=`${s}-enter-to`,appearFromClass:o=i,appearActiveClass:c=l,appearToClass:d=r,leaveFromClass:u=`${s}-leave-from`,leaveActiveClass:f=`${s}-leave-active`,leaveToClass:p=`${s}-leave-to`}=e,b=dy(a),y=b&&b[0],E=b&&b[1],{onBeforeEnter:I,onEnter:x,onEnterCancelled:m,onLeave:_,onLeaveCancelled:S,onBeforeAppear:g=I,onAppear:w=x,onAppearCancelled:T=m}=t,C=(P,R,j,Q)=>{P._enterCancelled=Q,Dn(P,R?d:r),Dn(P,R?c:l),j&&j()},M=(P,R)=>{P._isLeaving=!1,Dn(P,u),Dn(P,p),Dn(P,f),R&&R()},H=P=>(R,j)=>{const Q=P?w:x,U=()=>C(R,P,j);qn(Q,[R,U]),Rd(()=>{Dn(R,P?o:i),Js(R,P?d:r),Ad(Q)||Id(R,n,y,U)})};return ze(t,{onBeforeEnter(P){qn(I,[P]),Js(P,i),Js(P,l)},onBeforeAppear(P){qn(g,[P]),Js(P,o),Js(P,c)},onEnter:H(!1),onAppear:H(!0),onLeave(P,R){P._isLeaving=!0;const j=()=>M(P,R);Js(P,u),P._enterCancelled?(Js(P,f),Io(P)):(Io(P),Js(P,f)),Rd(()=>{P._isLeaving&&(Dn(P,u),Js(P,p),Ad(_)||Id(P,n,E,j))}),qn(_,[P,j])},onEnterCancelled(P){C(P,!1,void 0,!0),qn(m,[P])},onAppearCancelled(P){C(P,!0,void 0,!0),qn(T,[P])},onLeaveCancelled(P){M(P),qn(S,[P])}})}function dy(e){if(e==null)return null;if(Qe(e))return[Wr(e.enter),Wr(e.leave)];{const t=Wr(e);return[t,t]}}function Wr(e){return Ll(e)}function Js(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.add(s)),(e[ja]||(e[ja]=new Set)).add(t)}function Dn(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.remove(n));const s=e[ja];s&&(s.delete(t),s.size||(e[ja]=void 0))}function Rd(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let uy=0;function Id(e,t,s,n){const a=e._endId=++uy,i=()=>{a===e._endId&&n()};if(s!=null)return setTimeout(i,s);const{type:l,timeout:r,propCount:o}=Kp(e,t);if(!l)return n();const c=l+"end";let d=0;const u=()=>{e.removeEventListener(c,f),i()},f=p=>{p.target===e&&++d>=o&&u()};setTimeout(()=>{d(s[b]||"").split(", "),a=n(`${In}Delay`),i=n(`${In}Duration`),l=Od(a,i),r=n(`${oi}Delay`),o=n(`${oi}Duration`),c=Od(r,o);let d=null,u=0,f=0;t===In?l>0&&(d=In,u=l,f=i.length):t===oi?c>0&&(d=oi,u=c,f=o.length):(u=Math.max(l,c),d=u>0?l>c?In:oi:null,f=d?d===In?i.length:o.length:0);const p=d===In&&/\b(?:transform|all)(?:,|$)/.test(n(`${In}Property`).toString());return{type:d,timeout:u,propCount:f,hasTransform:p}}function Od(e,t){for(;e.lengthNd(s)+Nd(e[n])))}function Nd(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Io(e){return(e?e.ownerDocument:document).body.offsetHeight}function fy(e,t,s){const n=e[ja];n&&(t=(t?[t,...n]:[...n]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const Gl=Symbol("_vod"),_c=Symbol("_vsh"),Wp={name:"show",beforeMount(e,{value:t},{transition:s}){e[Gl]=e.style.display==="none"?"":e.style.display,s&&t?s.beforeEnter(e):ci(e,t)},mounted(e,{value:t},{transition:s}){s&&t&&s.enter(e)},updated(e,{value:t,oldValue:s},{transition:n}){!t!=!s&&(n?t?(n.beforeEnter(e),ci(e,!0),n.enter(e)):n.leave(e,()=>{ci(e,!1)}):ci(e,t))},beforeUnmount(e,{value:t}){ci(e,t)}};function ci(e,t){e.style.display=t?e[Gl]:"none",e[_c]=!t}function py(){Wp.getSSRProps=({value:e})=>{if(!e)return{style:{display:"none"}}}}const Zp=Symbol("");function hy(e){const t=ss();if(!t)return;const s=t.ut=(a=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach(i=>Kl(i,a))},n=()=>{const a=e(t.proxy);t.ce?Kl(t.ce,a):Oo(t.subTree,a),s(a)};dc(()=>{Di(n)}),We(()=>{ts(n,Ut,{flush:"post"});const a=new MutationObserver(n);a.observe(t.subTree.el.parentNode,{childList:!0}),xt(()=>a.disconnect())})}function Oo(e,t){if(e.shapeFlag&128){const s=e.suspense;e=s.activeBranch,s.pendingBranch&&!s.isHydrating&&s.effects.push(()=>{Oo(s.activeBranch,t)})}for(;e.component;)e=e.component.subTree;if(e.shapeFlag&1&&e.el)Kl(e.el,t);else if(e.type===Dt)e.children.forEach(s=>Oo(s,t));else if(e.type===ta){let{el:s,anchor:n}=e;for(;s&&(Kl(s,t),s!==n);)s=s.nextSibling}}function Kl(e,t){if(e.nodeType===1){const s=e.style;let n="";for(const a in t){const i=xg(t[a]);s.setProperty(`--${a}`,i),n+=`--${a}: ${i};`}s[Zp]=n}}const my=/(?:^|;)\s*display\s*:/;function gy(e,t,s){const n=e.style,a=Me(s);let i=!1;if(s&&!a){if(t)if(Me(t))for(const l of t.split(";")){const r=l.slice(0,l.indexOf(":")).trim();s[r]==null&&bi(n,r,"")}else for(const l in t)s[l]==null&&bi(n,l,"");for(const l in s){l==="display"&&(i=!0);const r=s[l];r!=null?by(e,l,!Me(t)&&t?t[l]:void 0,r)||bi(n,l,r):bi(n,l,"")}}else if(a){if(t!==s){const l=n[Zp];l&&(s+=";"+l),n.cssText=s,i=my.test(s)}}else t&&e.removeAttribute("style");Gl in e&&(e[Gl]=i?n.display:"",e[_c]&&(n.display="none"))}const Ld=/\s*!important$/;function bi(e,t,s){if(xe(s))s.forEach(n=>bi(e,t,n));else if(s==null&&(s=""),t.startsWith("--"))e.setProperty(t,s);else{const n=vy(e,t);Ld.test(s)?e.setProperty(hs(n),s.replace(Ld,""),"important"):e[n]=s}}const Dd=["Webkit","Moz","ms"],Zr={};function vy(e,t){const s=Zr[t];if(s)return s;let n=it(t);if(n!=="filter"&&n in e)return Zr[t]=n;n=da(n);for(let a=0;aJr||(ky.then(()=>Jr=0),Jr=Date.now());function Sy(e,t){const s=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=s.attached)return;const a=s.value;if(xe(a)){const i=n.stopImmediatePropagation;n.stopImmediatePropagation=()=>{i.call(n),n._stopped=!0};const l=a.slice(),r=[n];for(let o=0;oe.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Jp=(e,t,s,n,a,i)=>{const l=a==="svg";t==="class"?fy(e,n,l):t==="style"?gy(e,s,n):oa(t)?cr(t)||xy(e,t,s,n,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Ty(e,t,n,l))?(Fd(e,t,n),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Pd(e,t,n,l,i,t!=="value")):e._isVueCE&&(Cy(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!Me(n)))?Fd(e,it(t),n,i,t):(t==="true-value"?e._trueValue=n:t==="false-value"&&(e._falseValue=n),Pd(e,t,n,l))};function Ty(e,t,s,n){if(n)return!!(t==="innerHTML"||t==="textContent"||t in e&&Ud(t)&&Re(s));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const a=e.tagName;if(a==="IMG"||a==="VIDEO"||a==="CANVAS"||a==="SOURCE")return!1}return Ud(t)&&Me(s)?!1:t in e}function Cy(e,t){const s=e._def.props;if(!s)return!1;const n=it(t);return Array.isArray(s)?s.some(a=>it(a)===n):Object.keys(s).some(a=>it(a)===n)}const Hd={};function Yp(e,t,s){let n=Xi(e,t);dr(n)&&(n=ze({},n,t));class a extends Er{constructor(l){super(n,l,s)}}return a.def=n,a}const Ey=((e,t)=>Yp(e,t,dh)),Ay=typeof HTMLElement<"u"?HTMLElement:class{};class Er extends Ay{constructor(t,s={},n=Jl){super(),this._def=t,this._props=s,this._createApp=n,this._isVueCE=!0,this._instance=null,this._app=null,this._nonce=this._def.nonce,this._connected=!1,this._resolved=!1,this._patching=!1,this._dirty=!1,this._numberProps=null,this._styleChildren=new WeakSet,this._styleAnchors=new WeakMap,this._ob=null,this.shadowRoot&&n!==Jl?this._root=this.shadowRoot:t.shadowRoot!==!1?(this.attachShadow(ze({},t.shadowRootOptions,{mode:"open"})),this._root=this.shadowRoot):this._root=this}connectedCallback(){if(!this.isConnected)return;!this.shadowRoot&&!this._resolved&&this._parseSlots(),this._connected=!0;let t=this;for(;t=t&&(t.assignedSlot||t.parentNode||t.host);)if(t instanceof Er){this._parent=t;break}this._instance||(this._resolved?this._mount(this._def):t&&t._pendingResolve?this._pendingResolve=t._pendingResolve.then(()=>{this._pendingResolve=void 0,this._resolveDef()}):this._resolveDef())}_setParent(t=this._parent){t&&(this._instance.parent=t._instance,this._inheritParentContext(t))}_inheritParentContext(t=this._parent){t&&this._app&&Object.setPrototypeOf(this._app._context.provides,t._instance.provides)}disconnectedCallback(){this._connected=!1,It(()=>{this._connected||(this._ob&&(this._ob.disconnect(),this._ob=null),this._app&&this._app.unmount(),this._instance&&(this._instance.ce=void 0),this._app=this._instance=null,this._teleportTargets&&(this._teleportTargets.clear(),this._teleportTargets=void 0))})}_processMutations(t){for(const s of t)this._setAttr(s.attributeName)}_resolveDef(){if(this._pendingResolve)return;for(let n=0;n{this._resolved=!0,this._pendingResolve=void 0;const{props:i,styles:l}=n;let r;if(i&&!xe(i))for(const o in i){const c=i[o];(c===Number||c&&c.type===Number)&&(o in this._props&&(this._props[o]=Ll(this._props[o])),(r||(r=Object.create(null)))[it(o)]=!0)}this._numberProps=r,this._resolveProps(n),this.shadowRoot&&this._applyStyles(l),this._mount(n)},s=this._def.__asyncLoader;s?this._pendingResolve=s().then(n=>{n.configureApp=this._def.configureApp,t(this._def=n,!0)}):t(this._def)}_mount(t){this._app=this._createApp(t),this._inheritParentContext(),t.configureApp&&t.configureApp(this._app),this._app._ceVNode=this._createVNode(),this._app.mount(this._root);const s=this._instance&&this._instance.exposed;if(s)for(const n in s)et(this,n)||Object.defineProperty(this,n,{get:()=>sn(s[n])})}_resolveProps(t){const{props:s}=t,n=xe(s)?s:Object.keys(s||{});for(const a of Object.keys(this))a[0]!=="_"&&n.includes(a)&&this._setProp(a,this[a]);for(const a of n.map(it))Object.defineProperty(this,a,{get(){return this._getProp(a)},set(i){this._setProp(a,i,!0,!this._patching)}})}_setAttr(t){if(t.startsWith("data-v-"))return;const s=this.hasAttribute(t);let n=s?this.getAttribute(t):Hd;const a=it(t);s&&this._numberProps&&this._numberProps[a]&&(n=Ll(n)),this._setProp(a,n,!1,!0)}_getProp(t){return this._props[t]}_setProp(t,s,n=!0,a=!1){if(s!==this._props[t]&&(this._dirty=!0,s===Hd?delete this._props[t]:(this._props[t]=s,t==="key"&&this._app&&(this._app._ceVNode.key=s)),a&&this._instance&&this._update(),n)){const i=this._ob;i&&(this._processMutations(i.takeRecords()),i.disconnect()),s===!0?this.setAttribute(hs(t),""):typeof s=="string"||typeof s=="number"?this.setAttribute(hs(t),s+""):s||this.removeAttribute(hs(t)),i&&i.observe(this,{attributes:!0})}}_update(){const t=this._createVNode();this._app&&(t.appContext=this._app._context),ch(t,this._root)}_createVNode(){const t={};this.shadowRoot||(t.onVnodeMounted=t.onVnodeUpdated=this._renderSlots.bind(this));const s=ft(this._def,ze(t,this._props));return this._instance||(s.ce=n=>{this._instance=n,n.ce=this,n.isCE=!0;const a=(i,l)=>{this.dispatchEvent(new CustomEvent(i,dr(l[0])?ze({detail:l},l[0]):{detail:l}))};n.emit=(i,...l)=>{a(i,l),hs(i)!==i&&a(hs(i),l)},this._setParent()}),s}_applyStyles(t,s,n){if(!t)return;if(s){if(s===this._def||this._styleChildren.has(s))return;this._styleChildren.add(s)}const a=this._nonce,i=this.shadowRoot,l=n?this._getStyleAnchor(n)||this._getStyleAnchor(this._def):this._getRootStyleInsertionAnchor(i);let r=null;for(let o=t.length-1;o>=0;o--){const c=document.createElement("style");a&&c.setAttribute("nonce",a),c.textContent=t[o],i.insertBefore(c,r||l),r=c,o===0&&(n||this._styleAnchors.set(this._def,c),s&&this._styleAnchors.set(s,c))}}_getStyleAnchor(t){if(!t)return null;const s=this._styleAnchors.get(t);return s&&s.parentNode===this.shadowRoot?s:(s&&this._styleAnchors.delete(t),null)}_getRootStyleInsertionAnchor(t){for(let s=0;s(delete e.props.mode,e),Ny=Oy({name:"TransitionGroup",props:ze({},qp,{tag:String,moveClass:String}),setup(e,{slots:t}){const s=ss(),n=rc();let a,i;return wr(()=>{if(!a.length)return;const l=e.moveClass||`${e.name||"v"}-move`;if(!Fy(a[0].el,s.vnode.el,l)){a=[];return}a.forEach(Dy),a.forEach(My);const r=a.filter(Py);Io(s.vnode.el),r.forEach(o=>{const c=o.el,d=c.style;Js(c,l),d.transform=d.webkitTransform=d.transitionDuration="";const u=c[Wl]=f=>{f&&f.target!==c||(!f||f.propertyName.endsWith("transform"))&&(c.removeEventListener("transitionend",u),c[Wl]=null,Dn(c,l))};c.addEventListener("transitionend",u)}),a=[]}),()=>{const l=Je(e),r=Gp(l);let o=l.tag||Dt;if(a=[],i)for(let c=0;c{r.split(/\s+/).forEach(o=>o&&n.classList.remove(o))}),s.split(/\s+/).forEach(r=>r&&n.classList.add(r)),n.style.display="none";const i=t.nodeType===1?t:t.parentNode;i.appendChild(n);const{hasTransform:l}=Kp(n);return i.removeChild(n),l}const Hn=e=>{const t=e.props["onUpdate:modelValue"]||!1;return xe(t)?s=>Da(t,s):t};function $y(e){e.target.composing=!0}function Vd(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Ls=Symbol("_assign");function jd(e,t,s){return t&&(e=e.trim()),s&&(e=pr(e)),e}const Zl={created(e,{modifiers:{lazy:t,trim:s,number:n}},a){e[Ls]=Hn(a);const i=n||a.props&&a.props.type==="number";vn(e,t?"change":"input",l=>{l.target.composing||e[Ls](jd(e.value,s,i))}),(s||i)&&vn(e,"change",()=>{e.value=jd(e.value,s,i)}),t||(vn(e,"compositionstart",$y),vn(e,"compositionend",Vd),vn(e,"change",Vd))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:s,modifiers:{lazy:n,trim:a,number:i}},l){if(e[Ls]=Hn(l),e.composing)return;const r=(i||e.type==="number")&&!/^0\d/.test(e.value)?pr(e.value):e.value,o=t??"";if(r===o)return;const c=e.getRootNode();(c instanceof Document||c instanceof ShadowRoot)&&c.activeElement===e&&e.type!=="range"&&(n&&t===s||a&&e.value.trim()===o)||(e.value=o)}},kc={deep:!0,created(e,t,s){e[Ls]=Hn(s),vn(e,"change",()=>{const n=e._modelValue,a=qa(e),i=e.checked,l=e[Ls];if(xe(n)){const r=mr(n,a),o=r!==-1;if(i&&!o)l(n.concat(a));else if(!i&&o){const c=[...n];c.splice(r,1),l(c)}}else if(ca(n)){const r=new Set(n);i?r.add(a):r.delete(a),l(r)}else l(nh(e,i))})},mounted:qd,beforeUpdate(e,t,s){e[Ls]=Hn(s),qd(e,t,s)}};function qd(e,{value:t,oldValue:s},n){e._modelValue=t;let a;if(xe(t))a=mr(t,n.props.value)>-1;else if(ca(t))a=t.has(n.props.value);else{if(t===s)return;a=Sn(t,nh(e,!0))}e.checked!==a&&(e.checked=a)}const wc={created(e,{value:t},s){e.checked=Sn(t,s.props.value),e[Ls]=Hn(s),vn(e,"change",()=>{e[Ls](qa(e))})},beforeUpdate(e,{value:t,oldValue:s},n){e[Ls]=Hn(n),t!==s&&(e.checked=Sn(t,n.props.value))}},sh={deep:!0,created(e,{value:t,modifiers:{number:s}},n){const a=ca(t);vn(e,"change",()=>{const i=Array.prototype.filter.call(e.options,l=>l.selected).map(l=>s?pr(qa(l)):qa(l));e[Ls](e.multiple?a?new Set(i):i:i[0]),e._assigning=!0,It(()=>{e._assigning=!1})}),e[Ls]=Hn(n)},mounted(e,{value:t}){Gd(e,t)},beforeUpdate(e,t,s){e[Ls]=Hn(s)},updated(e,{value:t}){e._assigning||Gd(e,t)}};function Gd(e,t){const s=e.multiple,n=xe(t);if(!(s&&!n&&!ca(t))){for(let a=0,i=e.options.length;aString(c)===String(r)):l.selected=mr(t,r)>-1}else l.selected=t.has(r);else if(Sn(qa(l),t)){e.selectedIndex!==a&&(e.selectedIndex=a);return}}!s&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function qa(e){return"_value"in e?e._value:e.value}function nh(e,t){const s=t?"_trueValue":"_falseValue";return s in e?e[s]:t}const ah={created(e,t,s){bl(e,t,s,null,"created")},mounted(e,t,s){bl(e,t,s,null,"mounted")},beforeUpdate(e,t,s,n){bl(e,t,s,n,"beforeUpdate")},updated(e,t,s,n){bl(e,t,s,n,"updated")}};function ih(e,t){switch(e){case"SELECT":return sh;case"TEXTAREA":return Zl;default:switch(t){case"checkbox":return kc;case"radio":return wc;default:return Zl}}}function bl(e,t,s,n,a){const l=ih(e.tagName,s.props&&s.props.type)[a];l&&l(e,t,s,n)}function By(){Zl.getSSRProps=({value:e})=>({value:e}),wc.getSSRProps=({value:e},t)=>{if(t.props&&Sn(t.props.value,e))return{checked:!0}},kc.getSSRProps=({value:e},t)=>{if(xe(e)){if(t.props&&mr(e,t.props.value)>-1)return{checked:!0}}else if(ca(e)){if(t.props&&e.has(t.props.value))return{checked:!0}}else if(e)return{checked:!0}},ah.getSSRProps=(e,t)=>{if(typeof t.type!="string")return;const s=ih(t.type.toUpperCase(),t.props&&t.props.type);if(s.getSSRProps)return s.getSSRProps(e,t)}}const Uy=["ctrl","shift","alt","meta"],Hy={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Uy.some(s=>e[`${s}Key`]&&!t.includes(s))},zy=(e,t)=>{if(!e)return e;const s=e._withMods||(e._withMods={}),n=t.join(".");return s[n]||(s[n]=((a,...i)=>{for(let l=0;l{const s=e._withKeys||(e._withKeys={}),n=t.join(".");return s[n]||(s[n]=(a=>{if(!("key"in a))return;const i=hs(a.key);if(t.some(l=>l===i||Vy[l]===i))return e(a)}))},lh=ze({patchProp:Jp},Vp);let Ti,Kd=!1;function rh(){return Ti||(Ti=xp(lh))}function oh(){return Ti=Kd?Ti:_p(lh),Kd=!0,Ti}const ch=((...e)=>{rh().render(...e)}),qy=((...e)=>{oh().hydrate(...e)}),Jl=((...e)=>{const t=rh().createApp(...e),{mount:s}=t;return t.mount=n=>{const a=fh(n);if(!a)return;const i=t._component;!Re(i)&&!i.render&&!i.template&&(i.template=a.innerHTML),a.nodeType===1&&(a.textContent="");const l=s(a,!1,uh(a));return a instanceof Element&&(a.removeAttribute("v-cloak"),a.setAttribute("data-v-app","")),l},t}),dh=((...e)=>{const t=oh().createApp(...e),{mount:s}=t;return t.mount=n=>{const a=fh(n);if(a)return s(a,!0,uh(a))},t});function uh(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function fh(e){return Me(e)?document.querySelector(e):e}let Wd=!1;const Gy=()=>{Wd||(Wd=!0,By(),py())},Ky=Object.freeze(Object.defineProperty({__proto__:null,BaseTransition:Yf,BaseTransitionPropsValidators:oc,Comment:yt,DeprecationTypes:iy,EffectScope:Qo,ErrorCodes:ov,ErrorTypeStrings:Qb,Fragment:Dt,KeepAlive:Hv,ReactiveEffect:Oi,Static:ta,Suspense:Lb,Teleport:wv,Text:Bn,TrackOpTypes:tv,Transition:cy,TransitionGroup:Ly,TriggerOpTypes:sv,VueElement:Er,assertNumber:rv,callWithAsyncErrorHandling:_s,callWithErrorHandling:ei,camelize:it,capitalize:da,cloneVNode:an,compatUtils:ay,computed:J,createApp:Jl,createBlock:Vl,createCommentVNode:Np,createElementBlock:Bb,createElementVNode:bc,createHydrationRenderer:_p,createPropsRestProxy:cb,createRenderer:xp,createSSRApp:dh,createSlots:Wv,createStaticVNode:zb,createTextVNode:yc,createVNode:ft,customRef:Mf,defineAsyncComponent:Bv,defineComponent:Xi,defineCustomElement:Yp,defineEmits:Xv,defineExpose:eb,defineModel:nb,defineOptions:tb,defineProps:Qv,defineSSRCustomElement:Ey,defineSlots:sb,devtools:Xb,effect:Sg,effectScope:_g,getCurrentInstance:ss,getCurrentScope:vf,getCurrentWatcher:nv,getTransitionRawChildren:_r,guardReactiveProps:Op,h:Va,handleError:ua,hasInjectionContext:gv,hydrate:qy,hydrateOnIdle:Lv,hydrateOnInteraction:Fv,hydrateOnMediaQuery:Pv,hydrateOnVisible:Mv,initCustomFormatter:Zb,initDirectivesForSSR:Gy,inject:Ns,isMemoSame:Up,isProxy:Yi,isReactive:_n,isReadonly:nn,isRef:St,isRuntimeOnly:Gb,isShallow:gs,isVNode:An,markRaw:Lf,mergeDefaults:rb,mergeModels:ob,mergeProps:Lp,nextTick:It,nodeOps:Vp,normalizeClass:Ji,normalizeProps:og,normalizeStyle:Zi,onActivated:Ms,onBeforeMount:ep,onBeforeUnmount:Sr,onBeforeUpdate:dc,onDeactivated:Ps,onErrorCaptured:ap,onMounted:We,onRenderTracked:np,onRenderTriggered:sp,onScopeDispose:kg,onServerPrefetch:tp,onUnmounted:xt,onUpdated:wr,onWatcherCleanup:Ff,openBlock:Bi,patchProp:Jp,popScopeId:pv,provide:ki,proxyRefs:ac,pushScopeId:fv,queuePostFlushCb:Di,reactive:zn,readonly:Ml,ref:h,registerRuntimeCompiler:Fp,render:ch,renderList:Kv,renderSlot:Zv,resolveComponent:jv,resolveDirective:Gv,resolveDynamicComponent:qv,resolveFilter:ny,resolveTransitionHooks:za,setBlockTracking:Ui,setDevtoolsHook:ey,setTransitionHooks:En,shallowReactive:sc,shallowReadonly:Vg,shallowRef:nc,ssrContextKey:Vf,ssrUtils:sy,stop:Tg,toDisplayString:mf,toHandlerKey:La,toHandlers:Jv,toRaw:Je,toRef:Qg,toRefs:Zg,toValue:Gg,transformVNodeArgs:Ub,triggerRef:qg,unref:sn,useAttrs:lb,useCssModule:Iy,useCssVars:hy,useHost:Qp,useId:Tv,useModel:bb,useSSRContext:jf,useShadowRoot:Ry,useSlots:ib,useTemplateRef:Cv,useTransitionState:rc,vModelCheckbox:kc,vModelDynamic:ah,vModelRadio:wc,vModelSelect:sh,vModelText:Zl,vShow:Wp,version:Hp,warn:Yb,watch:ts,watchEffect:vv,watchPostEffect:bv,watchSyncEffect:qf,withAsyncContext:db,withCtx:lc,withDefaults:ab,withDirectives:mv,withKeys:jy,withMemo:Jb,withModifiers:zy,withScopeId:hv},Symbol.toStringTag,{value:"Module"}));/** * @vue/compiler-core v3.5.38 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/const zi=Symbol(""),Ci=Symbol(""),Sc=Symbol(""),Yl=Symbol(""),ph=Symbol(""),la=Symbol(""),hh=Symbol(""),mh=Symbol(""),Tc=Symbol(""),Cc=Symbol(""),sl=Symbol(""),Ec=Symbol(""),gh=Symbol(""),Ac=Symbol(""),Rc=Symbol(""),Ic=Symbol(""),Oc=Symbol(""),Nc=Symbol(""),Lc=Symbol(""),vh=Symbol(""),bh=Symbol(""),Ar=Symbol(""),Ql=Symbol(""),Dc=Symbol(""),Mc=Symbol(""),Vi=Symbol(""),nl=Symbol(""),Pc=Symbol(""),No=Symbol(""),Wy=Symbol(""),Lo=Symbol(""),Xl=Symbol(""),Zy=Symbol(""),Jy=Symbol(""),Fc=Symbol(""),Yy=Symbol(""),Qy=Symbol(""),$c=Symbol(""),yh=Symbol(""),Ga={[zi]:"Fragment",[Ci]:"Teleport",[Sc]:"Suspense",[Yl]:"KeepAlive",[ph]:"BaseTransition",[la]:"openBlock",[hh]:"createBlock",[mh]:"createElementBlock",[Tc]:"createVNode",[Cc]:"createElementVNode",[sl]:"createCommentVNode",[Ec]:"createTextVNode",[gh]:"createStaticVNode",[Ac]:"resolveComponent",[Rc]:"resolveDynamicComponent",[Ic]:"resolveDirective",[Oc]:"resolveFilter",[Nc]:"withDirectives",[Lc]:"renderList",[vh]:"renderSlot",[bh]:"createSlots",[Ar]:"toDisplayString",[Ql]:"mergeProps",[Dc]:"normalizeClass",[Mc]:"normalizeStyle",[Vi]:"normalizeProps",[nl]:"guardReactiveProps",[Pc]:"toHandlers",[No]:"camelize",[Wy]:"capitalize",[Lo]:"toHandlerKey",[Xl]:"setBlockTracking",[Zy]:"pushScopeId",[Jy]:"popScopeId",[Fc]:"withCtx",[Yy]:"unref",[Qy]:"isRef",[$c]:"withMemo",[yh]:"isMemoSame"};function Xy(e){Object.getOwnPropertySymbols(e).forEach(t=>{Ga[t]=e[t]})}const Ss={start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0},source:""};function ex(e,t=""){return{type:0,source:t,children:e,helpers:new Set,components:[],directives:[],hoists:[],imports:[],cached:[],temps:0,codegenNode:void 0,loc:Ss}}function ji(e,t,s,n,a,i,l,r=!1,o=!1,c=!1,d=Ss){return e&&(r?(e.helper(la),e.helper(Za(e.inSSR,c))):e.helper(Wa(e.inSSR,c)),l&&e.helper(Nc)),{type:13,tag:t,props:s,children:n,patchFlag:a,dynamicProps:i,directives:l,isBlock:r,disableTracking:o,isComponent:c,loc:d}}function sa(e,t=Ss){return{type:17,loc:t,elements:e}}function Is(e,t=Ss){return{type:15,loc:t,properties:e}}function wt(e,t){return{type:16,loc:Ss,key:Me(e)?Fe(e,!0):e,value:t}}function Fe(e,t=!1,s=Ss,n=0){return{type:4,loc:s,content:e,isStatic:t,constType:t?3:n}}function zs(e,t=Ss){return{type:8,loc:t,children:e}}function Ot(e,t=[],s=Ss){return{type:14,loc:s,callee:e,arguments:t}}function Ka(e,t=void 0,s=!1,n=!1,a=Ss){return{type:18,params:e,returns:t,newline:s,isSlot:n,loc:a}}function Do(e,t,s,n=!0){return{type:19,test:e,consequent:t,alternate:s,newline:n,loc:Ss}}function tx(e,t,s=!1,n=!1){return{type:20,index:e,value:t,needPauseTracking:s,inVOnce:n,needArraySpread:!1,loc:Ss}}function sx(e){return{type:21,body:e,loc:Ss}}function Wa(e,t){return e||t?Tc:Cc}function Za(e,t){return e||t?hh:mh}function Bc(e,{helper:t,removeHelper:s,inSSR:n}){e.isBlock||(e.isBlock=!0,s(Wa(n,e.isComponent)),t(la),t(Za(n,e.isComponent)))}const Zd=new Uint8Array([123,123]),Jd=new Uint8Array([125,125]);function Yd(e){return e>=97&&e<=122||e>=65&&e<=90}function ys(e){return e===32||e===10||e===9||e===12||e===13}function On(e){return e===47||e===62||ys(e)}function er(e){const t=new Uint8Array(e.length);for(let s=0;s100){let l=-1,r=a;for(;l+1>>1;this.newlines[o]=0;l--)if(t>this.newlines[l]){i=l;break}return i>=0&&(s=i+2,n=t-this.newlines[i]),{column:n,line:s,offset:t}}peek(){return this.buffer.charCodeAt(this.index+1)}stateText(t){t===60?(this.index>this.sectionStart&&this.cbs.ontext(this.sectionStart,this.index),this.state=5,this.sectionStart=this.index):!this.inVPre&&t===this.delimiterOpen[0]&&(this.state=2,this.delimiterIndex=0,this.stateInterpolationOpen(t))}stateInterpolationOpen(t){if(t===this.delimiterOpen[this.delimiterIndex])if(this.delimiterIndex===this.delimiterOpen.length-1){const s=this.index+1-this.delimiterOpen.length;s>this.sectionStart&&this.cbs.ontext(this.sectionStart,s),this.state=3,this.sectionStart=s}else this.delimiterIndex++;else this.inRCDATA?(this.state=32,this.stateInRCDATA(t)):(this.state=1,this.stateText(t))}stateInterpolation(t){t===this.delimiterClose[0]&&(this.state=4,this.delimiterIndex=0,this.stateInterpolationClose(t))}stateInterpolationClose(t){t===this.delimiterClose[this.delimiterIndex]?this.delimiterIndex===this.delimiterClose.length-1?(this.cbs.oninterpolation(this.sectionStart,this.index+1),this.inRCDATA?this.state=32:this.state=1,this.sectionStart=this.index+1):this.delimiterIndex++:(this.state=3,this.stateInterpolation(t))}stateSpecialStartSequence(t){const s=this.sequenceIndex===this.currentSequence.length;if(!(s?On(t):(t|32)===this.currentSequence[this.sequenceIndex]))this.inRCDATA=!1;else if(!s){this.sequenceIndex++;return}this.sequenceIndex=0,this.state=6,this.stateInTagName(t)}stateInRCDATA(t){if(this.sequenceIndex===this.currentSequence.length){if(t===62||ys(t)){const s=this.index-this.currentSequence.length;if(this.sectionStart=t||(this.state===28?this.currentSequence===zt.CdataEnd?this.cbs.oncdata(this.sectionStart,t):this.cbs.oncomment(this.sectionStart,t):this.state===6||this.state===11||this.state===18||this.state===17||this.state===12||this.state===13||this.state===14||this.state===15||this.state===16||this.state===20||this.state===19||this.state===21||this.state===9||this.cbs.ontext(this.sectionStart,t))}emitCodePoint(t,s){}}function Qd(e,{compatConfig:t}){const s=t&&t[e];return e==="MODE"?s||3:s}function na(e,t){const s=Qd("MODE",t),n=Qd(e,t);return s===3?n===!0:n!==!1}function qi(e,t,s,...n){return na(e,t)}function Uc(e){throw e}function xh(e){}function ut(e,t,s,n){const a=`https://vuejs.org/error-reference/#compiler-${e}`,i=new SyntaxError(String(a));return i.code=e,i.loc=t,i}const ms=e=>e.type===4&&e.isStatic;function _h(e){switch(e){case"Teleport":case"teleport":return Ci;case"Suspense":case"suspense":return Sc;case"KeepAlive":case"keep-alive":return Yl;case"BaseTransition":case"base-transition":return ph}}const ax=/^$|^\d|[^\$\w\xA0-\uFFFF]/,Hc=e=>!ax.test(e),kh=/[A-Za-z_$\xA0-\uFFFF]/,ix=/[\.\?\w$\xA0-\uFFFF]/,lx=/\s+[.[]\s*|\s*[.[]\s+/g,wh=e=>e.type===4?e.content:e.loc.source,rx=e=>{const t=wh(e).trim().replace(lx,r=>r.trim());let s=0,n=[],a=0,i=0,l=null;for(let r=0;r|^\s*(?:async\s+)?function(?:\s+[\w$]+)?\s*\(/,cx=e=>ox.test(wh(e)),dx=cx;function Rs(e,t,s=!1){for(let n=0;nt.type===7&&t.name==="bind"&&(!t.arg||t.arg.type!==4||!t.arg.isStatic))}function Yr(e){return e.type===5||e.type===2}function Xd(e){return e.type===7&&e.name==="pre"}function fx(e){return e.type===7&&e.name==="slot"}function tr(e){return e.type===1&&e.tagType===3}function sr(e){return e.type===1&&e.tagType===2}const px=new Set([Vi,nl]);function Th(e,t=[]){if(e&&!Me(e)&&e.type===14){const s=e.callee;if(!Me(s)&&px.has(s))return Th(e.arguments[0],t.concat(e))}return[e,t]}function nr(e,t,s){let n,a=e.type===13?e.props:e.arguments[2],i=[],l;if(a&&!Me(a)&&a.type===14){const r=Th(a);a=r[0],i=r[1],l=i[i.length-1]}if(a==null||Me(a))n=Is([t]);else if(a.type===14){const r=a.arguments[0];!Me(r)&&r.type===15?eu(t,r)||r.properties.unshift(t):a.callee===Pc?n=Ot(s.helper(Ql),[Is([t]),a]):a.arguments.unshift(Is([t])),!n&&(n=a)}else a.type===15?(eu(t,a)||a.properties.unshift(t),n=a):(n=Ot(s.helper(Ql),[Is([t]),a]),l&&l.callee===nl&&(l=i[i.length-2]));e.type===13?l?l.arguments[0]=n:e.props=n:l?l.arguments[0]=n:e.arguments[2]=n}function eu(e,t){let s=!1;if(e.key.type===4){const n=e.key.content;s=t.properties.some(a=>a.key.type===4&&a.key.content===n)}return s}function Gi(e,t){return`_${t}_${e.replace(/[^\w]/g,(s,n)=>s==="-"?"_":e.charCodeAt(n).toString())}`}function hx(e){return e.type===14&&e.callee===$c?e.arguments[1].returns:e}const mx=/([\s\S]*?)\s+(?:in|of)\s+(\S[\s\S]*)/;function Ch(e){for(let t=0;t0,isVoidTag:Ra,isPreTag:Ra,isIgnoreNewlineTag:Ra,isCustomElement:Ra,onError:Uc,onWarn:xh,comments:!1,prefixIdentifiers:!1};let Ye=Ah,Ki=null,wn="",jt=null,Ge=null,ds="",un=-1,Kn=-1,Vc=0,Fn=!1,Mo=null;const dt=[],gt=new nx(dt,{onerr:on,ontext(e,t){yl(Ft(e,t),e,t)},ontextentity(e,t,s){yl(e,t,s)},oninterpolation(e,t){if(Fn)return yl(Ft(e,t),e,t);let s=e+gt.delimiterOpen.length,n=t-gt.delimiterClose.length;for(;ys(wn.charCodeAt(s));)s++;for(;ys(wn.charCodeAt(n-1));)n--;let a=Ft(s,n);a.includes("&")&&(a=Ye.decodeEntities(a,!1)),Po({type:5,content:Rl(a,!1,bt(s,n)),loc:bt(e,t)})},onopentagname(e,t){const s=Ft(e,t);jt={type:1,tag:s,ns:Ye.getNamespace(s,dt[0],Ye.ns),tagType:0,props:[],children:[],loc:bt(e-1,t),codegenNode:void 0}},onopentagend(e){su(e)},onclosetag(e,t){const s=Ft(e,t);if(!Ye.isVoidTag(s)){let n=!1;for(let a=0;a0&&on(24,dt[0].loc.start.offset);for(let l=0;l<=a;l++){const r=dt.shift();Al(r,t,l(n.type===7?n.rawName:n.name)===s)&&on(2,t)},onattribend(e,t){if(jt&&Ge){if(Yn(Ge.loc,t),e!==0)if(ds.includes("&")&&(ds=Ye.decodeEntities(ds,!0)),Ge.type===6)Ge.name==="class"&&(ds=Oh(ds).trim()),e===1&&!ds&&on(13,t),Ge.value={type:2,content:ds,loc:e===1?bt(un,Kn):bt(un-1,Kn+1)},gt.inSFCRoot&&jt.tag==="template"&&Ge.name==="lang"&&ds&&ds!=="html"&>.enterRCDATA(er("a.content==="sync"))>-1&&qi("COMPILER_V_BIND_SYNC",Ye,Ge.loc,Ge.arg.loc.source)&&(Ge.name="model",Ge.modifiers.splice(n,1))}(Ge.type!==7||Ge.name!=="pre")&&jt.props.push(Ge)}ds="",un=Kn=-1},oncomment(e,t){Ye.comments&&Po({type:3,content:Ft(e,t),loc:bt(e-4,t+3)})},onend(){const e=wn.length;for(let t=0;t{const b=t.start.offset+f,y=b+u.length;return Rl(u,!1,bt(b,y),0,p?1:0)},r={source:l(i.trim(),s.indexOf(i,a.length)),value:void 0,key:void 0,index:void 0,finalized:!1};let o=a.trim().replace(gx,"").trim();const c=a.indexOf(o),d=o.match(tu);if(d){o=o.replace(tu,"").trim();const u=d[1].trim();let f;if(u&&(f=s.indexOf(u,c+o.length),r.key=l(u,f,!0)),d[2]){const p=d[2].trim();p&&(r.index=l(p,s.indexOf(p,r.key?f+u.length:c+o.length),!0))}}return o&&(r.value=l(o,c,!0)),r}function Ft(e,t){return wn.slice(e,t)}function su(e){gt.inSFCRoot&&(jt.innerLoc=bt(e+1,e+1)),Po(jt);const{tag:t,ns:s}=jt;s===0&&Ye.isPreTag(t)&&Vc++,Ye.isVoidTag(t)?Al(jt,e):(dt.unshift(jt),(s===1||s===2)&&(gt.inXML=!0)),jt=null}function yl(e,t,s){{const i=dt[0]&&dt[0].tag;i!=="script"&&i!=="style"&&e.includes("&")&&(e=Ye.decodeEntities(e,!1))}const n=dt[0]||Ki,a=n.children[n.children.length-1];a&&a.type===2?(a.content+=e,Yn(a.loc,s)):n.children.push({type:2,content:e,loc:bt(t,s)})}function Al(e,t,s=!1){s?Yn(e.loc,Rh(t,60)):Yn(e.loc,bx(t,62)+1),gt.inSFCRoot&&(e.children.length?e.innerLoc.end=ze({},e.children[e.children.length-1].loc.end):e.innerLoc.end=ze({},e.innerLoc.start),e.innerLoc.source=Ft(e.innerLoc.start.offset,e.innerLoc.end.offset));const{tag:n,ns:a,children:i}=e;if(Fn||(n==="slot"?e.tagType=2:nu(e)?e.tagType=3:xx(e)&&(e.tagType=1)),gt.inRCDATA||(e.children=Ih(i)),a===0&&Ye.isIgnoreNewlineTag(n)){const l=i[0];l&&l.type===2&&(l.content=l.content.replace(/^\r?\n/,""))}a===0&&Ye.isPreTag(n)&&Vc--,Mo===e&&(Fn=gt.inVPre=!1,Mo=null),gt.inXML&&(dt[0]?dt[0].ns:Ye.ns)===0&&(gt.inXML=!1);{const l=e.props;if(!gt.inSFCRoot&&na("COMPILER_NATIVE_TEMPLATE",Ye)&&e.tag==="template"&&!nu(e)){const o=dt[0]||Ki,c=o.children.indexOf(e);o.children.splice(c,1,...e.children)}const r=l.find(o=>o.type===6&&o.name==="inline-template");r&&qi("COMPILER_INLINE_TEMPLATE",Ye,r.loc)&&e.children.length&&(r.value={type:2,content:Ft(e.children[0].loc.start.offset,e.children[e.children.length-1].loc.end.offset),loc:r.loc})}}function bx(e,t){let s=e;for(;wn.charCodeAt(s)!==t&&s=0;)s--;return s}const yx=new Set(["if","else","else-if","for","slot"]);function nu({tag:e,props:t}){if(e==="template"){for(let s=0;s64&&e<91}const kx=/\r\n/g;function Ih(e){const t=Ye.whitespace!=="preserve";let s=!1;for(let n=0;ns.type!==3);return t.length===1&&t[0].type===1&&!sr(t[0])?t[0]:null}function Il(e,t,s,n=!1,a=!1){const{children:i}=e,l=[];for(let d=0;d0){if(f>=2){u.codegenNode.patchFlag=-1,l.push(u);continue}}else{const p=u.codegenNode;if(p.type===13){const b=p.patchFlag;if((b===void 0||b===512||b===1)&&Dh(u,s)>=2){const y=Mh(u);y&&(p.props=s.hoist(y))}p.dynamicProps&&(p.dynamicProps=s.hoist(p.dynamicProps))}}}else if(u.type===12&&(n?0:xs(u,s))>=2){u.codegenNode.type===14&&u.codegenNode.arguments.length>0&&u.codegenNode.arguments.push("-1"),l.push(u);continue}if(u.type===1){const f=u.tagType===1;f&&s.scopes.vSlot++,Il(u,e,s,!1,a),f&&s.scopes.vSlot--}else if(u.type===11)Il(u,e,s,u.children.length===1,!0);else if(u.type===9)for(let f=0;fp.key===u||p.key.content===u);return f&&f.value}}l.length&&s.transformHoist&&s.transformHoist(i,s,e)}function xs(e,t){const{constantCache:s}=t;switch(e.type){case 1:if(e.tagType!==0)return 0;const n=s.get(e);if(n!==void 0)return n;const a=e.codegenNode;if(a.type!==13||a.isBlock&&e.tag!=="svg"&&e.tag!=="foreignObject"&&e.tag!=="math")return 0;if(a.patchFlag===void 0){let l=3;const r=Dh(e,t);if(r===0)return s.set(e,0),0;r1)for(let o=0;oH&&(T.childIndex--,T.onNodeRemoved()),T.parent.children.splice(H,1)},onNodeRemoved:Ut,addIdentifiers(C){},removeIdentifiers(C){},hoist(C){Me(C)&&(C=Fe(C)),T.hoists.push(C);const M=Fe(`_hoisted_${T.hoists.length}`,!1,C.loc,2);return M.hoisted=C,M},cache(C,M=!1,H=!1){const P=tx(T.cached.length,C,M,H);return T.cached.push(P),P}};return T.filters=new Set,T}function Ox(e,t){const s=Ix(e,t);Ir(e,s),t.hoistStatic&&Ax(e,s),t.ssr||Nx(e,s),e.helpers=new Set([...s.helpers.keys()]),e.components=[...s.components],e.directives=[...s.directives],e.imports=s.imports,e.hoists=s.hoists,e.temps=s.temps,e.cached=s.cached,e.transformed=!0,e.filters=[...s.filters]}function Nx(e,t){const{helper:s}=t,{children:n}=e;if(n.length===1){const a=Nh(e);if(a&&a.codegenNode){const i=a.codegenNode;i.type===13&&Bc(i,t),e.codegenNode=i}else e.codegenNode=n[0]}else if(n.length>1){let a=64;e.codegenNode=ji(t,s(zi),void 0,e.children,a,void 0,void 0,!0,void 0,!1)}}function Lx(e,t){let s=0;const n=()=>{s--};for(;sn===e:n=>e.test(n);return(n,a)=>{if(n.type===1){const{props:i}=n;if(n.tagType===3&&i.some(fx))return;const l=[];for(let r=0;r`${Ga[e]}: _${Ga[e]}`;function Dx(e,{mode:t="function",prefixIdentifiers:s=t==="module",sourceMap:n=!1,filename:a="template.vue.html",scopeId:i=null,optimizeImports:l=!1,runtimeGlobalName:r="Vue",runtimeModuleName:o="vue",ssrRuntimeModuleName:c="vue/server-renderer",ssr:d=!1,isTS:u=!1,inSSR:f=!1}){const p={mode:t,prefixIdentifiers:s,sourceMap:n,filename:a,scopeId:i,optimizeImports:l,runtimeGlobalName:r,runtimeModuleName:o,ssrRuntimeModuleName:c,ssr:d,isTS:u,inSSR:f,source:e.source,code:"",column:1,line:1,offset:0,indentLevel:0,pure:!1,map:void 0,helper(y){return`_${Ga[y]}`},push(y,E=-2,I){p.code+=y},indent(){b(++p.indentLevel)},deindent(y=!1){y?--p.indentLevel:b(--p.indentLevel)},newline(){b(p.indentLevel)}};function b(y){p.push(` +**/const zi=Symbol(""),Ci=Symbol(""),Sc=Symbol(""),Yl=Symbol(""),ph=Symbol(""),la=Symbol(""),hh=Symbol(""),mh=Symbol(""),Tc=Symbol(""),Cc=Symbol(""),sl=Symbol(""),Ec=Symbol(""),gh=Symbol(""),Ac=Symbol(""),Rc=Symbol(""),Ic=Symbol(""),Oc=Symbol(""),Nc=Symbol(""),Lc=Symbol(""),vh=Symbol(""),bh=Symbol(""),Ar=Symbol(""),Ql=Symbol(""),Dc=Symbol(""),Mc=Symbol(""),Vi=Symbol(""),nl=Symbol(""),Pc=Symbol(""),No=Symbol(""),Wy=Symbol(""),Lo=Symbol(""),Xl=Symbol(""),Zy=Symbol(""),Jy=Symbol(""),Fc=Symbol(""),Yy=Symbol(""),Qy=Symbol(""),$c=Symbol(""),yh=Symbol(""),Ga={[zi]:"Fragment",[Ci]:"Teleport",[Sc]:"Suspense",[Yl]:"KeepAlive",[ph]:"BaseTransition",[la]:"openBlock",[hh]:"createBlock",[mh]:"createElementBlock",[Tc]:"createVNode",[Cc]:"createElementVNode",[sl]:"createCommentVNode",[Ec]:"createTextVNode",[gh]:"createStaticVNode",[Ac]:"resolveComponent",[Rc]:"resolveDynamicComponent",[Ic]:"resolveDirective",[Oc]:"resolveFilter",[Nc]:"withDirectives",[Lc]:"renderList",[vh]:"renderSlot",[bh]:"createSlots",[Ar]:"toDisplayString",[Ql]:"mergeProps",[Dc]:"normalizeClass",[Mc]:"normalizeStyle",[Vi]:"normalizeProps",[nl]:"guardReactiveProps",[Pc]:"toHandlers",[No]:"camelize",[Wy]:"capitalize",[Lo]:"toHandlerKey",[Xl]:"setBlockTracking",[Zy]:"pushScopeId",[Jy]:"popScopeId",[Fc]:"withCtx",[Yy]:"unref",[Qy]:"isRef",[$c]:"withMemo",[yh]:"isMemoSame"};function Xy(e){Object.getOwnPropertySymbols(e).forEach(t=>{Ga[t]=e[t]})}const Ss={start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0},source:""};function ex(e,t=""){return{type:0,source:t,children:e,helpers:new Set,components:[],directives:[],hoists:[],imports:[],cached:[],temps:0,codegenNode:void 0,loc:Ss}}function ji(e,t,s,n,a,i,l,r=!1,o=!1,c=!1,d=Ss){return e&&(r?(e.helper(la),e.helper(Za(e.inSSR,c))):e.helper(Wa(e.inSSR,c)),l&&e.helper(Nc)),{type:13,tag:t,props:s,children:n,patchFlag:a,dynamicProps:i,directives:l,isBlock:r,disableTracking:o,isComponent:c,loc:d}}function sa(e,t=Ss){return{type:17,loc:t,elements:e}}function Os(e,t=Ss){return{type:15,loc:t,properties:e}}function wt(e,t){return{type:16,loc:Ss,key:Me(e)?Fe(e,!0):e,value:t}}function Fe(e,t=!1,s=Ss,n=0){return{type:4,loc:s,content:e,isStatic:t,constType:t?3:n}}function Vs(e,t=Ss){return{type:8,loc:t,children:e}}function Ot(e,t=[],s=Ss){return{type:14,loc:s,callee:e,arguments:t}}function Ka(e,t=void 0,s=!1,n=!1,a=Ss){return{type:18,params:e,returns:t,newline:s,isSlot:n,loc:a}}function Do(e,t,s,n=!0){return{type:19,test:e,consequent:t,alternate:s,newline:n,loc:Ss}}function tx(e,t,s=!1,n=!1){return{type:20,index:e,value:t,needPauseTracking:s,inVOnce:n,needArraySpread:!1,loc:Ss}}function sx(e){return{type:21,body:e,loc:Ss}}function Wa(e,t){return e||t?Tc:Cc}function Za(e,t){return e||t?hh:mh}function Bc(e,{helper:t,removeHelper:s,inSSR:n}){e.isBlock||(e.isBlock=!0,s(Wa(n,e.isComponent)),t(la),t(Za(n,e.isComponent)))}const Zd=new Uint8Array([123,123]),Jd=new Uint8Array([125,125]);function Yd(e){return e>=97&&e<=122||e>=65&&e<=90}function ys(e){return e===32||e===10||e===9||e===12||e===13}function On(e){return e===47||e===62||ys(e)}function er(e){const t=new Uint8Array(e.length);for(let s=0;s100){let l=-1,r=a;for(;l+1>>1;this.newlines[o]=0;l--)if(t>this.newlines[l]){i=l;break}return i>=0&&(s=i+2,n=t-this.newlines[i]),{column:n,line:s,offset:t}}peek(){return this.buffer.charCodeAt(this.index+1)}stateText(t){t===60?(this.index>this.sectionStart&&this.cbs.ontext(this.sectionStart,this.index),this.state=5,this.sectionStart=this.index):!this.inVPre&&t===this.delimiterOpen[0]&&(this.state=2,this.delimiterIndex=0,this.stateInterpolationOpen(t))}stateInterpolationOpen(t){if(t===this.delimiterOpen[this.delimiterIndex])if(this.delimiterIndex===this.delimiterOpen.length-1){const s=this.index+1-this.delimiterOpen.length;s>this.sectionStart&&this.cbs.ontext(this.sectionStart,s),this.state=3,this.sectionStart=s}else this.delimiterIndex++;else this.inRCDATA?(this.state=32,this.stateInRCDATA(t)):(this.state=1,this.stateText(t))}stateInterpolation(t){t===this.delimiterClose[0]&&(this.state=4,this.delimiterIndex=0,this.stateInterpolationClose(t))}stateInterpolationClose(t){t===this.delimiterClose[this.delimiterIndex]?this.delimiterIndex===this.delimiterClose.length-1?(this.cbs.oninterpolation(this.sectionStart,this.index+1),this.inRCDATA?this.state=32:this.state=1,this.sectionStart=this.index+1):this.delimiterIndex++:(this.state=3,this.stateInterpolation(t))}stateSpecialStartSequence(t){const s=this.sequenceIndex===this.currentSequence.length;if(!(s?On(t):(t|32)===this.currentSequence[this.sequenceIndex]))this.inRCDATA=!1;else if(!s){this.sequenceIndex++;return}this.sequenceIndex=0,this.state=6,this.stateInTagName(t)}stateInRCDATA(t){if(this.sequenceIndex===this.currentSequence.length){if(t===62||ys(t)){const s=this.index-this.currentSequence.length;if(this.sectionStart=t||(this.state===28?this.currentSequence===zt.CdataEnd?this.cbs.oncdata(this.sectionStart,t):this.cbs.oncomment(this.sectionStart,t):this.state===6||this.state===11||this.state===18||this.state===17||this.state===12||this.state===13||this.state===14||this.state===15||this.state===16||this.state===20||this.state===19||this.state===21||this.state===9||this.cbs.ontext(this.sectionStart,t))}emitCodePoint(t,s){}}function Qd(e,{compatConfig:t}){const s=t&&t[e];return e==="MODE"?s||3:s}function na(e,t){const s=Qd("MODE",t),n=Qd(e,t);return s===3?n===!0:n!==!1}function qi(e,t,s,...n){return na(e,t)}function Uc(e){throw e}function xh(e){}function ut(e,t,s,n){const a=`https://vuejs.org/error-reference/#compiler-${e}`,i=new SyntaxError(String(a));return i.code=e,i.loc=t,i}const ms=e=>e.type===4&&e.isStatic;function _h(e){switch(e){case"Teleport":case"teleport":return Ci;case"Suspense":case"suspense":return Sc;case"KeepAlive":case"keep-alive":return Yl;case"BaseTransition":case"base-transition":return ph}}const ax=/^$|^\d|[^\$\w\xA0-\uFFFF]/,Hc=e=>!ax.test(e),kh=/[A-Za-z_$\xA0-\uFFFF]/,ix=/[\.\?\w$\xA0-\uFFFF]/,lx=/\s+[.[]\s*|\s*[.[]\s+/g,wh=e=>e.type===4?e.content:e.loc.source,rx=e=>{const t=wh(e).trim().replace(lx,r=>r.trim());let s=0,n=[],a=0,i=0,l=null;for(let r=0;r|^\s*(?:async\s+)?function(?:\s+[\w$]+)?\s*\(/,cx=e=>ox.test(wh(e)),dx=cx;function Is(e,t,s=!1){for(let n=0;nt.type===7&&t.name==="bind"&&(!t.arg||t.arg.type!==4||!t.arg.isStatic))}function Yr(e){return e.type===5||e.type===2}function Xd(e){return e.type===7&&e.name==="pre"}function fx(e){return e.type===7&&e.name==="slot"}function tr(e){return e.type===1&&e.tagType===3}function sr(e){return e.type===1&&e.tagType===2}const px=new Set([Vi,nl]);function Th(e,t=[]){if(e&&!Me(e)&&e.type===14){const s=e.callee;if(!Me(s)&&px.has(s))return Th(e.arguments[0],t.concat(e))}return[e,t]}function nr(e,t,s){let n,a=e.type===13?e.props:e.arguments[2],i=[],l;if(a&&!Me(a)&&a.type===14){const r=Th(a);a=r[0],i=r[1],l=i[i.length-1]}if(a==null||Me(a))n=Os([t]);else if(a.type===14){const r=a.arguments[0];!Me(r)&&r.type===15?eu(t,r)||r.properties.unshift(t):a.callee===Pc?n=Ot(s.helper(Ql),[Os([t]),a]):a.arguments.unshift(Os([t])),!n&&(n=a)}else a.type===15?(eu(t,a)||a.properties.unshift(t),n=a):(n=Ot(s.helper(Ql),[Os([t]),a]),l&&l.callee===nl&&(l=i[i.length-2]));e.type===13?l?l.arguments[0]=n:e.props=n:l?l.arguments[0]=n:e.arguments[2]=n}function eu(e,t){let s=!1;if(e.key.type===4){const n=e.key.content;s=t.properties.some(a=>a.key.type===4&&a.key.content===n)}return s}function Gi(e,t){return`_${t}_${e.replace(/[^\w]/g,(s,n)=>s==="-"?"_":e.charCodeAt(n).toString())}`}function hx(e){return e.type===14&&e.callee===$c?e.arguments[1].returns:e}const mx=/([\s\S]*?)\s+(?:in|of)\s+(\S[\s\S]*)/;function Ch(e){for(let t=0;t0,isVoidTag:Ra,isPreTag:Ra,isIgnoreNewlineTag:Ra,isCustomElement:Ra,onError:Uc,onWarn:xh,comments:!1,prefixIdentifiers:!1};let Ye=Ah,Ki=null,wn="",jt=null,Ge=null,ds="",un=-1,Kn=-1,Vc=0,Fn=!1,Mo=null;const dt=[],gt=new nx(dt,{onerr:on,ontext(e,t){yl(Ft(e,t),e,t)},ontextentity(e,t,s){yl(e,t,s)},oninterpolation(e,t){if(Fn)return yl(Ft(e,t),e,t);let s=e+gt.delimiterOpen.length,n=t-gt.delimiterClose.length;for(;ys(wn.charCodeAt(s));)s++;for(;ys(wn.charCodeAt(n-1));)n--;let a=Ft(s,n);a.includes("&")&&(a=Ye.decodeEntities(a,!1)),Po({type:5,content:Rl(a,!1,bt(s,n)),loc:bt(e,t)})},onopentagname(e,t){const s=Ft(e,t);jt={type:1,tag:s,ns:Ye.getNamespace(s,dt[0],Ye.ns),tagType:0,props:[],children:[],loc:bt(e-1,t),codegenNode:void 0}},onopentagend(e){su(e)},onclosetag(e,t){const s=Ft(e,t);if(!Ye.isVoidTag(s)){let n=!1;for(let a=0;a0&&on(24,dt[0].loc.start.offset);for(let l=0;l<=a;l++){const r=dt.shift();Al(r,t,l(n.type===7?n.rawName:n.name)===s)&&on(2,t)},onattribend(e,t){if(jt&&Ge){if(Yn(Ge.loc,t),e!==0)if(ds.includes("&")&&(ds=Ye.decodeEntities(ds,!0)),Ge.type===6)Ge.name==="class"&&(ds=Oh(ds).trim()),e===1&&!ds&&on(13,t),Ge.value={type:2,content:ds,loc:e===1?bt(un,Kn):bt(un-1,Kn+1)},gt.inSFCRoot&&jt.tag==="template"&&Ge.name==="lang"&&ds&&ds!=="html"&>.enterRCDATA(er("a.content==="sync"))>-1&&qi("COMPILER_V_BIND_SYNC",Ye,Ge.loc,Ge.arg.loc.source)&&(Ge.name="model",Ge.modifiers.splice(n,1))}(Ge.type!==7||Ge.name!=="pre")&&jt.props.push(Ge)}ds="",un=Kn=-1},oncomment(e,t){Ye.comments&&Po({type:3,content:Ft(e,t),loc:bt(e-4,t+3)})},onend(){const e=wn.length;for(let t=0;t{const b=t.start.offset+f,y=b+u.length;return Rl(u,!1,bt(b,y),0,p?1:0)},r={source:l(i.trim(),s.indexOf(i,a.length)),value:void 0,key:void 0,index:void 0,finalized:!1};let o=a.trim().replace(gx,"").trim();const c=a.indexOf(o),d=o.match(tu);if(d){o=o.replace(tu,"").trim();const u=d[1].trim();let f;if(u&&(f=s.indexOf(u,c+o.length),r.key=l(u,f,!0)),d[2]){const p=d[2].trim();p&&(r.index=l(p,s.indexOf(p,r.key?f+u.length:c+o.length),!0))}}return o&&(r.value=l(o,c,!0)),r}function Ft(e,t){return wn.slice(e,t)}function su(e){gt.inSFCRoot&&(jt.innerLoc=bt(e+1,e+1)),Po(jt);const{tag:t,ns:s}=jt;s===0&&Ye.isPreTag(t)&&Vc++,Ye.isVoidTag(t)?Al(jt,e):(dt.unshift(jt),(s===1||s===2)&&(gt.inXML=!0)),jt=null}function yl(e,t,s){{const i=dt[0]&&dt[0].tag;i!=="script"&&i!=="style"&&e.includes("&")&&(e=Ye.decodeEntities(e,!1))}const n=dt[0]||Ki,a=n.children[n.children.length-1];a&&a.type===2?(a.content+=e,Yn(a.loc,s)):n.children.push({type:2,content:e,loc:bt(t,s)})}function Al(e,t,s=!1){s?Yn(e.loc,Rh(t,60)):Yn(e.loc,bx(t,62)+1),gt.inSFCRoot&&(e.children.length?e.innerLoc.end=ze({},e.children[e.children.length-1].loc.end):e.innerLoc.end=ze({},e.innerLoc.start),e.innerLoc.source=Ft(e.innerLoc.start.offset,e.innerLoc.end.offset));const{tag:n,ns:a,children:i}=e;if(Fn||(n==="slot"?e.tagType=2:nu(e)?e.tagType=3:xx(e)&&(e.tagType=1)),gt.inRCDATA||(e.children=Ih(i)),a===0&&Ye.isIgnoreNewlineTag(n)){const l=i[0];l&&l.type===2&&(l.content=l.content.replace(/^\r?\n/,""))}a===0&&Ye.isPreTag(n)&&Vc--,Mo===e&&(Fn=gt.inVPre=!1,Mo=null),gt.inXML&&(dt[0]?dt[0].ns:Ye.ns)===0&&(gt.inXML=!1);{const l=e.props;if(!gt.inSFCRoot&&na("COMPILER_NATIVE_TEMPLATE",Ye)&&e.tag==="template"&&!nu(e)){const o=dt[0]||Ki,c=o.children.indexOf(e);o.children.splice(c,1,...e.children)}const r=l.find(o=>o.type===6&&o.name==="inline-template");r&&qi("COMPILER_INLINE_TEMPLATE",Ye,r.loc)&&e.children.length&&(r.value={type:2,content:Ft(e.children[0].loc.start.offset,e.children[e.children.length-1].loc.end.offset),loc:r.loc})}}function bx(e,t){let s=e;for(;wn.charCodeAt(s)!==t&&s=0;)s--;return s}const yx=new Set(["if","else","else-if","for","slot"]);function nu({tag:e,props:t}){if(e==="template"){for(let s=0;s64&&e<91}const kx=/\r\n/g;function Ih(e){const t=Ye.whitespace!=="preserve";let s=!1;for(let n=0;ns.type!==3);return t.length===1&&t[0].type===1&&!sr(t[0])?t[0]:null}function Il(e,t,s,n=!1,a=!1){const{children:i}=e,l=[];for(let d=0;d0){if(f>=2){u.codegenNode.patchFlag=-1,l.push(u);continue}}else{const p=u.codegenNode;if(p.type===13){const b=p.patchFlag;if((b===void 0||b===512||b===1)&&Dh(u,s)>=2){const y=Mh(u);y&&(p.props=s.hoist(y))}p.dynamicProps&&(p.dynamicProps=s.hoist(p.dynamicProps))}}}else if(u.type===12&&(n?0:xs(u,s))>=2){u.codegenNode.type===14&&u.codegenNode.arguments.length>0&&u.codegenNode.arguments.push("-1"),l.push(u);continue}if(u.type===1){const f=u.tagType===1;f&&s.scopes.vSlot++,Il(u,e,s,!1,a),f&&s.scopes.vSlot--}else if(u.type===11)Il(u,e,s,u.children.length===1,!0);else if(u.type===9)for(let f=0;fp.key===u||p.key.content===u);return f&&f.value}}l.length&&s.transformHoist&&s.transformHoist(i,s,e)}function xs(e,t){const{constantCache:s}=t;switch(e.type){case 1:if(e.tagType!==0)return 0;const n=s.get(e);if(n!==void 0)return n;const a=e.codegenNode;if(a.type!==13||a.isBlock&&e.tag!=="svg"&&e.tag!=="foreignObject"&&e.tag!=="math")return 0;if(a.patchFlag===void 0){let l=3;const r=Dh(e,t);if(r===0)return s.set(e,0),0;r1)for(let o=0;oH&&(T.childIndex--,T.onNodeRemoved()),T.parent.children.splice(H,1)},onNodeRemoved:Ut,addIdentifiers(C){},removeIdentifiers(C){},hoist(C){Me(C)&&(C=Fe(C)),T.hoists.push(C);const M=Fe(`_hoisted_${T.hoists.length}`,!1,C.loc,2);return M.hoisted=C,M},cache(C,M=!1,H=!1){const P=tx(T.cached.length,C,M,H);return T.cached.push(P),P}};return T.filters=new Set,T}function Ox(e,t){const s=Ix(e,t);Ir(e,s),t.hoistStatic&&Ax(e,s),t.ssr||Nx(e,s),e.helpers=new Set([...s.helpers.keys()]),e.components=[...s.components],e.directives=[...s.directives],e.imports=s.imports,e.hoists=s.hoists,e.temps=s.temps,e.cached=s.cached,e.transformed=!0,e.filters=[...s.filters]}function Nx(e,t){const{helper:s}=t,{children:n}=e;if(n.length===1){const a=Nh(e);if(a&&a.codegenNode){const i=a.codegenNode;i.type===13&&Bc(i,t),e.codegenNode=i}else e.codegenNode=n[0]}else if(n.length>1){let a=64;e.codegenNode=ji(t,s(zi),void 0,e.children,a,void 0,void 0,!0,void 0,!1)}}function Lx(e,t){let s=0;const n=()=>{s--};for(;sn===e:n=>e.test(n);return(n,a)=>{if(n.type===1){const{props:i}=n;if(n.tagType===3&&i.some(fx))return;const l=[];for(let r=0;r`${Ga[e]}: _${Ga[e]}`;function Dx(e,{mode:t="function",prefixIdentifiers:s=t==="module",sourceMap:n=!1,filename:a="template.vue.html",scopeId:i=null,optimizeImports:l=!1,runtimeGlobalName:r="Vue",runtimeModuleName:o="vue",ssrRuntimeModuleName:c="vue/server-renderer",ssr:d=!1,isTS:u=!1,inSSR:f=!1}){const p={mode:t,prefixIdentifiers:s,sourceMap:n,filename:a,scopeId:i,optimizeImports:l,runtimeGlobalName:r,runtimeModuleName:o,ssrRuntimeModuleName:c,ssr:d,isTS:u,inSSR:f,source:e.source,code:"",column:1,line:1,offset:0,indentLevel:0,pure:!1,map:void 0,helper(y){return`_${Ga[y]}`},push(y,E=-2,I){p.code+=y},indent(){b(++p.indentLevel)},deindent(y=!1){y?--p.indentLevel:b(--p.indentLevel)},newline(){b(p.indentLevel)}};function b(y){p.push(` `+" ".repeat(y),0)}return p}function Mx(e,t={}){const s=Dx(e,t);t.onContextCreated&&t.onContextCreated(s);const{mode:n,push:a,prefixIdentifiers:i,indent:l,deindent:r,newline:o,scopeId:c,ssr:d}=s,u=Array.from(e.helpers),f=u.length>0,p=!i&&n!=="module";Px(e,s);const y=d?"ssrRender":"render",I=(d?["_ctx","_push","_parent","_attrs"]:["_ctx","_cache"]).join(", ");if(a(`function ${y}(${I}) {`),l(),p&&(a("with (_ctx) {"),l(),f&&(a(`const { ${u.map(Fh).join(", ")} } = _Vue `,-1),o())),e.components.length&&(Qr(e.components,"component",s),(e.directives.length||e.temps>0)&&o()),e.directives.length&&(Qr(e.directives,"directive",s),e.temps>0&&o()),e.filters&&e.filters.length&&(o(),Qr(e.filters,"filter",s),o()),e.temps>0){a("let ");for(let x=0;x0?", ":""}_temp${x}`)}return(e.components.length||e.directives.length||e.temps)&&(a(` `,0),o()),d||a("return "),e.codegenNode?Kt(e.codegenNode,s):a("null"),p&&(r(),a("}")),r(),a("}"),{ast:e,code:s.code,preamble:"",map:s.map?s.map.toJSON():void 0}}function Px(e,t){const{ssr:s,prefixIdentifiers:n,push:a,newline:i,runtimeModuleName:l,runtimeGlobalName:r,ssrRuntimeModuleName:o}=t,c=r,d=Array.from(e.helpers);if(d.length>0&&(a(`const _Vue = ${c} `,-1),e.hoists.length)){const u=[Tc,Cc,sl,Ec,gh].filter(f=>d.includes(f)).map(Fh).join(", ");a(`const { ${u} } = _Vue -`,-1)}Fx(e.hoists,t),i(),a("return ")}function Qr(e,t,{helper:s,push:n,newline:a,isTS:i}){const l=s(t==="filter"?Oc:t==="component"?Ac:Ic);for(let r=0;r3||!1;t.push("["),s&&t.indent(),al(e,t,s),s&&t.deindent(),t.push("]")}function al(e,t,s=!1,n=!0){const{push:a,newline:i}=t;for(let l=0;ls||"null")}function jx(e,t){const{push:s,helper:n,pure:a}=t,i=Me(e.callee)?e.callee:n(e.callee);a&&s(Or),s(i+"(",-2,e),al(e.arguments,t),s(")")}function qx(e,t){const{push:s,indent:n,deindent:a,newline:i}=t,{properties:l}=e;if(!l.length){s("{}",-2,e);return}const r=l.length>1||!1;s(r?"{":"{ "),r&&n();for(let o=0;o "),(o||r)&&(s("{"),n()),l?(o&&s("return "),xe(l)?jc(l,t):Kt(l,t)):r&&Kt(r,t),(o||r)&&(a(),s("}")),c&&(e.isNonScopedSlot&&s(", undefined, true"),s(")"))}function Wx(e,t){const{test:s,consequent:n,alternate:a,newline:i}=e,{push:l,indent:r,deindent:o,newline:c}=t;if(s.type===4){const u=!Hc(s.content);u&&l("("),$h(s,t),u&&l(")")}else l("("),Kt(s,t),l(")");i&&r(),t.indentLevel++,i||l(" "),l("? "),Kt(n,t),t.indentLevel--,i&&c(),i||l(" "),l(": ");const d=a.type===19;d||t.indentLevel++,Kt(a,t),d||t.indentLevel--,i&&o(!0)}function Zx(e,t){const{push:s,helper:n,indent:a,deindent:i,newline:l}=t,{needPauseTracking:r,needArraySpread:o}=e;o&&s("[...("),s(`_cache[${e.index}] || (`),r&&(a(),s(`${n(Xl)}(-1`),e.inVOnce&&s(", true"),s("),"),l(),s("(")),s(`_cache[${e.index}] = `),Kt(e.value,t),r&&(s(`).cacheIndex = ${e.index},`),l(),s(`${n(Xl)}(1),`),l(),s(`_cache[${e.index}]`),i()),s(")"),o&&s(")]")}new RegExp("\\b"+"arguments,await,break,case,catch,class,const,continue,debugger,default,delete,do,else,export,extends,finally,for,function,if,import,let,new,return,super,switch,throw,try,var,void,while,with,yield".split(",").join("\\b|\\b")+"\\b");const Jx=Ph(/^(?:if|else|else-if)$/,(e,t,s)=>Yx(e,t,s,(n,a,i)=>{const l=s.parent.children;let r=l.indexOf(n),o=0;for(;r-->=0;){const c=l[r];c&&c.type===9&&(o+=c.branches.length)}return()=>{if(i)n.codegenNode=iu(a,o,s);else{const c=Qx(n.codegenNode);c.alternate=iu(a,o+n.branches.length-1,s)}}}));function Yx(e,t,s,n){if(t.name!=="else"&&(!t.exp||!t.exp.content.trim())){const a=t.exp?t.exp.loc:e.loc;s.onError(ut(28,t.loc)),t.exp=Fe("true",!1,a)}if(t.name==="if"){const a=au(e,t),i={type:9,loc:Sx(e.loc),branches:[a]};if(s.replaceNode(i),n)return n(i,a,!0)}else{const a=s.parent.children;let i=a.indexOf(e);for(;i-->=-1;){const l=a[i];if(l&&Eh(l)){s.removeNode(l);continue}if(l&&l.type===9){(t.name==="else-if"||t.name==="else")&&l.branches[l.branches.length-1].condition===void 0&&s.onError(ut(30,e.loc)),s.removeNode();const r=au(e,t);l.branches.push(r);const o=n&&n(l,r,!1);Ir(r,s),o&&o(),s.currentNode=null}else s.onError(ut(30,e.loc));break}}}function au(e,t){const s=e.tagType===3;return{type:10,loc:e.loc,condition:t.name==="else"?void 0:t.exp,children:s&&!Rs(e,"for")?e.children:[e],userKey:Rr(e,"key"),isTemplateIf:s}}function iu(e,t,s){return e.condition?Do(e.condition,lu(e,t,s),Ot(s.helper(sl),['""',"true"])):lu(e,t,s)}function lu(e,t,s){const{helper:n}=s,a=wt("key",Fe(`${t}`,!1,Ss,2)),{children:i}=e,l=i[0];if(i.length!==1||l.type!==1)if(i.length===1&&l.type===11){const o=l.codegenNode;return nr(o,a,s),o}else return ji(s,n(zi),Is([a]),i,64,void 0,void 0,!0,!1,!1,e.loc);else{const o=l.codegenNode,c=hx(o);return c.type===13&&Bc(c,s),nr(c,a,s),o}}function Qx(e){for(;;)if(e.type===19)if(e.alternate.type===19)e=e.alternate;else return e;else e.type===20&&(e=e.value)}const Xx=Ph("for",(e,t,s)=>{const{helper:n,removeHelper:a}=s;return e0(e,t,s,i=>{const l=Ot(n(Lc),[i.source]),r=tr(e),o=Rs(e,"memo"),c=Rr(e,"key",!1,!0);c&&c.type;let d=c&&(c.type===6?c.value?Fe(c.value.content,!0):void 0:c.exp);const u=d?wt("key",d):null,f=i.source.type===4&&i.source.constType>0,p=f?64:c?128:256;return i.codegenNode=ji(s,n(zi),void 0,l,p,void 0,void 0,!0,!f,!1,e.loc),()=>{let b;const{children:y}=i,E=y.length!==1||y[0].type!==1,I=sr(e)?e:r&&e.children.length===1&&sr(e.children[0])?e.children[0]:null;if(I?(b=I.codegenNode,r&&u&&nr(b,u,s)):E?b=ji(s,n(zi),u?Is([u]):void 0,e.children,64,void 0,void 0,!0,void 0,!1):(b=y[0].codegenNode,r&&u&&nr(b,u,s),b.isBlock!==!f&&(b.isBlock?(a(la),a(Za(s.inSSR,b.isComponent))):a(Wa(s.inSSR,b.isComponent))),b.isBlock=!f,b.isBlock?(n(la),n(Za(s.inSSR,b.isComponent))):n(Wa(s.inSSR,b.isComponent))),o){const x=Ka(Fo(i.parseResult,[Fe("_cached")]));x.body=sx([zs(["const _memo = (",o.exp,")"]),zs(["if (_cached && _cached.el",...d?[" && _cached.key === ",d]:[],` && ${s.helperString(yh)}(_cached, _memo)) return _cached`]),zs(["const _item = ",b]),Fe("_item.memo = _memo"),Fe("return _item")]),l.arguments.push(x,Fe("_cache"),Fe(String(s.cached.length))),s.cached.push(null)}else l.arguments.push(Ka(Fo(i.parseResult),b,!0))}})});function e0(e,t,s,n){if(!t.exp){s.onError(ut(31,t.loc));return}const a=t.forParseResult;if(!a){s.onError(ut(32,t.loc));return}Uh(a);const{addIdentifiers:i,removeIdentifiers:l,scopes:r}=s,{source:o,value:c,key:d,index:u}=a,f={type:11,loc:t.loc,source:o,valueAlias:c,keyAlias:d,objectIndexAlias:u,parseResult:a,children:tr(e)?e.children:[e]};s.replaceNode(f),r.vFor++;const p=n&&n(f);return()=>{r.vFor--,p&&p()}}function Uh(e,t){e.finalized||(e.finalized=!0)}function Fo({value:e,key:t,index:s},n=[]){return t0([e,t,s,...n])}function t0(e){let t=e.length;for(;t--&&!e[t];);return e.slice(0,t+1).map((s,n)=>s||Fe("_".repeat(n+1),!1))}const ru=Fe("undefined",!1),s0=(e,t)=>{if(e.type===1&&(e.tagType===1||e.tagType===3)){const s=Rs(e,"slot");if(s)return s.exp,t.scopes.vSlot++,()=>{t.scopes.vSlot--}}},n0=(e,t,s,n)=>Ka(e,s,!1,!0,s.length?s[0].loc:n);function a0(e,t,s=n0){t.helper(Fc);const{children:n,loc:a}=e,i=[],l=[];let r=t.scopes.vSlot>0||t.scopes.vFor>0;const o=Rs(e,"slot",!0);if(o){const{arg:E,exp:I}=o;E&&!ms(E)&&(r=!0),i.push(wt(E||Fe("default",!0),s(I,void 0,n,a)))}let c=!1,d=!1;const u=[],f=new Set;let p=0;for(let E=0;E{const m=s(I,void 0,x,a);return t.compatConfig&&(m.isNonScopedSlot=!0),wt("default",m)};c?u.length&&!u.every(zc)&&(d?t.onError(ut(39,u[0].loc)):i.push(E(void 0,u))):i.push(E(void 0,n))}const b=r?2:Ol(e.children)?3:1;let y=Is(i.concat(wt("_",Fe(b+"",!1))),a);return l.length&&(y=Ot(t.helper(bh),[y,sa(l)])),{slots:y,hasDynamicSlots:r}}function xl(e,t,s){const n=[wt("name",e),wt("fn",t)];return s!=null&&n.push(wt("key",Fe(String(s),!0))),Is(n)}function Ol(e){for(let t=0;tfunction(){if(e=t.currentNode,!(e.type===1&&(e.tagType===0||e.tagType===1)))return;const{tag:n,props:a}=e,i=e.tagType===1;let l=i?l0(e,t):`"${n}"`;const r=Qe(l)&&l.callee===Rc;let o,c,d=0,u,f,p,b=r||l===Ci||l===Sc||!i&&(n==="svg"||n==="foreignObject"||n==="math");if(a.length>0){const y=zh(e,t,void 0,i,r);o=y.props,d=y.patchFlag,f=y.dynamicPropNames;const E=y.directives;p=E&&E.length?sa(E.map(I=>o0(I,t))):void 0,y.shouldUseBlock&&(b=!0)}if(e.children.length>0)if(l===Yl&&(b=!0,d|=1024),i&&l!==Ci&&l!==Yl){const{slots:E,hasDynamicSlots:I}=a0(e,t);c=E,I&&(d|=1024)}else if(e.children.length===1&&l!==Ci){const E=e.children[0],I=E.type,x=I===5||I===8;x&&xs(E,t)===0&&(d|=1),x||I===2?c=E:c=e.children}else c=e.children;f&&f.length&&(u=c0(f)),e.codegenNode=ji(t,l,o,c,d===0?void 0:d,u,p,!!b,!1,i,e.loc)};function l0(e,t,s=!1){let{tag:n}=e;const a=$o(n),i=Rr(e,"is",!1,!0);if(i)if(a||na("COMPILER_IS_ON_ELEMENT",t)){let r;if(i.type===6?r=i.value&&Fe(i.value.content,!0):(r=i.exp,r||(r=Fe("is",!1,i.arg.loc))),r)return Ot(t.helper(Rc),[r])}else i.type===6&&i.value.content.startsWith("vue:")&&(n=i.value.content.slice(4));const l=_h(n)||t.isBuiltInComponent(n);return l?(s||t.helper(l),l):(t.helper(Ac),t.components.add(n),Gi(n,"component"))}function zh(e,t,s=e.props,n,a,i=!1){const{tag:l,loc:r,children:o}=e;let c=[];const d=[],u=[],f=o.length>0;let p=!1,b=0,y=!1,E=!1,I=!1,x=!1,m=!1,_=!1;const S=[],g=M=>{c.length&&(d.push(Is(ou(c),r)),c=[]),M&&d.push(M)},w=()=>{t.scopes.vFor>0&&c.push(wt(Fe("ref_for",!0),Fe("true")))},T=({key:M,value:H})=>{if(ms(M)){const P=M.content,R=oa(P);if(R&&(!n||a)&&P.toLowerCase()!=="onclick"&&P!=="onUpdate:modelValue"&&!xn(P)&&(x=!0),R&&xn(P)&&(_=!0),R&&H.type===14&&(H=H.arguments[0]),H.type===20||(H.type===4||H.type===8)&&xs(H,t)>0)return;P==="ref"?y=!0:P==="class"?E=!0:P==="style"?I=!0:P!=="key"&&!S.includes(P)&&S.push(P),n&&(P==="class"||P==="style")&&!S.includes(P)&&S.push(P)}else m=!0};for(let M=0;Mwe.content==="prop")&&(b|=32);const Y=t.directiveTransforms[P];if(Y){const{props:we,needRuntime:ke}=Y(H,e,t);!i&&we.forEach(T),N&&R&&!ms(R)?g(Is(we,r)):c.push(...we),ke&&(u.push(H),Wt(ke)&&Hh.set(H,ke))}else Xm(P)||(u.push(H),f&&(p=!0))}}let C;if(d.length?(g(),d.length>1?C=Ot(t.helper(Ql),d,r):C=d[0]):c.length&&(C=Is(ou(c),r)),m?b|=16:(E&&!n&&(b|=2),I&&!n&&(b|=4),S.length&&(b|=8),x&&(b|=32)),!p&&(b===0||b===32)&&(y||_||u.length>0)&&(b|=512),!t.inSSR&&C)switch(C.type){case 15:let M=-1,H=-1,P=!1;for(let Q=0;Qwt(l,i)),a))}return sa(s,e.loc)}function c0(e){let t="[";for(let s=0,n=e.length;s{if(sr(e)){const{children:s,loc:n}=e,{slotName:a,slotProps:i}=u0(e,t),l=[t.prefixIdentifiers?"_ctx.$slots":"$slots",a,"{}","undefined","true"];let r=2;i&&(l[2]=i,r=3),s.length&&(l[3]=Ka([],s,!1,!1,n),r=4),t.scopeId&&!t.slotted&&(r=5),l.splice(r),e.codegenNode=Ot(t.helper(vh),l,n)}};function u0(e,t){let s='"default"',n;const a=[];for(let i=0;i0){const{props:i,directives:l}=zh(e,t,a,!1,!1);n=i,l.length&&t.onError(ut(36,l[0].loc))}return{slotName:s,slotProps:n}}const Vh=(e,t,s,n)=>{const{loc:a,modifiers:i,arg:l}=e;!e.exp&&!i.length&&s.onError(ut(35,a));let r;if(l.type===4)if(l.isStatic){let u=l.content;u.startsWith("vue:")&&(u=`vnode-${u.slice(4)}`);const f=t.tagType!==0||u.startsWith("vnode")||!/[A-Z]/.test(u)?La(it(u)):`on:${u}`;r=Fe(f,!0,l.loc)}else r=zs([`${s.helperString(Lo)}(`,l,")"]);else r=l,r.children.unshift(`${s.helperString(Lo)}(`),r.children.push(")");let o=e.exp;o&&!o.content.trim()&&(o=void 0);let c=s.cacheHandlers&&!o&&!s.inVOnce;if(o){const u=Sh(o),f=!(u||dx(o)),p=o.content.includes(";");(f||c&&u)&&(o=zs([`${f?"$event":"(...args)"} => ${p?"{":"("}`,o,p?"}":")"]))}let d={props:[wt(r,o||Fe("() => {}",!1,a))]};return n&&(d=n(d)),c&&(d.props[0].value=s.cache(d.props[0].value)),d.props.forEach(u=>u.key.isHandlerKey=!0),d},f0=(e,t,s)=>{const{modifiers:n,loc:a}=e,i=e.arg;let{exp:l}=e;return l&&l.type===4&&!l.content.trim()&&(l=void 0),i.type!==4?(i.children.unshift("("),i.children.push(') || ""')):i.isStatic||(i.content=i.content?`${i.content} || ""`:'""'),n.some(r=>r.content==="camel")&&(i.type===4?i.isStatic?i.content=it(i.content):i.content=`${s.helperString(No)}(${i.content})`:(i.children.unshift(`${s.helperString(No)}(`),i.children.push(")"))),s.inSSR||(n.some(r=>r.content==="prop")&&cu(i,"."),n.some(r=>r.content==="attr")&&cu(i,"^")),{props:[wt(i,l)]}},cu=(e,t)=>{e.type===4?e.isStatic?e.content=t+e.content:e.content=`\`${t}\${${e.content}}\``:(e.children.unshift(`'${t}' + (`),e.children.push(")"))},p0=(e,t)=>{if(e.type===0||e.type===1||e.type===11||e.type===10)return()=>{const s=e.children;let n,a=!1;for(let i=0;ii.type===7&&!t.directiveTransforms[i.name])&&e.tag!=="template")))for(let i=0;i{if(e.type===1&&Rs(e,"once",!0))return du.has(e)||t.inVOnce||t.inSSR?void 0:(du.add(e),t.inVOnce=!0,t.helper(Xl),()=>{t.inVOnce=!1;const s=t.currentNode;s.codegenNode&&(s.codegenNode=t.cache(s.codegenNode,!0,!0))})},jh=(e,t,s)=>{const{exp:n,arg:a}=e;if(!n)return s.onError(ut(41,e.loc)),di();const i=n.loc.source.trim(),l=n.type===4?n.content:i,r=s.bindingMetadata[i];if(r==="props"||r==="props-aliased")return s.onError(ut(44,n.loc)),di();if(r==="literal-const"||r==="setup-const")return s.onError(ut(45,n.loc)),di();if(!l.trim()||!Sh(n))return s.onError(ut(42,n.loc)),di();const o=a||Fe("modelValue",!0),c=a?ms(a)?`onUpdate:${it(a.content)}`:zs(['"onUpdate:" + ',a]):"onUpdate:modelValue";let d;const u=s.isTS?"($event: any)":"$event";d=zs([`${u} => ((`,n,") = $event)"]);const f=[wt(o,e.exp),wt(c,d)];if(e.modifiers.length&&t.tagType===1){const p=e.modifiers.map(y=>y.content).map(y=>(Hc(y)?y:JSON.stringify(y))+": true").join(", "),b=a?ms(a)?`${a.content}Modifiers`:zs([a,' + "Modifiers"']):"modelModifiers";f.push(wt(b,Fe(`{ ${p} }`,!1,e.loc,2)))}return di(f)};function di(e=[]){return{props:e}}const m0=/[\w).+\-_$\]]/,g0=(e,t)=>{na("COMPILER_FILTERS",t)&&(e.type===5?ar(e.content,t):e.type===1&&e.props.forEach(s=>{s.type===7&&s.name!=="for"&&s.exp&&ar(s.exp,t)}))};function ar(e,t){if(e.type===4)uu(e,t);else for(let s=0;s=0&&(x=s.charAt(I),x===" ");I--);(!x||!m0.test(x))&&(l=!0)}}b===void 0?b=s.slice(0,p).trim():d!==0&&E();function E(){y.push(s.slice(d,p).trim()),d=p+1}if(y.length){for(p=0;p{if(e.type===1){const s=Rs(e,"memo");return!s||fu.has(e)||t.inSSR?void 0:(fu.add(e),()=>{const n=e.codegenNode||t.currentNode.codegenNode;n&&n.type===13&&(e.tagType!==1&&Bc(n,t),e.codegenNode=Ot(t.helper($c),[s.exp,Ka(void 0,n),"_cache",String(t.cached.length)]),t.cached.push(null))})}},y0=(e,t)=>{if(e.type===1){for(const s of e.props)if(s.type===7&&s.name==="bind"&&(!s.exp||s.exp.type===4&&!s.exp.content.trim())&&s.arg){const n=s.arg;if(n.type!==4||!n.isStatic)t.onError(ut(53,n.loc)),s.exp=Fe("",!0,n.loc);else{const a=it(n.content);(kh.test(a[0])||a[0]==="-")&&(s.exp=Fe(a,!1,n.loc))}}}};function x0(e){return[[y0,h0,Jx,b0,Xx,g0,d0,i0,s0,p0],{on:Vh,bind:f0,model:jh}]}function _0(e,t={}){const s=t.onError||Uc,n=t.mode==="module";t.prefixIdentifiers===!0?s(ut(48)):n&&s(ut(49));const a=!1;t.cacheHandlers&&s(ut(50)),t.scopeId&&!n&&s(ut(51));const i=ze({},t,{prefixIdentifiers:a}),l=Me(e)?Ex(e,i):e,[r,o]=x0();return Ox(l,ze({},i,{nodeTransforms:[...r,...t.nodeTransforms||[]],directiveTransforms:ze({},o,t.directiveTransforms||{})})),Mx(l,i)}const k0=()=>({props:[]});/** +`,-1)}Fx(e.hoists,t),i(),a("return ")}function Qr(e,t,{helper:s,push:n,newline:a,isTS:i}){const l=s(t==="filter"?Oc:t==="component"?Ac:Ic);for(let r=0;r3||!1;t.push("["),s&&t.indent(),al(e,t,s),s&&t.deindent(),t.push("]")}function al(e,t,s=!1,n=!0){const{push:a,newline:i}=t;for(let l=0;ls||"null")}function jx(e,t){const{push:s,helper:n,pure:a}=t,i=Me(e.callee)?e.callee:n(e.callee);a&&s(Or),s(i+"(",-2,e),al(e.arguments,t),s(")")}function qx(e,t){const{push:s,indent:n,deindent:a,newline:i}=t,{properties:l}=e;if(!l.length){s("{}",-2,e);return}const r=l.length>1||!1;s(r?"{":"{ "),r&&n();for(let o=0;o "),(o||r)&&(s("{"),n()),l?(o&&s("return "),xe(l)?jc(l,t):Kt(l,t)):r&&Kt(r,t),(o||r)&&(a(),s("}")),c&&(e.isNonScopedSlot&&s(", undefined, true"),s(")"))}function Wx(e,t){const{test:s,consequent:n,alternate:a,newline:i}=e,{push:l,indent:r,deindent:o,newline:c}=t;if(s.type===4){const u=!Hc(s.content);u&&l("("),$h(s,t),u&&l(")")}else l("("),Kt(s,t),l(")");i&&r(),t.indentLevel++,i||l(" "),l("? "),Kt(n,t),t.indentLevel--,i&&c(),i||l(" "),l(": ");const d=a.type===19;d||t.indentLevel++,Kt(a,t),d||t.indentLevel--,i&&o(!0)}function Zx(e,t){const{push:s,helper:n,indent:a,deindent:i,newline:l}=t,{needPauseTracking:r,needArraySpread:o}=e;o&&s("[...("),s(`_cache[${e.index}] || (`),r&&(a(),s(`${n(Xl)}(-1`),e.inVOnce&&s(", true"),s("),"),l(),s("(")),s(`_cache[${e.index}] = `),Kt(e.value,t),r&&(s(`).cacheIndex = ${e.index},`),l(),s(`${n(Xl)}(1),`),l(),s(`_cache[${e.index}]`),i()),s(")"),o&&s(")]")}new RegExp("\\b"+"arguments,await,break,case,catch,class,const,continue,debugger,default,delete,do,else,export,extends,finally,for,function,if,import,let,new,return,super,switch,throw,try,var,void,while,with,yield".split(",").join("\\b|\\b")+"\\b");const Jx=Ph(/^(?:if|else|else-if)$/,(e,t,s)=>Yx(e,t,s,(n,a,i)=>{const l=s.parent.children;let r=l.indexOf(n),o=0;for(;r-->=0;){const c=l[r];c&&c.type===9&&(o+=c.branches.length)}return()=>{if(i)n.codegenNode=iu(a,o,s);else{const c=Qx(n.codegenNode);c.alternate=iu(a,o+n.branches.length-1,s)}}}));function Yx(e,t,s,n){if(t.name!=="else"&&(!t.exp||!t.exp.content.trim())){const a=t.exp?t.exp.loc:e.loc;s.onError(ut(28,t.loc)),t.exp=Fe("true",!1,a)}if(t.name==="if"){const a=au(e,t),i={type:9,loc:Sx(e.loc),branches:[a]};if(s.replaceNode(i),n)return n(i,a,!0)}else{const a=s.parent.children;let i=a.indexOf(e);for(;i-->=-1;){const l=a[i];if(l&&Eh(l)){s.removeNode(l);continue}if(l&&l.type===9){(t.name==="else-if"||t.name==="else")&&l.branches[l.branches.length-1].condition===void 0&&s.onError(ut(30,e.loc)),s.removeNode();const r=au(e,t);l.branches.push(r);const o=n&&n(l,r,!1);Ir(r,s),o&&o(),s.currentNode=null}else s.onError(ut(30,e.loc));break}}}function au(e,t){const s=e.tagType===3;return{type:10,loc:e.loc,condition:t.name==="else"?void 0:t.exp,children:s&&!Is(e,"for")?e.children:[e],userKey:Rr(e,"key"),isTemplateIf:s}}function iu(e,t,s){return e.condition?Do(e.condition,lu(e,t,s),Ot(s.helper(sl),['""',"true"])):lu(e,t,s)}function lu(e,t,s){const{helper:n}=s,a=wt("key",Fe(`${t}`,!1,Ss,2)),{children:i}=e,l=i[0];if(i.length!==1||l.type!==1)if(i.length===1&&l.type===11){const o=l.codegenNode;return nr(o,a,s),o}else return ji(s,n(zi),Os([a]),i,64,void 0,void 0,!0,!1,!1,e.loc);else{const o=l.codegenNode,c=hx(o);return c.type===13&&Bc(c,s),nr(c,a,s),o}}function Qx(e){for(;;)if(e.type===19)if(e.alternate.type===19)e=e.alternate;else return e;else e.type===20&&(e=e.value)}const Xx=Ph("for",(e,t,s)=>{const{helper:n,removeHelper:a}=s;return e0(e,t,s,i=>{const l=Ot(n(Lc),[i.source]),r=tr(e),o=Is(e,"memo"),c=Rr(e,"key",!1,!0);c&&c.type;let d=c&&(c.type===6?c.value?Fe(c.value.content,!0):void 0:c.exp);const u=d?wt("key",d):null,f=i.source.type===4&&i.source.constType>0,p=f?64:c?128:256;return i.codegenNode=ji(s,n(zi),void 0,l,p,void 0,void 0,!0,!f,!1,e.loc),()=>{let b;const{children:y}=i,E=y.length!==1||y[0].type!==1,I=sr(e)?e:r&&e.children.length===1&&sr(e.children[0])?e.children[0]:null;if(I?(b=I.codegenNode,r&&u&&nr(b,u,s)):E?b=ji(s,n(zi),u?Os([u]):void 0,e.children,64,void 0,void 0,!0,void 0,!1):(b=y[0].codegenNode,r&&u&&nr(b,u,s),b.isBlock!==!f&&(b.isBlock?(a(la),a(Za(s.inSSR,b.isComponent))):a(Wa(s.inSSR,b.isComponent))),b.isBlock=!f,b.isBlock?(n(la),n(Za(s.inSSR,b.isComponent))):n(Wa(s.inSSR,b.isComponent))),o){const x=Ka(Fo(i.parseResult,[Fe("_cached")]));x.body=sx([Vs(["const _memo = (",o.exp,")"]),Vs(["if (_cached && _cached.el",...d?[" && _cached.key === ",d]:[],` && ${s.helperString(yh)}(_cached, _memo)) return _cached`]),Vs(["const _item = ",b]),Fe("_item.memo = _memo"),Fe("return _item")]),l.arguments.push(x,Fe("_cache"),Fe(String(s.cached.length))),s.cached.push(null)}else l.arguments.push(Ka(Fo(i.parseResult),b,!0))}})});function e0(e,t,s,n){if(!t.exp){s.onError(ut(31,t.loc));return}const a=t.forParseResult;if(!a){s.onError(ut(32,t.loc));return}Uh(a);const{addIdentifiers:i,removeIdentifiers:l,scopes:r}=s,{source:o,value:c,key:d,index:u}=a,f={type:11,loc:t.loc,source:o,valueAlias:c,keyAlias:d,objectIndexAlias:u,parseResult:a,children:tr(e)?e.children:[e]};s.replaceNode(f),r.vFor++;const p=n&&n(f);return()=>{r.vFor--,p&&p()}}function Uh(e,t){e.finalized||(e.finalized=!0)}function Fo({value:e,key:t,index:s},n=[]){return t0([e,t,s,...n])}function t0(e){let t=e.length;for(;t--&&!e[t];);return e.slice(0,t+1).map((s,n)=>s||Fe("_".repeat(n+1),!1))}const ru=Fe("undefined",!1),s0=(e,t)=>{if(e.type===1&&(e.tagType===1||e.tagType===3)){const s=Is(e,"slot");if(s)return s.exp,t.scopes.vSlot++,()=>{t.scopes.vSlot--}}},n0=(e,t,s,n)=>Ka(e,s,!1,!0,s.length?s[0].loc:n);function a0(e,t,s=n0){t.helper(Fc);const{children:n,loc:a}=e,i=[],l=[];let r=t.scopes.vSlot>0||t.scopes.vFor>0;const o=Is(e,"slot",!0);if(o){const{arg:E,exp:I}=o;E&&!ms(E)&&(r=!0),i.push(wt(E||Fe("default",!0),s(I,void 0,n,a)))}let c=!1,d=!1;const u=[],f=new Set;let p=0;for(let E=0;E{const m=s(I,void 0,x,a);return t.compatConfig&&(m.isNonScopedSlot=!0),wt("default",m)};c?u.length&&!u.every(zc)&&(d?t.onError(ut(39,u[0].loc)):i.push(E(void 0,u))):i.push(E(void 0,n))}const b=r?2:Ol(e.children)?3:1;let y=Os(i.concat(wt("_",Fe(b+"",!1))),a);return l.length&&(y=Ot(t.helper(bh),[y,sa(l)])),{slots:y,hasDynamicSlots:r}}function xl(e,t,s){const n=[wt("name",e),wt("fn",t)];return s!=null&&n.push(wt("key",Fe(String(s),!0))),Os(n)}function Ol(e){for(let t=0;tfunction(){if(e=t.currentNode,!(e.type===1&&(e.tagType===0||e.tagType===1)))return;const{tag:n,props:a}=e,i=e.tagType===1;let l=i?l0(e,t):`"${n}"`;const r=Qe(l)&&l.callee===Rc;let o,c,d=0,u,f,p,b=r||l===Ci||l===Sc||!i&&(n==="svg"||n==="foreignObject"||n==="math");if(a.length>0){const y=zh(e,t,void 0,i,r);o=y.props,d=y.patchFlag,f=y.dynamicPropNames;const E=y.directives;p=E&&E.length?sa(E.map(I=>o0(I,t))):void 0,y.shouldUseBlock&&(b=!0)}if(e.children.length>0)if(l===Yl&&(b=!0,d|=1024),i&&l!==Ci&&l!==Yl){const{slots:E,hasDynamicSlots:I}=a0(e,t);c=E,I&&(d|=1024)}else if(e.children.length===1&&l!==Ci){const E=e.children[0],I=E.type,x=I===5||I===8;x&&xs(E,t)===0&&(d|=1),x||I===2?c=E:c=e.children}else c=e.children;f&&f.length&&(u=c0(f)),e.codegenNode=ji(t,l,o,c,d===0?void 0:d,u,p,!!b,!1,i,e.loc)};function l0(e,t,s=!1){let{tag:n}=e;const a=$o(n),i=Rr(e,"is",!1,!0);if(i)if(a||na("COMPILER_IS_ON_ELEMENT",t)){let r;if(i.type===6?r=i.value&&Fe(i.value.content,!0):(r=i.exp,r||(r=Fe("is",!1,i.arg.loc))),r)return Ot(t.helper(Rc),[r])}else i.type===6&&i.value.content.startsWith("vue:")&&(n=i.value.content.slice(4));const l=_h(n)||t.isBuiltInComponent(n);return l?(s||t.helper(l),l):(t.helper(Ac),t.components.add(n),Gi(n,"component"))}function zh(e,t,s=e.props,n,a,i=!1){const{tag:l,loc:r,children:o}=e;let c=[];const d=[],u=[],f=o.length>0;let p=!1,b=0,y=!1,E=!1,I=!1,x=!1,m=!1,_=!1;const S=[],g=M=>{c.length&&(d.push(Os(ou(c),r)),c=[]),M&&d.push(M)},w=()=>{t.scopes.vFor>0&&c.push(wt(Fe("ref_for",!0),Fe("true")))},T=({key:M,value:H})=>{if(ms(M)){const P=M.content,R=oa(P);if(R&&(!n||a)&&P.toLowerCase()!=="onclick"&&P!=="onUpdate:modelValue"&&!xn(P)&&(x=!0),R&&xn(P)&&(_=!0),R&&H.type===14&&(H=H.arguments[0]),H.type===20||(H.type===4||H.type===8)&&xs(H,t)>0)return;P==="ref"?y=!0:P==="class"?E=!0:P==="style"?I=!0:P!=="key"&&!S.includes(P)&&S.push(P),n&&(P==="class"||P==="style")&&!S.includes(P)&&S.push(P)}else m=!0};for(let M=0;Mwe.content==="prop")&&(b|=32);const Y=t.directiveTransforms[P];if(Y){const{props:we,needRuntime:ke}=Y(H,e,t);!i&&we.forEach(T),N&&R&&!ms(R)?g(Os(we,r)):c.push(...we),ke&&(u.push(H),Wt(ke)&&Hh.set(H,ke))}else Xm(P)||(u.push(H),f&&(p=!0))}}let C;if(d.length?(g(),d.length>1?C=Ot(t.helper(Ql),d,r):C=d[0]):c.length&&(C=Os(ou(c),r)),m?b|=16:(E&&!n&&(b|=2),I&&!n&&(b|=4),S.length&&(b|=8),x&&(b|=32)),!p&&(b===0||b===32)&&(y||_||u.length>0)&&(b|=512),!t.inSSR&&C)switch(C.type){case 15:let M=-1,H=-1,P=!1;for(let Q=0;Qwt(l,i)),a))}return sa(s,e.loc)}function c0(e){let t="[";for(let s=0,n=e.length;s{if(sr(e)){const{children:s,loc:n}=e,{slotName:a,slotProps:i}=u0(e,t),l=[t.prefixIdentifiers?"_ctx.$slots":"$slots",a,"{}","undefined","true"];let r=2;i&&(l[2]=i,r=3),s.length&&(l[3]=Ka([],s,!1,!1,n),r=4),t.scopeId&&!t.slotted&&(r=5),l.splice(r),e.codegenNode=Ot(t.helper(vh),l,n)}};function u0(e,t){let s='"default"',n;const a=[];for(let i=0;i0){const{props:i,directives:l}=zh(e,t,a,!1,!1);n=i,l.length&&t.onError(ut(36,l[0].loc))}return{slotName:s,slotProps:n}}const Vh=(e,t,s,n)=>{const{loc:a,modifiers:i,arg:l}=e;!e.exp&&!i.length&&s.onError(ut(35,a));let r;if(l.type===4)if(l.isStatic){let u=l.content;u.startsWith("vue:")&&(u=`vnode-${u.slice(4)}`);const f=t.tagType!==0||u.startsWith("vnode")||!/[A-Z]/.test(u)?La(it(u)):`on:${u}`;r=Fe(f,!0,l.loc)}else r=Vs([`${s.helperString(Lo)}(`,l,")"]);else r=l,r.children.unshift(`${s.helperString(Lo)}(`),r.children.push(")");let o=e.exp;o&&!o.content.trim()&&(o=void 0);let c=s.cacheHandlers&&!o&&!s.inVOnce;if(o){const u=Sh(o),f=!(u||dx(o)),p=o.content.includes(";");(f||c&&u)&&(o=Vs([`${f?"$event":"(...args)"} => ${p?"{":"("}`,o,p?"}":")"]))}let d={props:[wt(r,o||Fe("() => {}",!1,a))]};return n&&(d=n(d)),c&&(d.props[0].value=s.cache(d.props[0].value)),d.props.forEach(u=>u.key.isHandlerKey=!0),d},f0=(e,t,s)=>{const{modifiers:n,loc:a}=e,i=e.arg;let{exp:l}=e;return l&&l.type===4&&!l.content.trim()&&(l=void 0),i.type!==4?(i.children.unshift("("),i.children.push(') || ""')):i.isStatic||(i.content=i.content?`${i.content} || ""`:'""'),n.some(r=>r.content==="camel")&&(i.type===4?i.isStatic?i.content=it(i.content):i.content=`${s.helperString(No)}(${i.content})`:(i.children.unshift(`${s.helperString(No)}(`),i.children.push(")"))),s.inSSR||(n.some(r=>r.content==="prop")&&cu(i,"."),n.some(r=>r.content==="attr")&&cu(i,"^")),{props:[wt(i,l)]}},cu=(e,t)=>{e.type===4?e.isStatic?e.content=t+e.content:e.content=`\`${t}\${${e.content}}\``:(e.children.unshift(`'${t}' + (`),e.children.push(")"))},p0=(e,t)=>{if(e.type===0||e.type===1||e.type===11||e.type===10)return()=>{const s=e.children;let n,a=!1;for(let i=0;ii.type===7&&!t.directiveTransforms[i.name])&&e.tag!=="template")))for(let i=0;i{if(e.type===1&&Is(e,"once",!0))return du.has(e)||t.inVOnce||t.inSSR?void 0:(du.add(e),t.inVOnce=!0,t.helper(Xl),()=>{t.inVOnce=!1;const s=t.currentNode;s.codegenNode&&(s.codegenNode=t.cache(s.codegenNode,!0,!0))})},jh=(e,t,s)=>{const{exp:n,arg:a}=e;if(!n)return s.onError(ut(41,e.loc)),di();const i=n.loc.source.trim(),l=n.type===4?n.content:i,r=s.bindingMetadata[i];if(r==="props"||r==="props-aliased")return s.onError(ut(44,n.loc)),di();if(r==="literal-const"||r==="setup-const")return s.onError(ut(45,n.loc)),di();if(!l.trim()||!Sh(n))return s.onError(ut(42,n.loc)),di();const o=a||Fe("modelValue",!0),c=a?ms(a)?`onUpdate:${it(a.content)}`:Vs(['"onUpdate:" + ',a]):"onUpdate:modelValue";let d;const u=s.isTS?"($event: any)":"$event";d=Vs([`${u} => ((`,n,") = $event)"]);const f=[wt(o,e.exp),wt(c,d)];if(e.modifiers.length&&t.tagType===1){const p=e.modifiers.map(y=>y.content).map(y=>(Hc(y)?y:JSON.stringify(y))+": true").join(", "),b=a?ms(a)?`${a.content}Modifiers`:Vs([a,' + "Modifiers"']):"modelModifiers";f.push(wt(b,Fe(`{ ${p} }`,!1,e.loc,2)))}return di(f)};function di(e=[]){return{props:e}}const m0=/[\w).+\-_$\]]/,g0=(e,t)=>{na("COMPILER_FILTERS",t)&&(e.type===5?ar(e.content,t):e.type===1&&e.props.forEach(s=>{s.type===7&&s.name!=="for"&&s.exp&&ar(s.exp,t)}))};function ar(e,t){if(e.type===4)uu(e,t);else for(let s=0;s=0&&(x=s.charAt(I),x===" ");I--);(!x||!m0.test(x))&&(l=!0)}}b===void 0?b=s.slice(0,p).trim():d!==0&&E();function E(){y.push(s.slice(d,p).trim()),d=p+1}if(y.length){for(p=0;p{if(e.type===1){const s=Is(e,"memo");return!s||fu.has(e)||t.inSSR?void 0:(fu.add(e),()=>{const n=e.codegenNode||t.currentNode.codegenNode;n&&n.type===13&&(e.tagType!==1&&Bc(n,t),e.codegenNode=Ot(t.helper($c),[s.exp,Ka(void 0,n),"_cache",String(t.cached.length)]),t.cached.push(null))})}},y0=(e,t)=>{if(e.type===1){for(const s of e.props)if(s.type===7&&s.name==="bind"&&(!s.exp||s.exp.type===4&&!s.exp.content.trim())&&s.arg){const n=s.arg;if(n.type!==4||!n.isStatic)t.onError(ut(53,n.loc)),s.exp=Fe("",!0,n.loc);else{const a=it(n.content);(kh.test(a[0])||a[0]==="-")&&(s.exp=Fe(a,!1,n.loc))}}}};function x0(e){return[[y0,h0,Jx,b0,Xx,g0,d0,i0,s0,p0],{on:Vh,bind:f0,model:jh}]}function _0(e,t={}){const s=t.onError||Uc,n=t.mode==="module";t.prefixIdentifiers===!0?s(ut(48)):n&&s(ut(49));const a=!1;t.cacheHandlers&&s(ut(50)),t.scopeId&&!n&&s(ut(51));const i=ze({},t,{prefixIdentifiers:a}),l=Me(e)?Ex(e,i):e,[r,o]=x0();return Ox(l,ze({},i,{nodeTransforms:[...r,...t.nodeTransforms||[]],directiveTransforms:ze({},o,t.directiveTransforms||{})})),Mx(l,i)}const k0=()=>({props:[]});/** * @vue/compiler-dom v3.5.38 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/const qh=Symbol(""),Gh=Symbol(""),Kh=Symbol(""),Wh=Symbol(""),Bo=Symbol(""),Zh=Symbol(""),Jh=Symbol(""),Yh=Symbol(""),Qh=Symbol(""),Xh=Symbol("");Xy({[qh]:"vModelRadio",[Gh]:"vModelCheckbox",[Kh]:"vModelText",[Wh]:"vModelSelect",[Bo]:"vModelDynamic",[Zh]:"withModifiers",[Jh]:"withKeys",[Yh]:"vShow",[Qh]:"Transition",[Xh]:"TransitionGroup"});let _a;function w0(e,t=!1){return _a||(_a=document.createElement("div")),t?(_a.innerHTML=`
`,_a.children[0].getAttribute("foo")):(_a.innerHTML=e,_a.textContent)}const S0={parseMode:"html",isVoidTag:gg,isNativeTag:e=>pg(e)||hg(e)||mg(e),isPreTag:e=>e==="pre",isIgnoreNewlineTag:e=>e==="pre"||e==="textarea",decodeEntities:w0,isBuiltInComponent:e=>{if(e==="Transition"||e==="transition")return Qh;if(e==="TransitionGroup"||e==="transition-group")return Xh},getNamespace(e,t,s){let n=t?t.ns:s;if(t&&n===2)if(t.tag==="annotation-xml"){if(e==="svg")return 1;t.props.some(a=>a.type===6&&a.name==="encoding"&&a.value!=null&&(a.value.content==="text/html"||a.value.content==="application/xhtml+xml"))&&(n=0)}else/^m(?:[ions]|text)$/.test(t.tag)&&e!=="mglyph"&&e!=="malignmark"&&(n=0);else t&&n===1&&(t.tag==="foreignObject"||t.tag==="desc"||t.tag==="title")&&(n=0);if(n===0){if(e==="svg")return 1;if(e==="math")return 2}return n}},T0=e=>{e.type===1&&e.props.forEach((t,s)=>{t.type===6&&t.name==="style"&&t.value&&(e.props[s]={type:7,name:"bind",arg:Fe("style",!0,t.loc),exp:C0(t.value.content,t.loc),modifiers:[],loc:t.loc})})},C0=(e,t)=>{const s=ff(e);return Fe(JSON.stringify(s),!1,t,3)};function Un(e,t){return ut(e,t)}const E0=(e,t,s)=>{const{exp:n,loc:a}=e;return n||s.onError(Un(54,a)),t.children.length&&(s.onError(Un(55,a)),t.children.length=0),{props:[wt(Fe("innerHTML",!0,a),n||Fe("",!0))]}},A0=(e,t,s)=>{const{exp:n,loc:a}=e;return n||s.onError(Un(56,a)),t.children.length&&(s.onError(Un(57,a)),t.children.length=0),{props:[wt(Fe("textContent",!0),n?xs(n,s)>0?n:Ot(s.helperString(Ar),[n],a):Fe("",!0))]}},R0=(e,t,s)=>{const n=jh(e,t,s);if(!n.props.length||t.tagType===1)return n;e.arg&&s.onError(Un(59,e.arg.loc));const{tag:a}=t,i=s.isCustomElement(a);if(a==="input"||a==="textarea"||a==="select"||i){let l=Kh,r=!1;if(a==="input"||i){const o=Rr(t,"type");if(o){if(o.type===7)l=Bo;else if(o.value)switch(o.value.content){case"radio":l=qh;break;case"checkbox":l=Gh;break;case"file":r=!0,s.onError(Un(60,e.loc));break}}else ux(t)&&(l=Bo)}else a==="select"&&(l=Wh);r||(n.needRuntime=s.helper(l))}else s.onError(Un(58,e.loc));return n.props=n.props.filter(l=>!(l.key.type===4&&l.key.content==="modelValue")),n},I0=ws("passive,once,capture"),O0=ws("stop,prevent,self,ctrl,shift,alt,meta,exact,middle"),N0=ws("left,right"),em=ws("onkeyup,onkeydown,onkeypress"),L0=(e,t,s,n)=>{const a=[],i=[],l=[];for(let r=0;rms(e)&&e.content.toLowerCase()==="onclick"?Fe(t,!0):e.type!==4?zs(["(",e,`) === "onClick" ? "${t}" : (`,e,")"]):e,D0=(e,t,s)=>Vh(e,t,s,n=>{const{modifiers:a}=e;if(!a.length)return n;let{key:i,value:l}=n.props[0];const{keyModifiers:r,nonKeyModifiers:o,eventOptionModifiers:c}=L0(i,a,s,e.loc);if(o.includes("right")&&(i=pu(i,"onContextmenu")),o.includes("middle")&&(i=pu(i,"onMouseup")),o.length&&(l=Ot(s.helper(Zh),[l,JSON.stringify(o)])),r.length&&(!ms(i)||em(i.content.toLowerCase()))&&(l=Ot(s.helper(Jh),[l,JSON.stringify(r)])),c.length){const d=c.map(da).join("");i=ms(i)?Fe(`${i.content}${d}`,!0):zs(["(",i,`) + "${d}"`])}return{props:[wt(i,l)]}}),M0=(e,t,s)=>{const{exp:n,loc:a}=e;return n||s.onError(Un(62,a)),{props:[],needRuntime:s.helper(Yh)}},P0=(e,t)=>{e.type===1&&e.tagType===0&&(e.tag==="script"||e.tag==="style")&&t.removeNode()},F0=[T0],$0={cloak:k0,html:E0,text:A0,model:R0,on:D0,show:M0};function B0(e,t={}){return _0(e,ze({},S0,t,{nodeTransforms:[P0,...F0,...t.nodeTransforms||[]],directiveTransforms:ze({},$0,t.directiveTransforms||{}),transformHoist:null}))}/** +**/const qh=Symbol(""),Gh=Symbol(""),Kh=Symbol(""),Wh=Symbol(""),Bo=Symbol(""),Zh=Symbol(""),Jh=Symbol(""),Yh=Symbol(""),Qh=Symbol(""),Xh=Symbol("");Xy({[qh]:"vModelRadio",[Gh]:"vModelCheckbox",[Kh]:"vModelText",[Wh]:"vModelSelect",[Bo]:"vModelDynamic",[Zh]:"withModifiers",[Jh]:"withKeys",[Yh]:"vShow",[Qh]:"Transition",[Xh]:"TransitionGroup"});let _a;function w0(e,t=!1){return _a||(_a=document.createElement("div")),t?(_a.innerHTML=`
`,_a.children[0].getAttribute("foo")):(_a.innerHTML=e,_a.textContent)}const S0={parseMode:"html",isVoidTag:gg,isNativeTag:e=>pg(e)||hg(e)||mg(e),isPreTag:e=>e==="pre",isIgnoreNewlineTag:e=>e==="pre"||e==="textarea",decodeEntities:w0,isBuiltInComponent:e=>{if(e==="Transition"||e==="transition")return Qh;if(e==="TransitionGroup"||e==="transition-group")return Xh},getNamespace(e,t,s){let n=t?t.ns:s;if(t&&n===2)if(t.tag==="annotation-xml"){if(e==="svg")return 1;t.props.some(a=>a.type===6&&a.name==="encoding"&&a.value!=null&&(a.value.content==="text/html"||a.value.content==="application/xhtml+xml"))&&(n=0)}else/^m(?:[ions]|text)$/.test(t.tag)&&e!=="mglyph"&&e!=="malignmark"&&(n=0);else t&&n===1&&(t.tag==="foreignObject"||t.tag==="desc"||t.tag==="title")&&(n=0);if(n===0){if(e==="svg")return 1;if(e==="math")return 2}return n}},T0=e=>{e.type===1&&e.props.forEach((t,s)=>{t.type===6&&t.name==="style"&&t.value&&(e.props[s]={type:7,name:"bind",arg:Fe("style",!0,t.loc),exp:C0(t.value.content,t.loc),modifiers:[],loc:t.loc})})},C0=(e,t)=>{const s=ff(e);return Fe(JSON.stringify(s),!1,t,3)};function Un(e,t){return ut(e,t)}const E0=(e,t,s)=>{const{exp:n,loc:a}=e;return n||s.onError(Un(54,a)),t.children.length&&(s.onError(Un(55,a)),t.children.length=0),{props:[wt(Fe("innerHTML",!0,a),n||Fe("",!0))]}},A0=(e,t,s)=>{const{exp:n,loc:a}=e;return n||s.onError(Un(56,a)),t.children.length&&(s.onError(Un(57,a)),t.children.length=0),{props:[wt(Fe("textContent",!0),n?xs(n,s)>0?n:Ot(s.helperString(Ar),[n],a):Fe("",!0))]}},R0=(e,t,s)=>{const n=jh(e,t,s);if(!n.props.length||t.tagType===1)return n;e.arg&&s.onError(Un(59,e.arg.loc));const{tag:a}=t,i=s.isCustomElement(a);if(a==="input"||a==="textarea"||a==="select"||i){let l=Kh,r=!1;if(a==="input"||i){const o=Rr(t,"type");if(o){if(o.type===7)l=Bo;else if(o.value)switch(o.value.content){case"radio":l=qh;break;case"checkbox":l=Gh;break;case"file":r=!0,s.onError(Un(60,e.loc));break}}else ux(t)&&(l=Bo)}else a==="select"&&(l=Wh);r||(n.needRuntime=s.helper(l))}else s.onError(Un(58,e.loc));return n.props=n.props.filter(l=>!(l.key.type===4&&l.key.content==="modelValue")),n},I0=ws("passive,once,capture"),O0=ws("stop,prevent,self,ctrl,shift,alt,meta,exact,middle"),N0=ws("left,right"),em=ws("onkeyup,onkeydown,onkeypress"),L0=(e,t,s,n)=>{const a=[],i=[],l=[];for(let r=0;rms(e)&&e.content.toLowerCase()==="onclick"?Fe(t,!0):e.type!==4?Vs(["(",e,`) === "onClick" ? "${t}" : (`,e,")"]):e,D0=(e,t,s)=>Vh(e,t,s,n=>{const{modifiers:a}=e;if(!a.length)return n;let{key:i,value:l}=n.props[0];const{keyModifiers:r,nonKeyModifiers:o,eventOptionModifiers:c}=L0(i,a,s,e.loc);if(o.includes("right")&&(i=pu(i,"onContextmenu")),o.includes("middle")&&(i=pu(i,"onMouseup")),o.length&&(l=Ot(s.helper(Zh),[l,JSON.stringify(o)])),r.length&&(!ms(i)||em(i.content.toLowerCase()))&&(l=Ot(s.helper(Jh),[l,JSON.stringify(r)])),c.length){const d=c.map(da).join("");i=ms(i)?Fe(`${i.content}${d}`,!0):Vs(["(",i,`) + "${d}"`])}return{props:[wt(i,l)]}}),M0=(e,t,s)=>{const{exp:n,loc:a}=e;return n||s.onError(Un(62,a)),{props:[],needRuntime:s.helper(Yh)}},P0=(e,t)=>{e.type===1&&e.tagType===0&&(e.tag==="script"||e.tag==="style")&&t.removeNode()},F0=[T0],$0={cloak:k0,html:E0,text:A0,model:R0,on:D0,show:M0};function B0(e,t={}){return _0(e,ze({},S0,t,{nodeTransforms:[P0,...F0,...t.nodeTransforms||[]],directiveTransforms:ze({},$0,t.directiveTransforms||{}),transformHoist:null}))}/** * vue v3.5.38 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT @@ -71,11 +71,11 @@ var Gm=Object.defineProperty;var Km=(e,t,s)=>t in e?Gm(e,t,{enumerable:!0,config * vue-router v4.6.4 * (c) 2025 Eduardo San Martin Morote * @license MIT - */const Ea=typeof document<"u";function tm(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function j0(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&tm(e.default)}const st=Object.assign;function Xr(e,t){const s={};for(const n in t){const a=t[n];s[n]=js(a)?a.map(e):e(a)}return s}const Ei=()=>{},js=Array.isArray;function gu(e,t){const s={};for(const n in e)s[n]=n in t?t[n]:e[n];return s}const sm=/#/g,q0=/&/g,G0=/\//g,K0=/=/g,W0=/\?/g,nm=/\+/g,Z0=/%5B/g,J0=/%5D/g,am=/%5E/g,Y0=/%60/g,im=/%7B/g,Q0=/%7C/g,lm=/%7D/g,X0=/%20/g;function Gc(e){return e==null?"":encodeURI(""+e).replace(Q0,"|").replace(Z0,"[").replace(J0,"]")}function e_(e){return Gc(e).replace(im,"{").replace(lm,"}").replace(am,"^")}function Uo(e){return Gc(e).replace(nm,"%2B").replace(X0,"+").replace(sm,"%23").replace(q0,"%26").replace(Y0,"`").replace(im,"{").replace(lm,"}").replace(am,"^")}function t_(e){return Uo(e).replace(K0,"%3D")}function s_(e){return Gc(e).replace(sm,"%23").replace(W0,"%3F")}function n_(e){return s_(e).replace(G0,"%2F")}function Wi(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const a_=/\/$/,i_=e=>e.replace(a_,"");function eo(e,t,s="/"){let n,a={},i="",l="";const r=t.indexOf("#");let o=t.indexOf("?");return o=r>=0&&o>r?-1:o,o>=0&&(n=t.slice(0,o),i=t.slice(o,r>0?r:t.length),a=e(i.slice(1))),r>=0&&(n=n||t.slice(0,r),l=t.slice(r,t.length)),n=c_(n??t,s),{fullPath:n+i+l,path:n,query:a,hash:Wi(l)}}function l_(e,t){const s=t.query?e(t.query):"";return t.path+(s&&"?")+s+(t.hash||"")}function vu(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function r_(e,t,s){const n=t.matched.length-1,a=s.matched.length-1;return n>-1&&n===a&&Ja(t.matched[n],s.matched[a])&&rm(t.params,s.params)&&e(t.query)===e(s.query)&&t.hash===s.hash}function Ja(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function rm(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var s in e)if(!o_(e[s],t[s]))return!1;return!0}function o_(e,t){return js(e)?bu(e,t):js(t)?bu(t,e):(e==null?void 0:e.valueOf())===(t==null?void 0:t.valueOf())}function bu(e,t){return js(t)?e.length===t.length&&e.every((s,n)=>s===t[n]):e.length===1&&e[0]===t}function c_(e,t){if(e.startsWith("/"))return e;if(!e)return t;const s=t.split("/"),n=e.split("/"),a=n[n.length-1];(a===".."||a===".")&&n.push("");let i=s.length-1,l,r;for(l=0;l1&&i--;else break;return s.slice(0,i).join("/")+"/"+n.slice(l).join("/")}const Nn={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let Ho=(function(e){return e.pop="pop",e.push="push",e})({}),to=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function d_(e){if(!e)if(Ea){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),i_(e)}const u_=/^[^#]+#/;function f_(e,t){return e.replace(u_,"#")+t}function p_(e,t){const s=document.documentElement.getBoundingClientRect(),n=e.getBoundingClientRect();return{behavior:t.behavior,left:n.left-s.left-(t.left||0),top:n.top-s.top-(t.top||0)}}const Lr=()=>({left:window.scrollX,top:window.scrollY});function h_(e){let t;if("el"in e){const s=e.el,n=typeof s=="string"&&s.startsWith("#"),a=typeof s=="string"?n?document.getElementById(s.slice(1)):document.querySelector(s):s;if(!a)return;t=p_(a,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function yu(e,t){return(history.state?history.state.position-t:-1)+e}const zo=new Map;function m_(e,t){zo.set(e,t)}function g_(e){const t=zo.get(e);return zo.delete(e),t}function v_(e){return typeof e=="string"||e&&typeof e=="object"}function om(e){return typeof e=="string"||typeof e=="symbol"}let mt=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({});const cm=Symbol("");mt.MATCHER_NOT_FOUND+"",mt.NAVIGATION_GUARD_REDIRECT+"",mt.NAVIGATION_ABORTED+"",mt.NAVIGATION_CANCELLED+"",mt.NAVIGATION_DUPLICATED+"";function Ya(e,t){return st(new Error,{type:e,[cm]:!0},t)}function cn(e,t){return e instanceof Error&&cm in e&&(t==null||!!(e.type&t))}const b_=["params","query","hash"];function y_(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const s of b_)s in e&&(t[s]=e[s]);return JSON.stringify(t,null,2)}function x_(e){const t={};if(e===""||e==="?")return t;const s=(e[0]==="?"?e.slice(1):e).split("&");for(let n=0;na&&Uo(a)):[n&&Uo(n)]).forEach(a=>{a!==void 0&&(t+=(t.length?"&":"")+s,a!=null&&(t+="="+a))})}return t}function __(e){const t={};for(const s in e){const n=e[s];n!==void 0&&(t[s]=js(n)?n.map(a=>a==null?null:""+a):n==null?n:""+n)}return t}const k_=Symbol(""),_u=Symbol(""),Dr=Symbol(""),Kc=Symbol(""),Vo=Symbol("");function ui(){let e=[];function t(n){return e.push(n),()=>{const a=e.indexOf(n);a>-1&&e.splice(a,1)}}function s(){e=[]}return{add:t,list:()=>e.slice(),reset:s}}function $n(e,t,s,n,a,i=l=>l()){const l=n&&(n.enterCallbacks[a]=n.enterCallbacks[a]||[]);return()=>new Promise((r,o)=>{const c=f=>{f===!1?o(Ya(mt.NAVIGATION_ABORTED,{from:s,to:t})):f instanceof Error?o(f):v_(f)?o(Ya(mt.NAVIGATION_GUARD_REDIRECT,{from:t,to:f})):(l&&n.enterCallbacks[a]===l&&typeof f=="function"&&l.push(f),r())},d=i(()=>e.call(n&&n.instances[a],t,s,c));let u=Promise.resolve(d);e.length<3&&(u=u.then(c)),u.catch(f=>o(f))})}function so(e,t,s,n,a=i=>i()){const i=[];for(const l of e)for(const r in l.components){let o=l.components[r];if(!(t!=="beforeRouteEnter"&&!l.instances[r]))if(tm(o)){const c=(o.__vccOpts||o)[t];c&&i.push($n(c,s,n,l,r,a))}else{let c=o();i.push(()=>c.then(d=>{if(!d)throw new Error(`Couldn't resolve component "${r}" at "${l.path}"`);const u=j0(d)?d.default:d;l.mods[r]=d,l.components[r]=u;const f=(u.__vccOpts||u)[t];return f&&$n(f,s,n,l,r,a)()}))}}return i}function w_(e,t){const s=[],n=[],a=[],i=Math.max(t.matched.length,e.matched.length);for(let l=0;lJa(c,r))?n.push(r):s.push(r));const o=e.matched[l];o&&(t.matched.find(c=>Ja(c,o))||a.push(o))}return[s,n,a]}/*! + */const Ea=typeof document<"u";function tm(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function j0(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&tm(e.default)}const st=Object.assign;function Xr(e,t){const s={};for(const n in t){const a=t[n];s[n]=qs(a)?a.map(e):e(a)}return s}const Ei=()=>{},qs=Array.isArray;function gu(e,t){const s={};for(const n in e)s[n]=n in t?t[n]:e[n];return s}const sm=/#/g,q0=/&/g,G0=/\//g,K0=/=/g,W0=/\?/g,nm=/\+/g,Z0=/%5B/g,J0=/%5D/g,am=/%5E/g,Y0=/%60/g,im=/%7B/g,Q0=/%7C/g,lm=/%7D/g,X0=/%20/g;function Gc(e){return e==null?"":encodeURI(""+e).replace(Q0,"|").replace(Z0,"[").replace(J0,"]")}function e_(e){return Gc(e).replace(im,"{").replace(lm,"}").replace(am,"^")}function Uo(e){return Gc(e).replace(nm,"%2B").replace(X0,"+").replace(sm,"%23").replace(q0,"%26").replace(Y0,"`").replace(im,"{").replace(lm,"}").replace(am,"^")}function t_(e){return Uo(e).replace(K0,"%3D")}function s_(e){return Gc(e).replace(sm,"%23").replace(W0,"%3F")}function n_(e){return s_(e).replace(G0,"%2F")}function Wi(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const a_=/\/$/,i_=e=>e.replace(a_,"");function eo(e,t,s="/"){let n,a={},i="",l="";const r=t.indexOf("#");let o=t.indexOf("?");return o=r>=0&&o>r?-1:o,o>=0&&(n=t.slice(0,o),i=t.slice(o,r>0?r:t.length),a=e(i.slice(1))),r>=0&&(n=n||t.slice(0,r),l=t.slice(r,t.length)),n=c_(n??t,s),{fullPath:n+i+l,path:n,query:a,hash:Wi(l)}}function l_(e,t){const s=t.query?e(t.query):"";return t.path+(s&&"?")+s+(t.hash||"")}function vu(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function r_(e,t,s){const n=t.matched.length-1,a=s.matched.length-1;return n>-1&&n===a&&Ja(t.matched[n],s.matched[a])&&rm(t.params,s.params)&&e(t.query)===e(s.query)&&t.hash===s.hash}function Ja(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function rm(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var s in e)if(!o_(e[s],t[s]))return!1;return!0}function o_(e,t){return qs(e)?bu(e,t):qs(t)?bu(t,e):(e==null?void 0:e.valueOf())===(t==null?void 0:t.valueOf())}function bu(e,t){return qs(t)?e.length===t.length&&e.every((s,n)=>s===t[n]):e.length===1&&e[0]===t}function c_(e,t){if(e.startsWith("/"))return e;if(!e)return t;const s=t.split("/"),n=e.split("/"),a=n[n.length-1];(a===".."||a===".")&&n.push("");let i=s.length-1,l,r;for(l=0;l1&&i--;else break;return s.slice(0,i).join("/")+"/"+n.slice(l).join("/")}const Nn={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let Ho=(function(e){return e.pop="pop",e.push="push",e})({}),to=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function d_(e){if(!e)if(Ea){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),i_(e)}const u_=/^[^#]+#/;function f_(e,t){return e.replace(u_,"#")+t}function p_(e,t){const s=document.documentElement.getBoundingClientRect(),n=e.getBoundingClientRect();return{behavior:t.behavior,left:n.left-s.left-(t.left||0),top:n.top-s.top-(t.top||0)}}const Lr=()=>({left:window.scrollX,top:window.scrollY});function h_(e){let t;if("el"in e){const s=e.el,n=typeof s=="string"&&s.startsWith("#"),a=typeof s=="string"?n?document.getElementById(s.slice(1)):document.querySelector(s):s;if(!a)return;t=p_(a,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function yu(e,t){return(history.state?history.state.position-t:-1)+e}const zo=new Map;function m_(e,t){zo.set(e,t)}function g_(e){const t=zo.get(e);return zo.delete(e),t}function v_(e){return typeof e=="string"||e&&typeof e=="object"}function om(e){return typeof e=="string"||typeof e=="symbol"}let mt=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({});const cm=Symbol("");mt.MATCHER_NOT_FOUND+"",mt.NAVIGATION_GUARD_REDIRECT+"",mt.NAVIGATION_ABORTED+"",mt.NAVIGATION_CANCELLED+"",mt.NAVIGATION_DUPLICATED+"";function Ya(e,t){return st(new Error,{type:e,[cm]:!0},t)}function cn(e,t){return e instanceof Error&&cm in e&&(t==null||!!(e.type&t))}const b_=["params","query","hash"];function y_(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const s of b_)s in e&&(t[s]=e[s]);return JSON.stringify(t,null,2)}function x_(e){const t={};if(e===""||e==="?")return t;const s=(e[0]==="?"?e.slice(1):e).split("&");for(let n=0;na&&Uo(a)):[n&&Uo(n)]).forEach(a=>{a!==void 0&&(t+=(t.length?"&":"")+s,a!=null&&(t+="="+a))})}return t}function __(e){const t={};for(const s in e){const n=e[s];n!==void 0&&(t[s]=qs(n)?n.map(a=>a==null?null:""+a):n==null?n:""+n)}return t}const k_=Symbol(""),_u=Symbol(""),Dr=Symbol(""),Kc=Symbol(""),Vo=Symbol("");function ui(){let e=[];function t(n){return e.push(n),()=>{const a=e.indexOf(n);a>-1&&e.splice(a,1)}}function s(){e=[]}return{add:t,list:()=>e.slice(),reset:s}}function $n(e,t,s,n,a,i=l=>l()){const l=n&&(n.enterCallbacks[a]=n.enterCallbacks[a]||[]);return()=>new Promise((r,o)=>{const c=f=>{f===!1?o(Ya(mt.NAVIGATION_ABORTED,{from:s,to:t})):f instanceof Error?o(f):v_(f)?o(Ya(mt.NAVIGATION_GUARD_REDIRECT,{from:t,to:f})):(l&&n.enterCallbacks[a]===l&&typeof f=="function"&&l.push(f),r())},d=i(()=>e.call(n&&n.instances[a],t,s,c));let u=Promise.resolve(d);e.length<3&&(u=u.then(c)),u.catch(f=>o(f))})}function so(e,t,s,n,a=i=>i()){const i=[];for(const l of e)for(const r in l.components){let o=l.components[r];if(!(t!=="beforeRouteEnter"&&!l.instances[r]))if(tm(o)){const c=(o.__vccOpts||o)[t];c&&i.push($n(c,s,n,l,r,a))}else{let c=o();i.push(()=>c.then(d=>{if(!d)throw new Error(`Couldn't resolve component "${r}" at "${l.path}"`);const u=j0(d)?d.default:d;l.mods[r]=d,l.components[r]=u;const f=(u.__vccOpts||u)[t];return f&&$n(f,s,n,l,r,a)()}))}}return i}function w_(e,t){const s=[],n=[],a=[],i=Math.max(t.matched.length,e.matched.length);for(let l=0;lJa(c,r))?n.push(r):s.push(r));const o=e.matched[l];o&&(t.matched.find(c=>Ja(c,o))||a.push(o))}return[s,n,a]}/*! * vue-router v4.6.4 * (c) 2025 Eduardo San Martin Morote * @license MIT - */let S_=()=>location.protocol+"//"+location.host;function dm(e,t){const{pathname:s,search:n,hash:a}=t,i=e.indexOf("#");if(i>-1){let l=a.includes(e.slice(i))?e.slice(i).length:1,r=a.slice(l);return r[0]!=="/"&&(r="/"+r),vu(r,"")}return vu(s,e)+n+a}function T_(e,t,s,n){let a=[],i=[],l=null;const r=({state:f})=>{const p=dm(e,location),b=s.value,y=t.value;let E=0;if(f){if(s.value=p,t.value=f,l&&l===b){l=null;return}E=y?f.position-y.position:0}else n(p);a.forEach(I=>{I(s.value,b,{delta:E,type:Ho.pop,direction:E?E>0?to.forward:to.back:to.unknown})})};function o(){l=s.value}function c(f){a.push(f);const p=()=>{const b=a.indexOf(f);b>-1&&a.splice(b,1)};return i.push(p),p}function d(){if(document.visibilityState==="hidden"){const{history:f}=window;if(!f.state)return;f.replaceState(st({},f.state,{scroll:Lr()}),"")}}function u(){for(const f of i)f();i=[],window.removeEventListener("popstate",r),window.removeEventListener("pagehide",d),document.removeEventListener("visibilitychange",d)}return window.addEventListener("popstate",r),window.addEventListener("pagehide",d),document.addEventListener("visibilitychange",d),{pauseListeners:o,listen:c,destroy:u}}function ku(e,t,s,n=!1,a=!1){return{back:e,current:t,forward:s,replaced:n,position:window.history.length,scroll:a?Lr():null}}function C_(e){const{history:t,location:s}=window,n={value:dm(e,s)},a={value:t.state};a.value||i(n.value,{back:null,current:n.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(o,c,d){const u=e.indexOf("#"),f=u>-1?(s.host&&document.querySelector("base")?e:e.slice(u))+o:S_()+e+o;try{t[d?"replaceState":"pushState"](c,"",f),a.value=c}catch(p){console.error(p),s[d?"replace":"assign"](f)}}function l(o,c){i(o,st({},t.state,ku(a.value.back,o,a.value.forward,!0),c,{position:a.value.position}),!0),n.value=o}function r(o,c){const d=st({},a.value,t.state,{forward:o,scroll:Lr()});i(d.current,d,!0),i(o,st({},ku(n.value,o,null),{position:d.position+1},c),!1),n.value=o}return{location:n,state:a,push:r,replace:l}}function E_(e){e=d_(e);const t=C_(e),s=T_(e,t.state,t.location,t.replace);function n(i,l=!0){l||s.pauseListeners(),history.go(i)}const a=st({location:"",base:e,go:n,createHref:f_.bind(null,e)},t,s);return Object.defineProperty(a,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(a,"state",{enumerable:!0,get:()=>t.state.value}),a}function A_(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),E_(e)}let Qn=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var At=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(At||{});const R_={type:Qn.Static,value:""},I_=/[a-zA-Z0-9_]/;function O_(e){if(!e)return[[]];if(e==="/")return[[R_]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(p){throw new Error(`ERR (${s})/"${c}": ${p}`)}let s=At.Static,n=s;const a=[];let i;function l(){i&&a.push(i),i=[]}let r=0,o,c="",d="";function u(){c&&(s===At.Static?i.push({type:Qn.Static,value:c}):s===At.Param||s===At.ParamRegExp||s===At.ParamRegExpEnd?(i.length>1&&(o==="*"||o==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),i.push({type:Qn.Param,value:c,regexp:d,repeatable:o==="*"||o==="+",optional:o==="*"||o==="?"})):t("Invalid state to consume buffer"),c="")}function f(){c+=o}for(;rt.length?t.length===1&&t[0]===Qt.Static+Qt.Segment?1:-1:0}function um(e,t){let s=0;const n=e.score,a=t.score;for(;s0&&t[t.length-1]<0}const P_={strict:!1,end:!0,sensitive:!1};function F_(e,t,s){const n=D_(O_(e.path),s),a=st(n,{record:e,parent:t,children:[],alias:[]});return t&&!a.record.aliasOf==!t.record.aliasOf&&t.children.push(a),a}function $_(e,t){const s=[],n=new Map;t=gu(P_,t);function a(u){return n.get(u)}function i(u,f,p){const b=!p,y=Cu(u);y.aliasOf=p&&p.record;const E=gu(t,u),I=[y];if("alias"in u){const _=typeof u.alias=="string"?[u.alias]:u.alias;for(const S of _)I.push(Cu(st({},y,{components:p?p.record.components:y.components,path:S,aliasOf:p?p.record:y})))}let x,m;for(const _ of I){const{path:S}=_;if(f&&S[0]!=="/"){const g=f.record.path,w=g[g.length-1]==="/"?"":"/";_.path=f.record.path+(S&&w+S)}if(x=F_(_,f,E),p?p.alias.push(x):(m=m||x,m!==x&&m.alias.push(x),b&&u.name&&!Eu(x)&&l(u.name)),fm(x)&&o(x),y.children){const g=y.children;for(let w=0;w{l(m)}:Ei}function l(u){if(om(u)){const f=n.get(u);f&&(n.delete(u),s.splice(s.indexOf(f),1),f.children.forEach(l),f.alias.forEach(l))}else{const f=s.indexOf(u);f>-1&&(s.splice(f,1),u.record.name&&n.delete(u.record.name),u.children.forEach(l),u.alias.forEach(l))}}function r(){return s}function o(u){const f=H_(u,s);s.splice(f,0,u),u.record.name&&!Eu(u)&&n.set(u.record.name,u)}function c(u,f){let p,b={},y,E;if("name"in u&&u.name){if(p=n.get(u.name),!p)throw Ya(mt.MATCHER_NOT_FOUND,{location:u});E=p.record.name,b=st(Tu(f.params,p.keys.filter(m=>!m.optional).concat(p.parent?p.parent.keys.filter(m=>m.optional):[]).map(m=>m.name)),u.params&&Tu(u.params,p.keys.map(m=>m.name))),y=p.stringify(b)}else if(u.path!=null)y=u.path,p=s.find(m=>m.re.test(y)),p&&(b=p.parse(y),E=p.record.name);else{if(p=f.name?n.get(f.name):s.find(m=>m.re.test(f.path)),!p)throw Ya(mt.MATCHER_NOT_FOUND,{location:u,currentLocation:f});E=p.record.name,b=st({},f.params,u.params),y=p.stringify(b)}const I=[];let x=p;for(;x;)I.unshift(x.record),x=x.parent;return{name:E,path:y,params:b,matched:I,meta:U_(I)}}e.forEach(u=>i(u));function d(){s.length=0,n.clear()}return{addRoute:i,resolve:c,removeRoute:l,clearRoutes:d,getRoutes:r,getRecordMatcher:a}}function Tu(e,t){const s={};for(const n of t)n in e&&(s[n]=e[n]);return s}function Cu(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:B_(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function B_(e){const t={},s=e.props||!1;if("component"in e)t.default=s;else for(const n in e.components)t[n]=typeof s=="object"?s[n]:s;return t}function Eu(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function U_(e){return e.reduce((t,s)=>st(t,s.meta),{})}function H_(e,t){let s=0,n=t.length;for(;s!==n;){const i=s+n>>1;um(e,t[i])<0?n=i:s=i+1}const a=z_(e);return a&&(n=t.lastIndexOf(a,n-1)),n}function z_(e){let t=e;for(;t=t.parent;)if(fm(t)&&um(e,t)===0)return t}function fm({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Au(e){const t=Os(Dr),s=Os(Kc),n=J(()=>{const o=tn(e.to);return t.resolve(o)}),a=J(()=>{const{matched:o}=n.value,{length:c}=o,d=o[c-1],u=s.matched;if(!d||!u.length)return-1;const f=u.findIndex(Ja.bind(null,d));if(f>-1)return f;const p=Ru(o[c-2]);return c>1&&Ru(d)===p&&u[u.length-1].path!==p?u.findIndex(Ja.bind(null,o[c-2])):f}),i=J(()=>a.value>-1&&K_(s.params,n.value.params)),l=J(()=>a.value>-1&&a.value===s.matched.length-1&&rm(s.params,n.value.params));function r(o={}){if(G_(o)){const c=t[tn(e.replace)?"replace":"push"](tn(e.to)).catch(Ei);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>c),c}return Promise.resolve()}return{route:n,href:J(()=>n.value.href),isActive:i,isExactActive:l,navigate:r}}function V_(e){return e.length===1?e[0]:e}const j_=Xi({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Au,setup(e,{slots:t}){const s=zn(Au(e)),{options:n}=Os(Dr),a=J(()=>({[Iu(e.activeClass,n.linkActiveClass,"router-link-active")]:s.isActive,[Iu(e.exactActiveClass,n.linkExactActiveClass,"router-link-exact-active")]:s.isExactActive}));return()=>{const i=t.default&&V_(t.default(s));return e.custom?i:Va("a",{"aria-current":s.isExactActive?e.ariaCurrentValue:null,href:s.href,onClick:s.navigate,class:a.value},i)}}}),q_=j_;function G_(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function K_(e,t){for(const s in t){const n=t[s],a=e[s];if(typeof n=="string"){if(n!==a)return!1}else if(!js(a)||a.length!==n.length||n.some((i,l)=>i.valueOf()!==a[l].valueOf()))return!1}return!0}function Ru(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Iu=(e,t,s)=>e??t??s,W_=Xi({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:s}){const n=Os(Vo),a=J(()=>e.route||n.value),i=Os(_u,0),l=J(()=>{let c=tn(i);const{matched:d}=a.value;let u;for(;(u=d[c])&&!u.components;)c++;return c}),r=J(()=>a.value.matched[l.value]);ki(_u,J(()=>l.value+1)),ki(k_,r),ki(Vo,a);const o=h();return ts(()=>[o.value,r.value,e.name],([c,d,u],[f,p,b])=>{d&&(d.instances[u]=c,p&&p!==d&&c&&c===f&&(d.leaveGuards.size||(d.leaveGuards=p.leaveGuards),d.updateGuards.size||(d.updateGuards=p.updateGuards))),c&&d&&(!p||!Ja(d,p)||!f)&&(d.enterCallbacks[u]||[]).forEach(y=>y(c))},{flush:"post"}),()=>{const c=a.value,d=e.name,u=r.value,f=u&&u.components[d];if(!f)return Ou(s.default,{Component:f,route:c});const p=u.props[d],b=p?p===!0?c.params:typeof p=="function"?p(c):p:null,E=Va(f,st({},b,t,{onVnodeUnmounted:I=>{I.component.isUnmounted&&(u.instances[d]=null)},ref:o}));return Ou(s.default,{Component:E,route:c})||E}}});function Ou(e,t){if(!e)return null;const s=e(t);return s.length===1?s[0]:s}const Z_=W_;function J_(e){const t=$_(e.routes,e),s=e.parseQuery||x_,n=e.stringifyQuery||xu,a=e.history,i=ui(),l=ui(),r=ui(),o=nc(Nn);let c=Nn;Ea&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const d=Xr.bind(null,V=>""+V),u=Xr.bind(null,n_),f=Xr.bind(null,Wi);function p(V,de){let ce,_e;return om(V)?(ce=t.getRecordMatcher(V),_e=de):_e=V,t.addRoute(_e,ce)}function b(V){const de=t.getRecordMatcher(V);de&&t.removeRoute(de)}function y(){return t.getRoutes().map(V=>V.record)}function E(V){return!!t.getRecordMatcher(V)}function I(V,de){if(de=st({},de||o.value),typeof V=="string"){const L=eo(s,V,de.path),$=t.resolve({path:L.path},de),ee=a.createHref(L.fullPath);return st(L,$,{params:f($.params),hash:Wi(L.hash),redirectedFrom:void 0,href:ee})}let ce;if(V.path!=null)ce=st({},V,{path:eo(s,V.path,de.path).path});else{const L=st({},V.params);for(const $ in L)L[$]==null&&delete L[$];ce=st({},V,{params:u(L)}),de.params=u(de.params)}const _e=t.resolve(ce,de),ve=V.hash||"";_e.params=d(f(_e.params));const He=l_(n,st({},V,{hash:e_(ve),path:_e.path})),k=a.createHref(He);return st({fullPath:He,hash:ve,query:n===xu?__(V.query):V.query||{}},_e,{redirectedFrom:void 0,href:k})}function x(V){return typeof V=="string"?eo(s,V,o.value.path):st({},V)}function m(V,de){if(c!==V)return Ya(mt.NAVIGATION_CANCELLED,{from:de,to:V})}function _(V){return w(V)}function S(V){return _(st(x(V),{replace:!0}))}function g(V,de){const ce=V.matched[V.matched.length-1];if(ce&&ce.redirect){const{redirect:_e}=ce;let ve=typeof _e=="function"?_e(V,de):_e;return typeof ve=="string"&&(ve=ve.includes("?")||ve.includes("#")?ve=x(ve):{path:ve},ve.params={}),st({query:V.query,hash:V.hash,params:ve.path!=null?{}:V.params},ve)}}function w(V,de){const ce=c=I(V),_e=o.value,ve=V.state,He=V.force,k=V.replace===!0,L=g(ce,_e);if(L)return w(st(x(L),{state:typeof L=="object"?st({},ve,L.state):ve,force:He,replace:k}),de||ce);const $=ce;$.redirectedFrom=de;let ee;return!He&&r_(n,_e,ce)&&(ee=Ya(mt.NAVIGATION_DUPLICATED,{to:$,from:_e}),ke(_e,_e,!0,!1)),(ee?Promise.resolve(ee):M($,_e)).catch(Z=>cn(Z)?cn(Z,mt.NAVIGATION_GUARD_REDIRECT)?Z:we(Z):N(Z,$,_e)).then(Z=>{if(Z){if(cn(Z,mt.NAVIGATION_GUARD_REDIRECT))return w(st({replace:k},x(Z.to),{state:typeof Z.to=="object"?st({},ve,Z.to.state):ve,force:He}),de||$)}else Z=P($,_e,!0,k,ve);return H($,_e,Z),Z})}function T(V,de){const ce=m(V,de);return ce?Promise.reject(ce):Promise.resolve()}function C(V){const de=F.values().next().value;return de&&typeof de.runWithContext=="function"?de.runWithContext(V):V()}function M(V,de){let ce;const[_e,ve,He]=w_(V,de);ce=so(_e.reverse(),"beforeRouteLeave",V,de);for(const L of _e)L.leaveGuards.forEach($=>{ce.push($n($,V,de))});const k=T.bind(null,V,de);return ce.push(k),Se(ce).then(()=>{ce=[];for(const L of i.list())ce.push($n(L,V,de));return ce.push(k),Se(ce)}).then(()=>{ce=so(ve,"beforeRouteUpdate",V,de);for(const L of ve)L.updateGuards.forEach($=>{ce.push($n($,V,de))});return ce.push(k),Se(ce)}).then(()=>{ce=[];for(const L of He)if(L.beforeEnter)if(js(L.beforeEnter))for(const $ of L.beforeEnter)ce.push($n($,V,de));else ce.push($n(L.beforeEnter,V,de));return ce.push(k),Se(ce)}).then(()=>(V.matched.forEach(L=>L.enterCallbacks={}),ce=so(He,"beforeRouteEnter",V,de,C),ce.push(k),Se(ce))).then(()=>{ce=[];for(const L of l.list())ce.push($n(L,V,de));return ce.push(k),Se(ce)}).catch(L=>cn(L,mt.NAVIGATION_CANCELLED)?L:Promise.reject(L))}function H(V,de,ce){r.list().forEach(_e=>C(()=>_e(V,de,ce)))}function P(V,de,ce,_e,ve){const He=m(V,de);if(He)return He;const k=de===Nn,L=Ea?history.state:{};ce&&(_e||k?a.replace(V.fullPath,st({scroll:k&&L&&L.scroll},ve)):a.push(V.fullPath,ve)),o.value=V,ke(V,de,ce,k),we()}let R;function j(){R||(R=a.listen((V,de,ce)=>{if(!se.listening)return;const _e=I(V),ve=g(_e,se.currentRoute.value);if(ve){w(st(ve,{replace:!0,force:!0}),_e).catch(Ei);return}c=_e;const He=o.value;Ea&&m_(yu(He.fullPath,ce.delta),Lr()),M(_e,He).catch(k=>cn(k,mt.NAVIGATION_ABORTED|mt.NAVIGATION_CANCELLED)?k:cn(k,mt.NAVIGATION_GUARD_REDIRECT)?(w(st(x(k.to),{force:!0}),_e).then(L=>{cn(L,mt.NAVIGATION_ABORTED|mt.NAVIGATION_DUPLICATED)&&!ce.delta&&ce.type===Ho.pop&&a.go(-1,!1)}).catch(Ei),Promise.reject()):(ce.delta&&a.go(-ce.delta,!1),N(k,_e,He))).then(k=>{k=k||P(_e,He,!1),k&&(ce.delta&&!cn(k,mt.NAVIGATION_CANCELLED)?a.go(-ce.delta,!1):ce.type===Ho.pop&&cn(k,mt.NAVIGATION_ABORTED|mt.NAVIGATION_DUPLICATED)&&a.go(-1,!1)),H(_e,He,k)}).catch(Ei)}))}let Q=ui(),U=ui(),O;function N(V,de,ce){we(V);const _e=U.list();return _e.length?_e.forEach(ve=>ve(V,de,ce)):console.error(V),Promise.reject(V)}function Y(){return O&&o.value!==Nn?Promise.resolve():new Promise((V,de)=>{Q.add([V,de])})}function we(V){return O||(O=!V,j(),Q.list().forEach(([de,ce])=>V?ce(V):de()),Q.reset()),V}function ke(V,de,ce,_e){const{scrollBehavior:ve}=e;if(!Ea||!ve)return Promise.resolve();const He=!ce&&g_(yu(V.fullPath,0))||(_e||!ce)&&history.state&&history.state.scroll||null;return It().then(()=>ve(V,de,He)).then(k=>k&&h_(k)).catch(k=>N(k,V,de))}const ie=V=>a.go(V);let pe;const F=new Set,se={currentRoute:o,listening:!0,addRoute:p,removeRoute:b,clearRoutes:t.clearRoutes,hasRoute:E,getRoutes:y,resolve:I,options:e,push:_,replace:S,go:ie,back:()=>ie(-1),forward:()=>ie(1),beforeEach:i.add,beforeResolve:l.add,afterEach:r.add,onError:U.add,isReady:Y,install(V){V.component("RouterLink",q_),V.component("RouterView",Z_),V.config.globalProperties.$router=se,Object.defineProperty(V.config.globalProperties,"$route",{enumerable:!0,get:()=>tn(o)}),Ea&&!pe&&o.value===Nn&&(pe=!0,_(a.location).catch(_e=>{}));const de={};for(const _e in Nn)Object.defineProperty(de,_e,{get:()=>o.value[_e],enumerable:!0});V.provide(Dr,se),V.provide(Kc,sc(de)),V.provide(Vo,o);const ce=V.unmount;F.add(V),V.unmount=function(){F.delete(V),F.size<1&&(c=Nn,R&&R(),R=null,o.value=Nn,pe=!1,O=!1),ce()}}};function Se(V){return V.reduce((de,ce)=>de.then(()=>C(ce)),Promise.resolve())}return se}function pm(){return Os(Dr)}function Y_(e){return Os(Kc)}const Mr={props:{tabs:{type:Array,required:!0},defaultTab:{type:String,default:""},groupLabel:{type:String,default:""}},setup(e){const t=Y_(),s=pm(),n=J({get(){var o;const r=t.query.tab;return r&&e.tabs.some(c=>c.id===r)?r:e.defaultTab||((o=e.tabs[0])==null?void 0:o.id)||""},set(r){s.replace({query:{...t.query,tab:r}})}}),a=J(()=>{var r;return((r=e.tabs.find(o=>o.id===n.value))==null?void 0:r.component)||null}),i=J(()=>{var r;return((r=e.tabs.find(o=>o.id===n.value))==null?void 0:r.label)||""});ts(i,r=>{e.groupLabel&&r&&(document.title=`Odin — ${e.groupLabel} › ${r}`)},{immediate:!0});function l(r,o){if(!["ArrowLeft","ArrowRight","Home","End"].includes(r.key))return;r.preventDefault();let c=o;r.key==="ArrowRight"&&(c=(o+1)%e.tabs.length),r.key==="ArrowLeft"&&(c=(o-1+e.tabs.length)%e.tabs.length),r.key==="Home"&&(c=0),r.key==="End"&&(c=e.tabs.length-1),n.value=e.tabs[c].id,requestAnimationFrame(()=>{var d;return(d=document.getElementById("tab-"+e.tabs[c].id))==null?void 0:d.focus()})}return{activeTab:n,activeComponent:a,activeLabel:i,onTabKeydown:l}},template:` + */let S_=()=>location.protocol+"//"+location.host;function dm(e,t){const{pathname:s,search:n,hash:a}=t,i=e.indexOf("#");if(i>-1){let l=a.includes(e.slice(i))?e.slice(i).length:1,r=a.slice(l);return r[0]!=="/"&&(r="/"+r),vu(r,"")}return vu(s,e)+n+a}function T_(e,t,s,n){let a=[],i=[],l=null;const r=({state:f})=>{const p=dm(e,location),b=s.value,y=t.value;let E=0;if(f){if(s.value=p,t.value=f,l&&l===b){l=null;return}E=y?f.position-y.position:0}else n(p);a.forEach(I=>{I(s.value,b,{delta:E,type:Ho.pop,direction:E?E>0?to.forward:to.back:to.unknown})})};function o(){l=s.value}function c(f){a.push(f);const p=()=>{const b=a.indexOf(f);b>-1&&a.splice(b,1)};return i.push(p),p}function d(){if(document.visibilityState==="hidden"){const{history:f}=window;if(!f.state)return;f.replaceState(st({},f.state,{scroll:Lr()}),"")}}function u(){for(const f of i)f();i=[],window.removeEventListener("popstate",r),window.removeEventListener("pagehide",d),document.removeEventListener("visibilitychange",d)}return window.addEventListener("popstate",r),window.addEventListener("pagehide",d),document.addEventListener("visibilitychange",d),{pauseListeners:o,listen:c,destroy:u}}function ku(e,t,s,n=!1,a=!1){return{back:e,current:t,forward:s,replaced:n,position:window.history.length,scroll:a?Lr():null}}function C_(e){const{history:t,location:s}=window,n={value:dm(e,s)},a={value:t.state};a.value||i(n.value,{back:null,current:n.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(o,c,d){const u=e.indexOf("#"),f=u>-1?(s.host&&document.querySelector("base")?e:e.slice(u))+o:S_()+e+o;try{t[d?"replaceState":"pushState"](c,"",f),a.value=c}catch(p){console.error(p),s[d?"replace":"assign"](f)}}function l(o,c){i(o,st({},t.state,ku(a.value.back,o,a.value.forward,!0),c,{position:a.value.position}),!0),n.value=o}function r(o,c){const d=st({},a.value,t.state,{forward:o,scroll:Lr()});i(d.current,d,!0),i(o,st({},ku(n.value,o,null),{position:d.position+1},c),!1),n.value=o}return{location:n,state:a,push:r,replace:l}}function E_(e){e=d_(e);const t=C_(e),s=T_(e,t.state,t.location,t.replace);function n(i,l=!0){l||s.pauseListeners(),history.go(i)}const a=st({location:"",base:e,go:n,createHref:f_.bind(null,e)},t,s);return Object.defineProperty(a,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(a,"state",{enumerable:!0,get:()=>t.state.value}),a}function A_(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),E_(e)}let Qn=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var At=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(At||{});const R_={type:Qn.Static,value:""},I_=/[a-zA-Z0-9_]/;function O_(e){if(!e)return[[]];if(e==="/")return[[R_]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(p){throw new Error(`ERR (${s})/"${c}": ${p}`)}let s=At.Static,n=s;const a=[];let i;function l(){i&&a.push(i),i=[]}let r=0,o,c="",d="";function u(){c&&(s===At.Static?i.push({type:Qn.Static,value:c}):s===At.Param||s===At.ParamRegExp||s===At.ParamRegExpEnd?(i.length>1&&(o==="*"||o==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),i.push({type:Qn.Param,value:c,regexp:d,repeatable:o==="*"||o==="+",optional:o==="*"||o==="?"})):t("Invalid state to consume buffer"),c="")}function f(){c+=o}for(;rt.length?t.length===1&&t[0]===Qt.Static+Qt.Segment?1:-1:0}function um(e,t){let s=0;const n=e.score,a=t.score;for(;s0&&t[t.length-1]<0}const P_={strict:!1,end:!0,sensitive:!1};function F_(e,t,s){const n=D_(O_(e.path),s),a=st(n,{record:e,parent:t,children:[],alias:[]});return t&&!a.record.aliasOf==!t.record.aliasOf&&t.children.push(a),a}function $_(e,t){const s=[],n=new Map;t=gu(P_,t);function a(u){return n.get(u)}function i(u,f,p){const b=!p,y=Cu(u);y.aliasOf=p&&p.record;const E=gu(t,u),I=[y];if("alias"in u){const _=typeof u.alias=="string"?[u.alias]:u.alias;for(const S of _)I.push(Cu(st({},y,{components:p?p.record.components:y.components,path:S,aliasOf:p?p.record:y})))}let x,m;for(const _ of I){const{path:S}=_;if(f&&S[0]!=="/"){const g=f.record.path,w=g[g.length-1]==="/"?"":"/";_.path=f.record.path+(S&&w+S)}if(x=F_(_,f,E),p?p.alias.push(x):(m=m||x,m!==x&&m.alias.push(x),b&&u.name&&!Eu(x)&&l(u.name)),fm(x)&&o(x),y.children){const g=y.children;for(let w=0;w{l(m)}:Ei}function l(u){if(om(u)){const f=n.get(u);f&&(n.delete(u),s.splice(s.indexOf(f),1),f.children.forEach(l),f.alias.forEach(l))}else{const f=s.indexOf(u);f>-1&&(s.splice(f,1),u.record.name&&n.delete(u.record.name),u.children.forEach(l),u.alias.forEach(l))}}function r(){return s}function o(u){const f=H_(u,s);s.splice(f,0,u),u.record.name&&!Eu(u)&&n.set(u.record.name,u)}function c(u,f){let p,b={},y,E;if("name"in u&&u.name){if(p=n.get(u.name),!p)throw Ya(mt.MATCHER_NOT_FOUND,{location:u});E=p.record.name,b=st(Tu(f.params,p.keys.filter(m=>!m.optional).concat(p.parent?p.parent.keys.filter(m=>m.optional):[]).map(m=>m.name)),u.params&&Tu(u.params,p.keys.map(m=>m.name))),y=p.stringify(b)}else if(u.path!=null)y=u.path,p=s.find(m=>m.re.test(y)),p&&(b=p.parse(y),E=p.record.name);else{if(p=f.name?n.get(f.name):s.find(m=>m.re.test(f.path)),!p)throw Ya(mt.MATCHER_NOT_FOUND,{location:u,currentLocation:f});E=p.record.name,b=st({},f.params,u.params),y=p.stringify(b)}const I=[];let x=p;for(;x;)I.unshift(x.record),x=x.parent;return{name:E,path:y,params:b,matched:I,meta:U_(I)}}e.forEach(u=>i(u));function d(){s.length=0,n.clear()}return{addRoute:i,resolve:c,removeRoute:l,clearRoutes:d,getRoutes:r,getRecordMatcher:a}}function Tu(e,t){const s={};for(const n of t)n in e&&(s[n]=e[n]);return s}function Cu(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:B_(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function B_(e){const t={},s=e.props||!1;if("component"in e)t.default=s;else for(const n in e.components)t[n]=typeof s=="object"?s[n]:s;return t}function Eu(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function U_(e){return e.reduce((t,s)=>st(t,s.meta),{})}function H_(e,t){let s=0,n=t.length;for(;s!==n;){const i=s+n>>1;um(e,t[i])<0?n=i:s=i+1}const a=z_(e);return a&&(n=t.lastIndexOf(a,n-1)),n}function z_(e){let t=e;for(;t=t.parent;)if(fm(t)&&um(e,t)===0)return t}function fm({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Au(e){const t=Ns(Dr),s=Ns(Kc),n=J(()=>{const o=sn(e.to);return t.resolve(o)}),a=J(()=>{const{matched:o}=n.value,{length:c}=o,d=o[c-1],u=s.matched;if(!d||!u.length)return-1;const f=u.findIndex(Ja.bind(null,d));if(f>-1)return f;const p=Ru(o[c-2]);return c>1&&Ru(d)===p&&u[u.length-1].path!==p?u.findIndex(Ja.bind(null,o[c-2])):f}),i=J(()=>a.value>-1&&K_(s.params,n.value.params)),l=J(()=>a.value>-1&&a.value===s.matched.length-1&&rm(s.params,n.value.params));function r(o={}){if(G_(o)){const c=t[sn(e.replace)?"replace":"push"](sn(e.to)).catch(Ei);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>c),c}return Promise.resolve()}return{route:n,href:J(()=>n.value.href),isActive:i,isExactActive:l,navigate:r}}function V_(e){return e.length===1?e[0]:e}const j_=Xi({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Au,setup(e,{slots:t}){const s=zn(Au(e)),{options:n}=Ns(Dr),a=J(()=>({[Iu(e.activeClass,n.linkActiveClass,"router-link-active")]:s.isActive,[Iu(e.exactActiveClass,n.linkExactActiveClass,"router-link-exact-active")]:s.isExactActive}));return()=>{const i=t.default&&V_(t.default(s));return e.custom?i:Va("a",{"aria-current":s.isExactActive?e.ariaCurrentValue:null,href:s.href,onClick:s.navigate,class:a.value},i)}}}),q_=j_;function G_(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function K_(e,t){for(const s in t){const n=t[s],a=e[s];if(typeof n=="string"){if(n!==a)return!1}else if(!qs(a)||a.length!==n.length||n.some((i,l)=>i.valueOf()!==a[l].valueOf()))return!1}return!0}function Ru(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Iu=(e,t,s)=>e??t??s,W_=Xi({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:s}){const n=Ns(Vo),a=J(()=>e.route||n.value),i=Ns(_u,0),l=J(()=>{let c=sn(i);const{matched:d}=a.value;let u;for(;(u=d[c])&&!u.components;)c++;return c}),r=J(()=>a.value.matched[l.value]);ki(_u,J(()=>l.value+1)),ki(k_,r),ki(Vo,a);const o=h();return ts(()=>[o.value,r.value,e.name],([c,d,u],[f,p,b])=>{d&&(d.instances[u]=c,p&&p!==d&&c&&c===f&&(d.leaveGuards.size||(d.leaveGuards=p.leaveGuards),d.updateGuards.size||(d.updateGuards=p.updateGuards))),c&&d&&(!p||!Ja(d,p)||!f)&&(d.enterCallbacks[u]||[]).forEach(y=>y(c))},{flush:"post"}),()=>{const c=a.value,d=e.name,u=r.value,f=u&&u.components[d];if(!f)return Ou(s.default,{Component:f,route:c});const p=u.props[d],b=p?p===!0?c.params:typeof p=="function"?p(c):p:null,E=Va(f,st({},b,t,{onVnodeUnmounted:I=>{I.component.isUnmounted&&(u.instances[d]=null)},ref:o}));return Ou(s.default,{Component:E,route:c})||E}}});function Ou(e,t){if(!e)return null;const s=e(t);return s.length===1?s[0]:s}const Z_=W_;function J_(e){const t=$_(e.routes,e),s=e.parseQuery||x_,n=e.stringifyQuery||xu,a=e.history,i=ui(),l=ui(),r=ui(),o=nc(Nn);let c=Nn;Ea&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const d=Xr.bind(null,V=>""+V),u=Xr.bind(null,n_),f=Xr.bind(null,Wi);function p(V,de){let ce,_e;return om(V)?(ce=t.getRecordMatcher(V),_e=de):_e=V,t.addRoute(_e,ce)}function b(V){const de=t.getRecordMatcher(V);de&&t.removeRoute(de)}function y(){return t.getRoutes().map(V=>V.record)}function E(V){return!!t.getRecordMatcher(V)}function I(V,de){if(de=st({},de||o.value),typeof V=="string"){const L=eo(s,V,de.path),$=t.resolve({path:L.path},de),ee=a.createHref(L.fullPath);return st(L,$,{params:f($.params),hash:Wi(L.hash),redirectedFrom:void 0,href:ee})}let ce;if(V.path!=null)ce=st({},V,{path:eo(s,V.path,de.path).path});else{const L=st({},V.params);for(const $ in L)L[$]==null&&delete L[$];ce=st({},V,{params:u(L)}),de.params=u(de.params)}const _e=t.resolve(ce,de),ve=V.hash||"";_e.params=d(f(_e.params));const He=l_(n,st({},V,{hash:e_(ve),path:_e.path})),k=a.createHref(He);return st({fullPath:He,hash:ve,query:n===xu?__(V.query):V.query||{}},_e,{redirectedFrom:void 0,href:k})}function x(V){return typeof V=="string"?eo(s,V,o.value.path):st({},V)}function m(V,de){if(c!==V)return Ya(mt.NAVIGATION_CANCELLED,{from:de,to:V})}function _(V){return w(V)}function S(V){return _(st(x(V),{replace:!0}))}function g(V,de){const ce=V.matched[V.matched.length-1];if(ce&&ce.redirect){const{redirect:_e}=ce;let ve=typeof _e=="function"?_e(V,de):_e;return typeof ve=="string"&&(ve=ve.includes("?")||ve.includes("#")?ve=x(ve):{path:ve},ve.params={}),st({query:V.query,hash:V.hash,params:ve.path!=null?{}:V.params},ve)}}function w(V,de){const ce=c=I(V),_e=o.value,ve=V.state,He=V.force,k=V.replace===!0,L=g(ce,_e);if(L)return w(st(x(L),{state:typeof L=="object"?st({},ve,L.state):ve,force:He,replace:k}),de||ce);const $=ce;$.redirectedFrom=de;let ee;return!He&&r_(n,_e,ce)&&(ee=Ya(mt.NAVIGATION_DUPLICATED,{to:$,from:_e}),ke(_e,_e,!0,!1)),(ee?Promise.resolve(ee):M($,_e)).catch(Z=>cn(Z)?cn(Z,mt.NAVIGATION_GUARD_REDIRECT)?Z:we(Z):N(Z,$,_e)).then(Z=>{if(Z){if(cn(Z,mt.NAVIGATION_GUARD_REDIRECT))return w(st({replace:k},x(Z.to),{state:typeof Z.to=="object"?st({},ve,Z.to.state):ve,force:He}),de||$)}else Z=P($,_e,!0,k,ve);return H($,_e,Z),Z})}function T(V,de){const ce=m(V,de);return ce?Promise.reject(ce):Promise.resolve()}function C(V){const de=F.values().next().value;return de&&typeof de.runWithContext=="function"?de.runWithContext(V):V()}function M(V,de){let ce;const[_e,ve,He]=w_(V,de);ce=so(_e.reverse(),"beforeRouteLeave",V,de);for(const L of _e)L.leaveGuards.forEach($=>{ce.push($n($,V,de))});const k=T.bind(null,V,de);return ce.push(k),Se(ce).then(()=>{ce=[];for(const L of i.list())ce.push($n(L,V,de));return ce.push(k),Se(ce)}).then(()=>{ce=so(ve,"beforeRouteUpdate",V,de);for(const L of ve)L.updateGuards.forEach($=>{ce.push($n($,V,de))});return ce.push(k),Se(ce)}).then(()=>{ce=[];for(const L of He)if(L.beforeEnter)if(qs(L.beforeEnter))for(const $ of L.beforeEnter)ce.push($n($,V,de));else ce.push($n(L.beforeEnter,V,de));return ce.push(k),Se(ce)}).then(()=>(V.matched.forEach(L=>L.enterCallbacks={}),ce=so(He,"beforeRouteEnter",V,de,C),ce.push(k),Se(ce))).then(()=>{ce=[];for(const L of l.list())ce.push($n(L,V,de));return ce.push(k),Se(ce)}).catch(L=>cn(L,mt.NAVIGATION_CANCELLED)?L:Promise.reject(L))}function H(V,de,ce){r.list().forEach(_e=>C(()=>_e(V,de,ce)))}function P(V,de,ce,_e,ve){const He=m(V,de);if(He)return He;const k=de===Nn,L=Ea?history.state:{};ce&&(_e||k?a.replace(V.fullPath,st({scroll:k&&L&&L.scroll},ve)):a.push(V.fullPath,ve)),o.value=V,ke(V,de,ce,k),we()}let R;function j(){R||(R=a.listen((V,de,ce)=>{if(!se.listening)return;const _e=I(V),ve=g(_e,se.currentRoute.value);if(ve){w(st(ve,{replace:!0,force:!0}),_e).catch(Ei);return}c=_e;const He=o.value;Ea&&m_(yu(He.fullPath,ce.delta),Lr()),M(_e,He).catch(k=>cn(k,mt.NAVIGATION_ABORTED|mt.NAVIGATION_CANCELLED)?k:cn(k,mt.NAVIGATION_GUARD_REDIRECT)?(w(st(x(k.to),{force:!0}),_e).then(L=>{cn(L,mt.NAVIGATION_ABORTED|mt.NAVIGATION_DUPLICATED)&&!ce.delta&&ce.type===Ho.pop&&a.go(-1,!1)}).catch(Ei),Promise.reject()):(ce.delta&&a.go(-ce.delta,!1),N(k,_e,He))).then(k=>{k=k||P(_e,He,!1),k&&(ce.delta&&!cn(k,mt.NAVIGATION_CANCELLED)?a.go(-ce.delta,!1):ce.type===Ho.pop&&cn(k,mt.NAVIGATION_ABORTED|mt.NAVIGATION_DUPLICATED)&&a.go(-1,!1)),H(_e,He,k)}).catch(Ei)}))}let Q=ui(),U=ui(),O;function N(V,de,ce){we(V);const _e=U.list();return _e.length?_e.forEach(ve=>ve(V,de,ce)):console.error(V),Promise.reject(V)}function Y(){return O&&o.value!==Nn?Promise.resolve():new Promise((V,de)=>{Q.add([V,de])})}function we(V){return O||(O=!V,j(),Q.list().forEach(([de,ce])=>V?ce(V):de()),Q.reset()),V}function ke(V,de,ce,_e){const{scrollBehavior:ve}=e;if(!Ea||!ve)return Promise.resolve();const He=!ce&&g_(yu(V.fullPath,0))||(_e||!ce)&&history.state&&history.state.scroll||null;return It().then(()=>ve(V,de,He)).then(k=>k&&h_(k)).catch(k=>N(k,V,de))}const ie=V=>a.go(V);let pe;const F=new Set,se={currentRoute:o,listening:!0,addRoute:p,removeRoute:b,clearRoutes:t.clearRoutes,hasRoute:E,getRoutes:y,resolve:I,options:e,push:_,replace:S,go:ie,back:()=>ie(-1),forward:()=>ie(1),beforeEach:i.add,beforeResolve:l.add,afterEach:r.add,onError:U.add,isReady:Y,install(V){V.component("RouterLink",q_),V.component("RouterView",Z_),V.config.globalProperties.$router=se,Object.defineProperty(V.config.globalProperties,"$route",{enumerable:!0,get:()=>sn(o)}),Ea&&!pe&&o.value===Nn&&(pe=!0,_(a.location).catch(_e=>{}));const de={};for(const _e in Nn)Object.defineProperty(de,_e,{get:()=>o.value[_e],enumerable:!0});V.provide(Dr,se),V.provide(Kc,sc(de)),V.provide(Vo,o);const ce=V.unmount;F.add(V),V.unmount=function(){F.delete(V),F.size<1&&(c=Nn,R&&R(),R=null,o.value=Nn,pe=!1,O=!1),ce()}}};function Se(V){return V.reduce((de,ce)=>de.then(()=>C(ce)),Promise.resolve())}return se}function pm(){return Ns(Dr)}function Y_(e){return Ns(Kc)}const Mr={props:{tabs:{type:Array,required:!0},defaultTab:{type:String,default:""},groupLabel:{type:String,default:""}},setup(e){const t=Y_(),s=pm(),n=J({get(){var o;const r=t.query.tab;return r&&e.tabs.some(c=>c.id===r)?r:e.defaultTab||((o=e.tabs[0])==null?void 0:o.id)||""},set(r){s.replace({query:{...t.query,tab:r}})}}),a=J(()=>{var r;return((r=e.tabs.find(o=>o.id===n.value))==null?void 0:r.component)||null}),i=J(()=>{var r;return((r=e.tabs.find(o=>o.id===n.value))==null?void 0:r.label)||""});ts(i,r=>{e.groupLabel&&r&&(document.title=`Odin — ${e.groupLabel} › ${r}`)},{immediate:!0});function l(r,o){if(!["ArrowLeft","ArrowRight","Home","End"].includes(r.key))return;r.preventDefault();let c=o;r.key==="ArrowRight"&&(c=(o+1)%e.tabs.length),r.key==="ArrowLeft"&&(c=(o-1+e.tabs.length)%e.tabs.length),r.key==="Home"&&(c=0),r.key==="End"&&(c=e.tabs.length-1),n.value=e.tabs[c].id,requestAnimationFrame(()=>{var d;return(d=document.getElementById("tab-"+e.tabs[c].id))==null?void 0:d.focus()})}return{activeTab:n,activeComponent:a,activeLabel:i,onTabKeydown:l}},template:`
@@ -92,7 +92,7 @@ var Gm=Object.defineProperty;var Km=(e,t,s)=>t in e?Gm(e,t,{enumerable:!0,config
`},Q_={setup(){const e=h([]),t=h([]),s=h({}),n=50;function a(f){var y,E,I,x,m;const p=f.payload||f,b=p.type||f.type;if(b==="tool_start"){const _=((y=p.metadata)==null?void 0:y.call_id)||null,S={callId:_,id:_||`${p.action}-${Date.now()}`,tool:p.action,actor:p.actor||"",channel:p.channel_id||"",iteration:((E=p.metadata)==null?void 0:E.iteration)??0,startTime:Date.now(),elapsed:0,status:"running",output:"",result:""};e.value.unshift(S);return}if(b==="tool_end"){const _=((I=p.metadata)==null?void 0:I.call_id)||null;let S=-1;if(_&&(S=e.value.findIndex(g=>g.callId===_&&g.status==="running")),S<0&&!_)for(let g=e.value.length-1;g>=0;g--){const w=e.value[g];if(w.tool===p.action&&w.status==="running"){S=g;break}}if(S>=0){const g=e.value[S];g.status=(x=p.metadata)!=null&&x.error?"error":"success",g.elapsed=((m=p.metadata)==null?void 0:m.elapsed_ms)||Date.now()-g.startTime,g.result=p.detail||"",g.fadingOut=!0,setTimeout(()=>{const w=e.value.indexOf(g);w>=0&&e.value.splice(w,1),t.value.unshift(g),t.value.length>n&&t.value.pop()},5e3)}return}if(b==="tool_stream"){const _=p.call_id||p.tool_name||"unknown";if(p.finished){const S={...s.value};delete S[_],s.value=S}else{const g=((s.value[_]||"")+(p.chunk||"")).split(` `);s.value={...s.value,[_]:g.slice(-30).join(` -`)}}return}}let i=null;function l(){const f=Date.now();e.value.forEach(p=>{p.status==="running"&&(p.elapsed=f-p.startTime)})}let r=!1;function o(){r||(r=!0,Ke.on("events",a),i||(i=setInterval(l,500)))}function c(){r&&(r=!1,Ke.off("events",a),i&&(clearInterval(i),i=null))}We(o),Ds(o),Ms(c),xt(c);function d(f){return f<1e3?`${f}ms`:`${(f/1e3).toFixed(1)}s`}function u(f){return f==="running"?"clock":f==="success"?"success":f==="error"?"error":"info"}return{activeTasks:e,recentHistory:t,streamOutput:s,formatMs:d,statusIcon:u}},template:` +`)}}return}}let i=null;function l(){const f=Date.now();e.value.forEach(p=>{p.status==="running"&&(p.elapsed=f-p.startTime)})}let r=!1;function o(){r||(r=!0,Ke.on("events",a),i||(i=setInterval(l,500)))}function c(){r&&(r=!1,Ke.off("events",a),i&&(clearInterval(i),i=null))}We(o),Ms(o),Ps(c),xt(c);function d(f){return f<1e3?`${f}ms`:`${(f/1e3).toFixed(1)}s`}function u(f){return f==="running"?"clock":f==="success"?"success":f==="error"?"error":"info"}return{activeTasks:e,recentHistory:t,streamOutput:s,formatMs:d,statusIcon:u}},template:`

Execution Viewer @@ -430,7 +430,7 @@ var Gm=Object.defineProperty;var Km=(e,t,s)=>t in e?Gm(e,t,{enumerable:!0,config

-
`,setup(){const e=h([]),t=h(!0),s=h(null),n=h(null),a=h(!0),i=h("all");let l=!1;const r=J(()=>e.value.filter(N=>N.status==="running").length),o=J(()=>e.value.filter(N=>N.status==="completed").length),c=J(()=>e.value.filter(N=>["failed","timeout","killed"].includes(N.status)).length),d=J(()=>[{value:"all",label:"All",count:e.value.length},{value:"running",label:"Running",count:r.value},{value:"completed",label:"Completed",count:o.value},{value:"failed",label:"Failed",count:c.value}]),u=J(()=>i.value==="all"?e.value:i.value==="failed"?e.value.filter(N=>["failed","timeout","killed"].includes(N.status)):e.value.filter(N=>N.status===i.value));function f(N){const Y=Number(N.max_iterations)||0;return Y<=0?0:Math.min(100,Math.round(N.iteration_count/Y*100))}function p(N){return(Number(N.max_iterations)||0)>0}function b(N,Y){return N?N==="N/A"?"N/A":Y==="current_inheritance"?`inherit (currently ${N})`:N:"unknown"}function y(N){return b(N.display_model,N.display_model_source||N.display_source)}function E(N){return b(N.display_reasoning_effort,N.display_reasoning_effort_source||N.display_source)}function I(N){return{last_execution:"last executed",current_inheritance:"inherited from current config — not yet executed",spawn_override_pending:"requested at spawn — not yet executed",unknown:"no execution data"}[N]||""}const x=h(null),m=h(null),_=h(!1),S=h(null),g=h(""),T=xm({state:{get detail(){return x.value},set detail(N){x.value=N},get detailId(){return m.value},set detailId(N){m.value=N},get detailLoading(){return _.value},set detailLoading(N){_.value=N},get detailError(){return S.value},set detailError(N){S.value=N}},requestDetail:(N,{signal:Y})=>K.get(`/api/agents/${encodeURIComponent(N)}`,{signal:Y})});async function C(N){g.value="",await T.open(N.id)}function M(){T.close(),g.value=""}async function H(){await T.refresh()}async function P(N,Y){try{await navigator.clipboard.writeText(Y||""),g.value=N,setTimeout(()=>{g.value===N&&(g.value="")},1500)}catch{Ae.error("Copy failed")}}async function R(N=!1){N=N===!0,N||(t.value=!0);try{const Y=await K.get("/api/agents");e.value=Array.isArray(Y)?Y:[],s.value=null}catch(Y){N||(s.value=Y.message)}N||(t.value=!1)}async function j(N){const Y=e.value.find(ke=>ke.id===N);if(await ks({title:"Kill agent",message:`Kill agent "${(Y==null?void 0:Y.label)||N}"? Its current work will be lost.`,confirmLabel:"Kill",danger:!0})){n.value=N;try{await K.del(`/api/agents/${encodeURIComponent(N)}`),Ae.success("Agent killed"),await R()}catch(ke){Ae.error(ke.message||"Failed to kill agent")}n.value=null}}const Q=sk({isEnabled:()=>a.value&&l,refreshList:()=>R(!0),hasOpenDetail:()=>!!m.value,refreshDetail:H});function U(){Q.start()}function O(){Q.stop()}return ts(a,()=>Q.sync()),We(()=>{l=!0,R(),U()}),Ds(()=>{l=!0,R(!0),U()}),Ms(()=>{l=!1,O()}),xt(()=>{l=!1,O(),T.close()}),{agents:e,loading:t,error:s,killing:n,autoRefresh:a,statusFilter:i,runningCount:r,completedCount:o,failedCount:c,statusFilters:d,filteredAgents:u,formatTs:fa,formatDuration:Qa,progressPercent:f,hasProgress:p,displayModelText:y,displayEffortText:E,displaySourceLabel:I,detail:x,detailId:m,detailLoading:_,detailError:S,copied:g,openDetail:C,closeDetail:M,copyText:P,fetchAgents:R,killAgent:j,startAutoRefresh:U,stopAutoRefresh:O}}},ak={template:` + `,setup(){const e=h([]),t=h(!0),s=h(null),n=h(null),a=h(!0),i=h("all");let l=!1;const r=J(()=>e.value.filter(N=>N.status==="running").length),o=J(()=>e.value.filter(N=>N.status==="completed").length),c=J(()=>e.value.filter(N=>["failed","timeout","killed"].includes(N.status)).length),d=J(()=>[{value:"all",label:"All",count:e.value.length},{value:"running",label:"Running",count:r.value},{value:"completed",label:"Completed",count:o.value},{value:"failed",label:"Failed",count:c.value}]),u=J(()=>i.value==="all"?e.value:i.value==="failed"?e.value.filter(N=>["failed","timeout","killed"].includes(N.status)):e.value.filter(N=>N.status===i.value));function f(N){const Y=Number(N.max_iterations)||0;return Y<=0?0:Math.min(100,Math.round(N.iteration_count/Y*100))}function p(N){return(Number(N.max_iterations)||0)>0}function b(N,Y){return N?N==="N/A"?"N/A":Y==="current_inheritance"?`inherit (currently ${N})`:N:"unknown"}function y(N){return b(N.display_model,N.display_model_source||N.display_source)}function E(N){return b(N.display_reasoning_effort,N.display_reasoning_effort_source||N.display_source)}function I(N){return{last_execution:"last executed",current_inheritance:"inherited from current config — not yet executed",spawn_override_pending:"requested at spawn — not yet executed",unknown:"no execution data"}[N]||""}const x=h(null),m=h(null),_=h(!1),S=h(null),g=h(""),T=xm({state:{get detail(){return x.value},set detail(N){x.value=N},get detailId(){return m.value},set detailId(N){m.value=N},get detailLoading(){return _.value},set detailLoading(N){_.value=N},get detailError(){return S.value},set detailError(N){S.value=N}},requestDetail:(N,{signal:Y})=>K.get(`/api/agents/${encodeURIComponent(N)}`,{signal:Y})});async function C(N){g.value="",await T.open(N.id)}function M(){T.close(),g.value=""}async function H(){await T.refresh()}async function P(N,Y){try{await navigator.clipboard.writeText(Y||""),g.value=N,setTimeout(()=>{g.value===N&&(g.value="")},1500)}catch{Ae.error("Copy failed")}}async function R(N=!1){N=N===!0,N||(t.value=!0);try{const Y=await K.get("/api/agents");e.value=Array.isArray(Y)?Y:[],s.value=null}catch(Y){N||(s.value=Y.message)}N||(t.value=!1)}async function j(N){const Y=e.value.find(ke=>ke.id===N);if(await ks({title:"Kill agent",message:`Kill agent "${(Y==null?void 0:Y.label)||N}"? Its current work will be lost.`,confirmLabel:"Kill",danger:!0})){n.value=N;try{await K.del(`/api/agents/${encodeURIComponent(N)}`),Ae.success("Agent killed"),await R()}catch(ke){Ae.error(ke.message||"Failed to kill agent")}n.value=null}}const Q=sk({isEnabled:()=>a.value&&l,refreshList:()=>R(!0),hasOpenDetail:()=>!!m.value,refreshDetail:H});function U(){Q.start()}function O(){Q.stop()}return ts(a,()=>Q.sync()),We(()=>{l=!0,R(),U()}),Ms(()=>{l=!0,R(!0),U()}),Ps(()=>{l=!1,O()}),xt(()=>{l=!1,O(),T.close()}),{agents:e,loading:t,error:s,killing:n,autoRefresh:a,statusFilter:i,runningCount:r,completedCount:o,failedCount:c,statusFilters:d,filteredAgents:u,formatTs:fa,formatDuration:Qa,progressPercent:f,hasProgress:p,displayModelText:y,displayEffortText:E,displaySourceLabel:I,detail:x,detailId:m,detailLoading:_,detailError:S,copied:g,openDetail:C,closeDetail:M,copyText:P,fetchAgents:R,killAgent:j,startAutoRefresh:U,stopAutoRefresh:O}}},ak={template:`

Autonomous Loops

@@ -696,7 +696,7 @@ var Gm=Object.defineProperty;var Km=(e,t,s)=>t in e?Gm(e,t,{enumerable:!0,config
- `,setup(){const e=h([]),t=h(!0),s=h(null),n=h(!1),a=h({goal:"",interval_seconds:60,mode:"notify",max_iterations:50,stop_condition:"",channel_id:""}),i=h(!1),l=h(null),r=h(null),o=h(null),c=h(null),d=h(null),u=h(!1),f=h(null),p=h("");let b=!1;const E=xm({state:{get detail(){return c.value},set detail(O){c.value=O},get detailId(){return d.value},set detailId(O){d.value=O},get detailLoading(){return u.value},set detailLoading(O){u.value=O},get detailError(){return f.value},set detailError(O){f.value=O}},detailLabel:"Loop detail",requestDetail:(O,{signal:N})=>K.get(`/api/loops/${encodeURIComponent(O)}?limit=100`,{signal:N})});async function I(O){p.value="",await E.open(O.id)}function x(){E.close(),p.value=""}async function m(O,N){try{await navigator.clipboard.writeText(N||""),p.value=O,setTimeout(()=>{p.value===O&&(p.value="")},1500)}catch{Ae.error("Copy failed")}}const _=J(()=>e.value.reduce((O,N)=>O+(N.iteration_count||0),0)),S=J(()=>e.value.filter(O=>O.status==="running").length);function g(O){return O==="running"?"loop-status-running":O==="error"?"loop-status-error":"loop-status-stopped"}function w(O){return O==="running"?"badge-success":O==="error"?"badge-danger":O==="completed"?"badge-info":"badge-warning"}function T(O){return O==="act"?"badge-warning":O==="silent"?"badge-info":"badge-success"}async function C(O=!1){O=O===!0,O||(t.value=!0);try{const N=await K.get("/api/loops");e.value=Array.isArray(N)?N:[],s.value=null}catch(N){O||(s.value=N.message)}O||(t.value=!1)}async function M(){l.value=null;const O=a.value;if(!O.goal.trim()){l.value="Goal is required";return}if(!O.channel_id.trim()){l.value="Channel ID is required";return}const N={goal:O.goal.trim(),channel_id:O.channel_id.trim(),interval_seconds:O.interval_seconds||60,mode:O.mode,max_iterations:O.max_iterations||50};O.stop_condition.trim()&&(N.stop_condition=O.stop_condition.trim()),i.value=!0;try{const Y=await K.post("/api/loops",N);Ae.success(`Loop started: ${Y.loop_id}`),a.value={goal:"",interval_seconds:60,mode:"notify",max_iterations:50,stop_condition:"",channel_id:""},n.value=!1,await C()}catch(Y){l.value=Y.message}i.value=!1}async function H(O){if(await ks({title:"Stop loop",message:`Stop loop ${O}? The current iteration will finish before stopping.`,confirmLabel:"Stop Loop",danger:!0})){r.value=O;try{await K.del(`/api/loops/${encodeURIComponent(O)}`),Ae.success("Loop stopped"),await C()}catch(Y){Ae.error(Y.message||"Failed to stop loop")}r.value=null}}async function P(O){o.value=O;try{await K.post(`/api/loops/${encodeURIComponent(O)}/restart`),Ae.success("Loop restarted"),await C()}catch(N){Ae.error(N.message||"Failed to restart loop")}o.value=null}function R(O){b&&O.payload&&(O.payload.loop_id||O.payload.type==="loop")&&(C(!0),d.value&&E.refresh())}let j=null;function Q(){j!==null&&clearInterval(j),j=null}function U(){Q(),b&&(j=setInterval(()=>{C(!0),d.value&&E.refresh()},5e3))}return We(()=>{b=!0,C(),Ke.subscribe("events",R),U()}),Ds(()=>{b=!0,C(!0),U()}),Ms(()=>{b=!1,Q()}),xt(()=>{b=!1,Ke.unsubscribe("events",R),Q(),E.close()}),{loops:e,loading:t,error:s,showCreate:n,form:a,creating:i,createError:l,stoppingId:r,restartingId:o,detail:c,detailId:d,detailLoading:u,detailError:f,copied:p,totalIterations:_,runningCount:S,statusDotClass:g,statusBadge:w,modeBadge:T,formatAge:mm,formatDuration:Qa,formatTs:fa,formatTokens:bm,openDetail:I,closeDetail:x,copyText:m,fetchLoops:C,doCreate:M,doStop:H,doRestart:P}}},ik={template:` + `,setup(){const e=h([]),t=h(!0),s=h(null),n=h(!1),a=h({goal:"",interval_seconds:60,mode:"notify",max_iterations:50,stop_condition:"",channel_id:""}),i=h(!1),l=h(null),r=h(null),o=h(null),c=h(null),d=h(null),u=h(!1),f=h(null),p=h("");let b=!1;const E=xm({state:{get detail(){return c.value},set detail(O){c.value=O},get detailId(){return d.value},set detailId(O){d.value=O},get detailLoading(){return u.value},set detailLoading(O){u.value=O},get detailError(){return f.value},set detailError(O){f.value=O}},detailLabel:"Loop detail",requestDetail:(O,{signal:N})=>K.get(`/api/loops/${encodeURIComponent(O)}?limit=100`,{signal:N})});async function I(O){p.value="",await E.open(O.id)}function x(){E.close(),p.value=""}async function m(O,N){try{await navigator.clipboard.writeText(N||""),p.value=O,setTimeout(()=>{p.value===O&&(p.value="")},1500)}catch{Ae.error("Copy failed")}}const _=J(()=>e.value.reduce((O,N)=>O+(N.iteration_count||0),0)),S=J(()=>e.value.filter(O=>O.status==="running").length);function g(O){return O==="running"?"loop-status-running":O==="error"?"loop-status-error":"loop-status-stopped"}function w(O){return O==="running"?"badge-success":O==="error"?"badge-danger":O==="completed"?"badge-info":"badge-warning"}function T(O){return O==="act"?"badge-warning":O==="silent"?"badge-info":"badge-success"}async function C(O=!1){O=O===!0,O||(t.value=!0);try{const N=await K.get("/api/loops");e.value=Array.isArray(N)?N:[],s.value=null}catch(N){O||(s.value=N.message)}O||(t.value=!1)}async function M(){l.value=null;const O=a.value;if(!O.goal.trim()){l.value="Goal is required";return}if(!O.channel_id.trim()){l.value="Channel ID is required";return}const N={goal:O.goal.trim(),channel_id:O.channel_id.trim(),interval_seconds:O.interval_seconds||60,mode:O.mode,max_iterations:O.max_iterations||50};O.stop_condition.trim()&&(N.stop_condition=O.stop_condition.trim()),i.value=!0;try{const Y=await K.post("/api/loops",N);Ae.success(`Loop started: ${Y.loop_id}`),a.value={goal:"",interval_seconds:60,mode:"notify",max_iterations:50,stop_condition:"",channel_id:""},n.value=!1,await C()}catch(Y){l.value=Y.message}i.value=!1}async function H(O){if(await ks({title:"Stop loop",message:`Stop loop ${O}? The current iteration will finish before stopping.`,confirmLabel:"Stop Loop",danger:!0})){r.value=O;try{await K.del(`/api/loops/${encodeURIComponent(O)}`),Ae.success("Loop stopped"),await C()}catch(Y){Ae.error(Y.message||"Failed to stop loop")}r.value=null}}async function P(O){o.value=O;try{await K.post(`/api/loops/${encodeURIComponent(O)}/restart`),Ae.success("Loop restarted"),await C()}catch(N){Ae.error(N.message||"Failed to restart loop")}o.value=null}function R(O){b&&O.payload&&(O.payload.loop_id||O.payload.type==="loop")&&(C(!0),d.value&&E.refresh())}let j=null;function Q(){j!==null&&clearInterval(j),j=null}function U(){Q(),b&&(j=setInterval(()=>{C(!0),d.value&&E.refresh()},5e3))}return We(()=>{b=!0,C(),Ke.subscribe("events",R),U()}),Ms(()=>{b=!0,C(!0),U()}),Ps(()=>{b=!1,Q()}),xt(()=>{b=!1,Ke.unsubscribe("events",R),Q(),E.close()}),{loops:e,loading:t,error:s,showCreate:n,form:a,creating:i,createError:l,stoppingId:r,restartingId:o,detail:c,detailId:d,detailLoading:u,detailError:f,copied:p,totalIterations:_,runningCount:S,statusDotClass:g,statusBadge:w,modeBadge:T,formatAge:mm,formatDuration:Qa,formatTs:fa,formatTokens:bm,openDetail:I,closeDetail:x,copyText:m,fetchLoops:C,doCreate:M,doStop:H,doRestart:P}}},ik={template:`
@@ -789,7 +789,7 @@ var Gm=Object.defineProperty;var Km=(e,t,s)=>t in e?Gm(e,t,{enumerable:!0,config
-
`,setup(){const e=h([]),t=h(!0),s=h(null),n=h(!0);let a=null;const i=h(null),l=J(()=>e.value.filter(x=>x.status==="running").length),r=J(()=>e.value.filter(x=>x.status!=="running").length);function o(x){return x==="running"?"loop-status-running":x==="failed"||x==="error"?"loop-status-error":"loop-status-stopped"}function c(x){return x==="running"?"badge-success":x==="completed"||x==="exited"?"badge-info":x==="killed"||x==="error"||x==="failed"?"badge-danger":"badge-warning"}async function d(x=!1){x=x===!0,x||(t.value=!0);try{e.value=await K.get("/api/processes"),s.value=null}catch(m){x||(s.value=m.message)}x||(t.value=!1)}function u(){f(),n.value&&(a=setInterval(()=>{t.value||d(!0)},5e3))}function f(){a&&(clearInterval(a),a=null)}ts(n,x=>{x?u():f()});async function p(x){if(await ks({title:"Kill process",message:`Kill process ${x}?`,confirmLabel:"Kill",danger:!0})){i.value=x;try{await K.del(`/api/processes/${x}`),Ae.success(`Process ${x} killed`),await d()}catch(_){Ae.error(_.message||"Failed to kill process")}i.value=null}}function b(x){x.payload&&(x.payload.pid||x.payload.type==="process")&&d(!0)}let y=!1;function E(){y||(y=!0,d(),Ke.subscribe("events",b),u())}function I(){y&&(y=!1,Ke.unsubscribe("events",b),f())}return We(E),Ds(E),Ms(I),xt(I),{processes:e,loading:t,error:s,autoRefresh:n,killingPid:i,runningCount:l,completedCount:r,procStatusDot:o,statusBadge:c,formatDuration:Qa,fetchProcesses:d,doKill:p}}},lk=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(?::(\d{2}))?$/;function Lu(e,t){return t==="cron"&&String(e.cron||"").trim()?e.run_at="":t==="run_at"&&String(e.run_at||"").trim()&&(e.cron=""),e}function rk(e,t=!1){const s=a=>String(a).padStart(2,"0"),n=`${e.getFullYear()}-${s(e.getMonth()+1)}-${s(e.getDate())}T${s(e.getHours())}:${s(e.getMinutes())}`;return t?`${n}:${s(e.getSeconds())}`:n}function ok(e){const t=-e.getTimezoneOffset(),s=t>=0?"+":"-",n=Math.abs(t),a=Math.floor(n/60),i=n%60;return`UTC${s}${a}${i?`:${String(i).padStart(2,"0")}`:""}`}function ck(e){const t=String(e||"").trim();if(!t)return{state:"empty"};const s=lk.exec(t);if(!s)return{state:"invalid",typed:t};const[,n,a,i,l,r]=s.slice(0,6).map(Number),o=s[6]===void 0?0:Number(s[6]);if(o>59)return{state:"invalid",typed:t};const c=s[6]!==void 0,d=c?t.slice(0,19):t.slice(0,16),u=Date.UTC(n,a-1,i,l,r,o),f=new Date(u-864e5).getTimezoneOffset(),p=new Date(u+864e5).getTimezoneOffset(),b=[];for(const E of new Set([f,p])){const I=new Date(u+E*6e4);rk(I,c)===d&&(b.some(x=>x.getTime()===I.getTime())||b.push(I))}if(b.sort((E,I)=>E.getTime()-I.getTime()),b.length===0)return{state:"nonexistent",typed:t};if(b.length>1)return{state:"ambiguous",typed:t,options:b.map(E=>({instant:E,offset:ok(E),iso:E.toISOString()}))};const y=b[0];return{state:"ok",typed:t,instant:y,iso:y.toISOString()}}const dk={template:` + `,setup(){const e=h([]),t=h(!0),s=h(null),n=h(!0);let a=null;const i=h(null),l=J(()=>e.value.filter(x=>x.status==="running").length),r=J(()=>e.value.filter(x=>x.status!=="running").length);function o(x){return x==="running"?"loop-status-running":x==="failed"||x==="error"?"loop-status-error":"loop-status-stopped"}function c(x){return x==="running"?"badge-success":x==="completed"||x==="exited"?"badge-info":x==="killed"||x==="error"||x==="failed"?"badge-danger":"badge-warning"}async function d(x=!1){x=x===!0,x||(t.value=!0);try{e.value=await K.get("/api/processes"),s.value=null}catch(m){x||(s.value=m.message)}x||(t.value=!1)}function u(){f(),n.value&&(a=setInterval(()=>{t.value||d(!0)},5e3))}function f(){a&&(clearInterval(a),a=null)}ts(n,x=>{x?u():f()});async function p(x){if(await ks({title:"Kill process",message:`Kill process ${x}?`,confirmLabel:"Kill",danger:!0})){i.value=x;try{await K.del(`/api/processes/${x}`),Ae.success(`Process ${x} killed`),await d()}catch(_){Ae.error(_.message||"Failed to kill process")}i.value=null}}function b(x){x.payload&&(x.payload.pid||x.payload.type==="process")&&d(!0)}let y=!1;function E(){y||(y=!0,d(),Ke.subscribe("events",b),u())}function I(){y&&(y=!1,Ke.unsubscribe("events",b),f())}return We(E),Ms(E),Ps(I),xt(I),{processes:e,loading:t,error:s,autoRefresh:n,killingPid:i,runningCount:l,completedCount:r,procStatusDot:o,statusBadge:c,formatDuration:Qa,fetchProcesses:d,doKill:p}}},lk=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(?::(\d{2}))?$/;function Lu(e,t){return t==="cron"&&String(e.cron||"").trim()?e.run_at="":t==="run_at"&&String(e.run_at||"").trim()&&(e.cron=""),e}function rk(e,t=!1){const s=a=>String(a).padStart(2,"0"),n=`${e.getFullYear()}-${s(e.getMonth()+1)}-${s(e.getDate())}T${s(e.getHours())}:${s(e.getMinutes())}`;return t?`${n}:${s(e.getSeconds())}`:n}function ok(e){const t=-e.getTimezoneOffset(),s=t>=0?"+":"-",n=Math.abs(t),a=Math.floor(n/60),i=n%60;return`UTC${s}${a}${i?`:${String(i).padStart(2,"0")}`:""}`}function ck(e){const t=String(e||"").trim();if(!t)return{state:"empty"};const s=lk.exec(t);if(!s)return{state:"invalid",typed:t};const[,n,a,i,l,r]=s.slice(0,6).map(Number),o=s[6]===void 0?0:Number(s[6]);if(o>59)return{state:"invalid",typed:t};const c=s[6]!==void 0,d=c?t.slice(0,19):t.slice(0,16),u=Date.UTC(n,a-1,i,l,r,o),f=new Date(u-864e5).getTimezoneOffset(),p=new Date(u+864e5).getTimezoneOffset(),b=[];for(const E of new Set([f,p])){const I=new Date(u+E*6e4);rk(I,c)===d&&(b.some(x=>x.getTime()===I.getTime())||b.push(I))}if(b.sort((E,I)=>E.getTime()-I.getTime()),b.length===0)return{state:"nonexistent",typed:t};if(b.length>1)return{state:"ambiguous",typed:t,options:b.map(E=>({instant:E,offset:ok(E),iso:E.toISOString()}))};const y=b[0];return{state:"ok",typed:t,instant:y,iso:y.toISOString()}}const dk={template:`
@@ -1572,8 +1572,8 @@ var Gm=Object.defineProperty;var Km=(e,t,s)=>t in e?Gm(e,t,{enumerable:!0,config
- `,setup(){const e=h([]),t=h(!0),s=h(null),n=h(null),a=h(null),i=h(!1);let l=0;const r=h(null),o=h(!1),c=h(new Set),d=h(!1),u=h("all"),f=h(""),p=h("last_active"),b=h(!1),y=Du,E=pk,I=h([]),x=h(!1),m=h(""),_=h("flat"),S=h(new Set),g=h(""),w=h(""),T=h(""),C=h(null),M=h(!1);function H(){try{const G=localStorage.getItem("odin-session-presets");G&&(I.value=JSON.parse(G))}catch{}}function P(){try{localStorage.setItem("odin-session-presets",JSON.stringify(I.value))}catch{}}const R=J(()=>f.value.trim()!==""||u.value!=="all"),j=J(()=>{let G=[...e.value];const me=Du.find(Ve=>Ve.id===u.value),Ce=me?me.filters:{};if(Ce.source&&(G=G.filter(Ve=>Ve.source===Ce.source)),Ce.minMessages&&(G=G.filter(Ve=>Ve.message_count>=Ce.minMessages)),Ce.hasCompaction&&(G=G.filter(Ve=>Ve.has_summary)),Ce.maxAge!=null){const Ve=Date.now()/1e3;G=G.filter(pt=>pt.last_active&&Ve-pt.last_active<=Ce.maxAge)}if(f.value.trim()){const Ve=f.value.toLowerCase().trim();G=G.filter(pt=>(pt.channel_id||"").toLowerCase().includes(Ve)||(pt.last_user_id||"").toLowerCase().includes(Ve)||(pt.source||"").toLowerCase().includes(Ve))}const Ne=p.value,Pe=b.value?1:-1;return G.sort((Ve,pt)=>{const as=Ve[Ne]||0,Ps=pt[Ne]||0;return(as-Ps)*Pe}),G}),Q=J(()=>{if(!a.value||!a.value.messages)return[];const G=a.value.messages;if(G.length===0)return[];const me=[];let Ce=[];for(const Ne of G)Ne.role==="user"&&Ce.length>0&&(me.push(Ce),Ce=[]),Ce.push(Ne);return Ce.length>0&&me.push(Ce),me}),U=J(()=>j.value.length>0&&c.value.size===j.value.length);function O(G){const me=G.find(Ce=>Ce.role==="user");if(me&&me.content){const Ce=me.content.slice(0,120);return Ce.lengthme.id!==G),P(),u.value===G&&(u.value="all")}function pe(){u.value="all",f.value="",p.value="last_active",b.value=!1}function F(G){if(!G)return"—";const me=Date.now()/1e3-G;if(me<60)return"just now";if(me<3600){const Ne=Math.floor(me/60);return`${Ne} minute${Ne!==1?"s":""} ago`}if(me<86400){const Ne=Math.floor(me/3600);return`${Ne} hour${Ne!==1?"s":""} ago`}const Ce=Math.floor(me/86400);return`${Ce} day${Ce!==1?"s":""} ago`}function se(G){if(!G)return"";try{return new Date(G*1e3).toLocaleString([],{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return""}}function Se(G){if(!G)return"";try{return new Date(G*1e3).toLocaleString()}catch{return""}}function V(G){return G==="user"?"bg-gray-900/50 border border-gray-800":G==="assistant"?"bg-indigo-950/30 border border-indigo-900/30":"bg-gray-900/30 border border-gray-800/50"}function de(G){return G==="user"?"sess-msg-user":G==="assistant"?"sess-msg-assistant":"sess-msg-system"}function ce(G){return G==="user"?"badge-info":G==="assistant"?"badge-success":"badge-warning"}function _e(G){return G==="user"?"sess-dot-user":G==="assistant"?"sess-dot-assistant":"sess-dot-system"}function ve(G){return G==="user"?"text-cyan-400":G==="assistant"?"text-indigo-400":"text-gray-500"}function He(G){return G?G.length>2e3?G.slice(0,2e3)+` -... (truncated)`:G:""}async function k(){const G=g.value.trim();if(G){M.value=!0;try{let me=`/api/sessions/search?q=${encodeURIComponent(G)}&limit=50`;w.value.trim()&&(me+=`&channel_id=${encodeURIComponent(w.value.trim())}`),T.value.trim()&&(me+=`&user_id=${encodeURIComponent(T.value.trim())}`);const Ce=await K.get(me);C.value=Ce.results||[]}catch{C.value=[]}M.value=!1}}function L(){g.value="",w.value="",T.value="",C.value=null}function $(G){return G?G.replace(/&/g,"&").replace(//g,">").replace(/>>>/g,'').replace(/<<</g,""):""}function ee(G){return G==="user"?"fts-result-user":G==="assistant"?"fts-result-assistant":G==="summary"?"fts-result-summary":G==="fts"?"fts-result-fts":G==="channel"?"fts-result-channel":"fts-result-default"}function Z(G){return G==="user"?"badge-info":G==="assistant"?"badge-success":G==="summary"?"badge-warning":G==="fts"?"badge-success":"badge-info"}async function X(){t.value=!0,s.value=null;try{e.value=await K.get("/api/sessions")}catch(G){s.value=G.message}t.value=!1}function ue(){s.value=null,X()}async function oe(G){if(n.value===G){n.value=null,a.value=null,S.value=new Set;return}n.value=G,a.value=null,i.value=!0,S.value=new Set;const me=++l;try{const Ce=await K.get(`/api/sessions/${encodeURIComponent(G)}`);me===l&&n.value===G&&(a.value=Ce)}catch(Ce){me===l&&n.value===G&&(a.value={messages:[],summary:"",error:Ce.message||"Failed to load session"})}finally{me===l&&(i.value=!1)}}function le(G){const me=new Set(c.value);me.has(G)?me.delete(G):me.add(G),c.value=me}function te(){U.value?c.value=new Set:c.value=new Set(j.value.map(G=>G.channel_id))}function ne(G){r.value=G}async function fe(){if(r.value){o.value=!0;try{await K.del(`/api/sessions/${encodeURIComponent(r.value)}`),n.value===r.value&&(n.value=null,a.value=null),c.value.delete(r.value),await X()}catch(G){s.value=G.message||"Failed to clear session"}o.value=!1,r.value=null}}function be(){d.value=!0}async function Te(){if(c.value.size!==0){o.value=!0;try{await K.post("/api/sessions/clear-bulk",{channel_ids:[...c.value]}),c.value.has(n.value)&&(n.value=null,a.value=null),c.value=new Set,await X()}catch(G){s.value=G.message||"Failed to clear sessions"}o.value=!1,d.value=!1}}async function Ie(G,me){const Ce=`/api/sessions/${encodeURIComponent(G)}/export?format=${me}`;try{const Ne=await K.getBlob(Ce),Pe=URL.createObjectURL(Ne),Ve=document.createElement("a");Ve.href=Pe,Ve.download=`session-${G}.${me==="text"?"txt":"json"}`,Ve.click(),URL.revokeObjectURL(Pe)}catch(Ne){s.value=Ne.message||"Failed to export session"}}let Le=null;function De(G){G.payload&&G.payload.channel_id&&(clearTimeout(Le),Le=setTimeout(()=>{if(X(),n.value&&G.payload.channel_id===n.value){const me=n.value,Ce=l;K.get(`/api/sessions/${encodeURIComponent(me)}`).then(Ne=>{Ce!==l||n.value!==me||(a.value=Ne)}).catch(()=>{})}},2e3))}let Be=!1;function qe(){Be||(Be=!0,X(),Ke.subscribe("events",De))}We(()=>{H(),qe()}),Ds(()=>{qe()});function ct(){Be&&(Be=!1,Ke.unsubscribe("events",De),clearTimeout(Le))}return Ms(ct),xt(ct),{sessions:e,loading:t,error:s,expandedId:n,detail:a,detailLoading:i,clearTarget:r,clearing:o,selected:c,allSelected:U,bulkClearing:d,activePreset:u,searchQuery:f,sortBy:p,sortAsc:b,filterPresets:y,sortOptions:E,filteredSessions:j,hasActiveFilters:R,customPresets:I,showSavePreset:x,newPresetName:m,threadView:_,threads:Q,collapsedThreads:S,ftsQuery:g,ftsChannelId:w,ftsUserId:T,ftsResults:C,ftsSearching:M,formatAge:F,formatTimestamp:se,formatFullTimestamp:Se,messageClass:V,threadMsgClass:de,roleBadge:ce,roleDotClass:_e,roleLabelClass:ve,truncateContent:He,threadSummary:O,fetchSessions:X,retry:ue,toggleSession:oe,toggleSelect:le,toggleSelectAll:te,confirmClear:ne,clearSession:fe,confirmBulkClear:be,doBulkClear:Te,exportSession:Ie,applyPreset:Y,applyCustomPreset:we,saveCustomPreset:ke,removeCustomPreset:ie,resetFilters:pe,toggleThread:N,runFtsSearch:k,clearFtsSearch:L,highlightSnippet:$,ftsResultClass:ee,ftsTypeBadge:Z}}},mk={props:["trace"],template:` + `,setup(){const e=h([]),t=h(!0),s=h(null),n=h(null),a=h(null),i=h(!1);let l=0;const r=h(null),o=h(!1),c=h(new Set),d=h(!1),u=h("all"),f=h(""),p=h("last_active"),b=h(!1),y=Du,E=pk,I=h([]),x=h(!1),m=h(""),_=h("flat"),S=h(new Set),g=h(""),w=h(""),T=h(""),C=h(null),M=h(!1);function H(){try{const G=localStorage.getItem("odin-session-presets");G&&(I.value=JSON.parse(G))}catch{}}function P(){try{localStorage.setItem("odin-session-presets",JSON.stringify(I.value))}catch{}}const R=J(()=>f.value.trim()!==""||u.value!=="all"),j=J(()=>{let G=[...e.value];const me=Du.find(Ve=>Ve.id===u.value),Ce=me?me.filters:{};if(Ce.source&&(G=G.filter(Ve=>Ve.source===Ce.source)),Ce.minMessages&&(G=G.filter(Ve=>Ve.message_count>=Ce.minMessages)),Ce.hasCompaction&&(G=G.filter(Ve=>Ve.has_summary)),Ce.maxAge!=null){const Ve=Date.now()/1e3;G=G.filter(pt=>pt.last_active&&Ve-pt.last_active<=Ce.maxAge)}if(f.value.trim()){const Ve=f.value.toLowerCase().trim();G=G.filter(pt=>(pt.channel_id||"").toLowerCase().includes(Ve)||(pt.last_user_id||"").toLowerCase().includes(Ve)||(pt.source||"").toLowerCase().includes(Ve))}const Ne=p.value,Pe=b.value?1:-1;return G.sort((Ve,pt)=>{const as=Ve[Ne]||0,Fs=pt[Ne]||0;return(as-Fs)*Pe}),G}),Q=J(()=>{if(!a.value||!a.value.messages)return[];const G=a.value.messages;if(G.length===0)return[];const me=[];let Ce=[];for(const Ne of G)Ne.role==="user"&&Ce.length>0&&(me.push(Ce),Ce=[]),Ce.push(Ne);return Ce.length>0&&me.push(Ce),me}),U=J(()=>j.value.length>0&&c.value.size===j.value.length);function O(G){const me=G.find(Ce=>Ce.role==="user");if(me&&me.content){const Ce=me.content.slice(0,120);return Ce.lengthme.id!==G),P(),u.value===G&&(u.value="all")}function pe(){u.value="all",f.value="",p.value="last_active",b.value=!1}function F(G){if(!G)return"—";const me=Date.now()/1e3-G;if(me<60)return"just now";if(me<3600){const Ne=Math.floor(me/60);return`${Ne} minute${Ne!==1?"s":""} ago`}if(me<86400){const Ne=Math.floor(me/3600);return`${Ne} hour${Ne!==1?"s":""} ago`}const Ce=Math.floor(me/86400);return`${Ce} day${Ce!==1?"s":""} ago`}function se(G){if(!G)return"";try{return new Date(G*1e3).toLocaleString([],{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return""}}function Se(G){if(!G)return"";try{return new Date(G*1e3).toLocaleString()}catch{return""}}function V(G){return G==="user"?"bg-gray-900/50 border border-gray-800":G==="assistant"?"bg-indigo-950/30 border border-indigo-900/30":"bg-gray-900/30 border border-gray-800/50"}function de(G){return G==="user"?"sess-msg-user":G==="assistant"?"sess-msg-assistant":"sess-msg-system"}function ce(G){return G==="user"?"badge-info":G==="assistant"?"badge-success":"badge-warning"}function _e(G){return G==="user"?"sess-dot-user":G==="assistant"?"sess-dot-assistant":"sess-dot-system"}function ve(G){return G==="user"?"text-cyan-400":G==="assistant"?"text-indigo-400":"text-gray-500"}function He(G){return G?G.length>2e3?G.slice(0,2e3)+` +... (truncated)`:G:""}async function k(){const G=g.value.trim();if(G){M.value=!0;try{let me=`/api/sessions/search?q=${encodeURIComponent(G)}&limit=50`;w.value.trim()&&(me+=`&channel_id=${encodeURIComponent(w.value.trim())}`),T.value.trim()&&(me+=`&user_id=${encodeURIComponent(T.value.trim())}`);const Ce=await K.get(me);C.value=Ce.results||[]}catch{C.value=[]}M.value=!1}}function L(){g.value="",w.value="",T.value="",C.value=null}function $(G){return G?G.replace(/&/g,"&").replace(//g,">").replace(/>>>/g,'').replace(/<<</g,""):""}function ee(G){return G==="user"?"fts-result-user":G==="assistant"?"fts-result-assistant":G==="summary"?"fts-result-summary":G==="fts"?"fts-result-fts":G==="channel"?"fts-result-channel":"fts-result-default"}function Z(G){return G==="user"?"badge-info":G==="assistant"?"badge-success":G==="summary"?"badge-warning":G==="fts"?"badge-success":"badge-info"}async function X(){t.value=!0,s.value=null;try{e.value=await K.get("/api/sessions")}catch(G){s.value=G.message}t.value=!1}function ue(){s.value=null,X()}async function oe(G){if(n.value===G){n.value=null,a.value=null,S.value=new Set;return}n.value=G,a.value=null,i.value=!0,S.value=new Set;const me=++l;try{const Ce=await K.get(`/api/sessions/${encodeURIComponent(G)}`);me===l&&n.value===G&&(a.value=Ce)}catch(Ce){me===l&&n.value===G&&(a.value={messages:[],summary:"",error:Ce.message||"Failed to load session"})}finally{me===l&&(i.value=!1)}}function le(G){const me=new Set(c.value);me.has(G)?me.delete(G):me.add(G),c.value=me}function te(){U.value?c.value=new Set:c.value=new Set(j.value.map(G=>G.channel_id))}function ne(G){r.value=G}async function fe(){if(r.value){o.value=!0;try{await K.del(`/api/sessions/${encodeURIComponent(r.value)}`),n.value===r.value&&(n.value=null,a.value=null),c.value.delete(r.value),await X()}catch(G){s.value=G.message||"Failed to clear session"}o.value=!1,r.value=null}}function be(){d.value=!0}async function Te(){if(c.value.size!==0){o.value=!0;try{await K.post("/api/sessions/clear-bulk",{channel_ids:[...c.value]}),c.value.has(n.value)&&(n.value=null,a.value=null),c.value=new Set,await X()}catch(G){s.value=G.message||"Failed to clear sessions"}o.value=!1,d.value=!1}}async function Ie(G,me){const Ce=`/api/sessions/${encodeURIComponent(G)}/export?format=${me}`;try{const Ne=await K.getBlob(Ce),Pe=URL.createObjectURL(Ne),Ve=document.createElement("a");Ve.href=Pe,Ve.download=`session-${G}.${me==="text"?"txt":"json"}`,Ve.click(),URL.revokeObjectURL(Pe)}catch(Ne){s.value=Ne.message||"Failed to export session"}}let Le=null;function De(G){G.payload&&G.payload.channel_id&&(clearTimeout(Le),Le=setTimeout(()=>{if(X(),n.value&&G.payload.channel_id===n.value){const me=n.value,Ce=l;K.get(`/api/sessions/${encodeURIComponent(me)}`).then(Ne=>{Ce!==l||n.value!==me||(a.value=Ne)}).catch(()=>{})}},2e3))}let Be=!1;function qe(){Be||(Be=!0,X(),Ke.subscribe("events",De))}We(()=>{H(),qe()}),Ms(()=>{qe()});function ct(){Be&&(Be=!1,Ke.unsubscribe("events",De),clearTimeout(Le))}return Ps(ct),xt(ct),{sessions:e,loading:t,error:s,expandedId:n,detail:a,detailLoading:i,clearTarget:r,clearing:o,selected:c,allSelected:U,bulkClearing:d,activePreset:u,searchQuery:f,sortBy:p,sortAsc:b,filterPresets:y,sortOptions:E,filteredSessions:j,hasActiveFilters:R,customPresets:I,showSavePreset:x,newPresetName:m,threadView:_,threads:Q,collapsedThreads:S,ftsQuery:g,ftsChannelId:w,ftsUserId:T,ftsResults:C,ftsSearching:M,formatAge:F,formatTimestamp:se,formatFullTimestamp:Se,messageClass:V,threadMsgClass:de,roleBadge:ce,roleDotClass:_e,roleLabelClass:ve,truncateContent:He,threadSummary:O,fetchSessions:X,retry:ue,toggleSession:oe,toggleSelect:le,toggleSelectAll:te,confirmClear:ne,clearSession:fe,confirmBulkClear:be,doBulkClear:Te,exportSession:Ie,applyPreset:Y,applyCustomPreset:we,saveCustomPreset:ke,removeCustomPreset:ie,resetFilters:pe,toggleThread:N,runFtsSearch:k,clearFtsSearch:L,highlightSnippet:$,ftsResultClass:ee,ftsTypeBadge:Z}}},mk={props:["trace"],template:`
Context Assembly
@@ -2178,7 +2178,7 @@ var Gm=Object.defineProperty;var Km=(e,t,s)=>t in e?Gm(e,t,{enumerable:!0,config
- `,setup(){const e=h(!0),t=h(null),s=h(!1),n=h({by_user:{},by_channel:{},by_tool:{},recent:[],pricing:{}}),a=h({requests:0,input_tokens:0,output_tokens:0,total_tokens:0,cost_usd:0}),i=h("user");let l=null;const r=[{key:"user",label:"By User"},{key:"channel",label:"By Channel"},{key:"tool",label:"By Tool"},{key:"recent",label:"Recent"}],o=J(()=>[...n.value.recent||[]].reverse()),c=async()=>{try{const b=await K.get("/api/usage");n.value=b,a.value=b.totals||a.value,t.value=null,s.value=!0}catch(b){t.value=b.message}finally{e.value=!1}},d=()=>{e.value=!0,c()};let u=!1;function f(){u||(u=!0,c(),l||(l=setInterval(c,15e3)))}function p(){u&&(u=!1,l&&(clearInterval(l),l=null))}return We(f),Ds(f),Ms(p),xt(p),{hasData:s,loading:e,error:t,data:n,totals:a,activeTab:i,tabs:r,recentReversed:o,fmtNum:vm,formatTime:hm,retry:d}}},km=[{id:"audit",label:"Audit",component:fk},{id:"sessions",label:"Sessions",component:hk},{id:"traces",label:"Traces",component:gk},{id:"usage",label:"Usage",component:vk}],bk={components:{TabbedPage:Mr},setup(){return{tabs:km}},template:''},no=[{id:"system",label:"System & Commands",icon:"terminal",match:e=>/^(run_command|run_script|read_file|write_file|list_directory|search_files|manage_process|file_|post_file)/.test(e)},{id:"devops",label:"DevOps & Infrastructure",icon:"server",match:e=>/^(git_ops|docker_ops|kubectl|terraform_ops|http_probe)/.test(e)},{id:"agents",label:"Agents & Orchestration",icon:"bot",match:e=>/^(spawn_agent|send_to_agent|wait_for_agents|get_agent_results|kill_agent|list_agents|spawn_loop_agents|collect_loop_agents)/.test(e)},{id:"workflow",label:"Workflows & Tasks",icon:"workflow",match:e=>/^(delegate_task|cancel_task|list_tasks|schedule_|start_loop|stop_loop|list_loops|delete_schedule|list_schedules|update_schedule|parse_time)/.test(e)},{id:"network",label:"Network & Web",icon:"globe",match:e=>/^(web_|browser_|search_web|fetch_url|http_)/.test(e)},{id:"knowledge",label:"Knowledge & Search",icon:"book",match:e=>/^(search_knowledge|ingest_|knowledge_|search_history|search_audit|bulk_ingest|delete_knowledge|list_knowledge)/.test(e)},{id:"discord",label:"Discord & Admin",icon:"message",match:e=>/^(send_|add_reaction|create_poll|purge_|discord_|embed_|read_channel|set_permission)/.test(e)},{id:"skills",label:"Skills",icon:"puzzle",match:e=>/^(create_skill|edit_skill|delete_skill|enable_skill|disable_skill|install_skill|export_skill|skill_status|invoke_skill|list_skills)/.test(e)},{id:"memory",label:"Memory & State",icon:"brain",match:e=>/^(memory_manage|list_manage)/.test(e)},{id:"ai",label:"AI & Generation",icon:"sparkles",match:e=>/^(generate_|analyze_|claude_|vision_|comfyui_)/.test(e)},{id:"integrations",label:"Integrations",icon:"link",match:e=>/^(issue_tracker|slack_|grafana_|mcp_)/.test(e)},{id:"other",label:"Other Tools",icon:"wrench",match:()=>!0}],yk={template:` + `,setup(){const e=h(!0),t=h(null),s=h(!1),n=h({by_user:{},by_channel:{},by_tool:{},recent:[],pricing:{}}),a=h({requests:0,input_tokens:0,output_tokens:0,total_tokens:0,cost_usd:0}),i=h("user");let l=null;const r=[{key:"user",label:"By User"},{key:"channel",label:"By Channel"},{key:"tool",label:"By Tool"},{key:"recent",label:"Recent"}],o=J(()=>[...n.value.recent||[]].reverse()),c=async()=>{try{const b=await K.get("/api/usage");n.value=b,a.value=b.totals||a.value,t.value=null,s.value=!0}catch(b){t.value=b.message}finally{e.value=!1}},d=()=>{e.value=!0,c()};let u=!1;function f(){u||(u=!0,c(),l||(l=setInterval(c,15e3)))}function p(){u&&(u=!1,l&&(clearInterval(l),l=null))}return We(f),Ms(f),Ps(p),xt(p),{hasData:s,loading:e,error:t,data:n,totals:a,activeTab:i,tabs:r,recentReversed:o,fmtNum:vm,formatTime:hm,retry:d}}},km=[{id:"audit",label:"Audit",component:fk},{id:"sessions",label:"Sessions",component:hk},{id:"traces",label:"Traces",component:gk},{id:"usage",label:"Usage",component:vk}],bk={components:{TabbedPage:Mr},setup(){return{tabs:km}},template:''},no=[{id:"system",label:"System & Commands",icon:"terminal",match:e=>/^(run_command|run_script|read_file|write_file|list_directory|search_files|manage_process|file_|post_file)/.test(e)},{id:"devops",label:"DevOps & Infrastructure",icon:"server",match:e=>/^(git_ops|docker_ops|kubectl|terraform_ops|http_probe)/.test(e)},{id:"agents",label:"Agents & Orchestration",icon:"bot",match:e=>/^(spawn_agent|send_to_agent|wait_for_agents|get_agent_results|kill_agent|list_agents|spawn_loop_agents|collect_loop_agents)/.test(e)},{id:"workflow",label:"Workflows & Tasks",icon:"workflow",match:e=>/^(delegate_task|cancel_task|list_tasks|schedule_|start_loop|stop_loop|list_loops|delete_schedule|list_schedules|update_schedule|parse_time)/.test(e)},{id:"network",label:"Network & Web",icon:"globe",match:e=>/^(web_|browser_|search_web|fetch_url|http_)/.test(e)},{id:"knowledge",label:"Knowledge & Search",icon:"book",match:e=>/^(search_knowledge|ingest_|knowledge_|search_history|search_audit|bulk_ingest|delete_knowledge|list_knowledge)/.test(e)},{id:"discord",label:"Discord & Admin",icon:"message",match:e=>/^(send_|add_reaction|create_poll|purge_|discord_|embed_|read_channel|set_permission)/.test(e)},{id:"skills",label:"Skills",icon:"puzzle",match:e=>/^(create_skill|edit_skill|delete_skill|enable_skill|disable_skill|install_skill|export_skill|skill_status|invoke_skill|list_skills)/.test(e)},{id:"memory",label:"Memory & State",icon:"brain",match:e=>/^(memory_manage|list_manage)/.test(e)},{id:"ai",label:"AI & Generation",icon:"sparkles",match:e=>/^(generate_|analyze_|claude_|vision_|comfyui_)/.test(e)},{id:"integrations",label:"Integrations",icon:"link",match:e=>/^(issue_tracker|slack_|grafana_|mcp_)/.test(e)},{id:"other",label:"Other Tools",icon:"wrench",match:()=>!0}],yk={template:`

Tools

@@ -3142,7 +3142,7 @@ var Gm=Object.defineProperty;var Km=(e,t,s)=>t in e?Gm(e,t,{enumerable:!0,config
- `,setup(){const e=h({}),t=h(!0),s=h(null),n=h(!1),a=h(!1),i=J(()=>e.value.components||[]),l=J(()=>Ik[e.value.overall]||"text-gray-400"),r=J(()=>e.value.overall==="healthy"?"success":e.value.overall==="degraded"?"warning":e.value.overall==="unhealthy"?"error":"minus"),o=J(()=>{const g=e.value.overall;return g==="healthy"?"All Systems Healthy":g==="degraded"?"Some Systems Degraded":g==="unhealthy"?"System Issues Detected":"Unknown"});function c(g){return Ak[g]||"text-gray-400"}function d(g){return Rk[g]||"info"}function u(g){return g==="ok"?"badge-success":g==="degraded"?"badge-warning":g==="down"?"badge-danger":"badge-info"}function f(g){return g==="closed"?"text-green-400":g==="half_open"?"text-yellow-400":g==="open"?"text-red-400":"text-gray-400"}function p(g){return g.replace(/_/g," ").replace(/\b\w/g,w=>w.toUpperCase())}function b(g){if(!g)return"—";try{return new Date(g).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{return g}}function y(g){return g>=1e6?(g/1e6).toFixed(1)+"M":g>=1e3?(g/1e3).toFixed(1)+"K":String(g)}async function E(){a.value=!0;try{e.value=await K.get("/api/health/components"),s.value=null,n.value=!0}catch(g){s.value=g.message}finally{t.value=!1,a.value=!1}}function I(){t.value=!0,s.value=null,E()}let x=null,m=!1;function _(){m||(m=!0,E(),x||(x=setInterval(E,3e4)))}function S(){m&&(m=!1,x&&(clearInterval(x),x=null))}return We(_),Ds(_),Ms(S),xt(S),{data:e,hasData:n,loading:t,error:s,refreshing:a,components:i,overallColor:l,overallIcon:r,overallLabel:o,statusColor:c,statusIcon:d,badgeClass:u,circuitColor:f,formatName:p,formatTime:b,formatNumber:y,fetchHealth:E,retry:I}}},Nk={template:` + `,setup(){const e=h({}),t=h(!0),s=h(null),n=h(!1),a=h(!1),i=J(()=>e.value.components||[]),l=J(()=>Ik[e.value.overall]||"text-gray-400"),r=J(()=>e.value.overall==="healthy"?"success":e.value.overall==="degraded"?"warning":e.value.overall==="unhealthy"?"error":"minus"),o=J(()=>{const g=e.value.overall;return g==="healthy"?"All Systems Healthy":g==="degraded"?"Some Systems Degraded":g==="unhealthy"?"System Issues Detected":"Unknown"});function c(g){return Ak[g]||"text-gray-400"}function d(g){return Rk[g]||"info"}function u(g){return g==="ok"?"badge-success":g==="degraded"?"badge-warning":g==="down"?"badge-danger":"badge-info"}function f(g){return g==="closed"?"text-green-400":g==="half_open"?"text-yellow-400":g==="open"?"text-red-400":"text-gray-400"}function p(g){return g.replace(/_/g," ").replace(/\b\w/g,w=>w.toUpperCase())}function b(g){if(!g)return"—";try{return new Date(g).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{return g}}function y(g){return g>=1e6?(g/1e6).toFixed(1)+"M":g>=1e3?(g/1e3).toFixed(1)+"K":String(g)}async function E(){a.value=!0;try{e.value=await K.get("/api/health/components"),s.value=null,n.value=!0}catch(g){s.value=g.message}finally{t.value=!1,a.value=!1}}function I(){t.value=!0,s.value=null,E()}let x=null,m=!1;function _(){m||(m=!0,E(),x||(x=setInterval(E,3e4)))}function S(){m&&(m=!1,x&&(clearInterval(x),x=null))}return We(_),Ms(_),Ps(S),xt(S),{data:e,hasData:n,loading:t,error:s,refreshing:a,components:i,overallColor:l,overallIcon:r,overallLabel:o,statusColor:c,statusIcon:d,badgeClass:u,circuitColor:f,formatName:p,formatTime:b,formatNumber:y,fetchHealth:E,retry:I}}},Nk={template:`
@@ -3385,7 +3385,7 @@ var Gm=Object.defineProperty;var Km=(e,t,s)=>t in e?Gm(e,t,{enumerable:!0,config
- `,setup(){const e=h(!0),t=h(null),s=h(!1),n=h(!1),a=h("sessions"),i=h(null);let l=null;const r=[{key:"sessions",label:"Sessions"},{key:"knowledge",label:"Knowledge"},{key:"trajectories",label:"Trajectories"},{key:"storage",label:"Storage"}],o=J(()=>{if(!i.value||!i.value.collected_at)return"";try{return new Date(i.value.collected_at).toLocaleTimeString()}catch{return""}}),c=J(()=>{if(!i.value)return[];const E=i.value,I=E.storage_total_bytes||1;return[{label:"Session Persistence",mb:E.sessions.persist_dir.total_mb,bytes:E.sessions.persist_dir.total_bytes,files:E.sessions.persist_dir.file_count,pct:Math.min(100,Math.round(E.sessions.persist_dir.total_bytes/I*100)),color:"res-bar-blue"},{label:"Knowledge Database",mb:E.knowledge.db_file.total_mb,bytes:E.knowledge.db_file.total_bytes,files:E.knowledge.db_file.file_count,pct:Math.min(100,Math.round(E.knowledge.db_file.total_bytes/I*100)),color:"res-bar-purple"},{label:"Message Trajectories",mb:E.trajectories.message_dir.total_mb,bytes:E.trajectories.message_dir.total_bytes,files:E.trajectories.message_dir.file_count,pct:Math.min(100,Math.round(E.trajectories.message_dir.total_bytes/I*100)),color:"res-bar-emerald"},{label:"Agent Trajectories",mb:E.trajectories.agent_dir.total_mb,bytes:E.trajectories.agent_dir.total_bytes,files:E.trajectories.agent_dir.file_count,pct:Math.min(100,Math.round(E.trajectories.agent_dir.total_bytes/I*100)),color:"res-bar-amber"}]});async function d(){try{const E=await K.get("/api/resource-usage");i.value=E,t.value=null,s.value=!0}catch(E){t.value=E.message||"Failed to load resource usage"}finally{e.value=!1,n.value=!1}}async function u(){n.value=!0,await d()}function f(){e.value=!0,t.value=null,d()}let p=!1;function b(){p||(p=!0,d(),l||(l=setInterval(d,3e4)))}function y(){p&&(p=!1,l&&(clearInterval(l),l=null))}return We(b),Ds(b),Ms(y),xt(y),{hasData:s,loading:e,error:t,refreshing:n,data:i,activeTab:a,tabs:r,collectedAt:o,storageItems:c,fmtNum:vm,refresh:u,retry:f}}},Lk=["INFO","WARNING","ERROR"],Dk=[{id:"all",name:"All Logs",icon:"list",filters:{}},{id:"errors",name:"Errors Only",icon:"error",filters:{level:"ERROR"}},{id:"warnings",name:"Warnings+",icon:"warning",filters:{levels:["WARNING","ERROR"]}},{id:"tools",name:"Tool Activity",icon:"wrench",filters:{hasToolName:!0}},{id:"recent-errors",name:"Recent Errors",icon:"flame",filters:{level:"ERROR",timeRange:"last_1h"}}],ao=[{value:"",label:"All Time"},{value:"last_5m",label:"Last 5 min",seconds:300},{value:"last_15m",label:"Last 15 min",seconds:900},{value:"last_1h",label:"Last 1 hour",seconds:3600},{value:"last_4h",label:"Last 4 hours",seconds:14400},{value:"last_24h",label:"Last 24 hours",seconds:86400}],Mk=[50,100,200,500],Pk={template:` + `,setup(){const e=h(!0),t=h(null),s=h(!1),n=h(!1),a=h("sessions"),i=h(null);let l=null;const r=[{key:"sessions",label:"Sessions"},{key:"knowledge",label:"Knowledge"},{key:"trajectories",label:"Trajectories"},{key:"storage",label:"Storage"}],o=J(()=>{if(!i.value||!i.value.collected_at)return"";try{return new Date(i.value.collected_at).toLocaleTimeString()}catch{return""}}),c=J(()=>{if(!i.value)return[];const E=i.value,I=E.storage_total_bytes||1;return[{label:"Session Persistence",mb:E.sessions.persist_dir.total_mb,bytes:E.sessions.persist_dir.total_bytes,files:E.sessions.persist_dir.file_count,pct:Math.min(100,Math.round(E.sessions.persist_dir.total_bytes/I*100)),color:"res-bar-blue"},{label:"Knowledge Database",mb:E.knowledge.db_file.total_mb,bytes:E.knowledge.db_file.total_bytes,files:E.knowledge.db_file.file_count,pct:Math.min(100,Math.round(E.knowledge.db_file.total_bytes/I*100)),color:"res-bar-purple"},{label:"Message Trajectories",mb:E.trajectories.message_dir.total_mb,bytes:E.trajectories.message_dir.total_bytes,files:E.trajectories.message_dir.file_count,pct:Math.min(100,Math.round(E.trajectories.message_dir.total_bytes/I*100)),color:"res-bar-emerald"},{label:"Agent Trajectories",mb:E.trajectories.agent_dir.total_mb,bytes:E.trajectories.agent_dir.total_bytes,files:E.trajectories.agent_dir.file_count,pct:Math.min(100,Math.round(E.trajectories.agent_dir.total_bytes/I*100)),color:"res-bar-amber"}]});async function d(){try{const E=await K.get("/api/resource-usage");i.value=E,t.value=null,s.value=!0}catch(E){t.value=E.message||"Failed to load resource usage"}finally{e.value=!1,n.value=!1}}async function u(){n.value=!0,await d()}function f(){e.value=!0,t.value=null,d()}let p=!1;function b(){p||(p=!0,d(),l||(l=setInterval(d,3e4)))}function y(){p&&(p=!1,l&&(clearInterval(l),l=null))}return We(b),Ms(b),Ps(y),xt(y),{hasData:s,loading:e,error:t,refreshing:n,data:i,activeTab:a,tabs:r,collectedAt:o,storageItems:c,fmtNum:vm,refresh:u,retry:f}}},Lk=["INFO","WARNING","ERROR"],Dk=[{id:"all",name:"All Logs",icon:"list",filters:{}},{id:"errors",name:"Errors Only",icon:"error",filters:{level:"ERROR"}},{id:"warnings",name:"Warnings+",icon:"warning",filters:{levels:["WARNING","ERROR"]}},{id:"tools",name:"Tool Activity",icon:"wrench",filters:{hasToolName:!0}},{id:"recent-errors",name:"Recent Errors",icon:"flame",filters:{level:"ERROR",timeRange:"last_1h"}}],ao=[{value:"",label:"All Time"},{value:"last_5m",label:"Last 5 min",seconds:300},{value:"last_15m",label:"Last 15 min",seconds:900},{value:"last_1h",label:"Last 1 hour",seconds:3600},{value:"last_4h",label:"Last 4 hours",seconds:14400},{value:"last_24h",label:"Last 24 hours",seconds:86400}],Mk=[50,100,200,500],Pk={template:`
@@ -3745,7 +3745,7 @@ var Gm=Object.defineProperty;var Km=(e,t,s)=>t in e?Gm(e,t,{enumerable:!0,config
`,setup(){const e=h("live"),t=h([]),s=h(!1),n=h(!0),a=h(""),i=h(""),l=h(!1),r=h(!1),o=h(Ke.state||"disconnected"),c=J(()=>{switch(o.value){case"connected":return"Live";case"connecting":return"Connecting…";case"reconnecting":return"Reconnecting…";default:return"Disconnected"}}),d=h(null),u=h(!1),f=h(null),p=2e3,b=Lk,y=Dk,E=ao,I=h("all"),x=h(""),m=h([]),_=h(!1),S=h(""),g=h([]);function w(){try{const q=localStorage.getItem("odin-log-presets");q&&(m.value=JSON.parse(q))}catch{}}function T(){try{localStorage.setItem("odin-log-presets",JSON.stringify(m.value))}catch{}}const C=J(()=>a.value!==""||i.value.trim()!==""||x.value!==""),M=J(()=>{const q=ao.find(re=>re.value===x.value);return q?q.label:""}),H=J(()=>{if(!l.value||!i.value)return null;try{return new RegExp(i.value,"i"),null}catch(q){return q.message}}),P=24,R=J(()=>{if(we.value.length===0)return[];const q=[],re=new Date,Ee=3600*1e3;for(let Ze=P-1;Ze>=0;Ze--){const lt=new Date(re.getTime()-(Ze+1)*Ee),Nt=new Date(re.getTime()-Ze*Ee);q.push({start:lt,end:Nt,label:O(lt,Nt),shortLabel:Nt.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),total:0,info:0,warnings:0,errors:0})}for(const Ze of we.value){if(!Ze._time)continue;const lt=Ze._time.getTime();for(const Nt of q)if(lt>=Nt.start.getTime()&<{let q=1;for(const re of R.value)re.total>q&&(q=re.total);return q}),Q=J(()=>{if(R.value.length===0)return"";const q=we.value.map(Ze=>Ze._time&&Ze._time.getTime()).filter(Boolean);if(q.length===0)return"";const re=new Date(Math.min(...q));return`${we.value.length} shown, oldest ${re.toLocaleTimeString()}`}),U=J(()=>Math.ceil(P/8));function O(q,re){const Ee={hour:"2-digit",minute:"2-digit"};return q.toLocaleTimeString([],Ee)+" - "+re.toLocaleTimeString([],Ee)}function N(q,re){return!re||!q?"0px":Math.max(2,q/re*100)+"%"}function Y(q){const re=we.value.findIndex(Ee=>Ee._time&&Ee._time.getTime()>=q.start.getTime()&&Ee._time.getTime()=0&&d.value){const Ee=d.value.querySelectorAll(".log-line");Ee[re]&&(Ee[re].scrollIntoView({behavior:"smooth",block:"center"}),n.value=!1)}}const we=J(()=>{let q=t.value;if(a.value&&(q=q.filter(re=>(re.level||"INFO")===a.value)),x.value){const re=ao.find(Ee=>Ee.value===x.value);if(re&&re.seconds){const Ee=new Date(Date.now()-re.seconds*1e3);q=q.filter(Ze=>Ze._time&&Ze._time>=Ee)}}if(i.value&&!H.value)if(l.value)try{const re=new RegExp(i.value,"i");q=q.filter(Ee=>{const Ze=Ee.text||Ee.raw||"",lt=Ee.tool||"";return re.test(Ze)||re.test(lt)})}catch{}else{const re=i.value.toLowerCase();q=q.filter(Ee=>{const Ze=(Ee.text||Ee.raw||"").toLowerCase(),lt=(Ee.tool||"").toLowerCase();return Ze.includes(re)||lt.includes(re)})}return q});function ke(q){if(q.type==="log"&&q.line)try{const re=typeof q.line=="string"?JSON.parse(q.line):q.line,Ee=re.timestamp?new Date(re.timestamp):new Date;return{ts:Ee.toLocaleTimeString(),_time:Ee,level:re.error?"ERROR":"INFO",text:re.tool_name?`[${re.tool_name}] ${re.result_summary||""}`.trim():re.message||JSON.stringify(re),tool:re.tool_name||"",raw:null}}catch{return{ts:new Date().toLocaleTimeString(),_time:new Date,level:"INFO",text:String(q.line),tool:"",raw:String(q.line)}}if(q.payload){const re=q.payload,Ee=re.timestamp?new Date(re.timestamp):new Date;return{ts:Ee.toLocaleTimeString(),_time:Ee,level:re.error?"ERROR":"INFO",text:re.tool_name?`[${re.tool_name}] ${re.result_summary||""}`.trim():re.message||JSON.stringify(re),tool:re.tool_name||"",raw:null}}return typeof q=="string"?{ts:new Date().toLocaleTimeString(),_time:new Date,level:"INFO",text:q,tool:"",raw:q}:{ts:new Date().toLocaleTimeString(),_time:new Date,level:"INFO",text:JSON.stringify(q),tool:"",raw:null}}function ie(q){const re=ke(q);if(s.value){g.value.push(re);return}pe(re)}function pe(q){t.value.push(q),t.value.length>p&&(t.value=t.value.slice(-p)),n.value&&It(()=>F())}function F(q=!1){const re=d.value;re&&re.scrollTo({top:re.scrollHeight,behavior:q?"smooth":"instant"})}function se(){n.value=!0,u.value=!1,It(()=>F(!0))}const Se=new Set(["PageUp","PageDown","ArrowUp","ArrowDown","Home","End"," "]);function V(){const q=d.value;if(!q)return;const re=q.scrollHeight-q.scrollTop-q.clientHeight<40;u.value=!n.value&&!re&&t.value.length>0,ve.value&&de()}function de(){const q=d.value;!q||!n.value||q.scrollHeight-q.scrollTop-q.clientHeight>=40&&(n.value=!1,u.value=t.value.length>0)}function ce(){n.value&&requestAnimationFrame(de)}function _e(q){Se.has(q.key)&&ce()}const ve=h(!1);function He(){n.value&&(ve.value=!0,requestAnimationFrame(de))}function k(){ve.value&&(ve.value=!1,de())}function L(){n.value&&(u.value=!1,It(()=>F()))}function $(){if(s.value=!s.value,!s.value&&g.value.length>0){for(const q of g.value)pe(q);g.value=[]}}function ee(){t.value=[],g.value=[],u.value=!1}function Z(){let q;e.value==="search"?q=Ve.value.map(lt=>{const Nt=lt.error?"ERROR":"INFO",Mt=lt.tool_name?`[${lt.tool_name}] `:"";return`${lt.timestamp||""} ${Nt} ${Mt}${lt.result_summary||lt.message||""}`}).join(` `):q=we.value.map(lt=>`${lt.ts} ${lt.level} ${lt.text}`).join(` -`);const re=new Blob([q],{type:"text/plain"}),Ee=URL.createObjectURL(re),Ze=document.createElement("a");Ze.href=Ee,Ze.download=`odin-logs-${new Date().toISOString().slice(0,19).replace(/:/g,"-")}.txt`,Ze.click(),URL.revokeObjectURL(Ee)}function X(q,re){const Ee=`${q.ts} ${q.level} ${q.text||q.raw||""}`;navigator.clipboard.writeText(Ee).then(()=>{f.value=re,setTimeout(()=>{f.value=null},1500)}).catch(()=>{})}function ue(q){a.value=a.value===q?"":q,I.value="all"}function oe(q){return q.level==="ERROR"?"log-line-error":q.level==="WARNING"?"log-line-warning":"text-gray-300"}function le(q){return q==="ERROR"?"text-red-500 font-semibold":q==="WARNING"?"text-yellow-500":"text-blue-500"}function te(q){return q==="ERROR"?"log-chip-error":q==="WARNING"?"log-chip-warning":"log-chip-info"}function ne(q){I.value=q.id;const re=q.filters;a.value=re.level||"",x.value=re.timeRange||"",i.value=re.text||"",re.levels&&(a.value=re.levels[0]||""),re.hasToolName&&(i.value="")}function fe(q){I.value=q.id,a.value=q.filters.level||"",x.value=q.filters.timeRange||"",i.value=q.filters.text||""}function be(){if(!S.value.trim())return;const q={id:"custom-"+Date.now(),name:S.value.trim(),filters:{level:a.value,timeRange:x.value,text:i.value}};m.value=[...m.value,q],T(),_.value=!1,S.value=""}function Te(q){m.value=m.value.filter(re=>re.id!==q),T(),I.value===q&&(I.value="all")}const Ie=h("all"),Le=h(""),De=h(""),Be=h(""),qe=h(""),ct=h(""),G=h(100),me=Mk,Ce=h(!1),Ne=h(!1),Pe=h(""),Ve=h([]),pt=h(null),as=h(null);function Ps(){e.value="search",pt.value||Fs()}async function Fs(){try{pt.value=await K.get("/api/logs/stats")}catch{}}function qs(){const q=ct.value;if(!q){Be.value="",qe.value="";return}const Ee={last_5m:300,last_15m:900,last_1h:3600,last_4h:14400,last_24h:86400,last_7d:604800}[q];if(Ee){const Ze=new Date(Date.now()-Ee*1e3);Be.value=$s(Ze),qe.value=""}}function $s(q){const re=Ee=>String(Ee).padStart(2,"0");return`${q.getFullYear()}-${re(q.getMonth()+1)}-${re(q.getDate())}T${re(q.getHours())}:${re(q.getMinutes())}`}function Ct(q){if(!q)return"";const re=new Date(q);return isNaN(re.getTime())?"":re.toISOString()}async function is(){Ce.value=!0,Pe.value="",Ne.value=!0,as.value=null;try{const q=new URLSearchParams;Ie.value&&Ie.value!=="all"&&q.set("level",Ie.value),Le.value&&q.set("tool",Le.value),De.value&&q.set("q",De.value);const re=Ct(Be.value),Ee=Ct(qe.value);re&&q.set("start",re),Ee&&q.set("end",Ee),q.set("limit",String(G.value));const Ze=await K.get(`/api/logs/search?${q.toString()}`);Ve.value=Ze.entries||[]}catch(q){Pe.value=q.message||"Search failed",Ve.value=[]}finally{Ce.value=!1}}function Ts(){Ie.value="all",Le.value="",De.value="",Be.value="",qe.value="",ct.value="",G.value=100,Ve.value=[],Ne.value=!1,Pe.value="",as.value=null}function Gs(q){as.value=as.value===q?null:q}function an(q){if(!q.timestamp)return"";try{return new Date(q.timestamp).toLocaleString()}catch{return q.timestamp}}function Ks(q){return q.type==="web_action"?`${q.status||""} (${q.execution_time_ms||0}ms)`:(q.result_summary||"").slice(0,200)}function Zt(q){return q.error?"log-line-error":"text-gray-300"}function Bs(q){try{return JSON.stringify(q,null,2)}catch{return String(q)}}let Et=null,ls=null,rs=!1;function at(){rs||(rs=!0,Ke.subscribe("logs",ie),r.value=Ke.connected,o.value=Ke.state||"disconnected",Et=Ke.onStateChange,ls=(q,re)=>{o.value=q,r.value=q==="connected",Et&&Et(q,re)},Ke.onStateChange=ls)}function vs(){rs&&(rs=!1,Ke.unsubscribe("logs",ie),Ke.onStateChange===ls&&(Ke.onStateChange=Et),ls=null,Et=null)}return We(()=>{w(),window.addEventListener("pointerup",k),window.addEventListener("pointercancel",k)}),Ds(at),Ms(vs),xt(()=>{vs(),window.removeEventListener("pointerup",k),window.removeEventListener("pointercancel",k)}),{mode:e,logs:t,paused:s,autoScroll:n,levelFilter:a,textFilter:i,useRegex:l,subscribed:r,wsState:o,wsStateLabel:c,logContainer:d,filteredLogs:we,pauseBuffer:g,showJumpBottom:u,copiedIndex:f,regexError:H,levels:b,logPresets:y,timeRanges:E,timeRange:x,activeLogPreset:I,customLogPresets:m,showSaveLogPreset:_,newLogPresetName:S,hasActiveLogFilters:C,timeRangeLabel:M,timelineBuckets:R,timelineMax:j,timelineSpanLabel:Q,timelineLabelSkip:U,togglePause:$,clearLogs:ee,exportLogs:Z,logLineClass:oe,levelClass:le,levelChipClass:te,toggleLevel:ue,copyLine:X,jumpToBottom:se,onScroll:V,onUserScrollIntent:ce,onUserScrollKey:_e,onAutoScrollToggle:L,onPointerDown:He,applyLogPreset:ne,applyCustomLogPreset:fe,saveLogCustomPreset:be,removeLogCustomPreset:Te,segmentHeight:N,jumpToTimelineBucket:Y,searchLevel:Ie,searchTool:Le,searchKeyword:De,searchStart:Be,searchEnd:qe,searchTimePreset:ct,searchLimit:G,searchLimits:me,searching:Ce,searchRan:Ne,searchError:Pe,searchResults:Ve,searchStats:pt,expandedSearch:as,switchToSearch:Ps,runSearch:is,clearSearchFilters:Ts,toggleSearchExpand:Gs,formatSearchTs:an,searchEntryText:Ks,searchLogLineClass:Zt,formatJson:Bs,applySearchTimePreset:qs}}};function _l(e=[]){const t=[],s=new Set;function n(a){const i=[a.kind,a.label,a.apply_mode||"",a.code||"",a.text||""].join("\0");s.has(i)||(s.add(i),t.push({...a,key:i}))}for(const a of e)for(const i of(a==null?void 0:a.consumers)||[])n({kind:"consumer",label:i.name,apply_mode:i.apply_mode,text:i.detail});for(const a of e)a!=null&&a.apply_handler&&n({kind:"handler",label:"Apply handler",code:a.apply_handler});for(const a of e)a!=null&&a.restart_reason&&n({kind:"restart",label:"Why a restart is required",text:a.restart_reason});for(const a of e)a!=null&&a.activation_policy&&n({kind:"activation",label:"Activation policy",text:a.activation_policy});return t}const Fk=Object.freeze([{key:"all",label:"All fields",short:"All",icon:"grid"},{key:"applied",label:"Applied",short:"Applied",icon:"success"},{key:"pending_restart",label:"Pending restart",short:"Restart",icon:"refresh"},{key:"dormant",label:"Saved, not active",short:"Saved only",icon:"pause"},{key:"invalid",label:"Invalid",short:"Invalid",icon:"error"},{key:"drift",label:"Drift",short:"Drift",icon:"warning"},{key:"unknown",label:"Effective state unknown",short:"Unknown",icon:"info"}]);function $k(e,t={}){var a,i;const s=t.getStyle||(l=>globalThis.getComputedStyle(l)),n=Object.hasOwn(t,"fallback")?t.fallback:(a=globalThis.document)==null?void 0:a.scrollingElement;for(let l=e;l;l=l.parentElement){const r=((i=s(l))==null?void 0:i.overflowY)||"";if(/^(auto|scroll|overlay)$/.test(r)&&l.scrollHeight>l.clientHeight)return l}return n&&n.scrollHeight>n.clientHeight?n:e||n||null}const Ua=[{key:"core",label:"Core",icon:"sliders",sections:["timezone","logging","permissions","graceful_degradation"]},{key:"models",label:"Models & AI",icon:"brain",sections:["image","llm_recovery"]},{key:"runtime",label:"Runtime",icon:"activity",sections:["context","sessions","agents","turn_state"]},{key:"data",label:"Data & Storage",icon:"database",sections:["learning","search","usage","audit","attachments"]},{key:"services",label:"Services",icon:"link",sections:["webhook","observability","email","browser","comfyui","slack","mcp"]},{key:"automation",label:"Automation",icon:"workflow",sections:["message_triggers","reaction_triggers","grafana_alerts","outbound_webhooks","issue_tracker"]},{key:"infrastructure",label:"Infrastructure",icon:"server",sections:["tools","web"]}],Bk={live_read:"Applies immediately",live_apply:"Dedicated live apply",live_for_new_work:"Applies to new work",restart:"Restart required",activation_required:"Saved only — see activation note",legacy_control:"Controlled elsewhere",dormant:"Saved for future support"},io=new Set(["llm_provider","openai_codex","ollama","kimi","personality","discord"]),Uk=Object.freeze(["web.api_tokens","outbound_webhooks.targets"]);function Mu(e){return Uk.some(t=>e===t||e.startsWith(`${t}.`))}const Sm="odin_config_center_expanded_v1",Tm="odin_config_center_category_v1",Hk=50,zk=650,lo=()=>K.get("/api/config/meta");function Wn(e){return e===void 0?void 0:JSON.parse(JSON.stringify(e))}function Ai(e,t){return JSON.stringify(e)===JSON.stringify(t)}function ka(e){return String(e).replace(/[_-]+/g," ").replace(/\b\w/g,t=>t.toUpperCase())}function Vk(e){return e===void 0?"unset":e===null?"null":typeof e=="boolean"?e?"Enabled":"Disabled":Array.isArray(e)?e.length?`${e.length} item${e.length===1?"":"s"}`:"Empty list":typeof e=="object"?Object.keys(e).length?`${Object.keys(e).length} field${Object.keys(e).length===1?"":"s"}`:"Empty object":e===""?"Empty":String(e)}function jk(e){if(e===void 0)return"unset";if(e===null)return"null";if(typeof e=="object")try{return JSON.stringify(e,null,2)}catch{return String(e)}return String(e)}function Cm(e,t){if(Ai(e,t))return;if(!(e&&t&&typeof e=="object"&&typeof t=="object"&&!Array.isArray(e)&&!Array.isArray(t)))return Wn(t);const n={};for(const[a,i]of Object.entries(t)){const l=Cm(e[a],i);l!==void 0&&(n[a]=l)}return Object.keys(n).length?n:void 0}function qk(e,t){const s={};for(const[n,a]of Object.entries(t||{})){const i=Cm(e==null?void 0:e[n],a);i!==void 0&&(s[n]=i)}return s}function Em(e,t,s,n){if(Ai(e,t))return;if(e&&t&&typeof e=="object"&&typeof t=="object"&&!Array.isArray(e)&&!Array.isArray(t)){const i=new Set([...Object.keys(e),...Object.keys(t)]);for(const l of i)Em(e[l],t[l],s?`${s}.${l}`:l,n);return}n.push({path:s,oldVal:e,newVal:t})}function Gk(){try{const e=JSON.parse(localStorage.getItem(Sm)||"{}");return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch{return{}}}function Kk(){try{const e=localStorage.getItem(Tm);return Ua.some(t=>t.key===e)?e:Ua[0].key}catch{return Ua[0].key}}const Wk={template:` +`);const re=new Blob([q],{type:"text/plain"}),Ee=URL.createObjectURL(re),Ze=document.createElement("a");Ze.href=Ee,Ze.download=`odin-logs-${new Date().toISOString().slice(0,19).replace(/:/g,"-")}.txt`,Ze.click(),URL.revokeObjectURL(Ee)}function X(q,re){const Ee=`${q.ts} ${q.level} ${q.text||q.raw||""}`;navigator.clipboard.writeText(Ee).then(()=>{f.value=re,setTimeout(()=>{f.value=null},1500)}).catch(()=>{})}function ue(q){a.value=a.value===q?"":q,I.value="all"}function oe(q){return q.level==="ERROR"?"log-line-error":q.level==="WARNING"?"log-line-warning":"text-gray-300"}function le(q){return q==="ERROR"?"text-red-500 font-semibold":q==="WARNING"?"text-yellow-500":"text-blue-500"}function te(q){return q==="ERROR"?"log-chip-error":q==="WARNING"?"log-chip-warning":"log-chip-info"}function ne(q){I.value=q.id;const re=q.filters;a.value=re.level||"",x.value=re.timeRange||"",i.value=re.text||"",re.levels&&(a.value=re.levels[0]||""),re.hasToolName&&(i.value="")}function fe(q){I.value=q.id,a.value=q.filters.level||"",x.value=q.filters.timeRange||"",i.value=q.filters.text||""}function be(){if(!S.value.trim())return;const q={id:"custom-"+Date.now(),name:S.value.trim(),filters:{level:a.value,timeRange:x.value,text:i.value}};m.value=[...m.value,q],T(),_.value=!1,S.value=""}function Te(q){m.value=m.value.filter(re=>re.id!==q),T(),I.value===q&&(I.value="all")}const Ie=h("all"),Le=h(""),De=h(""),Be=h(""),qe=h(""),ct=h(""),G=h(100),me=Mk,Ce=h(!1),Ne=h(!1),Pe=h(""),Ve=h([]),pt=h(null),as=h(null);function Fs(){e.value="search",pt.value||$s()}async function $s(){try{pt.value=await K.get("/api/logs/stats")}catch{}}function Gs(){const q=ct.value;if(!q){Be.value="",qe.value="";return}const Ee={last_5m:300,last_15m:900,last_1h:3600,last_4h:14400,last_24h:86400,last_7d:604800}[q];if(Ee){const Ze=new Date(Date.now()-Ee*1e3);Be.value=Bs(Ze),qe.value=""}}function Bs(q){const re=Ee=>String(Ee).padStart(2,"0");return`${q.getFullYear()}-${re(q.getMonth()+1)}-${re(q.getDate())}T${re(q.getHours())}:${re(q.getMinutes())}`}function Ct(q){if(!q)return"";const re=new Date(q);return isNaN(re.getTime())?"":re.toISOString()}async function is(){Ce.value=!0,Pe.value="",Ne.value=!0,as.value=null;try{const q=new URLSearchParams;Ie.value&&Ie.value!=="all"&&q.set("level",Ie.value),Le.value&&q.set("tool",Le.value),De.value&&q.set("q",De.value);const re=Ct(Be.value),Ee=Ct(qe.value);re&&q.set("start",re),Ee&&q.set("end",Ee),q.set("limit",String(G.value));const Ze=await K.get(`/api/logs/search?${q.toString()}`);Ve.value=Ze.entries||[]}catch(q){Pe.value=q.message||"Search failed",Ve.value=[]}finally{Ce.value=!1}}function Ts(){Ie.value="all",Le.value="",De.value="",Be.value="",qe.value="",ct.value="",G.value=100,Ve.value=[],Ne.value=!1,Pe.value="",as.value=null}function Ks(q){as.value=as.value===q?null:q}function ln(q){if(!q.timestamp)return"";try{return new Date(q.timestamp).toLocaleString()}catch{return q.timestamp}}function Ws(q){return q.type==="web_action"?`${q.status||""} (${q.execution_time_ms||0}ms)`:(q.result_summary||"").slice(0,200)}function Zt(q){return q.error?"log-line-error":"text-gray-300"}function Us(q){try{return JSON.stringify(q,null,2)}catch{return String(q)}}let Et=null,ls=null,rs=!1;function at(){rs||(rs=!0,Ke.subscribe("logs",ie),r.value=Ke.connected,o.value=Ke.state||"disconnected",Et=Ke.onStateChange,ls=(q,re)=>{o.value=q,r.value=q==="connected",Et&&Et(q,re)},Ke.onStateChange=ls)}function vs(){rs&&(rs=!1,Ke.unsubscribe("logs",ie),Ke.onStateChange===ls&&(Ke.onStateChange=Et),ls=null,Et=null)}return We(()=>{w(),window.addEventListener("pointerup",k),window.addEventListener("pointercancel",k)}),Ms(at),Ps(vs),xt(()=>{vs(),window.removeEventListener("pointerup",k),window.removeEventListener("pointercancel",k)}),{mode:e,logs:t,paused:s,autoScroll:n,levelFilter:a,textFilter:i,useRegex:l,subscribed:r,wsState:o,wsStateLabel:c,logContainer:d,filteredLogs:we,pauseBuffer:g,showJumpBottom:u,copiedIndex:f,regexError:H,levels:b,logPresets:y,timeRanges:E,timeRange:x,activeLogPreset:I,customLogPresets:m,showSaveLogPreset:_,newLogPresetName:S,hasActiveLogFilters:C,timeRangeLabel:M,timelineBuckets:R,timelineMax:j,timelineSpanLabel:Q,timelineLabelSkip:U,togglePause:$,clearLogs:ee,exportLogs:Z,logLineClass:oe,levelClass:le,levelChipClass:te,toggleLevel:ue,copyLine:X,jumpToBottom:se,onScroll:V,onUserScrollIntent:ce,onUserScrollKey:_e,onAutoScrollToggle:L,onPointerDown:He,applyLogPreset:ne,applyCustomLogPreset:fe,saveLogCustomPreset:be,removeLogCustomPreset:Te,segmentHeight:N,jumpToTimelineBucket:Y,searchLevel:Ie,searchTool:Le,searchKeyword:De,searchStart:Be,searchEnd:qe,searchTimePreset:ct,searchLimit:G,searchLimits:me,searching:Ce,searchRan:Ne,searchError:Pe,searchResults:Ve,searchStats:pt,expandedSearch:as,switchToSearch:Fs,runSearch:is,clearSearchFilters:Ts,toggleSearchExpand:Ks,formatSearchTs:ln,searchEntryText:Ws,searchLogLineClass:Zt,formatJson:Us,applySearchTimePreset:Gs}}};function _l(e=[]){const t=[],s=new Set;function n(a){const i=[a.kind,a.label,a.apply_mode||"",a.code||"",a.text||""].join("\0");s.has(i)||(s.add(i),t.push({...a,key:i}))}for(const a of e)for(const i of(a==null?void 0:a.consumers)||[])n({kind:"consumer",label:i.name,apply_mode:i.apply_mode,text:i.detail});for(const a of e)a!=null&&a.apply_handler&&n({kind:"handler",label:"Apply handler",code:a.apply_handler});for(const a of e)a!=null&&a.restart_reason&&n({kind:"restart",label:"Why a restart is required",text:a.restart_reason});for(const a of e)a!=null&&a.activation_policy&&n({kind:"activation",label:"Activation policy",text:a.activation_policy});return t}const Fk=Object.freeze([{key:"all",label:"All fields",short:"All",icon:"grid"},{key:"applied",label:"Applied",short:"Applied",icon:"success"},{key:"pending_restart",label:"Pending restart",short:"Restart",icon:"refresh"},{key:"dormant",label:"Saved, not active",short:"Saved only",icon:"pause"},{key:"invalid",label:"Invalid",short:"Invalid",icon:"error"},{key:"drift",label:"Drift",short:"Drift",icon:"warning"},{key:"unknown",label:"Effective state unknown",short:"Unknown",icon:"info"}]);function $k(e,t={}){var a,i;const s=t.getStyle||(l=>globalThis.getComputedStyle(l)),n=Object.hasOwn(t,"fallback")?t.fallback:(a=globalThis.document)==null?void 0:a.scrollingElement;for(let l=e;l;l=l.parentElement){const r=((i=s(l))==null?void 0:i.overflowY)||"";if(/^(auto|scroll|overlay)$/.test(r)&&l.scrollHeight>l.clientHeight)return l}return n&&n.scrollHeight>n.clientHeight?n:e||n||null}const Ua=[{key:"core",label:"Core",icon:"sliders",sections:["timezone","logging","permissions","graceful_degradation"]},{key:"models",label:"Models & AI",icon:"brain",sections:["image","llm_recovery"]},{key:"runtime",label:"Runtime",icon:"activity",sections:["context","sessions","agents","turn_state"]},{key:"data",label:"Data & Storage",icon:"database",sections:["learning","search","usage","audit","attachments"]},{key:"services",label:"Services",icon:"link",sections:["webhook","observability","email","browser","comfyui","slack","mcp"]},{key:"automation",label:"Automation",icon:"workflow",sections:["message_triggers","reaction_triggers","grafana_alerts","outbound_webhooks","issue_tracker"]},{key:"infrastructure",label:"Infrastructure",icon:"server",sections:["tools","web"]}],Bk={live_read:"Applies immediately",live_apply:"Dedicated live apply",live_for_new_work:"Applies to new work",restart:"Restart required",activation_required:"Saved only — see activation note",legacy_control:"Controlled elsewhere",dormant:"Saved for future support"},io=new Set(["llm_provider","openai_codex","ollama","kimi","personality","discord"]),Uk=Object.freeze(["web.api_tokens","outbound_webhooks.targets"]);function Mu(e){return Uk.some(t=>e===t||e.startsWith(`${t}.`))}const Sm="odin_config_center_expanded_v1",Tm="odin_config_center_category_v1",Hk=50,zk=650,lo=()=>K.get("/api/config/meta");function Wn(e){return e===void 0?void 0:JSON.parse(JSON.stringify(e))}function Ai(e,t){return JSON.stringify(e)===JSON.stringify(t)}function ka(e){return String(e).replace(/[_-]+/g," ").replace(/\b\w/g,t=>t.toUpperCase())}function Vk(e){return e===void 0?"unset":e===null?"null":typeof e=="boolean"?e?"Enabled":"Disabled":Array.isArray(e)?e.length?`${e.length} item${e.length===1?"":"s"}`:"Empty list":typeof e=="object"?Object.keys(e).length?`${Object.keys(e).length} field${Object.keys(e).length===1?"":"s"}`:"Empty object":e===""?"Empty":String(e)}function jk(e){if(e===void 0)return"unset";if(e===null)return"null";if(typeof e=="object")try{return JSON.stringify(e,null,2)}catch{return String(e)}return String(e)}function Cm(e,t){if(Ai(e,t))return;if(!(e&&t&&typeof e=="object"&&typeof t=="object"&&!Array.isArray(e)&&!Array.isArray(t)))return Wn(t);const n={};for(const[a,i]of Object.entries(t)){const l=Cm(e[a],i);l!==void 0&&(n[a]=l)}return Object.keys(n).length?n:void 0}function qk(e,t){const s={};for(const[n,a]of Object.entries(t||{})){const i=Cm(e==null?void 0:e[n],a);i!==void 0&&(s[n]=i)}return s}function Em(e,t,s,n){if(Ai(e,t))return;if(e&&t&&typeof e=="object"&&typeof t=="object"&&!Array.isArray(e)&&!Array.isArray(t)){const i=new Set([...Object.keys(e),...Object.keys(t)]);for(const l of i)Em(e[l],t[l],s?`${s}.${l}`:l,n);return}n.push({path:s,oldVal:e,newVal:t})}function Gk(){try{const e=JSON.parse(localStorage.getItem(Sm)||"{}");return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch{return{}}}function Kk(){try{const e=localStorage.getItem(Tm);return Ua.some(t=>t.key===e)?e:Ua[0].key}catch{return Ua[0].key}}const Wk={template:`
@@ -4157,7 +4157,7 @@ var Gm=Object.defineProperty;var Km=(e,t,s)=>t in e?Gm(e,t,{enumerable:!0,config
- `,setup(){const e=h(null),t=h(null),s=h(!0),n=h(null),a=h(!1),i=h(null),l=h(null),r=h(null),o=h(!1),c=h(!1),d=h(null),u=h(""),f=h("all"),p=h(Kk()),b=h(Gk()),y=h({}),E=h({}),I=h(""),x=h({}),m=h({}),_=h([]),S=h([]),g=h(!1),w=h(!1),T=h(!1);let C=null,M=null,H={path:null,at:0},P=0;const R=J(()=>{var v;return(((v=t.value)==null?void 0:v.fields)||[]).filter(D=>!io.has(D.path.split(".")[0])&&!Mu(D.path))}),j=J(()=>new Map(R.value.map(v=>[v.path,v]))),Q=J(()=>we.value.reduce((v,D)=>v+D.sections.length,0)),U=J(()=>R.value.length),O=J(()=>Fk),N=J(()=>_.value.length>0),Y=J(()=>S.value.length>0),we=J(()=>{if(!e.value)return[];const v=new Set(Ua.flatMap(ae=>ae.sections)),D=Ua.map(ae=>({...ae,sections:ae.sections.filter(Oe=>Object.hasOwn(e.value,Oe)&&!io.has(Oe))})).filter(ae=>ae.sections.length),B=Object.keys(e.value).filter(ae=>!v.has(ae)&&!io.has(ae));return B.length&&D.push({key:"other",label:"Other",icon:"folder",sections:B}),D}),ke=J(()=>e.value?{...e.value,...y.value}:null),ie=J(()=>{if(!e.value)return[];const v=[];for(const[D,B]of Object.entries(y.value))Em(e.value[D],B,D,v);return v.filter(D=>!Ai(D.oldVal,D.newVal)).map(D=>{const B=L(D.path);return{...D,label:(B==null?void 0:B.label)||ka(D.path.split(".").at(-1)),apply_mode:(B==null?void 0:B.apply_mode)||ue(D.path.split(".")[0])}})}),pe=J(()=>ie.value.length>0),F=J(()=>ie.value.length),se=J(()=>new Set(ie.value.map(v=>v.path.split(".")[0])).size),Se=J(()=>!!u.value||f.value!=="all"),V=J(()=>{const v={...m.value};for(const D of ie.value){const B=L(D.path),ae=Nt(B,D.newVal);ae&&(v[D.path]=ae)}return v}),de=J(()=>Object.keys(V.value).length>0),ce=J(()=>e.value?(Se.value?we.value:we.value.filter(D=>D.key===p.value)).map(D=>({...D,sections:D.sections.filter(B=>G(B))})).filter(D=>D.sections.length):[]),_e=J(()=>{const v=["live_read","live_apply","live_for_new_work","restart","activation_required","legacy_control","dormant"],D=new Map(v.map(B=>[B,[]]));for(const B of ie.value){const ae=D.has(B.apply_mode)?B.apply_mode:"restart";D.get(ae).push(B)}return v.filter(B=>D.get(B).length).map(B=>({key:B,label:z(B),entries:D.get(B)}))}),ve=J(()=>ie.value.filter(v=>v.apply_mode==="restart").length),He=J(()=>R.value.filter(v=>v.pending_restart)),k=J(()=>He.value.length);function L(v){const D=j.value.get(v);return D?{...D,apply_details:_l([D])}:null}function $(v){const D=`${v}.`;return R.value.filter(B=>B.path===v||B.path.startsWith(D))}function ee(v){return $(v).length}function Z(v){return ka(v)}function X(v){const D=$(v);if(!D.length)return`${ka(v)} configuration.`;const B=D.find(Ue=>Ue.sensitivity==="public"&&Ue.description)||D.find(Ue=>Ue.description),ae=(B==null?void 0:B.description)||"";return ae.match(/setting for (.+)\.$/i)?`${ka(v)} settings and runtime behaviour.`:ae}function ue(v){const D=[...new Set($(v).map(B=>B.apply_mode))];return D.length===1?D[0]:D.includes("restart")?"restart":D.includes("activation_required")?"activation_required":D[0]||"restart"}function oe(v){const D=[...new Set($(v).map(B=>z(B.apply_mode)))];return D.length?D.length===1?D[0]:`Mixed apply behaviour: ${D.join(" · ")}`:""}function le(v){return _l($(v))}function te(v,D){return D.split(".").reduce((B,ae)=>B==null?void 0:B[ae],v)}function ne(v){const D=ke.value;return $(v).filter(B=>Mu(B.path)?!1:B.path.split(".").length<=2?!0:!B.path.includes(".*")).map(B=>({...B,key:B.path.split(".").at(-1),value:te(D,B.path),apply_details:_l([B]),editor:B.path==="agents.final_warning_iterations"?"warning-chips":null}))}function fe(v){const D=v.path.split(".");return D.length>2?D.slice(0,2).join("."):null}function be(v){const D=new Map;for(const B of ne(v)){const ae=fe(B),Oe=ae||`${v}.__root`;D.has(Oe)||D.set(Oe,{key:Oe,path:ae,entries:[]}),D.get(Oe).entries.push(B)}return[...D.values()].map(B=>{const ae=B.entries.find(Oe=>Oe.group_description);return{...B,label:B.path?ka(B.path.split(".").at(-1)):null,description:(ae==null?void 0:ae.group_description)||null,apply_details:_l(B.entries),runtime_summaries:Ie(B.entries)}})}function Te(v){return{save:v.save_effect||(v.apply_mode==="dormant"?"Saving records this value in config.yml.":"Saving records this value and validates the section."),runtime:v.runtime_effect||{live_read:"Odin reads the saved value during current work.",live_apply:"Odin reloads this setting without a restart.",live_for_new_work:"New work uses the saved value; existing work keeps its snapshot.",restart:"Odin keeps using its startup value until a clean restart.",activation_required:"Odin keeps the current behavior until you enable this feature separately.",legacy_control:"Odin keeps the existing compatibility behavior until you apply this choice.",dormant:"This version of Odin does not use the saved value. Restarting will not activate it."}[v.apply_mode]||"Effective runtime state is not currently observable."}}function Ie(v){const D=new Map;for(const B of v){const ae=Te(B),Oe=`${B.apply_mode}|${ae.save}|${ae.runtime}`;D.has(Oe)||D.set(Oe,{key:Oe,label:z(B.apply_mode),save:ae.save,runtime:ae.runtime})}return[...D.values()]}function Le(v){if(De(v))return v.runtime_effect||v.activation_policy||"";if(v.apply_mode==="activation_required"){const D=v.activation_policy||v.runtime_effect;return D?`Not active after saving. No activation control exists in this release. ${D}`:"Not active after saving; no activation control exists in this release."}return""}function De(v){return v.action_available===!0&&!!(v.action_label&&v.action_endpoint)}async function Be(v){if(De(v))try{if(Ve(v.path))throw new Error("Save this setting before applying its action.");const D=String(v.action_method||"POST").toLowerCase(),B={post:K.post.bind(K),put:K.put.bind(K),delete:K.del.bind(K)}[D];if(!B)throw new Error("Unsupported configuration action");await B(v.action_endpoint,v.action_body||void 0),await ge(),ln("success",`${v.action_label} completed.`)}catch(D){ln("error",D.message||`${v.action_label} failed`)}}function qe(v,D){return[v.label,v.path,v.description,...v.aliases||[]].filter(Boolean).join(" ").toLowerCase().includes(D)}function ct(v){const D=u.value.trim().toLowerCase();return D?$(v).filter(B=>qe(B,D)):[]}function G(v){const D=$(v);if(f.value!=="all"&&!D.some(ae=>ae.apply_state===f.value))return!1;const B=u.value.trim().toLowerCase();return!B||`${Z(v)} ${v}`.toLowerCase().includes(B)?!0:D.some(ae=>qe(ae,B))}function me(v,D){return $(v).filter(B=>B.apply_state===D).length}function Ce(v){return v==="all"?U.value:R.value.filter(D=>D.apply_state===v).length}function Ne(v){const D=v.sections.flatMap(B=>$(B));return{fields:D.length,modified:ie.value.filter(B=>v.sections.includes(B.path.split(".")[0])).length,pending_restart:D.filter(B=>B.apply_state==="pending_restart").length,invalid:D.filter(B=>B.apply_state==="invalid").length,dormant:D.filter(B=>B.apply_state==="dormant").length}}function Pe(v){var D;return Object.hasOwn(y.value,v)&&!Ai((D=e.value)==null?void 0:D[v],y.value[v])}function Ve(v){return ie.value.some(D=>D.path===v||D.path.startsWith(`${v}.`))}function pt(v){p.value=v,u.value="",f.value="all";try{localStorage.setItem(Tm,v)}catch{}}function as(v){f.value=v}function Ps(){u.value="",f.value="all"}function Fs(v){var D;return((D=we.value.find(B=>B.sections.includes(v)))==null?void 0:D.sections)||[]}function qs(v){const D=Fs(v),B=D.find(ae=>b.value[ae]===!0);return B||D.find(ae=>b.value[ae]!==!1)||null}function $s(v){return u.value&&!T.value&&G(v)?!0:T.value?qs(v)===v:Object.hasOwn(b.value,v)?b.value[v]===!0:!0}function Ct(v){const D=!$s(v);if(T.value){const B={...b.value};for(const ae of Fs(v))B[ae]===!0&&(B[ae]=!1);B[v]=D,b.value=B;return}b.value={...b.value,[v]:D}}function is(){_.value.push(Wn(y.value)),_.value.length>Hk&&_.value.shift(),S.value=[]}function Ts(){pe.value&&(is(),y.value={},m.value={},g.value=!1)}function Gs(v,D=!1){const B=Date.now();if(D&&H.path===v&&B-H.atOe-ae);I.value="",Zt(v,B)}function q(v,D){Zt(v,(v.value||[]).filter(B=>B!==D))}function re(v){return v.apply_mode==="live_read"?"Odin reads the saved file value on next use.":v.apply_mode==="live_for_new_work"?"New work uses the saved file value.":v.apply_mode==="live_apply"?v.apply_handler?`Apply the saved value through ${v.apply_handler}.`:"Apply it through its dedicated owner page or endpoint.":v.apply_mode==="restart"?"Restart Odin for the saved collection to take effect.":v.apply_mode==="activation_required"?"Saving does not enable it. No activation control exists in this release.":v.apply_mode==="dormant"?"This release does not use the saved collection.":"Follow the runtime details shown for this setting."}function Ee(v){return v.type==="array"&&Array.isArray(v.value)&&!v.structured_container&&!v.structured_container_child&&v.sensitivity==="public"&&v.value.every(D=>["string","number","boolean"].includes(typeof D))}function Ze(v){const D=String(x.value[v.path]??"").trim();if(!D)return;const B=[...new Set([...v.value||[],D])];x.value={...x.value,[v.path]:""},Zt(v,B)}function lt(v,D){Zt(v,(v.value||[]).filter(B=>B!==D))}function Nt(v,D){var ae;if(!v)return null;if((ae=v.enum)!=null&&ae.length&&!v.enum.includes(D))return`Choose one of: ${v.enum.join(", ")}`;if(v.path==="agents.final_warning_iterations"&&(!Array.isArray(D)||!D.length))return"Add at least one warning threshold.";const B=v.constraints||{};if((v.type==="integer"||v.type==="number")&&typeof D=="number"){if(B.minimum!==void 0&&DB.maximum)return`Must be at most ${B.maximum}${v.unit?` ${v.unit}`:""}`}return null}function Mt(v){return V.value[v.path]||null}function ha(v){const D=`${v}.`;return Object.keys(V.value).some(B=>B===v||B.startsWith(D))}function Cs(){_.value.length&&(S.value.push(Wn(y.value)),y.value=_.value.pop(),m.value={},E.value={},H={path:null,at:0})}function ma(){S.value.length&&(_.value.push(Wn(y.value)),y.value=S.value.pop(),m.value={},E.value={},H={path:null,at:0})}function si(){!pe.value||de.value||(g.value=!0,w.value=!1)}function ga(){g.value=!1}function va(){Ts()}function z(v){return Bk[v]||ka(v||"unknown")}function he(v){return`apply-${String(v||"unknown").replaceAll("_","-")}`}function ye(v){return`cfgc-field-${v.replace(/[^a-zA-Z0-9_-]/g,"-")}`}function os(v){return`${ye(v)}-input`}function cs(v){const D=document.getElementById(ye(v))||document.getElementById(ye(v.split(".").slice(0,2).join(".")));D==null||D.scrollIntoView({behavior:"smooth",block:"center"})}function ln(v,D){l.value={type:v,message:D},window.setTimeout(()=>{var B;((B=l.value)==null?void 0:B.message)===D&&(l.value=null)},3500)}function ll(){o.value=!1,f.value="pending_restart",u.value="";const v=$k(n.value);v&&(v.scrollTop=0)}function Br(){o.value=!1}function ni(v=1800){M&&window.clearTimeout(M),M=window.setTimeout(rl,v)}async function rl(){if(c.value){if(P+=1,P>45){c.value=!1,d.value="Odin did not return with the new startup settings within 90 seconds.";return}try{if(t.value=await lo(),k.value===0){c.value=!1,d.value=null,ln("success","Odin restarted and the saved startup settings are active.");return}}catch{}ni(2e3)}}async function ba(){if(!c.value){d.value=null;try{await K.post("/api/restart",{}),c.value=!0,P=0,o.value=!1,ni()}catch(v){d.value=v.message||"Odin could not schedule a restart."}}}async function ai(){if(!(!pe.value||de.value||a.value)){a.value=!0;try{const v=qk(e.value,y.value),D=await K.put("/api/config",v);e.value=D,y.value={},_.value=[],S.value=[],m.value={},g.value=!1;try{t.value=await lo(),r.value=null,o.value=k.value>0,ln("success",k.value?`Configuration saved. ${k.value} setting${k.value===1?"":"s"} still use startup values.`:"Configuration saved. Apply status has been refreshed.")}catch(B){r.value=B.message||"Unknown metadata error.",ln("error",`Configuration saved, but apply status could not be refreshed: ${r.value}`)}}catch(v){ln("error",v.message||"Configuration could not be saved")}finally{a.value=!1}}}async function ge(){var v,D;if(!pe.value){s.value=!0,i.value=null;try{const B=await K.get("/api/config"),ae=await lo();e.value=B,t.value=ae,r.value=null;const Oe=we.value;if(Oe.some(Ue=>Ue.key===p.value)||(p.value=((v=Oe[0])==null?void 0:v.key)||Ua[0].key),T.value){const Xe=(((D=Oe.find(Ht=>Ht.key===p.value))==null?void 0:D.sections)||[]).find(Ht=>b.value[Ht]===!0);b.value=Xe?{...b.value,[Xe]:!0}:{}}}catch(B){i.value=B.message||"Unknown configuration error"}finally{s.value=!1}}}function A(v){if(g.value||!(v.ctrlKey||v.metaKey))return;const D=v.target;D instanceof HTMLElement&&(D.matches("input, textarea, select")||D.isContentEditable)||(!v.shiftKey&&v.key.toLowerCase()==="z"?(v.preventDefault(),Cs()):(v.key.toLowerCase()==="y"||v.shiftKey&&v.key.toLowerCase()==="z")&&(v.preventDefault(),ma()))}function W(v){T.value=v.matches}return ts(b,v=>{try{localStorage.setItem(Sm,JSON.stringify(v))}catch{}},{deep:!0}),We(()=>{var v;ge(),document.addEventListener("keydown",A),C=window.matchMedia("(max-width: 760px)"),W(C),(v=C.addEventListener)==null||v.call(C,"change",W)}),xt(()=>{var v;document.removeEventListener("keydown",A),(v=C==null?void 0:C.removeEventListener)==null||v.call(C,"change",W),M&&window.clearTimeout(M)}),{config:e,meta:t,loading:s,saving:a,error:i,toast:l,metaRefreshError:r,restartPromptOpen:o,restartScheduled:c,restartError:d,configMain:n,searchQuery:u,healthFilter:f,activeCategory:p,reviewOpen:g,mobileOverflowOpen:w,warningThresholdInput:I,arrayInputs:x,healthFilters:O,visibleCategories:we,displayGroups:ce,reviewGroups:_e,sectionCount:Q,fieldCount:U,hasChanges:pe,changeCount:F,changedSectionCount:se,hasDraftErrors:de,canUndo:N,canRedo:Y,globalFilterActive:Se,reviewRestartCount:ve,pendingRestartCount:k,pendingRestartFields:He,healthCount:Ce,categoryStats:Ne,selectCategory:pt,selectHealthFilter:as,clearFilters:Ps,sectionLabel:Z,sectionDescription:X,sectionFieldCount:ee,sectionHealthCount:me,sectionApplySummary:oe,sectionApplyDetails:le,sectionEntries:ne,fieldGroups:be,sectionSearchHits:ct,fieldRuntimeCopy:Te,fieldSpecificRuntimeNote:Le,hasHonestAction:De,runFieldAction:Be,sectionChanged:Pe,fieldChanged:Ve,isSectionExpanded:$s,toggleSection:Ct,discardAllDrafts:Ts,setFieldValue:Zt,setNumberFieldValue:at,numberInputValue:rs,beginInputEdit:Bs,endTextInputEdit:Et,endInputEdit:ls,addWarningThreshold:vs,removeWarningThreshold:q,isScalarArray:Ee,addScalarArrayItem:Ze,removeScalarArrayItem:lt,fieldError:Mt,sectionHasErrors:ha,undo:Cs,redo:ma,openReview:si,closeReview:ga,mobileCancel:va,applyModeLabel:z,applyClass:he,compactValue:Vk,formatValue:jk,structuredApplyCopy:re,fieldId:ye,fieldInputId:os,focusField:cs,fetchConfig:ge,saveConfig:ai,restartOdin:ba,restartLater:Br,reviewPendingRestart:ll}}},Zk=/^\d{15,25}$/;function Am(e){return String((e==null?void 0:e.display_name)||(e==null?void 0:e.username)||(e==null?void 0:e.id)||"Unknown user")}const Rm={props:{members:{type:Array,default:()=>[]},excludedIds:{type:Array,default:()=>[]},placeholder:{type:String,default:"Search Discord users…"},ariaLabel:{type:String,default:"Search Discord users"},optionsId:{type:String,required:!0},autofocus:{type:Boolean,default:!1}},emits:["select"],template:` + `,setup(){const e=h(null),t=h(null),s=h(!0),n=h(null),a=h(!1),i=h(null),l=h(null),r=h(null),o=h(!1),c=h(!1),d=h(null),u=h(""),f=h("all"),p=h(Kk()),b=h(Gk()),y=h({}),E=h({}),I=h(""),x=h({}),m=h({}),_=h([]),S=h([]),g=h(!1),w=h(!1),T=h(!1);let C=null,M=null,H={path:null,at:0},P=0;const R=J(()=>{var v;return(((v=t.value)==null?void 0:v.fields)||[]).filter(D=>!io.has(D.path.split(".")[0])&&!Mu(D.path))}),j=J(()=>new Map(R.value.map(v=>[v.path,v]))),Q=J(()=>we.value.reduce((v,D)=>v+D.sections.length,0)),U=J(()=>R.value.length),O=J(()=>Fk),N=J(()=>_.value.length>0),Y=J(()=>S.value.length>0),we=J(()=>{if(!e.value)return[];const v=new Set(Ua.flatMap(ae=>ae.sections)),D=Ua.map(ae=>({...ae,sections:ae.sections.filter(Oe=>Object.hasOwn(e.value,Oe)&&!io.has(Oe))})).filter(ae=>ae.sections.length),B=Object.keys(e.value).filter(ae=>!v.has(ae)&&!io.has(ae));return B.length&&D.push({key:"other",label:"Other",icon:"folder",sections:B}),D}),ke=J(()=>e.value?{...e.value,...y.value}:null),ie=J(()=>{if(!e.value)return[];const v=[];for(const[D,B]of Object.entries(y.value))Em(e.value[D],B,D,v);return v.filter(D=>!Ai(D.oldVal,D.newVal)).map(D=>{const B=L(D.path);return{...D,label:(B==null?void 0:B.label)||ka(D.path.split(".").at(-1)),apply_mode:(B==null?void 0:B.apply_mode)||ue(D.path.split(".")[0])}})}),pe=J(()=>ie.value.length>0),F=J(()=>ie.value.length),se=J(()=>new Set(ie.value.map(v=>v.path.split(".")[0])).size),Se=J(()=>!!u.value||f.value!=="all"),V=J(()=>{const v={...m.value};for(const D of ie.value){const B=L(D.path),ae=Nt(B,D.newVal);ae&&(v[D.path]=ae)}return v}),de=J(()=>Object.keys(V.value).length>0),ce=J(()=>e.value?(Se.value?we.value:we.value.filter(D=>D.key===p.value)).map(D=>({...D,sections:D.sections.filter(B=>G(B))})).filter(D=>D.sections.length):[]),_e=J(()=>{const v=["live_read","live_apply","live_for_new_work","restart","activation_required","legacy_control","dormant"],D=new Map(v.map(B=>[B,[]]));for(const B of ie.value){const ae=D.has(B.apply_mode)?B.apply_mode:"restart";D.get(ae).push(B)}return v.filter(B=>D.get(B).length).map(B=>({key:B,label:z(B),entries:D.get(B)}))}),ve=J(()=>ie.value.filter(v=>v.apply_mode==="restart").length),He=J(()=>R.value.filter(v=>v.pending_restart)),k=J(()=>He.value.length);function L(v){const D=j.value.get(v);return D?{...D,apply_details:_l([D])}:null}function $(v){const D=`${v}.`;return R.value.filter(B=>B.path===v||B.path.startsWith(D))}function ee(v){return $(v).length}function Z(v){return ka(v)}function X(v){const D=$(v);if(!D.length)return`${ka(v)} configuration.`;const B=D.find(Ue=>Ue.sensitivity==="public"&&Ue.description)||D.find(Ue=>Ue.description),ae=(B==null?void 0:B.description)||"";return ae.match(/setting for (.+)\.$/i)?`${ka(v)} settings and runtime behaviour.`:ae}function ue(v){const D=[...new Set($(v).map(B=>B.apply_mode))];return D.length===1?D[0]:D.includes("restart")?"restart":D.includes("activation_required")?"activation_required":D[0]||"restart"}function oe(v){const D=[...new Set($(v).map(B=>z(B.apply_mode)))];return D.length?D.length===1?D[0]:`Mixed apply behaviour: ${D.join(" · ")}`:""}function le(v){return _l($(v))}function te(v,D){return D.split(".").reduce((B,ae)=>B==null?void 0:B[ae],v)}function ne(v){const D=ke.value;return $(v).filter(B=>Mu(B.path)?!1:B.path.split(".").length<=2?!0:!B.path.includes(".*")).map(B=>({...B,key:B.path.split(".").at(-1),value:te(D,B.path),apply_details:_l([B]),editor:B.path==="agents.final_warning_iterations"?"warning-chips":null}))}function fe(v){const D=v.path.split(".");return D.length>2?D.slice(0,2).join("."):null}function be(v){const D=new Map;for(const B of ne(v)){const ae=fe(B),Oe=ae||`${v}.__root`;D.has(Oe)||D.set(Oe,{key:Oe,path:ae,entries:[]}),D.get(Oe).entries.push(B)}return[...D.values()].map(B=>{const ae=B.entries.find(Oe=>Oe.group_description);return{...B,label:B.path?ka(B.path.split(".").at(-1)):null,description:(ae==null?void 0:ae.group_description)||null,apply_details:_l(B.entries),runtime_summaries:Ie(B.entries)}})}function Te(v){return{save:v.save_effect||(v.apply_mode==="dormant"?"Saving records this value in config.yml.":"Saving records this value and validates the section."),runtime:v.runtime_effect||{live_read:"Odin reads the saved value during current work.",live_apply:"Odin reloads this setting without a restart.",live_for_new_work:"New work uses the saved value; existing work keeps its snapshot.",restart:"Odin keeps using its startup value until a clean restart.",activation_required:"Odin keeps the current behavior until you enable this feature separately.",legacy_control:"Odin keeps the existing compatibility behavior until you apply this choice.",dormant:"This version of Odin does not use the saved value. Restarting will not activate it."}[v.apply_mode]||"Effective runtime state is not currently observable."}}function Ie(v){const D=new Map;for(const B of v){const ae=Te(B),Oe=`${B.apply_mode}|${ae.save}|${ae.runtime}`;D.has(Oe)||D.set(Oe,{key:Oe,label:z(B.apply_mode),save:ae.save,runtime:ae.runtime})}return[...D.values()]}function Le(v){if(De(v))return v.runtime_effect||v.activation_policy||"";if(v.apply_mode==="activation_required"){const D=v.activation_policy||v.runtime_effect;return D?`Not active after saving. No activation control exists in this release. ${D}`:"Not active after saving; no activation control exists in this release."}return""}function De(v){return v.action_available===!0&&!!(v.action_label&&v.action_endpoint)}async function Be(v){if(De(v))try{if(Ve(v.path))throw new Error("Save this setting before applying its action.");const D=String(v.action_method||"POST").toLowerCase(),B={post:K.post.bind(K),put:K.put.bind(K),delete:K.del.bind(K)}[D];if(!B)throw new Error("Unsupported configuration action");await B(v.action_endpoint,v.action_body||void 0),await ge(),Es("success",`${v.action_label} completed.`)}catch(D){Es("error",D.message||`${v.action_label} failed`)}}function qe(v,D){return[v.label,v.path,v.description,...v.aliases||[]].filter(Boolean).join(" ").toLowerCase().includes(D)}function ct(v){const D=u.value.trim().toLowerCase();return D?$(v).filter(B=>qe(B,D)):[]}function G(v){const D=$(v);if(f.value!=="all"&&!D.some(ae=>ae.apply_state===f.value))return!1;const B=u.value.trim().toLowerCase();return!B||`${Z(v)} ${v}`.toLowerCase().includes(B)?!0:D.some(ae=>qe(ae,B))}function me(v,D){return $(v).filter(B=>B.apply_state===D).length}function Ce(v){return v==="all"?U.value:R.value.filter(D=>D.apply_state===v).length}function Ne(v){const D=v.sections.flatMap(B=>$(B));return{fields:D.length,modified:ie.value.filter(B=>v.sections.includes(B.path.split(".")[0])).length,pending_restart:D.filter(B=>B.apply_state==="pending_restart").length,invalid:D.filter(B=>B.apply_state==="invalid").length,dormant:D.filter(B=>B.apply_state==="dormant").length}}function Pe(v){var D;return Object.hasOwn(y.value,v)&&!Ai((D=e.value)==null?void 0:D[v],y.value[v])}function Ve(v){return ie.value.some(D=>D.path===v||D.path.startsWith(`${v}.`))}function pt(v){p.value=v,u.value="",f.value="all";try{localStorage.setItem(Tm,v)}catch{}}function as(v){f.value=v}function Fs(){u.value="",f.value="all"}function $s(v){var D;return((D=we.value.find(B=>B.sections.includes(v)))==null?void 0:D.sections)||[]}function Gs(v){const D=$s(v),B=D.find(ae=>b.value[ae]===!0);return B||D.find(ae=>b.value[ae]!==!1)||null}function Bs(v){return u.value&&!T.value&&G(v)?!0:T.value?Gs(v)===v:Object.hasOwn(b.value,v)?b.value[v]===!0:!0}function Ct(v){const D=!Bs(v);if(T.value){const B={...b.value};for(const ae of $s(v))B[ae]===!0&&(B[ae]=!1);B[v]=D,b.value=B;return}b.value={...b.value,[v]:D}}function is(){_.value.push(Wn(y.value)),_.value.length>Hk&&_.value.shift(),S.value=[]}function Ts(){pe.value&&(is(),y.value={},m.value={},g.value=!1)}function Ks(v,D=!1){const B=Date.now();if(D&&H.path===v&&B-H.atOe-ae);I.value="",Zt(v,B)}function q(v,D){Zt(v,(v.value||[]).filter(B=>B!==D))}function re(v){return v.apply_mode==="live_read"?"Odin reads the saved file value on next use.":v.apply_mode==="live_for_new_work"?"New work uses the saved file value.":v.apply_mode==="live_apply"?v.apply_handler?`Apply the saved value through ${v.apply_handler}.`:"Apply it through its dedicated owner page or endpoint.":v.apply_mode==="restart"?"Restart Odin for the saved collection to take effect.":v.apply_mode==="activation_required"?"Saving does not enable it. No activation control exists in this release.":v.apply_mode==="dormant"?"This release does not use the saved collection.":"Follow the runtime details shown for this setting."}function Ee(v){return v.type==="array"&&Array.isArray(v.value)&&!v.structured_container&&!v.structured_container_child&&v.sensitivity==="public"&&v.value.every(D=>["string","number","boolean"].includes(typeof D))}function Ze(v){const D=String(x.value[v.path]??"").trim();if(!D)return;const B=[...new Set([...v.value||[],D])];x.value={...x.value,[v.path]:""},Zt(v,B)}function lt(v,D){Zt(v,(v.value||[]).filter(B=>B!==D))}function Nt(v,D){var ae;if(!v)return null;if((ae=v.enum)!=null&&ae.length&&!v.enum.includes(D))return`Choose one of: ${v.enum.join(", ")}`;if(v.path==="agents.final_warning_iterations"&&(!Array.isArray(D)||!D.length))return"Add at least one warning threshold.";const B=v.constraints||{};if((v.type==="integer"||v.type==="number")&&typeof D=="number"){if(B.minimum!==void 0&&DB.maximum)return`Must be at most ${B.maximum}${v.unit?` ${v.unit}`:""}`}return null}function Mt(v){return V.value[v.path]||null}function ha(v){const D=`${v}.`;return Object.keys(V.value).some(B=>B===v||B.startsWith(D))}function Cs(){_.value.length&&(S.value.push(Wn(y.value)),y.value=_.value.pop(),m.value={},E.value={},H={path:null,at:0})}function ma(){S.value.length&&(_.value.push(Wn(y.value)),y.value=S.value.pop(),m.value={},E.value={},H={path:null,at:0})}function si(){!pe.value||de.value||(g.value=!0,w.value=!1)}function ga(){g.value=!1}function va(){Ts()}function z(v){return Bk[v]||ka(v||"unknown")}function he(v){return`apply-${String(v||"unknown").replaceAll("_","-")}`}function ye(v){return`cfgc-field-${v.replace(/[^a-zA-Z0-9_-]/g,"-")}`}function os(v){return`${ye(v)}-input`}function cs(v){const D=document.getElementById(ye(v))||document.getElementById(ye(v.split(".").slice(0,2).join(".")));D==null||D.scrollIntoView({behavior:"smooth",block:"center"})}function Es(v,D){l.value={type:v,message:D},window.setTimeout(()=>{var B;((B=l.value)==null?void 0:B.message)===D&&(l.value=null)},3500)}function ll(){o.value=!1,f.value="pending_restart",u.value="";const v=$k(n.value);v&&(v.scrollTop=0)}function Br(){o.value=!1}function ni(v=1800){M&&window.clearTimeout(M),M=window.setTimeout(rl,v)}async function rl(){if(c.value){if(P+=1,P>45){c.value=!1,d.value="Odin did not return with the new startup settings within 90 seconds.";return}try{if(t.value=await lo(),k.value===0){c.value=!1,d.value=null,Es("success","Odin restarted and the saved startup settings are active.");return}}catch{}ni(2e3)}}async function ba(){if(!c.value){d.value=null;try{await K.post("/api/restart",{}),c.value=!0,P=0,o.value=!1,ni()}catch(v){d.value=v.message||"Odin could not schedule a restart."}}}async function ai(){if(!(!pe.value||de.value||a.value)){a.value=!0;try{const v=qk(e.value,y.value),D=await K.put("/api/config",v);e.value=D,y.value={},_.value=[],S.value=[],m.value={},g.value=!1;try{t.value=await lo(),r.value=null,o.value=k.value>0,Es("success",k.value?`Configuration saved. ${k.value} setting${k.value===1?"":"s"} still use startup values.`:"Configuration saved. Apply status has been refreshed.")}catch(B){r.value=B.message||"Unknown metadata error.",Es("error",`Configuration saved, but apply status could not be refreshed: ${r.value}`)}}catch(v){Es("error",v.message||"Configuration could not be saved")}finally{a.value=!1}}}async function ge(){var v,D;if(!pe.value){s.value=!0,i.value=null;try{const B=await K.get("/api/config"),ae=await lo();e.value=B,t.value=ae,r.value=null;const Oe=we.value;if(Oe.some(Ue=>Ue.key===p.value)||(p.value=((v=Oe[0])==null?void 0:v.key)||Ua[0].key),T.value){const Xe=(((D=Oe.find(Ht=>Ht.key===p.value))==null?void 0:D.sections)||[]).find(Ht=>b.value[Ht]===!0);b.value=Xe?{...b.value,[Xe]:!0}:{}}}catch(B){i.value=B.message||"Unknown configuration error"}finally{s.value=!1}}}function A(v){if(g.value||!(v.ctrlKey||v.metaKey))return;const D=v.target;D instanceof HTMLElement&&(D.matches("input, textarea, select")||D.isContentEditable)||(!v.shiftKey&&v.key.toLowerCase()==="z"?(v.preventDefault(),Cs()):(v.key.toLowerCase()==="y"||v.shiftKey&&v.key.toLowerCase()==="z")&&(v.preventDefault(),ma()))}function W(v){T.value=v.matches}return ts(b,v=>{try{localStorage.setItem(Sm,JSON.stringify(v))}catch{}},{deep:!0}),We(()=>{var v;ge(),document.addEventListener("keydown",A),C=window.matchMedia("(max-width: 760px)"),W(C),(v=C.addEventListener)==null||v.call(C,"change",W)}),xt(()=>{var v;document.removeEventListener("keydown",A),(v=C==null?void 0:C.removeEventListener)==null||v.call(C,"change",W),M&&window.clearTimeout(M)}),{config:e,meta:t,loading:s,saving:a,error:i,toast:l,metaRefreshError:r,restartPromptOpen:o,restartScheduled:c,restartError:d,configMain:n,searchQuery:u,healthFilter:f,activeCategory:p,reviewOpen:g,mobileOverflowOpen:w,warningThresholdInput:I,arrayInputs:x,healthFilters:O,visibleCategories:we,displayGroups:ce,reviewGroups:_e,sectionCount:Q,fieldCount:U,hasChanges:pe,changeCount:F,changedSectionCount:se,hasDraftErrors:de,canUndo:N,canRedo:Y,globalFilterActive:Se,reviewRestartCount:ve,pendingRestartCount:k,pendingRestartFields:He,healthCount:Ce,categoryStats:Ne,selectCategory:pt,selectHealthFilter:as,clearFilters:Fs,sectionLabel:Z,sectionDescription:X,sectionFieldCount:ee,sectionHealthCount:me,sectionApplySummary:oe,sectionApplyDetails:le,sectionEntries:ne,fieldGroups:be,sectionSearchHits:ct,fieldRuntimeCopy:Te,fieldSpecificRuntimeNote:Le,hasHonestAction:De,runFieldAction:Be,sectionChanged:Pe,fieldChanged:Ve,isSectionExpanded:Bs,toggleSection:Ct,discardAllDrafts:Ts,setFieldValue:Zt,setNumberFieldValue:at,numberInputValue:rs,beginInputEdit:Us,endTextInputEdit:Et,endInputEdit:ls,addWarningThreshold:vs,removeWarningThreshold:q,isScalarArray:Ee,addScalarArrayItem:Ze,removeScalarArrayItem:lt,fieldError:Mt,sectionHasErrors:ha,undo:Cs,redo:ma,openReview:si,closeReview:ga,mobileCancel:va,applyModeLabel:z,applyClass:he,compactValue:Vk,formatValue:jk,structuredApplyCopy:re,fieldId:ye,fieldInputId:os,focusField:cs,fetchConfig:ge,saveConfig:ai,restartOdin:ba,restartLater:Br,reviewPendingRestart:ll}}},Zk=/^\d{15,25}$/;function Am(e){return String((e==null?void 0:e.display_name)||(e==null?void 0:e.username)||(e==null?void 0:e.id)||"Unknown user")}const Rm={props:{members:{type:Array,default:()=>[]},excludedIds:{type:Array,default:()=>[]},placeholder:{type:String,default:"Search Discord users…"},ariaLabel:{type:String,default:"Search Discord users"},optionsId:{type:String,required:!0},autofocus:{type:Boolean,default:!1}},emits:["select"],template:`
t in e?Gm(e,t,{enumerable:!0,config Built-in floor Configured override Effective budget - Resulting target + Configured target + Runtime target Provenance @@ -4999,7 +5000,11 @@ var Gm=Object.defineProperty;var Km=(e,t,s)=>t in e?Gm(e,t,{enumerable:!0,config Above the known-safe floor {{ formatCount(row.effectiveBudget) }}tokens - {{ formatCount(row.primaryChars) }}characters + {{ formatCount(row.configuredPrimaryChars) }}characters · saved policy + + {{ formatCount(row.primaryChars) }}characters · active process + Restart pending + {{ row.provenance }} Expires {{ formatExpiry(row.clampExpiresAt) }} @@ -5275,7 +5280,7 @@ var Gm=Object.defineProperty;var Km=(e,t,s)=>t in e?Gm(e,t,{enumerable:!0,config
- `,setup(){const e=h(!0),t=h(null),s=h("codex"),n=h({enabled:!1,model:"gpt-5.6-sol",reasoning_effort:"xhigh",agent_reasoning_effort:"auto",agent_model:"auto",request_timeout_seconds:3600,stream_stall_timeout_seconds:180,retry:{max_retries:3,base_delay:1,max_delay:30},connection_pool:{max_connections:10,keepalive_timeout:30},context_compression:{enabled:!0,max_context_chars:null,keep_recent_iterations:30},context_budget_overrides:{},context_utilization:60}),a=["gpt-5.6-sol","gpt-5.6-terra","gpt-5.6-luna","gpt-5.5"],i=J(()=>{const z=n.value.model;return z&&!a.includes(z)?[z,...a]:a}),l=J(()=>{const z=n.value.agent_model;return z&&z!=="auto"&&!a.includes(z)?[z,...a]:a}),r=["gpt-5.5","gpt-5.4","gpt-5.4-mini"],o=J(()=>!r.includes(n.value.model)&&!(r.includes(n.value.agent_model)&&n.value.agent_reasoning_effort==="")),c=J(()=>{const z=n.value.agent_model;return z==="auto"?!0:!r.includes(z||n.value.model)}),d=J(()=>{const z=n.value.agent_reasoning_effort;return z==="auto"?!1:(z||n.value.reasoning_effort)==="max"}),u=z=>r.includes(z)&&(n.value.reasoning_effort==="max"||n.value.agent_model===""&&d.value),f=z=>r.includes(z)&&d.value,p=h({enabled:!1,model:"gpt-5.6-luna"}),b=h({unavailable_reason:null}),y=J(()=>{const z=p.value.model;return z&&!a.includes(z)?[z,...a]:a});function E(z){const he=z.target.value;p.value.enabled=he!=="",he!==""&&(p.value.model=he),Et()}const I=h(!1),x=h({codex:!1,ollama:!1,kimi:!1}),m=h(null),_=h(!1),S=h(""),g=h(null),w=h(!1);let T=0;const C=J(()=>{var z;return Object.entries(((z=m.value)==null?void 0:z.models)||{}).map(([he,ye])=>{var os,cs;return{model:he,floor:ye.floor,override:ye.override,effectiveBudget:(os=ye.effective)==null?void 0:os.effective_budget,primaryChars:(cs=ye.effective)==null?void 0:cs.primary_chars,provenance:ye.provenance,clampExpiresAt:ye.clamp_expires_at}})}),M=J(()=>{var z;return((z=m.value)==null?void 0:z.clamps)||[]}),H=J(()=>{var z,he;return((he=(z=m.value)==null?void 0:z.models)==null?void 0:he[n.value.model])||null}),P=h({enabled:!1,base_url:"",model:"",api_key:"",max_tokens:4096,timeout:300}),R=h({enabled:!1,api_key:"",model:"",max_tokens:4096,timeout:300}),j=h(!1),Q=h(!1),U=h(!1),O=h(!1),N=h(!1),Y=h(!1),we=h(!1),ke=h({configured:!1}),ie=h([]),pe=h(""),F=h(!1),se=h(!1),Se=h({configured:!1}),V=h([]),de=h(""),ce=h(!1),_e=h(!1),ve=h(!0),He=h(""),k=h({configured:!1,accounts:[]}),L=h(null),$=h(null),ee=h(""),Z=h(null),X=h(!1),ue=h(null),oe=h(null),le=h("");let te=null;function ne(z,he="success"){Ae(z,he==="error"?"error":"success")}function fe(z){if(!z)return"?";const he=z/(1024*1024*1024);return he>=1?he.toFixed(1)+" GB":(z/(1024*1024)).toFixed(0)+" MB"}function be(z){return Number.isFinite(Number(z))?Number(z).toLocaleString():"—"}function Te(z){const he=new Date(z);return Number.isNaN(he.getTime())?"unknown":he.toLocaleString([],{dateStyle:"medium",timeStyle:"short"})}function Ie(z){return typeof z=="string"&&z.length>12?z.slice(0,8)+"…"+z.slice(-4):z}function Le(z){return z==="temporary learned clamp"?"is-clamp":z==="override"?"is-override":"is-built-in"}function De(z){const he=n.value.context_budget_overrides[z.model];return z.floor!=null&&Number.isFinite(Number(he))&&Number(he)>z.floor}function Be(z,he){const ye={...n.value.context_budget_overrides};he.target.value===""?delete ye[z]:ye[z]=Number(he.target.value),n.value.context_budget_overrides=ye,w.value=!0}function qe(z){n.value.context_utilization=z.target.value===""?"":Number(z.target.value),w.value=!0}function ct(z){const he={...n.value.context_budget_overrides};delete he[z],n.value.context_budget_overrides=he,w.value=!0}async function G(){e.value=!0,await Promise.all([me(),Ne(),Fs(),Pe(),Ce()]),e.value=!1}async function me({preserveBasic:z=!1,preserveAdvanced:he=!1}={}){try{const ye=await K.get("/api/llm/status");t.value=ye,s.value=ye.active_provider||"codex",ye.codex&&!Bs.pending()&&(z||(n.value.enabled=ye.codex.enabled,n.value.model=ye.codex.model||"gpt-5.6-sol",n.value.reasoning_effort=ye.codex.reasoning_effort||"medium",n.value.agent_reasoning_effort=ye.codex.agent_reasoning_effort||"",n.value.agent_model=ye.codex.agent_model||""),he||(n.value.request_timeout_seconds=ye.codex.request_timeout_seconds??n.value.request_timeout_seconds,n.value.stream_stall_timeout_seconds=ye.codex.stream_stall_timeout_seconds??n.value.stream_stall_timeout_seconds,n.value.retry={...n.value.retry,...ye.codex.retry||{}},n.value.connection_pool={...n.value.connection_pool,...ye.codex.connection_pool||{}},n.value.context_compression={...n.value.context_compression,...ye.codex.context_compression||{}},!w.value&&!U.value&&(n.value.context_budget_overrides={...ye.codex.context_budget_overrides||{}},n.value.context_utilization=ye.codex.context_utilization??n.value.context_utilization))),ye.ollama&&!ls.pending()&&(z||(P.value.enabled=ye.ollama.enabled,P.value.base_url=ye.ollama.base_url||"",P.value.model=ye.ollama.model||"",P.value.max_tokens=ye.ollama.max_tokens||4096),he||(P.value.timeout=ye.ollama.timeout??P.value.timeout)),ye.kimi&&!rs.pending()&&(z||(R.value.enabled=ye.kimi.enabled,R.value.model=ye.kimi.model||"",R.value.max_tokens=ye.kimi.max_tokens||4096),he||(R.value.timeout=ye.kimi.timeout??R.value.timeout)),ye.auxiliary&&(b.value=ye.auxiliary,Et.pending()||(p.value.enabled=ye.auxiliary.enabled,p.value.model=ye.auxiliary.model||"gpt-5.6-luna"))}catch{t.value={active_provider:"codex",codex:{configured:!1},ollama:{configured:!1},kimi:{configured:!1}}}}async function Ce(){const z=++T;_.value=!0,S.value="";try{const he=await K.get("/api/context/windows");if(z!==T)return;m.value=he,!U.value&&!w.value&&(n.value.context_budget_overrides=Object.fromEntries(Object.entries(he.models||{}).filter(([,ye])=>ye.override!=null).map(([ye,os])=>[ye,os.override])),n.value.context_utilization=he.utilization??n.value.context_utilization)}catch(he){z===T&&(S.value=he.message||"Failed to load context budgets")}finally{z===T&&(_.value=!1)}}async function Ne(){try{if(ke.value=await K.get("/api/ollama/status"),ke.value.model&&(pe.value=ke.value.model),ke.value.configured)try{const z=await K.get("/api/ollama/models");ie.value=z.models||[]}catch{ie.value=[]}else if(P.value.base_url)try{const z=await K.post("/api/ollama/probe-models",{base_url:P.value.base_url});ie.value=z.models||[]}catch{ie.value=[]}}catch{ke.value={configured:!1}}}async function Pe(){ve.value=!0,He.value="";try{k.value=await K.get("/api/codex/status")}catch(z){He.value=z.message||"Failed to fetch Codex status"}finally{ve.value=!1}}async function Ve(){const z=t.value?t.value.active_provider:"codex";we.value=!0;try{const he=await K.post("/api/llm/switch",{provider:s.value});he.error?(s.value=z,ne(he.error,"error")):(ne("Switched to "+s.value+" ("+he.model+")"),await G())}catch(he){s.value=z,ne(he.message||"Switch failed","error")}finally{we.value=!1}}async function pt(){F.value=!0;try{const z=await K.post("/api/ollama/reload");ne(z.configured?"Ollama reloaded":z.reason||"Ollama not configured",z.configured?"success":"error"),await G()}catch(z){ne(z.message||"Reload failed","error")}finally{F.value=!1}}async function as(){se.value=!0;try{await K.post("/api/ollama/model",{model:pe.value}),ne("Model set to "+pe.value),await G()}catch(z){ne(z.message||"Failed","error")}finally{se.value=!1}}async function Ps(){const z=P.value.base_url;if(!z){ne("Enter a base URL first","error");return}Y.value=!0;try{const he=await K.post("/api/ollama/probe-models",{base_url:z});ie.value=he.models||[],ie.value.length?(ne(ie.value.length+" model(s) found"),!P.value.model&&ie.value.length&&(P.value.model=ie.value[0].name)):ne("No models found at "+z,"error")}catch(he){ne(he.message||"Could not reach Ollama","error")}finally{Y.value=!1}}async function Fs(){try{if(Se.value=await K.get("/api/kimi/status"),Se.value.model&&(de.value=Se.value.model),Se.value.configured)try{const z=await K.get("/api/kimi/models");V.value=z.models||[]}catch{V.value=[]}}catch{Se.value={configured:!1}}}async function qs(){ce.value=!0;try{const z=await K.post("/api/kimi/reload");ne(z.configured?"Kimi reloaded":z.reason||"Kimi not configured",z.configured?"success":"error"),await G()}catch(z){ne(z.message||"Reload failed","error")}finally{ce.value=!1}}async function $s(){_e.value=!0;try{await K.post("/api/kimi/model",{model:de.value}),ne("Model set to "+de.value),await G()}catch(z){ne(z.message||"Failed","error")}finally{_e.value=!1}}async function Ct(){if(U.value){Bs();return}U.value=!0;const z=Fu(n.value);try{await K.put("/api/llm/codex/config",z),ne("Codex config saved"),await Promise.all([me({preserveBasic:!0,preserveAdvanced:!0}),Pe()])}catch(he){ne(he.message||"Failed","error");const ye=JSON.stringify(Fu(n.value))!==JSON.stringify(z);await Promise.all([me({preserveBasic:ye,preserveAdvanced:!0}),Pe()])}finally{U.value=!1}}async function is(){if(U.value)return;U.value=!0;const z=$u(n.value);try{await K.put("/api/llm/codex/config",z),JSON.stringify({context_budget_overrides:n.value.context_budget_overrides,context_utilization:n.value.context_utilization})===JSON.stringify({context_budget_overrides:z.context_budget_overrides,context_utilization:z.context_utilization})&&(w.value=!1),ne("Codex advanced settings saved"),await Promise.all([me({preserveBasic:!0,preserveAdvanced:!0}),Pe(),Ce()])}catch(he){ne(he.message||"Failed","error");const ye=JSON.stringify($u(n.value))!==JSON.stringify(z);await Promise.all([me({preserveBasic:!0,preserveAdvanced:ye}),Pe(),Ce()])}finally{U.value=!1}}async function Ts(){if(O.value){ls();return}O.value=!0;try{const z=j.value?P.value.api_key:null,he=aw(P.value,{includeApiKey:z!==null});await K.put("/api/llm/ollama/config",he),ne("Ollama config saved"),z!==null&&P.value.api_key===z&&(P.value.api_key="",j.value=!1),await Promise.all([me({preserveBasic:!0,preserveAdvanced:!0}),Ne()])}catch(z){ne(z.message||"Failed","error")}finally{O.value=!1}}async function Gs(){if(!O.value){O.value=!0;try{await K.put("/api/llm/ollama/config",iw(P.value)),ne("Ollama timeout saved"),await Promise.all([me({preserveBasic:!0,preserveAdvanced:!0}),Ne()])}catch(z){ne(z.message||"Failed","error")}finally{O.value=!1}}}async function an(){if(N.value){rs();return}N.value=!0;try{const z=Q.value?R.value.api_key:null,he=lw(R.value,{includeApiKey:z!==null});await K.put("/api/llm/kimi/config",he),ne("Kimi config saved"),z!==null&&R.value.api_key===z&&(R.value.api_key="",Q.value=!1),await Promise.all([me({preserveBasic:!0,preserveAdvanced:!0}),Fs()])}catch(z){ne(z.message||"Failed","error")}finally{N.value=!1}}async function Ks(){if(!N.value){N.value=!0;try{await K.put("/api/llm/kimi/config",rw(R.value)),ne("Kimi timeout saved"),await Promise.all([me({preserveBasic:!0,preserveAdvanced:!0}),Fs()])}catch(z){ne(z.message||"Failed","error")}finally{N.value=!1}}}async function Zt(){if(I.value){Et();return}I.value=!0;try{await K.put("/api/llm/auxiliary/config",p.value),ne("Auxiliary config saved"),await me()}catch(z){ne(z.message||"Failed","error"),await me()}finally{I.value=!1}}const Bs=kl(Ct),Et=kl(Zt),ls=kl(Ts),rs=kl(an),at=()=>(Bs.cancel(),Ct()),vs=()=>(ls.cancel(),Ts()),q=()=>(rs.cancel(),an()),re=()=>is(),Ee=()=>Gs(),Ze=()=>Ks();async function lt(z){const he=z.account_key+":"+z.model;g.value=he;try{const ye=await K.post("/api/context/windows/clear",{account_key:z.account_key,model:z.model});ne(ye.cleared?"Temporary clamp cleared":"Clamp was already inactive"),await Ce()}catch(ye){ne(ye.message||"Failed to clear clamp","error"),await Ce()}finally{g.value=null}}async function Nt(z){try{await K.post("/api/codex/account/"+z+"/activate"),ne("Active account switched"),await Pe()}catch(he){ne(he.message||"Failed","error")}}async function Mt(z){L.value=z;try{await K.post("/api/codex/account/"+z+"/refresh"),ne("Token refreshed"),await Pe()}catch(he){ne(he.message||"Refresh failed","error")}finally{L.value=null}}function ha(z,he){$.value=z,ee.value=he||""}async function Cs(z){try{await K.put("/api/codex/account/"+z+"/label",{label:ee.value}),ne("Label updated"),$.value=null,await Pe()}catch(he){ne(he.message||"Failed","error")}}async function ma(z,he){if(await ks({title:"Delete Codex account",message:`Delete ${he||"account #"+(z+1)}? The pool will reload without it.`,confirmLabel:"Delete",danger:!0}))try{await K.del("/api/codex/account/"+z),ne("Deleted. Pool reloaded."),await Pe()}catch(os){ne(os.message||"Failed","error")}}async function si(){X.value=!0;try{const z=await K.post("/api/codex/device-code");ue.value=z,Z.value="pending",ga(z)}catch(z){ne(z.message||"Failed","error")}finally{X.value=!1}}async function ga(z){te={cancelled:!1};const he=te;try{const ye=await K.post("/api/codex/device-poll",{device_auth_id:z.device_auth_id,user_code:z.user_code,interval:z.interval});if(he.cancelled)return;oe.value=ye,Z.value="success",await G()}catch(ye){if(he.cancelled)return;le.value=ye.message||"Device login failed",Z.value="error"}}function va(){te&&(te.cancelled=!0),Z.value=null,ue.value=null}return We(G),xt(()=>{te&&(te.cancelled=!0),Bs.cancel(),Et.cancel(),ls.cancel(),rs.cancel()}),{loading:e,llmStatus:t,selectedProvider:s,switching:we,advancedOpen:x,codexForm:n,codexModelOptions:i,codexAgentModelOptions:l,mainMaxAllowed:o,agentMaxAllowed:c,mainModelOptionDisabled:u,agentModelOptionDisabled:f,auxForm:p,auxData:b,auxModelOptions:y,onAuxModelChange:E,savingAux:I,saveAuxConfigDebounced:Et,ollamaForm:P,kimiForm:R,savingCodex:U,savingOllama:O,savingKimi:N,probingOllama:Y,ollamaKeyDirty:j,kimiKeyDirty:Q,ollamaStatus:ke,ollamaModels:ie,ollamaSelectedModel:pe,reloading:F,settingModel:se,kimiStatus:Se,kimiModels:V,kimiSelectedModel:de,reloadingKimi:ce,settingKimiModel:_e,codexLoading:ve,codexError:He,codexData:k,refreshing:L,editingLabel:$,labelValue:ee,contextWindows:m,contextWindowsLoading:_,contextWindowsError:S,contextBudgetRows:C,activeClampRows:M,activeContextBudget:H,clearingClamp:g,contextPolicyDirty:w,deviceState:Z,deviceLoading:X,deviceInfo:ue,deviceResult:oe,deviceError:le,fetchAll:G,switchProvider:Ve,reloadOllama:pt,setOllamaModel:as,reloadKimi:qs,setKimiModel:$s,probeOllamaModels:Ps,saveCodexConfig:Ct,saveOllamaConfig:Ts,saveKimiConfig:an,saveCodexAdvancedConfig:is,saveOllamaAdvancedConfig:Gs,saveKimiAdvancedConfig:Ks,saveCodexConfigDebounced:Bs,saveOllamaConfigDebounced:ls,saveKimiConfigDebounced:rs,saveCodexConfigNow:at,saveOllamaConfigNow:vs,saveKimiConfigNow:q,saveCodexAdvancedConfigNow:re,saveOllamaAdvancedConfigNow:Ee,saveKimiAdvancedConfigNow:Ze,activateAccount:Nt,refreshAccount:Mt,startEditLabel:ha,saveLabel:Cs,deleteAccount:ma,startDeviceLogin:si,cancelDeviceLogin:va,formatSize:fe,fetchContextWindows:Ce,clearContextClamp:lt,setContextOverride:Be,setContextUtilization:qe,resetContextOverride:ct,overrideAboveFloor:De,formatCount:be,formatExpiry:Te,shortAccountKey:Ie,provenanceClass:Le}}},Bu={ok:"text-green-400",pass:"text-green-400",degraded:"text-yellow-400",warn:"text-yellow-400",down:"text-red-400",fail:"text-red-400",unconfigured:"text-gray-500",skipped:"text-gray-500"};function cw(e){return Bu[e]||Bu[(e||"").toLowerCase()]||"text-gray-400"}const dw={template:` + `,setup(){const e=h(!0),t=h(null),s=h("codex"),n=h({enabled:!1,model:"gpt-5.6-sol",reasoning_effort:"xhigh",agent_reasoning_effort:"auto",agent_model:"auto",request_timeout_seconds:3600,stream_stall_timeout_seconds:180,retry:{max_retries:3,base_delay:1,max_delay:30},connection_pool:{max_connections:10,keepalive_timeout:30},context_compression:{enabled:!0,max_context_chars:null,keep_recent_iterations:30},context_budget_overrides:{},context_utilization:60}),a=["gpt-5.6-sol","gpt-5.6-terra","gpt-5.6-luna","gpt-5.5"],i=J(()=>{const z=n.value.model;return z&&!a.includes(z)?[z,...a]:a}),l=J(()=>{const z=n.value.agent_model;return z&&z!=="auto"&&!a.includes(z)?[z,...a]:a}),r=["gpt-5.5","gpt-5.4","gpt-5.4-mini"],o=J(()=>!r.includes(n.value.model)&&!(r.includes(n.value.agent_model)&&n.value.agent_reasoning_effort==="")),c=J(()=>{const z=n.value.agent_model;return z==="auto"?!0:!r.includes(z||n.value.model)}),d=J(()=>{const z=n.value.agent_reasoning_effort;return z==="auto"?!1:(z||n.value.reasoning_effort)==="max"}),u=z=>r.includes(z)&&(n.value.reasoning_effort==="max"||n.value.agent_model===""&&d.value),f=z=>r.includes(z)&&d.value,p=h({enabled:!1,model:"gpt-5.6-luna"}),b=h({unavailable_reason:null}),y=J(()=>{const z=p.value.model;return z&&!a.includes(z)?[z,...a]:a});function E(z){const he=z.target.value;p.value.enabled=he!=="",he!==""&&(p.value.model=he),Et()}const I=h(!1),x=h({codex:!1,ollama:!1,kimi:!1}),m=h(null),_=h(!1),S=h(""),g=h(null),w=h(!1);let T=0;const C=J(()=>{var z;return Object.entries(((z=m.value)==null?void 0:z.models)||{}).map(([he,ye])=>{var os,cs,Es;return{model:he,floor:ye.floor,override:ye.override,effectiveBudget:(os=ye.effective)==null?void 0:os.effective_budget,configuredPrimaryChars:(cs=ye.configured)==null?void 0:cs.primary_chars,primaryChars:(Es=ye.effective)==null?void 0:Es.primary_chars,provenance:ye.provenance,clampExpiresAt:ye.clamp_expires_at}})}),M=J(()=>{var z;return((z=m.value)==null?void 0:z.clamps)||[]}),H=J(()=>{var z,he;return((he=(z=m.value)==null?void 0:z.models)==null?void 0:he[n.value.model])||null}),P=h({enabled:!1,base_url:"",model:"",api_key:"",max_tokens:4096,timeout:300}),R=h({enabled:!1,api_key:"",model:"",max_tokens:4096,timeout:300}),j=h(!1),Q=h(!1),U=h(!1),O=h(!1),N=h(!1),Y=h(!1),we=h(!1),ke=h({configured:!1}),ie=h([]),pe=h(""),F=h(!1),se=h(!1),Se=h({configured:!1}),V=h([]),de=h(""),ce=h(!1),_e=h(!1),ve=h(!0),He=h(""),k=h({configured:!1,accounts:[]}),L=h(null),$=h(null),ee=h(""),Z=h(null),X=h(!1),ue=h(null),oe=h(null),le=h("");let te=null;function ne(z,he="success"){Ae(z,he==="error"?"error":"success")}function fe(z){if(!z)return"?";const he=z/(1024*1024*1024);return he>=1?he.toFixed(1)+" GB":(z/(1024*1024)).toFixed(0)+" MB"}function be(z){return Number.isFinite(Number(z))?Number(z).toLocaleString():"—"}function Te(z){const he=new Date(z);return Number.isNaN(he.getTime())?"unknown":he.toLocaleString([],{dateStyle:"medium",timeStyle:"short"})}function Ie(z){return typeof z=="string"&&z.length>12?z.slice(0,8)+"…"+z.slice(-4):z}function Le(z){return z==="temporary learned clamp"?"is-clamp":z==="override"?"is-override":"is-built-in"}function De(z){const he=n.value.context_budget_overrides[z.model];return z.floor!=null&&Number.isFinite(Number(he))&&Number(he)>z.floor}function Be(z,he){const ye={...n.value.context_budget_overrides};he.target.value===""?delete ye[z]:ye[z]=Number(he.target.value),n.value.context_budget_overrides=ye,w.value=!0}function qe(z){n.value.context_utilization=z.target.value===""?"":Number(z.target.value),w.value=!0}function ct(z){const he={...n.value.context_budget_overrides};delete he[z],n.value.context_budget_overrides=he,w.value=!0}async function G(){e.value=!0,await Promise.all([me(),Ne(),$s(),Pe(),Ce()]),e.value=!1}async function me({preserveBasic:z=!1,preserveAdvanced:he=!1}={}){try{const ye=await K.get("/api/llm/status");t.value=ye,s.value=ye.active_provider||"codex",ye.codex&&!Us.pending()&&(z||(n.value.enabled=ye.codex.enabled,n.value.model=ye.codex.model||"gpt-5.6-sol",n.value.reasoning_effort=ye.codex.reasoning_effort||"medium",n.value.agent_reasoning_effort=ye.codex.agent_reasoning_effort||"",n.value.agent_model=ye.codex.agent_model||""),he||(n.value.request_timeout_seconds=ye.codex.request_timeout_seconds??n.value.request_timeout_seconds,n.value.stream_stall_timeout_seconds=ye.codex.stream_stall_timeout_seconds??n.value.stream_stall_timeout_seconds,n.value.retry={...n.value.retry,...ye.codex.retry||{}},n.value.connection_pool={...n.value.connection_pool,...ye.codex.connection_pool||{}},n.value.context_compression={...n.value.context_compression,...ye.codex.context_compression||{}},!w.value&&!U.value&&(n.value.context_budget_overrides={...ye.codex.context_budget_overrides||{}},n.value.context_utilization=ye.codex.context_utilization??n.value.context_utilization))),ye.ollama&&!ls.pending()&&(z||(P.value.enabled=ye.ollama.enabled,P.value.base_url=ye.ollama.base_url||"",P.value.model=ye.ollama.model||"",P.value.max_tokens=ye.ollama.max_tokens||4096),he||(P.value.timeout=ye.ollama.timeout??P.value.timeout)),ye.kimi&&!rs.pending()&&(z||(R.value.enabled=ye.kimi.enabled,R.value.model=ye.kimi.model||"",R.value.max_tokens=ye.kimi.max_tokens||4096),he||(R.value.timeout=ye.kimi.timeout??R.value.timeout)),ye.auxiliary&&(b.value=ye.auxiliary,Et.pending()||(p.value.enabled=ye.auxiliary.enabled,p.value.model=ye.auxiliary.model||"gpt-5.6-luna"))}catch{t.value={active_provider:"codex",codex:{configured:!1},ollama:{configured:!1},kimi:{configured:!1}}}}async function Ce(){const z=++T;_.value=!0,S.value="";try{const he=await K.get("/api/context/windows");if(z!==T)return;m.value=he,!U.value&&!w.value&&(n.value.context_budget_overrides=Object.fromEntries(Object.entries(he.models||{}).filter(([,ye])=>ye.override!=null).map(([ye,os])=>[ye,os.override])),n.value.context_utilization=he.utilization??n.value.context_utilization)}catch(he){z===T&&(S.value=he.message||"Failed to load context budgets")}finally{z===T&&(_.value=!1)}}async function Ne(){try{if(ke.value=await K.get("/api/ollama/status"),ke.value.model&&(pe.value=ke.value.model),ke.value.configured)try{const z=await K.get("/api/ollama/models");ie.value=z.models||[]}catch{ie.value=[]}else if(P.value.base_url)try{const z=await K.post("/api/ollama/probe-models",{base_url:P.value.base_url});ie.value=z.models||[]}catch{ie.value=[]}}catch{ke.value={configured:!1}}}async function Pe(){ve.value=!0,He.value="";try{k.value=await K.get("/api/codex/status")}catch(z){He.value=z.message||"Failed to fetch Codex status"}finally{ve.value=!1}}async function Ve(){const z=t.value?t.value.active_provider:"codex";we.value=!0;try{const he=await K.post("/api/llm/switch",{provider:s.value});he.error?(s.value=z,ne(he.error,"error")):(ne("Switched to "+s.value+" ("+he.model+")"),await G())}catch(he){s.value=z,ne(he.message||"Switch failed","error")}finally{we.value=!1}}async function pt(){F.value=!0;try{const z=await K.post("/api/ollama/reload");ne(z.configured?"Ollama reloaded":z.reason||"Ollama not configured",z.configured?"success":"error"),await G()}catch(z){ne(z.message||"Reload failed","error")}finally{F.value=!1}}async function as(){se.value=!0;try{await K.post("/api/ollama/model",{model:pe.value}),ne("Model set to "+pe.value),await G()}catch(z){ne(z.message||"Failed","error")}finally{se.value=!1}}async function Fs(){const z=P.value.base_url;if(!z){ne("Enter a base URL first","error");return}Y.value=!0;try{const he=await K.post("/api/ollama/probe-models",{base_url:z});ie.value=he.models||[],ie.value.length?(ne(ie.value.length+" model(s) found"),!P.value.model&&ie.value.length&&(P.value.model=ie.value[0].name)):ne("No models found at "+z,"error")}catch(he){ne(he.message||"Could not reach Ollama","error")}finally{Y.value=!1}}async function $s(){try{if(Se.value=await K.get("/api/kimi/status"),Se.value.model&&(de.value=Se.value.model),Se.value.configured)try{const z=await K.get("/api/kimi/models");V.value=z.models||[]}catch{V.value=[]}}catch{Se.value={configured:!1}}}async function Gs(){ce.value=!0;try{const z=await K.post("/api/kimi/reload");ne(z.configured?"Kimi reloaded":z.reason||"Kimi not configured",z.configured?"success":"error"),await G()}catch(z){ne(z.message||"Reload failed","error")}finally{ce.value=!1}}async function Bs(){_e.value=!0;try{await K.post("/api/kimi/model",{model:de.value}),ne("Model set to "+de.value),await G()}catch(z){ne(z.message||"Failed","error")}finally{_e.value=!1}}async function Ct(){if(U.value){Us();return}U.value=!0;const z=Fu(n.value);try{await K.put("/api/llm/codex/config",z),ne("Codex config saved"),await Promise.all([me({preserveBasic:!0,preserveAdvanced:!0}),Pe()])}catch(he){ne(he.message||"Failed","error");const ye=JSON.stringify(Fu(n.value))!==JSON.stringify(z);await Promise.all([me({preserveBasic:ye,preserveAdvanced:!0}),Pe()])}finally{U.value=!1}}async function is(){if(U.value)return;U.value=!0;const z=$u(n.value);try{await K.put("/api/llm/codex/config",z),JSON.stringify({context_budget_overrides:n.value.context_budget_overrides,context_utilization:n.value.context_utilization})===JSON.stringify({context_budget_overrides:z.context_budget_overrides,context_utilization:z.context_utilization})&&(w.value=!1),ne("Codex advanced settings saved"),await Promise.all([me({preserveBasic:!0,preserveAdvanced:!0}),Pe(),Ce()])}catch(he){ne(he.message||"Failed","error");const ye=JSON.stringify($u(n.value))!==JSON.stringify(z);await Promise.all([me({preserveBasic:!0,preserveAdvanced:ye}),Pe(),Ce()])}finally{U.value=!1}}async function Ts(){if(O.value){ls();return}O.value=!0;try{const z=j.value?P.value.api_key:null,he=aw(P.value,{includeApiKey:z!==null});await K.put("/api/llm/ollama/config",he),ne("Ollama config saved"),z!==null&&P.value.api_key===z&&(P.value.api_key="",j.value=!1),await Promise.all([me({preserveBasic:!0,preserveAdvanced:!0}),Ne()])}catch(z){ne(z.message||"Failed","error")}finally{O.value=!1}}async function Ks(){if(!O.value){O.value=!0;try{await K.put("/api/llm/ollama/config",iw(P.value)),ne("Ollama timeout saved"),await Promise.all([me({preserveBasic:!0,preserveAdvanced:!0}),Ne()])}catch(z){ne(z.message||"Failed","error")}finally{O.value=!1}}}async function ln(){if(N.value){rs();return}N.value=!0;try{const z=Q.value?R.value.api_key:null,he=lw(R.value,{includeApiKey:z!==null});await K.put("/api/llm/kimi/config",he),ne("Kimi config saved"),z!==null&&R.value.api_key===z&&(R.value.api_key="",Q.value=!1),await Promise.all([me({preserveBasic:!0,preserveAdvanced:!0}),$s()])}catch(z){ne(z.message||"Failed","error")}finally{N.value=!1}}async function Ws(){if(!N.value){N.value=!0;try{await K.put("/api/llm/kimi/config",rw(R.value)),ne("Kimi timeout saved"),await Promise.all([me({preserveBasic:!0,preserveAdvanced:!0}),$s()])}catch(z){ne(z.message||"Failed","error")}finally{N.value=!1}}}async function Zt(){if(I.value){Et();return}I.value=!0;try{await K.put("/api/llm/auxiliary/config",p.value),ne("Auxiliary config saved"),await me()}catch(z){ne(z.message||"Failed","error"),await me()}finally{I.value=!1}}const Us=kl(Ct),Et=kl(Zt),ls=kl(Ts),rs=kl(ln),at=()=>(Us.cancel(),Ct()),vs=()=>(ls.cancel(),Ts()),q=()=>(rs.cancel(),ln()),re=()=>is(),Ee=()=>Ks(),Ze=()=>Ws();async function lt(z){const he=z.account_key+":"+z.model;g.value=he;try{const ye=await K.post("/api/context/windows/clear",{account_key:z.account_key,model:z.model});ne(ye.cleared?"Temporary clamp cleared":"Clamp was already inactive"),await Ce()}catch(ye){ne(ye.message||"Failed to clear clamp","error"),await Ce()}finally{g.value=null}}async function Nt(z){try{await K.post("/api/codex/account/"+z+"/activate"),ne("Active account switched"),await Pe()}catch(he){ne(he.message||"Failed","error")}}async function Mt(z){L.value=z;try{await K.post("/api/codex/account/"+z+"/refresh"),ne("Token refreshed"),await Pe()}catch(he){ne(he.message||"Refresh failed","error")}finally{L.value=null}}function ha(z,he){$.value=z,ee.value=he||""}async function Cs(z){try{await K.put("/api/codex/account/"+z+"/label",{label:ee.value}),ne("Label updated"),$.value=null,await Pe()}catch(he){ne(he.message||"Failed","error")}}async function ma(z,he){if(await ks({title:"Delete Codex account",message:`Delete ${he||"account #"+(z+1)}? The pool will reload without it.`,confirmLabel:"Delete",danger:!0}))try{await K.del("/api/codex/account/"+z),ne("Deleted. Pool reloaded."),await Pe()}catch(os){ne(os.message||"Failed","error")}}async function si(){X.value=!0;try{const z=await K.post("/api/codex/device-code");ue.value=z,Z.value="pending",ga(z)}catch(z){ne(z.message||"Failed","error")}finally{X.value=!1}}async function ga(z){te={cancelled:!1};const he=te;try{const ye=await K.post("/api/codex/device-poll",{device_auth_id:z.device_auth_id,user_code:z.user_code,interval:z.interval});if(he.cancelled)return;oe.value=ye,Z.value="success",await G()}catch(ye){if(he.cancelled)return;le.value=ye.message||"Device login failed",Z.value="error"}}function va(){te&&(te.cancelled=!0),Z.value=null,ue.value=null}return We(G),xt(()=>{te&&(te.cancelled=!0),Us.cancel(),Et.cancel(),ls.cancel(),rs.cancel()}),{loading:e,llmStatus:t,selectedProvider:s,switching:we,advancedOpen:x,codexForm:n,codexModelOptions:i,codexAgentModelOptions:l,mainMaxAllowed:o,agentMaxAllowed:c,mainModelOptionDisabled:u,agentModelOptionDisabled:f,auxForm:p,auxData:b,auxModelOptions:y,onAuxModelChange:E,savingAux:I,saveAuxConfigDebounced:Et,ollamaForm:P,kimiForm:R,savingCodex:U,savingOllama:O,savingKimi:N,probingOllama:Y,ollamaKeyDirty:j,kimiKeyDirty:Q,ollamaStatus:ke,ollamaModels:ie,ollamaSelectedModel:pe,reloading:F,settingModel:se,kimiStatus:Se,kimiModels:V,kimiSelectedModel:de,reloadingKimi:ce,settingKimiModel:_e,codexLoading:ve,codexError:He,codexData:k,refreshing:L,editingLabel:$,labelValue:ee,contextWindows:m,contextWindowsLoading:_,contextWindowsError:S,contextBudgetRows:C,activeClampRows:M,activeContextBudget:H,clearingClamp:g,contextPolicyDirty:w,deviceState:Z,deviceLoading:X,deviceInfo:ue,deviceResult:oe,deviceError:le,fetchAll:G,switchProvider:Ve,reloadOllama:pt,setOllamaModel:as,reloadKimi:Gs,setKimiModel:Bs,probeOllamaModels:Fs,saveCodexConfig:Ct,saveOllamaConfig:Ts,saveKimiConfig:ln,saveCodexAdvancedConfig:is,saveOllamaAdvancedConfig:Ks,saveKimiAdvancedConfig:Ws,saveCodexConfigDebounced:Us,saveOllamaConfigDebounced:ls,saveKimiConfigDebounced:rs,saveCodexConfigNow:at,saveOllamaConfigNow:vs,saveKimiConfigNow:q,saveCodexAdvancedConfigNow:re,saveOllamaAdvancedConfigNow:Ee,saveKimiAdvancedConfigNow:Ze,activateAccount:Nt,refreshAccount:Mt,startEditLabel:ha,saveLabel:Cs,deleteAccount:ma,startDeviceLogin:si,cancelDeviceLogin:va,formatSize:fe,fetchContextWindows:Ce,clearContextClamp:lt,setContextOverride:Be,setContextUtilization:qe,resetContextOverride:ct,overrideAboveFloor:De,formatCount:be,formatExpiry:Te,shortAccountKey:Ie,provenanceClass:Le}}},Bu={ok:"text-green-400",pass:"text-green-400",degraded:"text-yellow-400",warn:"text-yellow-400",down:"text-red-400",fail:"text-red-400",unconfigured:"text-gray-500",skipped:"text-gray-500"};function cw(e){return Bu[e]||Bu[(e||"").toLowerCase()]||"text-gray-400"}const dw={template:`
@@ -5443,7 +5448,7 @@ var Gm=Object.defineProperty;var Km=(e,t,s)=>t in e?Gm(e,t,{enumerable:!0,config
- `,setup(){const e=h(!0),t=h({}),s=h([]),n=h({}),a=h({}),i=h(null),l=h(null),r=h(null),o=h(null),c=h(null),d=J(()=>{var g;return Object.values(((g=i.value)==null?void 0:g.totals)||{}).reduce((w,T)=>w+Number(T||0),0)}),u=h(""),f=h(0),p=h([]),b=J(()=>p.value.map(g=>`${g.label} (${g.path}${g.reason?`: ${g.reason}`:""})`).join("; ")),y=Object.freeze([{key:"startup",label:"Startup diagnostics",path:"/api/startup/diagnostics"},{key:"subsystems",label:"Subsystem status",path:"/api/subsystems/status"},{key:"sshPool",label:"SSH pool",path:"/api/pools/ssh"},{key:"httpPool",label:"HTTP pool",path:"/api/pools/http"},{key:"riskStats",label:"Risk stats",path:"/api/risk/stats"},{key:"recoveryStats",label:"Recovery stats",path:"/api/recovery/stats"},{key:"compressionStats",label:"Compression stats",path:"/api/compression/stats"},{key:"freshnessStats",label:"Freshness stats",path:"/api/freshness/stats"},{key:"governorStats",label:"Governor stats",path:"/api/governor/stats"}]);let E=null;async function I(){var M;const g=await Promise.allSettled(y.map(H=>K.get(H.path))),w=H=>g[H].status==="fulfilled"?g[H].value:null;t.value=w(0)||{};const T=w(1);s.value=Array.isArray(T)?T:T&&T.subsystems||[],n.value=w(2)||{},a.value=w(3)||{},i.value=w(4),l.value=w(5),r.value=w(6),o.value=w(7),c.value=w(8);const C=g.filter(H=>H.status==="rejected");if(p.value=g.flatMap((H,P)=>{var R;return H.status==="rejected"?[{...y[P],reason:((R=H.reason)==null?void 0:R.message)||"request failed"}]:[]}),f.value=p.value.length,C.length===g.length){const H=(M=C[0])==null?void 0:M.reason;u.value=(H==null?void 0:H.message)||"Failed to load internals"}else u.value="";e.value=!1}function x(){e.value=!0,u.value="",I()}let m=!1;function _(){m||(m=!0,I(),E||(E=setInterval(I,3e4)))}function S(){m&&(m=!1,E&&(clearInterval(E),E=null))}return We(_),Ds(_),Ms(S),xt(S),{loading:e,error:u,failedCount:f,failedEndpoints:p,failedEndpointSummary:b,endpoints:y,retry:x,startup:t,subsystems:s,sshPool:n,httpPool:a,riskStats:i,riskTotal:d,recoveryStats:l,compressionStats:r,freshnessStats:o,governorStats:c,statusColor:cw,formatAgeSeconds:X_}}},uw={setup(){const e=h(""),t=h(""),s=h(!1),n=h(""),a=h(!1),i=h(!1),l=h(!1),r=h(null),o=h(!1);async function c(){a.value=!0,r.value=null,o.value=!1;try{const u=await K.get("/api/update/check");e.value=u.current||"",t.value=u.latest||"",s.value=u.update_available||!1,n.value=u.changelog||"",u.error&&(r.value=u.error),o.value=!0}catch(u){r.value=u.message}finally{a.value=!1}}async function d(){if(await ks({title:"Update & restart",message:"Update Odin and restart? Active tasks will be interrupted.",confirmLabel:"Update & Restart",danger:!0})){i.value=!0,r.value=null;try{await K.post("/api/update/apply",{version:"latest"}),l.value=!0,setTimeout(()=>location.reload(),8e3)}catch(f){r.value=f.message}finally{i.value=!1}}}return We(c),{current:e,latest:t,updateAvailable:s,changelog:n,checking:a,applying:i,applied:l,error:r,checkDone:o,checkUpdate:c,applyUpdate:d}},template:` + `,setup(){const e=h(!0),t=h({}),s=h([]),n=h({}),a=h({}),i=h(null),l=h(null),r=h(null),o=h(null),c=h(null),d=J(()=>{var g;return Object.values(((g=i.value)==null?void 0:g.totals)||{}).reduce((w,T)=>w+Number(T||0),0)}),u=h(""),f=h(0),p=h([]),b=J(()=>p.value.map(g=>`${g.label} (${g.path}${g.reason?`: ${g.reason}`:""})`).join("; ")),y=Object.freeze([{key:"startup",label:"Startup diagnostics",path:"/api/startup/diagnostics"},{key:"subsystems",label:"Subsystem status",path:"/api/subsystems/status"},{key:"sshPool",label:"SSH pool",path:"/api/pools/ssh"},{key:"httpPool",label:"HTTP pool",path:"/api/pools/http"},{key:"riskStats",label:"Risk stats",path:"/api/risk/stats"},{key:"recoveryStats",label:"Recovery stats",path:"/api/recovery/stats"},{key:"compressionStats",label:"Compression stats",path:"/api/compression/stats"},{key:"freshnessStats",label:"Freshness stats",path:"/api/freshness/stats"},{key:"governorStats",label:"Governor stats",path:"/api/governor/stats"}]);let E=null;async function I(){var M;const g=await Promise.allSettled(y.map(H=>K.get(H.path))),w=H=>g[H].status==="fulfilled"?g[H].value:null;t.value=w(0)||{};const T=w(1);s.value=Array.isArray(T)?T:T&&T.subsystems||[],n.value=w(2)||{},a.value=w(3)||{},i.value=w(4),l.value=w(5),r.value=w(6),o.value=w(7),c.value=w(8);const C=g.filter(H=>H.status==="rejected");if(p.value=g.flatMap((H,P)=>{var R;return H.status==="rejected"?[{...y[P],reason:((R=H.reason)==null?void 0:R.message)||"request failed"}]:[]}),f.value=p.value.length,C.length===g.length){const H=(M=C[0])==null?void 0:M.reason;u.value=(H==null?void 0:H.message)||"Failed to load internals"}else u.value="";e.value=!1}function x(){e.value=!0,u.value="",I()}let m=!1;function _(){m||(m=!0,I(),E||(E=setInterval(I,3e4)))}function S(){m&&(m=!1,E&&(clearInterval(E),E=null))}return We(_),Ms(_),Ps(S),xt(S),{loading:e,error:u,failedCount:f,failedEndpoints:p,failedEndpointSummary:b,endpoints:y,retry:x,startup:t,subsystems:s,sshPool:n,httpPool:a,riskStats:i,riskTotal:d,recoveryStats:l,compressionStats:r,freshnessStats:o,governorStats:c,statusColor:cw,formatAgeSeconds:X_}}},uw={setup(){const e=h(""),t=h(""),s=h(!1),n=h(""),a=h(!1),i=h(!1),l=h(!1),r=h(null),o=h(!1);async function c(){a.value=!0,r.value=null,o.value=!1;try{const u=await K.get("/api/update/check");e.value=u.current||"",t.value=u.latest||"",s.value=u.update_available||!1,n.value=u.changelog||"",u.error&&(r.value=u.error),o.value=!0}catch(u){r.value=u.message}finally{a.value=!1}}async function d(){if(await ks({title:"Update & restart",message:"Update Odin and restart? Active tasks will be interrupted.",confirmLabel:"Update & Restart",danger:!0})){i.value=!0,r.value=null;try{await K.post("/api/update/apply",{version:"latest"}),l.value=!0,setTimeout(()=>location.reload(),8e3)}catch(f){r.value=f.message}finally{i.value=!1}}}return We(c),{current:e,latest:t,updateAvailable:s,changelog:n,checking:a,applying:i,applied:l,error:r,checkDone:o,checkUpdate:c,applyUpdate:d}},template:`

Updates

@@ -5711,9 +5716,9 @@ var Gm=Object.defineProperty;var Km=(e,t,s)=>t in e?Gm(e,t,{enumerable:!0,config
`,setup(){const e=h({}),t=h(!0),s=h(null),n=h([]),a=h(!1),i=h([]),l=h(!1),r=h([]),o=h(0),c=h(null),d=h({reload:!1,clearSessions:!1,stopLoops:!1});let u=0;const f=J(()=>{const R=e.value.uptime_seconds||0,j=Math.floor(R/86400),Q=Math.floor(R%86400/3600),U=Math.floor(R%3600/60),O=[];return j>0&&O.push(`${j}d`),Q>0&&O.push(`${Q}h`),(O.length===0||j===0&&Q===0)&&O.push(`${U}m`),O.join(" ")}),p=J(()=>{const R=e.value.uptime_seconds||0;return 125.66*(1-Math.min(R/86400,1))}),b=J(()=>{const R=e.value;return[{label:"Guilds",value:R.guild_count??0,icon:"home",iconColor:"text-blue-400"},{label:"Sessions",value:R.session_count??0,icon:"message",iconColor:"text-yellow-400"},{label:"Tools",value:R.tool_count??0,icon:"wrench",iconColor:"text-purple-400",sub:`${R.skill_count??0} skills`,subColor:"text-gray-500"},{label:"Loops",value:R.loop_count??0,icon:"rotate",iconColor:"text-green-400",color:R.loop_count>0?"text-green-400":"",highlight:R.loop_count>0},{label:"Agents",value:R.agent_running??0,icon:"bot",iconColor:"text-cyan-400",sub:R.agent_count>0?`${R.agent_count} total`:"",subColor:"text-gray-500",highlight:(R.agent_running??0)>0},{label:"Processes",value:R.process_running??0,icon:"sliders",iconColor:"text-orange-400",sub:R.process_count>0?`${R.process_count} total`:"",subColor:"text-gray-500",highlight:(R.process_running??0)>0},{label:"Schedules",value:R.schedule_count??0,icon:"clock",iconColor:"text-amber-400",sub:(R.schedule_failing>0?`${R.schedule_failing} failing`:"")+(R.schedule_failing>0&&R.schedule_paused>0?", ":"")+(R.schedule_paused>0?`${R.schedule_paused} paused`:"")||void 0,subColor:R.schedule_failing>0?"text-red-400":"text-yellow-400",color:R.schedule_failing>0?"text-red-400":"",highlight:R.schedule_failing>0},{label:"Users",value:R.user_count??0,icon:"users",iconColor:"text-indigo-400"},...c.value!==null?[{label:"Knowledge",value:c.value,icon:"book",iconColor:"text-teal-400",sub:"chunks",subColor:"text-gray-500"}]:[]]}),y=J(()=>{const R=e.value,j=[];return j.push({label:"Bot",status:R.status==="online"?"ok":"warn",detail:R.status==="online"?"Online":"Starting"}),(R.schedule_failing||0)>0?j.push({label:"Schedules",status:"error",detail:`${R.schedule_failing} failing`}):(R.schedule_count||0)>0&&j.push({label:"Schedules",status:"ok",detail:`${R.schedule_count} configured`}),(R.loop_count||0)>0&&j.push({label:"Loops",status:"ok",detail:`${R.loop_count} active`}),(R.agent_running||0)>0&&j.push({label:"Agents",status:"ok",detail:`${R.agent_running} running`}),(R.process_running||0)>0&&j.push({label:"Processes",status:"ok",detail:`${R.process_running} running`}),j});async function E(){try{e.value=await K.get("/api/status"),s.value=null}catch(R){s.value=R.message}finally{t.value=!1}}async function I(){a.value=!0;try{n.value=await K.get("/api/audit?limit=10"),o.value=0}catch{}a.value=!1}async function x(){l.value=!0;try{i.value=await K.get("/api/audit?error_only=1&limit=5")}catch{}l.value=!1}async function m(){try{const R=await K.get("/api/knowledge");c.value=(Array.isArray(R)?R:[]).reduce((j,Q)=>j+(Q.chunks||0),0)}catch{c.value=null}}async function _(){try{const R=await K.get("/api/agents");r.value=R.filter(j=>j.status==="running")}catch{}}async function S(){d.value={...d.value,reload:!0};try{await K.post("/api/reload"),Ae.success("Config reloaded")}catch(R){Ae.error(R.message)}d.value={...d.value,reload:!1}}async function g(){if(!await ks({title:"Clear all sessions",message:"Clear all conversation sessions? This cannot be undone.",confirmLabel:"Clear All",danger:!0}))return;d.value={...d.value,clearSessions:!0};const j=e.value.session_count;e.value={...e.value,session_count:0};try{const Q=await K.post("/api/sessions/clear-all");Ae.success(`Cleared ${Q.count} session${Q.count!==1?"s":""}`),await E()}catch(Q){e.value={...e.value,session_count:j},Ae.error(Q.message)}d.value={...d.value,clearSessions:!1}}async function w(){if(!await ks({title:"Stop all loops",message:"Stop all running loops?",confirmLabel:"Stop Loops",danger:!0}))return;d.value={...d.value,stopLoops:!0};const j=e.value.loop_count;e.value={...e.value,loop_count:0};try{const Q=await K.post("/api/loops/stop-all");Ae.success(Q.result),await E()}catch(Q){e.value={...e.value,loop_count:j},Ae.error(Q.message)}d.value={...d.value,stopLoops:!1}}function T(){t.value=!0,s.value=null,E(),I(),x(),_()}let C=null,M=null,H=null;function P(R){if(R.payload&&R.payload.tool_name){const j={...R.payload,_isNew:!0,_key:++u};n.value.unshift(j),n.value.length>10&&n.value.pop(),o.value++,j.error&&(i.value.unshift(j),i.value.length>5&&i.value.pop()),setTimeout(()=>{j._isNew=!1},1500),clearTimeout(H),H=setTimeout(()=>{o.value=0},1e4)}}return We(async()=>{await Promise.all([E(),I(),x(),_(),m()]),C=setInterval(E,15e3),M=setInterval(_,1e4),Ke.subscribe("events",P)}),xt(()=>{C&&clearInterval(C),M&&clearInterval(M),clearTimeout(H),Ke.unsubscribe("events",P)}),{status:e,loading:t,error:s,uptime:f,uptimeRingOffset:p,stats:b,healthIndicators:y,activity:n,activityLoading:a,newEventCount:o,errors:i,errorsLoading:l,agents:r,actionLoading:d,fetchActivity:I,fetchStatus:E,formatTime:hm,formatDuration:Qa,retry:T,reloadConfig:S,clearSessions:g,stopAllLoops:w}}};/*! @license DOMPurify 3.4.9 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.9/LICENSE */function zu(e,t){(t==null||t>e.length)&&(t=e.length);for(var s=0,n=Array(t);s2?n-2:0),i=2;i1?s-1:0),a=1;a"u"?null:Tt(BigInt.prototype.toString),Wu=typeof Symbol>"u"?null:Tt(Symbol.prototype.toString),ht=Tt(Object.prototype.hasOwnProperty),fi=Tt(Object.prototype.toString),Pt=Tt(RegExp.prototype.test),Gn=Lw(TypeError);function Tt(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);for(var s=arguments.length,n=new Array(s>1?s-1:0),a=1;a2&&arguments[2]!==void 0?arguments[2]:yi;if(Vu&&Vu(e,null),!Yt(t))return e;let n=t.length;for(;n--;){let a=t[n];if(typeof a=="string"){const i=s(a);i!==a&&(Tw(t)||(t[n]=i),a=i)}e[a]=!0}return e}function Dw(e){for(let t=0;t/g),Hw=Ls(/\${[\w\W]*/g),zw=Ls(/^data-[\-\w.\u00B7-\uFFFF]+$/),Vw=Ls(/^aria-[\-\w]+$/),Xu=Ls(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),jw=Ls(/^(?:\w+script|data):/i),qw=Ls(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Gw=Ls(/^html$/i),Kw=Ls(/^[a-z][.\w]*(-[.\w]+)+$/i),Ws={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},Ww=function(){return typeof window>"u"?null:window},Zw=function(t,s){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let n=null;const a="data-tt-policy-suffix";s&&s.hasAttribute(a)&&(n=s.getAttribute(a));const i="dompurify"+(n?"#"+n:"");try{return t.createPolicy(i,{createHTML(l){return l},createScriptURL(l){return l}})}catch{return console.warn("TrustedTypes policy "+i+" could not be created."),null}},ef=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function Lm(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Ww();const t=ge=>Lm(ge);if(t.version="3.4.9",t.removed=[],!e||!e.document||e.document.nodeType!==Ws.document||!e.Element)return t.isSupported=!1,t;let s=e.document;const n=s,a=n.currentScript;e.DocumentFragment;const i=e.HTMLTemplateElement,l=e.Node,r=e.Element,o=e.NodeFilter,c=e.NamedNodeMap;c===void 0&&(e.NamedNodeMap||e.MozNamedAttrMap),e.HTMLFormElement;const d=e.DOMParser,u=e.trustedTypes,f=r.prototype,p=Js(f,"cloneNode"),b=Js(f,"remove"),y=Js(f,"nextSibling"),E=Js(f,"childNodes"),I=Js(f,"parentNode"),x=Js(f,"shadowRoot"),m=Js(f,"attributes"),_=l&&l.prototype?Js(l.prototype,"nodeType"):null,S=l&&l.prototype?Js(l.prototype,"nodeName"):null;if(typeof i=="function"){const ge=s.createElement("template");ge.content&&ge.content.ownerDocument&&(s=ge.content.ownerDocument)}let g,w="",T,C=!1,M=0;const H=function(){if(M>0)throw Gn('A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.')},P=function(A){H(),M++;try{return g.createHTML(A)}finally{M--}},R=function(A){H(),M++;try{return g.createScriptURL(A)}finally{M--}},j=function(){return C||(T=Zw(u,a),C=!0),T},Q=s,U=Q.implementation,O=Q.createNodeIterator,N=Q.createDocumentFragment,Y=Q.getElementsByTagName,we=n.importNode;let ke=ef();t.isSupported=typeof Om=="function"&&typeof I=="function"&&U&&U.createHTMLDocument!==void 0;const ie=Bw,pe=Uw,F=Hw,se=zw,Se=Vw,V=jw,de=qw,ce=Kw;let _e=Xu,ve=null;const He=$e({},[...Zu,...co,...uo,...fo,...Ju]);let k=null;const L=$e({},[...Yu,...po,...Qu,...Sl]);let $=Object.seal(Aa(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ee=null,Z=null;const X=Object.seal(Aa(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let ue=!0,oe=!0,le=!1,te=!0,ne=!1,fe=!0,be=!1,Te=!1,Ie=!1,Le=!1,De=!1,Be=!1,qe=!0,ct=!1;const G="user-content-";let me=!0,Ce=!1,Ne={},Pe=null;const Ve=$e({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","selectedcontent","style","svg","template","thead","title","video","xmp"]);let pt=null;const as=$e({},["audio","video","img","source","image","track"]);let Ps=null;const Fs=$e({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),qs="http://www.w3.org/1998/Math/MathML",$s="http://www.w3.org/2000/svg",Ct="http://www.w3.org/1999/xhtml";let is=Ct,Ts=!1,Gs=null;const an=$e({},[qs,$s,Ct],oo);let Ks=$e({},["mi","mo","mn","ms","mtext"]),Zt=$e({},["annotation-xml"]);const Bs=$e({},["title","style","font","a","script"]);let Et=null;const ls=["application/xhtml+xml","text/html"],rs="text/html";let at=null,vs=null;const q=s.createElement("form"),re=function(A){return A instanceof RegExp||A instanceof Function},Ee=function(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(vs&&vs===A)return;(!A||typeof A!="object")&&(A={}),A=Vt(A),Et=ls.indexOf(A.PARSER_MEDIA_TYPE)===-1?rs:A.PARSER_MEDIA_TYPE,at=Et==="application/xhtml+xml"?oo:yi,ve=ht(A,"ALLOWED_TAGS")&&Yt(A.ALLOWED_TAGS)?$e({},A.ALLOWED_TAGS,at):He,k=ht(A,"ALLOWED_ATTR")&&Yt(A.ALLOWED_ATTR)?$e({},A.ALLOWED_ATTR,at):L,Gs=ht(A,"ALLOWED_NAMESPACES")&&Yt(A.ALLOWED_NAMESPACES)?$e({},A.ALLOWED_NAMESPACES,oo):an,Ps=ht(A,"ADD_URI_SAFE_ATTR")&&Yt(A.ADD_URI_SAFE_ATTR)?$e(Vt(Fs),A.ADD_URI_SAFE_ATTR,at):Fs,pt=ht(A,"ADD_DATA_URI_TAGS")&&Yt(A.ADD_DATA_URI_TAGS)?$e(Vt(as),A.ADD_DATA_URI_TAGS,at):as,Pe=ht(A,"FORBID_CONTENTS")&&Yt(A.FORBID_CONTENTS)?$e({},A.FORBID_CONTENTS,at):Ve,ee=ht(A,"FORBID_TAGS")&&Yt(A.FORBID_TAGS)?$e({},A.FORBID_TAGS,at):Vt({}),Z=ht(A,"FORBID_ATTR")&&Yt(A.FORBID_ATTR)?$e({},A.FORBID_ATTR,at):Vt({}),Ne=ht(A,"USE_PROFILES")?A.USE_PROFILES&&typeof A.USE_PROFILES=="object"?Vt(A.USE_PROFILES):A.USE_PROFILES:!1,ue=A.ALLOW_ARIA_ATTR!==!1,oe=A.ALLOW_DATA_ATTR!==!1,le=A.ALLOW_UNKNOWN_PROTOCOLS||!1,te=A.ALLOW_SELF_CLOSE_IN_ATTR!==!1,ne=A.SAFE_FOR_TEMPLATES||!1,fe=A.SAFE_FOR_XML!==!1,be=A.WHOLE_DOCUMENT||!1,Le=A.RETURN_DOM||!1,De=A.RETURN_DOM_FRAGMENT||!1,Be=A.RETURN_TRUSTED_TYPE||!1,Ie=A.FORCE_BODY||!1,qe=A.SANITIZE_DOM!==!1,ct=A.SANITIZE_NAMED_PROPS||!1,me=A.KEEP_CONTENT!==!1,Ce=A.IN_PLACE||!1,_e=Pw(A.ALLOWED_URI_REGEXP)?A.ALLOWED_URI_REGEXP:Xu,is=typeof A.NAMESPACE=="string"?A.NAMESPACE:Ct,Ks=ht(A,"MATHML_TEXT_INTEGRATION_POINTS")&&A.MATHML_TEXT_INTEGRATION_POINTS&&typeof A.MATHML_TEXT_INTEGRATION_POINTS=="object"?Vt(A.MATHML_TEXT_INTEGRATION_POINTS):$e({},["mi","mo","mn","ms","mtext"]),Zt=ht(A,"HTML_INTEGRATION_POINTS")&&A.HTML_INTEGRATION_POINTS&&typeof A.HTML_INTEGRATION_POINTS=="object"?Vt(A.HTML_INTEGRATION_POINTS):$e({},["annotation-xml"]);const W=ht(A,"CUSTOM_ELEMENT_HANDLING")&&A.CUSTOM_ELEMENT_HANDLING&&typeof A.CUSTOM_ELEMENT_HANDLING=="object"?Vt(A.CUSTOM_ELEMENT_HANDLING):Aa(null);if($=Aa(null),ht(W,"tagNameCheck")&&re(W.tagNameCheck)&&($.tagNameCheck=W.tagNameCheck),ht(W,"attributeNameCheck")&&re(W.attributeNameCheck)&&($.attributeNameCheck=W.attributeNameCheck),ht(W,"allowCustomizedBuiltInElements")&&typeof W.allowCustomizedBuiltInElements=="boolean"&&($.allowCustomizedBuiltInElements=W.allowCustomizedBuiltInElements),ne&&(oe=!1),De&&(Le=!0),Ne&&(ve=$e({},Ju),k=Aa(null),Ne.html===!0&&($e(ve,Zu),$e(k,Yu)),Ne.svg===!0&&($e(ve,co),$e(k,po),$e(k,Sl)),Ne.svgFilters===!0&&($e(ve,uo),$e(k,po),$e(k,Sl)),Ne.mathMl===!0&&($e(ve,fo),$e(k,Qu),$e(k,Sl))),X.tagCheck=null,X.attributeCheck=null,ht(A,"ADD_TAGS")&&(typeof A.ADD_TAGS=="function"?X.tagCheck=A.ADD_TAGS:Yt(A.ADD_TAGS)&&(ve===He&&(ve=Vt(ve)),$e(ve,A.ADD_TAGS,at))),ht(A,"ADD_ATTR")&&(typeof A.ADD_ATTR=="function"?X.attributeCheck=A.ADD_ATTR:Yt(A.ADD_ATTR)&&(k===L&&(k=Vt(k)),$e(k,A.ADD_ATTR,at))),ht(A,"ADD_URI_SAFE_ATTR")&&Yt(A.ADD_URI_SAFE_ATTR)&&$e(Ps,A.ADD_URI_SAFE_ATTR,at),ht(A,"FORBID_CONTENTS")&&Yt(A.FORBID_CONTENTS)&&(Pe===Ve&&(Pe=Vt(Pe)),$e(Pe,A.FORBID_CONTENTS,at)),ht(A,"ADD_FORBID_CONTENTS")&&Yt(A.ADD_FORBID_CONTENTS)&&(Pe===Ve&&(Pe=Vt(Pe)),$e(Pe,A.ADD_FORBID_CONTENTS,at)),me&&(ve["#text"]=!0),be&&$e(ve,["html","head","body"]),ve.table&&($e(ve,["tbody"]),delete ee.tbody),A.TRUSTED_TYPES_POLICY){if(typeof A.TRUSTED_TYPES_POLICY.createHTML!="function")throw Gn('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof A.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Gn('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');const v=g;g=A.TRUSTED_TYPES_POLICY;try{w=P("")}catch(D){throw g=v,D}}else A.TRUSTED_TYPES_POLICY===null?(g=void 0,w=""):(g===void 0&&(g=j()),g&&typeof w=="string"&&(w=P("")));(ke.uponSanitizeElement.length>0||ke.uponSanitizeAttribute.length>0)&&ve===He&&(ve=Vt(ve)),ke.uponSanitizeAttribute.length>0&&k===L&&(k=Vt(k)),ns&&ns(A),vs=A},Ze=$e({},[...co,...uo,...Fw]),lt=$e({},[...fo,...$w]),Nt=function(A){let W=I(A);(!W||!W.tagName)&&(W={namespaceURI:is,tagName:"template"});const v=yi(A.tagName),D=yi(W.tagName);return Gs[A.namespaceURI]?A.namespaceURI===$s?W.namespaceURI===Ct?v==="svg":W.namespaceURI===qs?v==="svg"&&(D==="annotation-xml"||Ks[D]):!!Ze[v]:A.namespaceURI===qs?W.namespaceURI===Ct?v==="math":W.namespaceURI===$s?v==="math"&&Zt[D]:!!lt[v]:A.namespaceURI===Ct?W.namespaceURI===$s&&!Zt[D]||W.namespaceURI===qs&&!Ks[D]?!1:!lt[v]&&(Bs[v]||!Ze[v]):!!(Et==="application/xhtml+xml"&&Gs[A.namespaceURI]):!1},Mt=function(A){wa(t.removed,{element:A});try{I(A).removeChild(A)}catch{if(b(A),!I(A))throw Gn("a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place")}},ha=function(A){const W=E?E(A):A.childNodes;if(W){const D=[];dn(W,B=>{wa(D,B)}),dn(D,B=>{try{b(B)}catch{}})}const v=m?m(A):null;if(v)for(let D=v.length-1;D>=0;--D){const B=v[D],ae=B&&B.name;if(typeof ae=="string")try{A.removeAttribute(ae)}catch{}}},Cs=function(A,W){try{wa(t.removed,{attribute:W.getAttributeNode(A),from:W})}catch{wa(t.removed,{attribute:null,from:W})}if(W.removeAttribute(A),A==="is")if(Le||De)try{Mt(W)}catch{}else try{W.setAttribute(A,"")}catch{}},ma=function(A){const W=m?m(A):A.attributes;if(W)for(let v=W.length-1;v>=0;--v){const D=W[v],B=D&&D.name;if(!(typeof B!="string"||k[at(B)]))try{A.removeAttribute(B)}catch{}}},si=function(A){const W=[A];for(;W.length>0;){const v=W.pop();(_?_(v):v.nodeType)===Ws.element&&ma(v);const B=E?E(v):v.childNodes;if(B)for(let ae=B.length-1;ae>=0;--ae)W.push(B[ae])}},ga=function(A){let W=null,v=null;if(Ie)A=""+A;else{const ae=qu(A,/^[\r\n\t ]+/);v=ae&&ae[0]}Et==="application/xhtml+xml"&&is===Ct&&(A=''+A+"");const D=g?P(A):A;if(is===Ct)try{W=new d().parseFromString(D,Et)}catch{}if(!W||!W.documentElement){W=U.createDocument(is,"template",null);try{W.documentElement.innerHTML=Ts?w:D}catch{}}const B=W.body||W.documentElement;return A&&v&&B.insertBefore(s.createTextNode(v),B.childNodes[0]||null),is===Ct?Y.call(W,be?"html":"body")[0]:be?W.documentElement:B},va=function(A){return O.call(A.ownerDocument||A,A,o.SHOW_ELEMENT|o.SHOW_COMMENT|o.SHOW_TEXT|o.SHOW_PROCESSING_INSTRUCTION|o.SHOW_CDATA_SECTION,null)},z=function(A){var W,v;A.normalize();const D=O.call(A.ownerDocument||A,A,o.SHOW_TEXT|o.SHOW_COMMENT|o.SHOW_CDATA_SECTION|o.SHOW_PROCESSING_INSTRUCTION,null);let B=D.nextNode();for(;B;){let Oe=B.data;dn([ie,pe,F],Ue=>{Oe=Sa(Oe,Ue," ")}),B.data=Oe,B=D.nextNode()}const ae=(W=(v=A.querySelectorAll)===null||v===void 0?void 0:v.call(A,"template"))!==null&&W!==void 0?W:[];dn(Array.from(ae),Oe=>{ye(Oe.content)&&z(Oe.content)})},he=function(A){const W=S?S(A):null;return typeof W!="string"||at(W)!=="form"?!1:typeof A.nodeName!="string"||typeof A.textContent!="string"||typeof A.removeChild!="function"||A.attributes!==m(A)||typeof A.removeAttribute!="function"||typeof A.setAttribute!="function"||typeof A.namespaceURI!="string"||typeof A.insertBefore!="function"||typeof A.hasChildNodes!="function"||A.nodeType!==_(A)||A.childNodes!==E(A)},ye=function(A){if(!_||typeof A!="object"||A===null)return!1;try{return _(A)===Ws.documentFragment}catch{return!1}},os=function(A){if(!_||typeof A!="object"||A===null)return!1;try{return typeof _(A)=="number"}catch{return!1}};function cs(ge,A,W){dn(ge,v=>{v.call(t,A,W,vs)})}const ln=function(A){let W=null;if(cs(ke.beforeSanitizeElements,A,null),he(A))return Mt(A),!0;const v=at(S?S(A):A.nodeName);if(cs(ke.uponSanitizeElement,A,{tagName:v,allowedTags:ve}),fe&&A.hasChildNodes()&&!os(A.firstElementChild)&&Pt(/<[/\w!]/g,A.innerHTML)&&Pt(/<[/\w!]/g,A.textContent)||fe&&A.namespaceURI===Ct&&v==="style"&&os(A.firstElementChild)||A.nodeType===Ws.progressingInstruction||fe&&A.nodeType===Ws.comment&&Pt(/<[/\w]/g,A.data))return Mt(A),!0;if(ee[v]||!(X.tagCheck instanceof Function&&X.tagCheck(v))&&!ve[v]){if(!ee[v]&&ni(v)&&($.tagNameCheck instanceof RegExp&&Pt($.tagNameCheck,v)||$.tagNameCheck instanceof Function&&$.tagNameCheck(v)))return!1;if(me&&!Pe[v]){const B=I(A),ae=E(A);if(ae&&B){const Oe=ae.length;for(let Ue=Oe-1;Ue>=0;--Ue){const Xe=Ce?ae[Ue]:p(ae[Ue],!0);B.insertBefore(Xe,y(A))}}}return Mt(A),!0}return(_?_(A):A.nodeType)===Ws.element&&!Nt(A)||(v==="noscript"||v==="noembed"||v==="noframes")&&Pt(/<\/no(script|embed|frames)/i,A.innerHTML)?(Mt(A),!0):(ne&&A.nodeType===Ws.text&&(W=A.textContent,dn([ie,pe,F],B=>{W=Sa(W,B," ")}),A.textContent!==W&&(wa(t.removed,{element:A.cloneNode()}),A.textContent=W)),cs(ke.afterSanitizeElements,A,null),!1)},ll=function(A,W,v){if(Z[W]||qe&&(W==="id"||W==="name")&&(v in s||v in q))return!1;const D=k[W]||X.attributeCheck instanceof Function&&X.attributeCheck(W,A);if(!(oe&&!Z[W]&&Pt(se,W))){if(!(ue&&Pt(Se,W))){if(!D||Z[W]){if(!(ni(A)&&($.tagNameCheck instanceof RegExp&&Pt($.tagNameCheck,A)||$.tagNameCheck instanceof Function&&$.tagNameCheck(A))&&($.attributeNameCheck instanceof RegExp&&Pt($.attributeNameCheck,W)||$.attributeNameCheck instanceof Function&&$.attributeNameCheck(W,A))||W==="is"&&$.allowCustomizedBuiltInElements&&($.tagNameCheck instanceof RegExp&&Pt($.tagNameCheck,v)||$.tagNameCheck instanceof Function&&$.tagNameCheck(v))))return!1}else if(!Ps[W]){if(!Pt(_e,Sa(v,de,""))){if(!((W==="src"||W==="xlink:href"||W==="href")&&A!=="script"&&Gu(v,"data:")===0&&pt[A])){if(!(le&&!Pt(V,Sa(v,de,"")))){if(v)return!1}}}}}}return!0},Br=$e({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),ni=function(A){return!Br[yi(A)]&&Pt(ce,A)},rl=function(A){cs(ke.beforeSanitizeAttributes,A,null);const W=A.attributes;if(!W||he(A))return;const v={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:k,forceKeepAttr:void 0};let D=W.length;for(;D--;){const B=W[D],ae=B.name,Oe=B.namespaceURI,Ue=B.value,Xe=at(ae),Ht=Ue;let vt=ae==="value"?Ht:Iw(Ht);if(v.attrName=Xe,v.attrValue=vt,v.keepAttr=!0,v.forceKeepAttr=void 0,cs(ke.uponSanitizeAttribute,A,v),vt=v.attrValue,ct&&(Xe==="id"||Xe==="name")&&Gu(vt,G)!==0&&(Cs(ae,A),vt=G+vt),fe&&Pt(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,vt)){Cs(ae,A);continue}if(Xe==="attributename"&&qu(vt,"href")){Cs(ae,A);continue}if(v.forceKeepAttr)continue;if(!v.keepAttr){Cs(ae,A);continue}if(!te&&Pt(/\/>/i,vt)){Cs(ae,A);continue}ne&&dn([ie,pe,F],id=>{vt=Sa(vt,id," ")});const ii=at(A.nodeName);if(!ll(ii,Xe,vt)){Cs(ae,A);continue}if(g&&typeof u=="object"&&typeof u.getAttributeType=="function"&&!Oe)switch(u.getAttributeType(ii,Xe)){case"TrustedHTML":{vt=P(vt);break}case"TrustedScriptURL":{vt=R(vt);break}}if(vt!==Ht)try{Oe?A.setAttributeNS(Oe,ae,vt):A.setAttribute(ae,vt),he(A)?Mt(A):ju(t.removed)}catch{Cs(ae,A)}}cs(ke.afterSanitizeAttributes,A,null)},ba=function(A){let W=null;const v=va(A);for(cs(ke.beforeSanitizeShadowDOM,A,null);W=v.nextNode();)if(cs(ke.uponSanitizeShadowNode,W,null),ln(W),rl(W),ye(W.content)&&ba(W.content),(_?_(W):W.nodeType)===Ws.element){const B=x?x(W):W.shadowRoot;ye(B)&&(ai(B),ba(B))}cs(ke.afterSanitizeShadowDOM,A,null)},ai=function(A){const W=[{node:A,shadow:null}];for(;W.length>0;){const v=W.pop();if(v.shadow){ba(v.shadow);continue}const D=v.node,ae=(_?_(D):D.nodeType)===Ws.element,Oe=E?E(D):D.childNodes;if(Oe)for(let Ue=Oe.length-1;Ue>=0;--Ue)W.push({node:Oe[Ue],shadow:null});if(ae){const Ue=S?S(D):null;if(typeof Ue=="string"&&at(Ue)==="template"){const Xe=D.content;ye(Xe)&&W.push({node:Xe,shadow:null})}}if(ae){const Ue=x?x(D):D.shadowRoot;ye(Ue)&&W.push({node:null,shadow:Ue},{node:Ue,shadow:null})}}};return t.sanitize=function(ge){let A=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},W=null,v=null,D=null,B=null;if(Ts=!ge,Ts&&(ge=""),typeof ge!="string"&&!os(ge)&&(ge=Mw(ge),typeof ge!="string"))throw Gn("dirty is not a string, aborting");if(!t.isSupported)return ge;Te||Ee(A),t.removed=[];const ae=Ce&&typeof ge!="string"&&os(ge);if(ae){const Xe=S?S(ge):ge.nodeName;if(typeof Xe=="string"){const Ht=at(Xe);if(!ve[Ht]||ee[Ht])throw Gn("root node is forbidden and cannot be sanitized in-place")}if(he(ge))throw Gn("root node is clobbered and cannot be sanitized in-place");try{ai(ge)}catch(Ht){throw ha(ge),Ht}}else if(os(ge))W=ga(""),v=W.ownerDocument.importNode(ge,!0),v.nodeType===Ws.element&&v.nodeName==="BODY"||v.nodeName==="HTML"?W=v:W.appendChild(v),ai(v);else{if(!Le&&!ne&&!be&&ge.indexOf("<")===-1)return g&&Be?P(ge):ge;if(W=ga(ge),!W)return Le?null:Be?w:""}W&&Ie&&Mt(W.firstChild);const Oe=va(ae?ge:W);try{for(;D=Oe.nextNode();)ln(D),rl(D),ye(D.content)&&ba(D.content)}catch(Xe){throw ae&&ha(ge),Xe}if(ae)return dn(t.removed,Xe=>{Xe.element&&si(Xe.element)}),ne&&z(ge),ge;if(Le){if(ne&&z(W),De)for(B=N.call(W.ownerDocument);W.firstChild;)B.appendChild(W.firstChild);else B=W;return(k.shadowroot||k.shadowrootmode)&&(B=we.call(n,B,!0)),B}let Ue=be?W.outerHTML:W.innerHTML;return be&&ve["!doctype"]&&W.ownerDocument&&W.ownerDocument.doctype&&W.ownerDocument.doctype.name&&Pt(Gw,W.ownerDocument.doctype.name)&&(Ue=" +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function ww(e,t){return xw(e)||_w(e,t)||Sw(e,t)||kw()}function Sw(e,t){if(e){if(typeof e=="string")return zu(e,t);var s={}.toString.call(e).slice(8,-1);return s==="Object"&&e.constructor&&(s=e.constructor.name),s==="Map"||s==="Set"?Array.from(e):s==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(s)?zu(e,t):void 0}}const Om=Object.entries,Vu=Object.setPrototypeOf,Tw=Object.isFrozen,Cw=Object.getPrototypeOf,Ew=Object.getOwnPropertyDescriptor;let ns=Object.freeze,Ds=Object.seal,Aa=Object.create,Nm=typeof Reflect<"u"&&Reflect,qo=Nm.apply,Go=Nm.construct;ns||(ns=function(t){return t});Ds||(Ds=function(t){return t});qo||(qo=function(t,s){for(var n=arguments.length,a=new Array(n>2?n-2:0),i=2;i1?s-1:0),a=1;a"u"?null:Tt(BigInt.prototype.toString),Wu=typeof Symbol>"u"?null:Tt(Symbol.prototype.toString),ht=Tt(Object.prototype.hasOwnProperty),fi=Tt(Object.prototype.toString),Pt=Tt(RegExp.prototype.test),Gn=Lw(TypeError);function Tt(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);for(var s=arguments.length,n=new Array(s>1?s-1:0),a=1;a2&&arguments[2]!==void 0?arguments[2]:yi;if(Vu&&Vu(e,null),!Yt(t))return e;let n=t.length;for(;n--;){let a=t[n];if(typeof a=="string"){const i=s(a);i!==a&&(Tw(t)||(t[n]=i),a=i)}e[a]=!0}return e}function Dw(e){for(let t=0;t/g),Hw=Ds(/\${[\w\W]*/g),zw=Ds(/^data-[\-\w.\u00B7-\uFFFF]+$/),Vw=Ds(/^aria-[\-\w]+$/),Xu=Ds(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),jw=Ds(/^(?:\w+script|data):/i),qw=Ds(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Gw=Ds(/^html$/i),Kw=Ds(/^[a-z][.\w]*(-[.\w]+)+$/i),Zs={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},Ww=function(){return typeof window>"u"?null:window},Zw=function(t,s){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let n=null;const a="data-tt-policy-suffix";s&&s.hasAttribute(a)&&(n=s.getAttribute(a));const i="dompurify"+(n?"#"+n:"");try{return t.createPolicy(i,{createHTML(l){return l},createScriptURL(l){return l}})}catch{return console.warn("TrustedTypes policy "+i+" could not be created."),null}},ef=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function Lm(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Ww();const t=ge=>Lm(ge);if(t.version="3.4.9",t.removed=[],!e||!e.document||e.document.nodeType!==Zs.document||!e.Element)return t.isSupported=!1,t;let s=e.document;const n=s,a=n.currentScript;e.DocumentFragment;const i=e.HTMLTemplateElement,l=e.Node,r=e.Element,o=e.NodeFilter,c=e.NamedNodeMap;c===void 0&&(e.NamedNodeMap||e.MozNamedAttrMap),e.HTMLFormElement;const d=e.DOMParser,u=e.trustedTypes,f=r.prototype,p=Ys(f,"cloneNode"),b=Ys(f,"remove"),y=Ys(f,"nextSibling"),E=Ys(f,"childNodes"),I=Ys(f,"parentNode"),x=Ys(f,"shadowRoot"),m=Ys(f,"attributes"),_=l&&l.prototype?Ys(l.prototype,"nodeType"):null,S=l&&l.prototype?Ys(l.prototype,"nodeName"):null;if(typeof i=="function"){const ge=s.createElement("template");ge.content&&ge.content.ownerDocument&&(s=ge.content.ownerDocument)}let g,w="",T,C=!1,M=0;const H=function(){if(M>0)throw Gn('A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.')},P=function(A){H(),M++;try{return g.createHTML(A)}finally{M--}},R=function(A){H(),M++;try{return g.createScriptURL(A)}finally{M--}},j=function(){return C||(T=Zw(u,a),C=!0),T},Q=s,U=Q.implementation,O=Q.createNodeIterator,N=Q.createDocumentFragment,Y=Q.getElementsByTagName,we=n.importNode;let ke=ef();t.isSupported=typeof Om=="function"&&typeof I=="function"&&U&&U.createHTMLDocument!==void 0;const ie=Bw,pe=Uw,F=Hw,se=zw,Se=Vw,V=jw,de=qw,ce=Kw;let _e=Xu,ve=null;const He=$e({},[...Zu,...co,...uo,...fo,...Ju]);let k=null;const L=$e({},[...Yu,...po,...Qu,...Sl]);let $=Object.seal(Aa(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ee=null,Z=null;const X=Object.seal(Aa(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let ue=!0,oe=!0,le=!1,te=!0,ne=!1,fe=!0,be=!1,Te=!1,Ie=!1,Le=!1,De=!1,Be=!1,qe=!0,ct=!1;const G="user-content-";let me=!0,Ce=!1,Ne={},Pe=null;const Ve=$e({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","selectedcontent","style","svg","template","thead","title","video","xmp"]);let pt=null;const as=$e({},["audio","video","img","source","image","track"]);let Fs=null;const $s=$e({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Gs="http://www.w3.org/1998/Math/MathML",Bs="http://www.w3.org/2000/svg",Ct="http://www.w3.org/1999/xhtml";let is=Ct,Ts=!1,Ks=null;const ln=$e({},[Gs,Bs,Ct],oo);let Ws=$e({},["mi","mo","mn","ms","mtext"]),Zt=$e({},["annotation-xml"]);const Us=$e({},["title","style","font","a","script"]);let Et=null;const ls=["application/xhtml+xml","text/html"],rs="text/html";let at=null,vs=null;const q=s.createElement("form"),re=function(A){return A instanceof RegExp||A instanceof Function},Ee=function(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(vs&&vs===A)return;(!A||typeof A!="object")&&(A={}),A=Vt(A),Et=ls.indexOf(A.PARSER_MEDIA_TYPE)===-1?rs:A.PARSER_MEDIA_TYPE,at=Et==="application/xhtml+xml"?oo:yi,ve=ht(A,"ALLOWED_TAGS")&&Yt(A.ALLOWED_TAGS)?$e({},A.ALLOWED_TAGS,at):He,k=ht(A,"ALLOWED_ATTR")&&Yt(A.ALLOWED_ATTR)?$e({},A.ALLOWED_ATTR,at):L,Ks=ht(A,"ALLOWED_NAMESPACES")&&Yt(A.ALLOWED_NAMESPACES)?$e({},A.ALLOWED_NAMESPACES,oo):ln,Fs=ht(A,"ADD_URI_SAFE_ATTR")&&Yt(A.ADD_URI_SAFE_ATTR)?$e(Vt($s),A.ADD_URI_SAFE_ATTR,at):$s,pt=ht(A,"ADD_DATA_URI_TAGS")&&Yt(A.ADD_DATA_URI_TAGS)?$e(Vt(as),A.ADD_DATA_URI_TAGS,at):as,Pe=ht(A,"FORBID_CONTENTS")&&Yt(A.FORBID_CONTENTS)?$e({},A.FORBID_CONTENTS,at):Ve,ee=ht(A,"FORBID_TAGS")&&Yt(A.FORBID_TAGS)?$e({},A.FORBID_TAGS,at):Vt({}),Z=ht(A,"FORBID_ATTR")&&Yt(A.FORBID_ATTR)?$e({},A.FORBID_ATTR,at):Vt({}),Ne=ht(A,"USE_PROFILES")?A.USE_PROFILES&&typeof A.USE_PROFILES=="object"?Vt(A.USE_PROFILES):A.USE_PROFILES:!1,ue=A.ALLOW_ARIA_ATTR!==!1,oe=A.ALLOW_DATA_ATTR!==!1,le=A.ALLOW_UNKNOWN_PROTOCOLS||!1,te=A.ALLOW_SELF_CLOSE_IN_ATTR!==!1,ne=A.SAFE_FOR_TEMPLATES||!1,fe=A.SAFE_FOR_XML!==!1,be=A.WHOLE_DOCUMENT||!1,Le=A.RETURN_DOM||!1,De=A.RETURN_DOM_FRAGMENT||!1,Be=A.RETURN_TRUSTED_TYPE||!1,Ie=A.FORCE_BODY||!1,qe=A.SANITIZE_DOM!==!1,ct=A.SANITIZE_NAMED_PROPS||!1,me=A.KEEP_CONTENT!==!1,Ce=A.IN_PLACE||!1,_e=Pw(A.ALLOWED_URI_REGEXP)?A.ALLOWED_URI_REGEXP:Xu,is=typeof A.NAMESPACE=="string"?A.NAMESPACE:Ct,Ws=ht(A,"MATHML_TEXT_INTEGRATION_POINTS")&&A.MATHML_TEXT_INTEGRATION_POINTS&&typeof A.MATHML_TEXT_INTEGRATION_POINTS=="object"?Vt(A.MATHML_TEXT_INTEGRATION_POINTS):$e({},["mi","mo","mn","ms","mtext"]),Zt=ht(A,"HTML_INTEGRATION_POINTS")&&A.HTML_INTEGRATION_POINTS&&typeof A.HTML_INTEGRATION_POINTS=="object"?Vt(A.HTML_INTEGRATION_POINTS):$e({},["annotation-xml"]);const W=ht(A,"CUSTOM_ELEMENT_HANDLING")&&A.CUSTOM_ELEMENT_HANDLING&&typeof A.CUSTOM_ELEMENT_HANDLING=="object"?Vt(A.CUSTOM_ELEMENT_HANDLING):Aa(null);if($=Aa(null),ht(W,"tagNameCheck")&&re(W.tagNameCheck)&&($.tagNameCheck=W.tagNameCheck),ht(W,"attributeNameCheck")&&re(W.attributeNameCheck)&&($.attributeNameCheck=W.attributeNameCheck),ht(W,"allowCustomizedBuiltInElements")&&typeof W.allowCustomizedBuiltInElements=="boolean"&&($.allowCustomizedBuiltInElements=W.allowCustomizedBuiltInElements),ne&&(oe=!1),De&&(Le=!0),Ne&&(ve=$e({},Ju),k=Aa(null),Ne.html===!0&&($e(ve,Zu),$e(k,Yu)),Ne.svg===!0&&($e(ve,co),$e(k,po),$e(k,Sl)),Ne.svgFilters===!0&&($e(ve,uo),$e(k,po),$e(k,Sl)),Ne.mathMl===!0&&($e(ve,fo),$e(k,Qu),$e(k,Sl))),X.tagCheck=null,X.attributeCheck=null,ht(A,"ADD_TAGS")&&(typeof A.ADD_TAGS=="function"?X.tagCheck=A.ADD_TAGS:Yt(A.ADD_TAGS)&&(ve===He&&(ve=Vt(ve)),$e(ve,A.ADD_TAGS,at))),ht(A,"ADD_ATTR")&&(typeof A.ADD_ATTR=="function"?X.attributeCheck=A.ADD_ATTR:Yt(A.ADD_ATTR)&&(k===L&&(k=Vt(k)),$e(k,A.ADD_ATTR,at))),ht(A,"ADD_URI_SAFE_ATTR")&&Yt(A.ADD_URI_SAFE_ATTR)&&$e(Fs,A.ADD_URI_SAFE_ATTR,at),ht(A,"FORBID_CONTENTS")&&Yt(A.FORBID_CONTENTS)&&(Pe===Ve&&(Pe=Vt(Pe)),$e(Pe,A.FORBID_CONTENTS,at)),ht(A,"ADD_FORBID_CONTENTS")&&Yt(A.ADD_FORBID_CONTENTS)&&(Pe===Ve&&(Pe=Vt(Pe)),$e(Pe,A.ADD_FORBID_CONTENTS,at)),me&&(ve["#text"]=!0),be&&$e(ve,["html","head","body"]),ve.table&&($e(ve,["tbody"]),delete ee.tbody),A.TRUSTED_TYPES_POLICY){if(typeof A.TRUSTED_TYPES_POLICY.createHTML!="function")throw Gn('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof A.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Gn('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');const v=g;g=A.TRUSTED_TYPES_POLICY;try{w=P("")}catch(D){throw g=v,D}}else A.TRUSTED_TYPES_POLICY===null?(g=void 0,w=""):(g===void 0&&(g=j()),g&&typeof w=="string"&&(w=P("")));(ke.uponSanitizeElement.length>0||ke.uponSanitizeAttribute.length>0)&&ve===He&&(ve=Vt(ve)),ke.uponSanitizeAttribute.length>0&&k===L&&(k=Vt(k)),ns&&ns(A),vs=A},Ze=$e({},[...co,...uo,...Fw]),lt=$e({},[...fo,...$w]),Nt=function(A){let W=I(A);(!W||!W.tagName)&&(W={namespaceURI:is,tagName:"template"});const v=yi(A.tagName),D=yi(W.tagName);return Ks[A.namespaceURI]?A.namespaceURI===Bs?W.namespaceURI===Ct?v==="svg":W.namespaceURI===Gs?v==="svg"&&(D==="annotation-xml"||Ws[D]):!!Ze[v]:A.namespaceURI===Gs?W.namespaceURI===Ct?v==="math":W.namespaceURI===Bs?v==="math"&&Zt[D]:!!lt[v]:A.namespaceURI===Ct?W.namespaceURI===Bs&&!Zt[D]||W.namespaceURI===Gs&&!Ws[D]?!1:!lt[v]&&(Us[v]||!Ze[v]):!!(Et==="application/xhtml+xml"&&Ks[A.namespaceURI]):!1},Mt=function(A){wa(t.removed,{element:A});try{I(A).removeChild(A)}catch{if(b(A),!I(A))throw Gn("a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place")}},ha=function(A){const W=E?E(A):A.childNodes;if(W){const D=[];dn(W,B=>{wa(D,B)}),dn(D,B=>{try{b(B)}catch{}})}const v=m?m(A):null;if(v)for(let D=v.length-1;D>=0;--D){const B=v[D],ae=B&&B.name;if(typeof ae=="string")try{A.removeAttribute(ae)}catch{}}},Cs=function(A,W){try{wa(t.removed,{attribute:W.getAttributeNode(A),from:W})}catch{wa(t.removed,{attribute:null,from:W})}if(W.removeAttribute(A),A==="is")if(Le||De)try{Mt(W)}catch{}else try{W.setAttribute(A,"")}catch{}},ma=function(A){const W=m?m(A):A.attributes;if(W)for(let v=W.length-1;v>=0;--v){const D=W[v],B=D&&D.name;if(!(typeof B!="string"||k[at(B)]))try{A.removeAttribute(B)}catch{}}},si=function(A){const W=[A];for(;W.length>0;){const v=W.pop();(_?_(v):v.nodeType)===Zs.element&&ma(v);const B=E?E(v):v.childNodes;if(B)for(let ae=B.length-1;ae>=0;--ae)W.push(B[ae])}},ga=function(A){let W=null,v=null;if(Ie)A=""+A;else{const ae=qu(A,/^[\r\n\t ]+/);v=ae&&ae[0]}Et==="application/xhtml+xml"&&is===Ct&&(A=''+A+"");const D=g?P(A):A;if(is===Ct)try{W=new d().parseFromString(D,Et)}catch{}if(!W||!W.documentElement){W=U.createDocument(is,"template",null);try{W.documentElement.innerHTML=Ts?w:D}catch{}}const B=W.body||W.documentElement;return A&&v&&B.insertBefore(s.createTextNode(v),B.childNodes[0]||null),is===Ct?Y.call(W,be?"html":"body")[0]:be?W.documentElement:B},va=function(A){return O.call(A.ownerDocument||A,A,o.SHOW_ELEMENT|o.SHOW_COMMENT|o.SHOW_TEXT|o.SHOW_PROCESSING_INSTRUCTION|o.SHOW_CDATA_SECTION,null)},z=function(A){var W,v;A.normalize();const D=O.call(A.ownerDocument||A,A,o.SHOW_TEXT|o.SHOW_COMMENT|o.SHOW_CDATA_SECTION|o.SHOW_PROCESSING_INSTRUCTION,null);let B=D.nextNode();for(;B;){let Oe=B.data;dn([ie,pe,F],Ue=>{Oe=Sa(Oe,Ue," ")}),B.data=Oe,B=D.nextNode()}const ae=(W=(v=A.querySelectorAll)===null||v===void 0?void 0:v.call(A,"template"))!==null&&W!==void 0?W:[];dn(Array.from(ae),Oe=>{ye(Oe.content)&&z(Oe.content)})},he=function(A){const W=S?S(A):null;return typeof W!="string"||at(W)!=="form"?!1:typeof A.nodeName!="string"||typeof A.textContent!="string"||typeof A.removeChild!="function"||A.attributes!==m(A)||typeof A.removeAttribute!="function"||typeof A.setAttribute!="function"||typeof A.namespaceURI!="string"||typeof A.insertBefore!="function"||typeof A.hasChildNodes!="function"||A.nodeType!==_(A)||A.childNodes!==E(A)},ye=function(A){if(!_||typeof A!="object"||A===null)return!1;try{return _(A)===Zs.documentFragment}catch{return!1}},os=function(A){if(!_||typeof A!="object"||A===null)return!1;try{return typeof _(A)=="number"}catch{return!1}};function cs(ge,A,W){dn(ge,v=>{v.call(t,A,W,vs)})}const Es=function(A){let W=null;if(cs(ke.beforeSanitizeElements,A,null),he(A))return Mt(A),!0;const v=at(S?S(A):A.nodeName);if(cs(ke.uponSanitizeElement,A,{tagName:v,allowedTags:ve}),fe&&A.hasChildNodes()&&!os(A.firstElementChild)&&Pt(/<[/\w!]/g,A.innerHTML)&&Pt(/<[/\w!]/g,A.textContent)||fe&&A.namespaceURI===Ct&&v==="style"&&os(A.firstElementChild)||A.nodeType===Zs.progressingInstruction||fe&&A.nodeType===Zs.comment&&Pt(/<[/\w]/g,A.data))return Mt(A),!0;if(ee[v]||!(X.tagCheck instanceof Function&&X.tagCheck(v))&&!ve[v]){if(!ee[v]&&ni(v)&&($.tagNameCheck instanceof RegExp&&Pt($.tagNameCheck,v)||$.tagNameCheck instanceof Function&&$.tagNameCheck(v)))return!1;if(me&&!Pe[v]){const B=I(A),ae=E(A);if(ae&&B){const Oe=ae.length;for(let Ue=Oe-1;Ue>=0;--Ue){const Xe=Ce?ae[Ue]:p(ae[Ue],!0);B.insertBefore(Xe,y(A))}}}return Mt(A),!0}return(_?_(A):A.nodeType)===Zs.element&&!Nt(A)||(v==="noscript"||v==="noembed"||v==="noframes")&&Pt(/<\/no(script|embed|frames)/i,A.innerHTML)?(Mt(A),!0):(ne&&A.nodeType===Zs.text&&(W=A.textContent,dn([ie,pe,F],B=>{W=Sa(W,B," ")}),A.textContent!==W&&(wa(t.removed,{element:A.cloneNode()}),A.textContent=W)),cs(ke.afterSanitizeElements,A,null),!1)},ll=function(A,W,v){if(Z[W]||qe&&(W==="id"||W==="name")&&(v in s||v in q))return!1;const D=k[W]||X.attributeCheck instanceof Function&&X.attributeCheck(W,A);if(!(oe&&!Z[W]&&Pt(se,W))){if(!(ue&&Pt(Se,W))){if(!D||Z[W]){if(!(ni(A)&&($.tagNameCheck instanceof RegExp&&Pt($.tagNameCheck,A)||$.tagNameCheck instanceof Function&&$.tagNameCheck(A))&&($.attributeNameCheck instanceof RegExp&&Pt($.attributeNameCheck,W)||$.attributeNameCheck instanceof Function&&$.attributeNameCheck(W,A))||W==="is"&&$.allowCustomizedBuiltInElements&&($.tagNameCheck instanceof RegExp&&Pt($.tagNameCheck,v)||$.tagNameCheck instanceof Function&&$.tagNameCheck(v))))return!1}else if(!Fs[W]){if(!Pt(_e,Sa(v,de,""))){if(!((W==="src"||W==="xlink:href"||W==="href")&&A!=="script"&&Gu(v,"data:")===0&&pt[A])){if(!(le&&!Pt(V,Sa(v,de,"")))){if(v)return!1}}}}}}return!0},Br=$e({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),ni=function(A){return!Br[yi(A)]&&Pt(ce,A)},rl=function(A){cs(ke.beforeSanitizeAttributes,A,null);const W=A.attributes;if(!W||he(A))return;const v={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:k,forceKeepAttr:void 0};let D=W.length;for(;D--;){const B=W[D],ae=B.name,Oe=B.namespaceURI,Ue=B.value,Xe=at(ae),Ht=Ue;let vt=ae==="value"?Ht:Iw(Ht);if(v.attrName=Xe,v.attrValue=vt,v.keepAttr=!0,v.forceKeepAttr=void 0,cs(ke.uponSanitizeAttribute,A,v),vt=v.attrValue,ct&&(Xe==="id"||Xe==="name")&&Gu(vt,G)!==0&&(Cs(ae,A),vt=G+vt),fe&&Pt(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,vt)){Cs(ae,A);continue}if(Xe==="attributename"&&qu(vt,"href")){Cs(ae,A);continue}if(v.forceKeepAttr)continue;if(!v.keepAttr){Cs(ae,A);continue}if(!te&&Pt(/\/>/i,vt)){Cs(ae,A);continue}ne&&dn([ie,pe,F],id=>{vt=Sa(vt,id," ")});const ii=at(A.nodeName);if(!ll(ii,Xe,vt)){Cs(ae,A);continue}if(g&&typeof u=="object"&&typeof u.getAttributeType=="function"&&!Oe)switch(u.getAttributeType(ii,Xe)){case"TrustedHTML":{vt=P(vt);break}case"TrustedScriptURL":{vt=R(vt);break}}if(vt!==Ht)try{Oe?A.setAttributeNS(Oe,ae,vt):A.setAttribute(ae,vt),he(A)?Mt(A):ju(t.removed)}catch{Cs(ae,A)}}cs(ke.afterSanitizeAttributes,A,null)},ba=function(A){let W=null;const v=va(A);for(cs(ke.beforeSanitizeShadowDOM,A,null);W=v.nextNode();)if(cs(ke.uponSanitizeShadowNode,W,null),Es(W),rl(W),ye(W.content)&&ba(W.content),(_?_(W):W.nodeType)===Zs.element){const B=x?x(W):W.shadowRoot;ye(B)&&(ai(B),ba(B))}cs(ke.afterSanitizeShadowDOM,A,null)},ai=function(A){const W=[{node:A,shadow:null}];for(;W.length>0;){const v=W.pop();if(v.shadow){ba(v.shadow);continue}const D=v.node,ae=(_?_(D):D.nodeType)===Zs.element,Oe=E?E(D):D.childNodes;if(Oe)for(let Ue=Oe.length-1;Ue>=0;--Ue)W.push({node:Oe[Ue],shadow:null});if(ae){const Ue=S?S(D):null;if(typeof Ue=="string"&&at(Ue)==="template"){const Xe=D.content;ye(Xe)&&W.push({node:Xe,shadow:null})}}if(ae){const Ue=x?x(D):D.shadowRoot;ye(Ue)&&W.push({node:null,shadow:Ue},{node:Ue,shadow:null})}}};return t.sanitize=function(ge){let A=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},W=null,v=null,D=null,B=null;if(Ts=!ge,Ts&&(ge=""),typeof ge!="string"&&!os(ge)&&(ge=Mw(ge),typeof ge!="string"))throw Gn("dirty is not a string, aborting");if(!t.isSupported)return ge;Te||Ee(A),t.removed=[];const ae=Ce&&typeof ge!="string"&&os(ge);if(ae){const Xe=S?S(ge):ge.nodeName;if(typeof Xe=="string"){const Ht=at(Xe);if(!ve[Ht]||ee[Ht])throw Gn("root node is forbidden and cannot be sanitized in-place")}if(he(ge))throw Gn("root node is clobbered and cannot be sanitized in-place");try{ai(ge)}catch(Ht){throw ha(ge),Ht}}else if(os(ge))W=ga(""),v=W.ownerDocument.importNode(ge,!0),v.nodeType===Zs.element&&v.nodeName==="BODY"||v.nodeName==="HTML"?W=v:W.appendChild(v),ai(v);else{if(!Le&&!ne&&!be&&ge.indexOf("<")===-1)return g&&Be?P(ge):ge;if(W=ga(ge),!W)return Le?null:Be?w:""}W&&Ie&&Mt(W.firstChild);const Oe=va(ae?ge:W);try{for(;D=Oe.nextNode();)Es(D),rl(D),ye(D.content)&&ba(D.content)}catch(Xe){throw ae&&ha(ge),Xe}if(ae)return dn(t.removed,Xe=>{Xe.element&&si(Xe.element)}),ne&&z(ge),ge;if(Le){if(ne&&z(W),De)for(B=N.call(W.ownerDocument);W.firstChild;)B.appendChild(W.firstChild);else B=W;return(k.shadowroot||k.shadowrootmode)&&(B=we.call(n,B,!0)),B}let Ue=be?W.outerHTML:W.innerHTML;return be&&ve["!doctype"]&&W.ownerDocument&&W.ownerDocument.doctype&&W.ownerDocument.doctype.name&&Pt(Gw,W.ownerDocument.doctype.name)&&(Ue=" `+Ue),ne&&dn([ie,pe,F],Xe=>{Ue=Sa(Ue,Xe," ")}),g&&Be?P(Ue):Ue},t.setConfig=function(){let ge=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Ee(ge),Te=!0},t.clearConfig=function(){vs=null,Te=!1,g=T,w=""},t.isValidAttribute=function(ge,A,W){vs||Ee({});const v=at(ge),D=at(A);return ll(v,D,W)},t.addHook=function(ge,A){typeof A=="function"&&wa(ke[ge],A)},t.removeHook=function(ge,A){if(A!==void 0){const W=Aw(ke[ge],A);return W===-1?void 0:Rw(ke[ge],W,1)[0]}return ju(ke[ge])},t.removeHooks=function(ge){ke[ge]=[]},t.removeAllHooks=function(){ke=ef()},t}var tf=Lm();function Jc(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var pa=Jc();function Dm(e){pa=e}var Ri={exec:()=>null};function nt(e,t=""){let s=typeof e=="string"?e:e.source;const n={replace:(a,i)=>{let l=typeof i=="string"?i:i.source;return l=l.replace(es.caret,"$1"),s=s.replace(a,l),n},getRegex:()=>new RegExp(s,t)};return n}var es={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>new RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}#`),htmlBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,"i")},Jw=/^(?:[ \t]*(?:\n|$))+/,Yw=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,Qw=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,il=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,Xw=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Yc=/(?:[*+-]|\d{1,9}[.)])/,Mm=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,Pm=nt(Mm).replace(/bull/g,Yc).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),eS=nt(Mm).replace(/bull/g,Yc).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),Qc=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,tS=/^[^\n]+/,Xc=/(?!\s*\])(?:\\.|[^\[\]\\])+/,sS=nt(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",Xc).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),nS=nt(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,Yc).getRegex(),Fr="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",ed=/|$))/,aS=nt("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",ed).replace("tag",Fr).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Fm=nt(Qc).replace("hr",il).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Fr).getRegex(),iS=nt(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",Fm).getRegex(),td={blockquote:iS,code:Yw,def:sS,fences:Qw,heading:Xw,hr:il,html:aS,lheading:Pm,list:nS,newline:Jw,paragraph:Fm,table:Ri,text:tS},sf=nt("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",il).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Fr).getRegex(),lS={...td,lheading:eS,table:sf,paragraph:nt(Qc).replace("hr",il).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",sf).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Fr).getRegex()},rS={...td,html:nt(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",ed).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Ri,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:nt(Qc).replace("hr",il).replace("heading",` *#{1,6} *[^ -]`).replace("lheading",Pm).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},oS=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,cS=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,$m=/^( {2,}|\\)\n(?!\s*$)/,dS=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\]*?>/g,Hm=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,mS=nt(Hm,"u").replace(/punct/g,$r).getRegex(),gS=nt(Hm,"u").replace(/punct/g,Um).getRegex(),zm="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",vS=nt(zm,"gu").replace(/notPunctSpace/g,Bm).replace(/punctSpace/g,sd).replace(/punct/g,$r).getRegex(),bS=nt(zm,"gu").replace(/notPunctSpace/g,pS).replace(/punctSpace/g,fS).replace(/punct/g,Um).getRegex(),yS=nt("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,Bm).replace(/punctSpace/g,sd).replace(/punct/g,$r).getRegex(),xS=nt(/\\(punct)/,"gu").replace(/punct/g,$r).getRegex(),_S=nt(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),kS=nt(ed).replace("(?:-->|$)","-->").getRegex(),wS=nt("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",kS).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),lr=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,SS=nt(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",lr).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Vm=nt(/^!?\[(label)\]\[(ref)\]/).replace("label",lr).replace("ref",Xc).getRegex(),jm=nt(/^!?\[(ref)\](?:\[\])?/).replace("ref",Xc).getRegex(),TS=nt("reflink|nolink(?!\\()","g").replace("reflink",Vm).replace("nolink",jm).getRegex(),nd={_backpedal:Ri,anyPunctuation:xS,autolink:_S,blockSkip:hS,br:$m,code:cS,del:Ri,emStrongLDelim:mS,emStrongRDelimAst:vS,emStrongRDelimUnd:yS,escape:oS,link:SS,nolink:jm,punctuation:uS,reflink:Vm,reflinkSearch:TS,tag:wS,text:dS,url:Ri},CS={...nd,link:nt(/^!?\[(label)\]\((.*?)\)/).replace("label",lr).getRegex(),reflink:nt(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",lr).getRegex()},Ko={...nd,emStrongRDelimAst:bS,emStrongLDelim:gS,url:nt(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\.|[^\\])*?(?:\\.|[^\s~\\]))\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},nf=e=>AS[e];function Ys(e,t){if(t){if(es.escapeTest.test(e))return e.replace(es.escapeReplace,nf)}else if(es.escapeTestNoEncode.test(e))return e.replace(es.escapeReplaceNoEncode,nf);return e}function af(e){try{e=encodeURI(e).replace(es.percentDecode,"%")}catch{return null}return e}function lf(e,t){var i;const s=e.replace(es.findPipe,(l,r,o)=>{let c=!1,d=r;for(;--d>=0&&o[d]==="\\";)c=!c;return c?"|":" |"}),n=s.split(es.splitPipe);let a=0;if(n[0].trim()||n.shift(),n.length>0&&!((i=n.at(-1))!=null&&i.trim())&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length0?-2:-1}function rf(e,t,s,n,a){const i=t.href,l=t.title||null,r=e[1].replace(a.other.outputLinkReplace,"$1");n.state.inLink=!0;const o={type:e[0].charAt(0)==="!"?"image":"link",raw:s,href:i,title:l,text:r,tokens:n.inlineTokens(r)};return n.state.inLink=!1,o}function IS(e,t,s){const n=e.match(s.other.indentCodeCompensation);if(n===null)return t;const a=n[1];return t.split(` +]`).replace("lheading",Pm).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},oS=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,cS=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,$m=/^( {2,}|\\)\n(?!\s*$)/,dS=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\]*?>/g,Hm=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,mS=nt(Hm,"u").replace(/punct/g,$r).getRegex(),gS=nt(Hm,"u").replace(/punct/g,Um).getRegex(),zm="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",vS=nt(zm,"gu").replace(/notPunctSpace/g,Bm).replace(/punctSpace/g,sd).replace(/punct/g,$r).getRegex(),bS=nt(zm,"gu").replace(/notPunctSpace/g,pS).replace(/punctSpace/g,fS).replace(/punct/g,Um).getRegex(),yS=nt("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,Bm).replace(/punctSpace/g,sd).replace(/punct/g,$r).getRegex(),xS=nt(/\\(punct)/,"gu").replace(/punct/g,$r).getRegex(),_S=nt(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),kS=nt(ed).replace("(?:-->|$)","-->").getRegex(),wS=nt("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",kS).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),lr=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,SS=nt(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",lr).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Vm=nt(/^!?\[(label)\]\[(ref)\]/).replace("label",lr).replace("ref",Xc).getRegex(),jm=nt(/^!?\[(ref)\](?:\[\])?/).replace("ref",Xc).getRegex(),TS=nt("reflink|nolink(?!\\()","g").replace("reflink",Vm).replace("nolink",jm).getRegex(),nd={_backpedal:Ri,anyPunctuation:xS,autolink:_S,blockSkip:hS,br:$m,code:cS,del:Ri,emStrongLDelim:mS,emStrongRDelimAst:vS,emStrongRDelimUnd:yS,escape:oS,link:SS,nolink:jm,punctuation:uS,reflink:Vm,reflinkSearch:TS,tag:wS,text:dS,url:Ri},CS={...nd,link:nt(/^!?\[(label)\]\((.*?)\)/).replace("label",lr).getRegex(),reflink:nt(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",lr).getRegex()},Ko={...nd,emStrongRDelimAst:bS,emStrongLDelim:gS,url:nt(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\.|[^\\])*?(?:\\.|[^\s~\\]))\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},nf=e=>AS[e];function Qs(e,t){if(t){if(es.escapeTest.test(e))return e.replace(es.escapeReplace,nf)}else if(es.escapeTestNoEncode.test(e))return e.replace(es.escapeReplaceNoEncode,nf);return e}function af(e){try{e=encodeURI(e).replace(es.percentDecode,"%")}catch{return null}return e}function lf(e,t){var i;const s=e.replace(es.findPipe,(l,r,o)=>{let c=!1,d=r;for(;--d>=0&&o[d]==="\\";)c=!c;return c?"|":" |"}),n=s.split(es.splitPipe);let a=0;if(n[0].trim()||n.shift(),n.length>0&&!((i=n.at(-1))!=null&&i.trim())&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length0?-2:-1}function rf(e,t,s,n,a){const i=t.href,l=t.title||null,r=e[1].replace(a.other.outputLinkReplace,"$1");n.state.inLink=!0;const o={type:e[0].charAt(0)==="!"?"image":"link",raw:s,href:i,title:l,text:r,tokens:n.inlineTokens(r)};return n.state.inLink=!1,o}function IS(e,t,s){const n=e.match(s.other.indentCodeCompensation);if(n===null)return t;const a=n[1];return t.split(` `).map(i=>{const l=i.match(s.other.beginningSpace);if(l===null)return i;const[r]=l;return r.length>=a.length?i.slice(a.length):i}).join(` `)}var rr=class{constructor(e){rt(this,"options");rt(this,"rules");rt(this,"lexer");this.options=e||pa}space(e){const t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){const t=this.rules.block.code.exec(e);if(t){const s=t[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?s:hi(s,` `)}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const s=t[0],n=IS(s,t[3]||"",this.rules);return{type:"code",raw:s,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:n}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let s=t[2].trim();if(this.rules.other.endingHash.test(s)){const n=hi(s,"#");(this.options.pedantic||!n||this.rules.other.endingSpaceChar.test(n))&&(s=n.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:s,tokens:this.lexer.inline(s)}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:hi(t[0],` @@ -5748,15 +5753,15 @@ ${d}`:d;const u=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.block `+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=c.text):s.push(r),n=o.length!==t.length,t=t.substring(r.raw.length);continue}if(r=this.tokenizer.text(t)){t=t.substring(r.raw.length);const c=s.at(-1);(c==null?void 0:c.type)==="text"?(c.raw+=` `+r.raw,c.text+=` `+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=c.text):s.push(r);continue}if(t){const c="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(c);break}else throw new Error(c)}}return this.state.top=!0,s}inline(t,s=[]){return this.inlineQueue.push({src:t,tokens:s}),s}inlineTokens(t,s=[]){var r,o,c;let n=t,a=null;if(this.tokens.links){const d=Object.keys(this.tokens.links);if(d.length>0)for(;(a=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)d.includes(a[0].slice(a[0].lastIndexOf("[")+1,-1))&&(n=n.slice(0,a.index)+"["+"a".repeat(a[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(a=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,a.index)+"++"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;(a=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)n=n.slice(0,a.index)+"["+"a".repeat(a[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);let i=!1,l="";for(;t;){i||(l=""),i=!1;let d;if((o=(r=this.options.extensions)==null?void 0:r.inline)!=null&&o.some(f=>(d=f.call({lexer:this},t,s))?(t=t.substring(d.raw.length),s.push(d),!0):!1))continue;if(d=this.tokenizer.escape(t)){t=t.substring(d.raw.length),s.push(d);continue}if(d=this.tokenizer.tag(t)){t=t.substring(d.raw.length),s.push(d);continue}if(d=this.tokenizer.link(t)){t=t.substring(d.raw.length),s.push(d);continue}if(d=this.tokenizer.reflink(t,this.tokens.links)){t=t.substring(d.raw.length);const f=s.at(-1);d.type==="text"&&(f==null?void 0:f.type)==="text"?(f.raw+=d.raw,f.text+=d.text):s.push(d);continue}if(d=this.tokenizer.emStrong(t,n,l)){t=t.substring(d.raw.length),s.push(d);continue}if(d=this.tokenizer.codespan(t)){t=t.substring(d.raw.length),s.push(d);continue}if(d=this.tokenizer.br(t)){t=t.substring(d.raw.length),s.push(d);continue}if(d=this.tokenizer.del(t)){t=t.substring(d.raw.length),s.push(d);continue}if(d=this.tokenizer.autolink(t)){t=t.substring(d.raw.length),s.push(d);continue}if(!this.state.inLink&&(d=this.tokenizer.url(t))){t=t.substring(d.raw.length),s.push(d);continue}let u=t;if((c=this.options.extensions)!=null&&c.startInline){let f=1/0;const p=t.slice(1);let b;this.options.extensions.startInline.forEach(y=>{b=y.call({lexer:this},p),typeof b=="number"&&b>=0&&(f=Math.min(f,b))}),f<1/0&&f>=0&&(u=t.substring(0,f+1))}if(d=this.tokenizer.inlineText(u)){t=t.substring(d.raw.length),d.raw.slice(-1)!=="_"&&(l=d.raw.slice(-1)),i=!0;const f=s.at(-1);(f==null?void 0:f.type)==="text"?(f.raw+=d.raw,f.text+=d.text):s.push(d);continue}if(t){const f="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(f);break}else throw new Error(f)}}return s}},or=class{constructor(e){rt(this,"options");rt(this,"parser");this.options=e||pa}space(e){return""}code({text:e,lang:t,escaped:s}){var i;const n=(i=(t||"").match(es.notSpaceStart))==null?void 0:i[0],a=e.replace(es.endingNewline,"")+` -`;return n?'
'+(s?a:Ys(a,!0))+`
-`:"
"+(s?a:Ys(a,!0))+`
+`;return n?'
'+(s?a:Qs(a,!0))+`
+`:"
"+(s?a:Qs(a,!0))+`
`}blockquote({tokens:e}){return`
${this.parser.parse(e)}
`}html({text:e}){return e}heading({tokens:e,depth:t}){return`${this.parser.parseInline(e)} `}hr(e){return`
`}list(e){const t=e.ordered,s=e.start;let n="";for(let l=0;l `+n+" -`}listitem(e){var s;let t="";if(e.task){const n=this.checkbox({checked:!!e.checked});e.loose?((s=e.tokens[0])==null?void 0:s.type)==="paragraph"?(e.tokens[0].text=n+" "+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type==="text"&&(e.tokens[0].tokens[0].text=n+" "+Ys(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:"text",raw:n+" ",text:n+" ",escaped:!0}):t+=n+" "}return t+=this.parser.parse(e.tokens,!!e.loose),`
  • ${t}
  • +`}listitem(e){var s;let t="";if(e.task){const n=this.checkbox({checked:!!e.checked});e.loose?((s=e.tokens[0])==null?void 0:s.type)==="paragraph"?(e.tokens[0].text=n+" "+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type==="text"&&(e.tokens[0].tokens[0].text=n+" "+Qs(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:"text",raw:n+" ",text:n+" ",escaped:!0}):t+=n+" "}return t+=this.parser.parse(e.tokens,!!e.loose),`
  • ${t}
  • `}checkbox({checked:e}){return"'}paragraph({tokens:e}){return`

    ${this.parser.parseInline(e)}

    `}table(e){let t="",s="";for(let a=0;a${n}`),` @@ -5765,9 +5770,9 @@ ${this.parser.parse(e)} `}tablerow({text:e}){return` ${e} `}tablecell(e){const t=this.parser.parseInline(e.tokens),s=e.header?"th":"td";return(e.align?`<${s} align="${e.align}">`:`<${s}>`)+t+` -`}strong({tokens:e}){return`${this.parser.parseInline(e)}`}em({tokens:e}){return`${this.parser.parseInline(e)}`}codespan({text:e}){return`${Ys(e,!0)}`}br(e){return"
    "}del({tokens:e}){return`${this.parser.parseInline(e)}`}link({href:e,title:t,tokens:s}){const n=this.parser.parseInline(s),a=af(e);if(a===null)return n;e=a;let i='",i}image({href:e,title:t,text:s,tokens:n}){n&&(s=this.parser.parseInline(n,this.parser.textRenderer));const a=af(e);if(a===null)return Ys(s);e=a;let i=`${s}${this.parser.parseInline(e)}`}em({tokens:e}){return`${this.parser.parseInline(e)}`}codespan({text:e}){return`${Qs(e,!0)}`}br(e){return"
    "}del({tokens:e}){return`${this.parser.parseInline(e)}`}link({href:e,title:t,tokens:s}){const n=this.parser.parseInline(s),a=af(e);if(a===null)return n;e=a;let i='
    ",i}image({href:e,title:t,text:s,tokens:n}){n&&(s=this.parser.parseInline(n,this.parser.textRenderer));const a=af(e);if(a===null)return Qs(s);e=a;let i=`${s}{const o=l[r].flat(1/0);s=s.concat(this.walkTokens(o,t))}):l.tokens&&(s=s.concat(this.walkTokens(l.tokens,t)))}}return s}use(...e){const t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(s=>{const n={...s};if(n.async=this.defaults.async||n.async||!1,s.extensions&&(s.extensions.forEach(a=>{if(!a.name)throw new Error("extension name required");if("renderer"in a){const i=t.renderers[a.name];i?t.renderers[a.name]=function(...l){let r=a.renderer.apply(this,l);return r===!1&&(r=i.apply(this,l)),r}:t.renderers[a.name]=a.renderer}if("tokenizer"in a){if(!a.level||a.level!=="block"&&a.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");const i=t[a.level];i?i.unshift(a.tokenizer):t[a.level]=[a.tokenizer],a.start&&(a.level==="block"?t.startBlock?t.startBlock.push(a.start):t.startBlock=[a.start]:a.level==="inline"&&(t.startInline?t.startInline.push(a.start):t.startInline=[a.start]))}"childTokens"in a&&a.childTokens&&(t.childTokens[a.name]=a.childTokens)}),n.extensions=t),s.renderer){const a=this.defaults.renderer||new or(this.defaults);for(const i in s.renderer){if(!(i in a))throw new Error(`renderer '${i}' does not exist`);if(["options","parser"].includes(i))continue;const l=i,r=s.renderer[l],o=a[l];a[l]=(...c)=>{let d=r.apply(a,c);return d===!1&&(d=o.apply(a,c)),d||""}}n.renderer=a}if(s.tokenizer){const a=this.defaults.tokenizer||new rr(this.defaults);for(const i in s.tokenizer){if(!(i in a))throw new Error(`tokenizer '${i}' does not exist`);if(["options","rules","lexer"].includes(i))continue;const l=i,r=s.tokenizer[l],o=a[l];a[l]=(...c)=>{let d=r.apply(a,c);return d===!1&&(d=o.apply(a,c)),d}}n.tokenizer=a}if(s.hooks){const a=this.defaults.hooks||new Nl;for(const i in s.hooks){if(!(i in a))throw new Error(`hook '${i}' does not exist`);if(["options","block"].includes(i))continue;const l=i,r=s.hooks[l],o=a[l];Nl.passThroughHooks.has(i)?a[l]=c=>{if(this.defaults.async)return Promise.resolve(r.call(a,c)).then(u=>o.call(a,u));const d=r.call(a,c);return o.call(a,d)}:a[l]=(...c)=>{let d=r.apply(a,c);return d===!1&&(d=o.apply(a,c)),d}}n.hooks=a}if(s.walkTokens){const a=this.defaults.walkTokens,i=s.walkTokens;n.walkTokens=function(l){let r=[];return r.push(i.call(this,l)),a&&(r=r.concat(a.call(this,l))),r}}this.defaults={...this.defaults,...n}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return bn.lex(e,t??this.defaults)}parser(e,t){return yn.parse(e,t??this.defaults)}parseMarkdown(e){return(s,n)=>{const a={...n},i={...this.defaults,...a},l=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&a.async===!1)return l(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof s>"u"||s===null)return l(new Error("marked(): input parameter is undefined or null"));if(typeof s!="string")return l(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(s)+", string expected"));i.hooks&&(i.hooks.options=i,i.hooks.block=e);const r=i.hooks?i.hooks.provideLexer():e?bn.lex:bn.lexInline,o=i.hooks?i.hooks.provideParser():e?yn.parse:yn.parseInline;if(i.async)return Promise.resolve(i.hooks?i.hooks.preprocess(s):s).then(c=>r(c,i)).then(c=>i.hooks?i.hooks.processAllTokens(c):c).then(c=>i.walkTokens?Promise.all(this.walkTokens(c,i.walkTokens)).then(()=>c):c).then(c=>o(c,i)).then(c=>i.hooks?i.hooks.postprocess(c):c).catch(l);try{i.hooks&&(s=i.hooks.preprocess(s));let c=r(s,i);i.hooks&&(c=i.hooks.processAllTokens(c)),i.walkTokens&&this.walkTokens(c,i.walkTokens);let d=o(c,i);return i.hooks&&(d=i.hooks.postprocess(d)),d}catch(c){return l(c)}}}onError(e,t){return s=>{if(s.message+=` -Please report this to https://github.com/markedjs/marked.`,e){const n="

    An error occurred:

    "+Ys(s.message+"",!0)+"
    ";return t?Promise.resolve(n):n}if(t)return Promise.reject(s);throw s}}},ra=new OS;function tt(e,t){return ra.parse(e,t)}tt.options=tt.setOptions=function(e){return ra.setOptions(e),tt.defaults=ra.defaults,Dm(tt.defaults),tt};tt.getDefaults=Jc;tt.defaults=pa;tt.use=function(...e){return ra.use(...e),tt.defaults=ra.defaults,Dm(tt.defaults),tt};tt.walkTokens=function(e,t){return ra.walkTokens(e,t)};tt.parseInline=ra.parseInline;tt.Parser=yn;tt.parser=yn.parse;tt.Renderer=or;tt.TextRenderer=ad;tt.Lexer=bn;tt.lexer=bn.lex;tt.Tokenizer=rr;tt.Hooks=Nl;tt.parse=tt;tt.options;tt.setOptions;tt.use;tt.walkTokens;tt.parseInline;yn.parse;bn.lex;const NS={breaks:!0,gfm:!0};function of(e){if(!e)return"";try{if(typeof tt<"u"&&tt.parse){const t=tt.parse(e,NS);return typeof tf<"u"?tf.sanitize(t):t}}catch{}return e.replace(/&/g,"&").replace(//g,">").replace(/\n/g,"
    ")}function LS(e){const t=new Date(e),s=t.getHours().toString().padStart(2,"0"),n=t.getMinutes().toString().padStart(2,"0");return`${s}:${n}`}const DS={run_command:"terminal",ssh_command:"terminal",run_script:"terminal",read_file:"file",write_file:"edit",list_directory:"folder",search_knowledge:"search",ingest_document:"book",generate_image:"image",analyze_image:"eye",analyze_pdf:"file",browser_screenshot:"globe",manage_process:"sliders"};function MS(e){return DS[e]||"wrench"}const PS=/https?:\/\/\S+\.(?:png|jpg|jpeg|gif|webp|svg)(?:\?\S*)?/gi;function cf(e){if(!e)return[];const t=e.match(PS);return t?[...new Set(t)]:[]}const FS={template:` +Please report this to https://github.com/markedjs/marked.`,e){const n="

    An error occurred:

    "+Qs(s.message+"",!0)+"
    ";return t?Promise.resolve(n):n}if(t)return Promise.reject(s);throw s}}},ra=new OS;function tt(e,t){return ra.parse(e,t)}tt.options=tt.setOptions=function(e){return ra.setOptions(e),tt.defaults=ra.defaults,Dm(tt.defaults),tt};tt.getDefaults=Jc;tt.defaults=pa;tt.use=function(...e){return ra.use(...e),tt.defaults=ra.defaults,Dm(tt.defaults),tt};tt.walkTokens=function(e,t){return ra.walkTokens(e,t)};tt.parseInline=ra.parseInline;tt.Parser=yn;tt.parser=yn.parse;tt.Renderer=or;tt.TextRenderer=ad;tt.Lexer=bn;tt.lexer=bn.lex;tt.Tokenizer=rr;tt.Hooks=Nl;tt.parse=tt;tt.options;tt.setOptions;tt.use;tt.walkTokens;tt.parseInline;yn.parse;bn.lex;const NS={breaks:!0,gfm:!0};function of(e){if(!e)return"";try{if(typeof tt<"u"&&tt.parse){const t=tt.parse(e,NS);return typeof tf<"u"?tf.sanitize(t):t}}catch{}return e.replace(/&/g,"&").replace(//g,">").replace(/\n/g,"
    ")}function LS(e){const t=new Date(e),s=t.getHours().toString().padStart(2,"0"),n=t.getMinutes().toString().padStart(2,"0");return`${s}:${n}`}const DS={run_command:"terminal",ssh_command:"terminal",run_script:"terminal",read_file:"file",write_file:"edit",list_directory:"folder",search_knowledge:"search",ingest_document:"book",generate_image:"image",analyze_image:"eye",analyze_pdf:"file",browser_screenshot:"globe",manage_process:"sliders"};function MS(e){return DS[e]||"wrench"}const PS=/https?:\/\/\S+\.(?:png|jpg|jpeg|gif|webp|svg)(?:\?\S*)?/gi;function cf(e){if(!e)return[];const t=e.match(PS);return t?[...new Set(t)]:[]}const FS={template:`
    diff --git a/ui/dist/assets/index-CNUGEA9V.css b/ui/dist/assets/index-Dd0z3pui.css similarity index 84% rename from ui/dist/assets/index-CNUGEA9V.css rename to ui/dist/assets/index-Dd0z3pui.css index d60a77ef..816407f9 100644 --- a/ui/dist/assets/index-CNUGEA9V.css +++ b/ui/dist/assets/index-Dd0z3pui.css @@ -1 +1 @@ -@font-face{font-family:Fira Code;font-style:normal;font-weight:400;font-display:swap;src:url(/ui/assets/fira-code-400-CHoedHDv.woff2) format("woff2")}@font-face{font-family:Fira Code;font-style:normal;font-weight:500;font-display:swap;src:url(/ui/assets/fira-code-400-CHoedHDv.woff2) format("woff2")}@font-face{font-family:Fira Code;font-style:normal;font-weight:600;font-display:swap;src:url(/ui/assets/fira-code-400-CHoedHDv.woff2) format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:400;font-display:swap;src:url(/ui/assets/inter-400-Dx4kXJAl.woff2) format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:500;font-display:swap;src:url(/ui/assets/inter-400-Dx4kXJAl.woff2) format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:600;font-display:swap;src:url(/ui/assets/inter-400-Dx4kXJAl.woff2) format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:700;font-display:swap;src:url(/ui/assets/inter-400-Dx4kXJAl.woff2) format("woff2")}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.container{width:100%}@media(min-width:640px){.container{max-width:640px}}@media(min-width:768px){.container{max-width:768px}}@media(min-width:1024px){.container{max-width:1024px}}@media(min-width:1280px){.container{max-width:1280px}}@media(min-width:1536px){.container{max-width:1536px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.m-2{margin:.5rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-2{height:.5rem}.h-5{height:1.25rem}.h-8{height:2rem}.h-full{height:100%}.max-h-24{max-height:6rem}.max-h-32{max-height:8rem}.max-h-40{max-height:10rem}.max-h-48{max-height:12rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-96{max-height:24rem}.min-h-screen{min-height:100vh}.w-2{width:.5rem}.w-32{width:8rem}.w-5{width:1.25rem}.w-72{width:18rem}.w-8{width:2rem}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-\[100px\]{min-width:100px}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-md{max-width:28rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-1{row-gap:.25rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.self-end{align-self:flex-end}.self-center{align-self:center}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-amber-900{--tw-border-opacity: 1;border-color:rgb(120 53 15 / var(--tw-border-opacity, 1))}.border-blue-500\/30{border-color:#3b82f64d}.border-gray-600{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.border-gray-700{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.border-gray-700\/50{border-color:#37415180}.border-gray-800{--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity, 1))}.border-gray-800\/50{border-color:#1f293780}.border-green-500\/30{border-color:#22c55e4d}.border-green-500\/40{border-color:#22c55e66}.border-green-800{--tw-border-opacity: 1;border-color:rgb(22 101 52 / var(--tw-border-opacity, 1))}.border-indigo-900\/30{border-color:#312e814d}.border-red-500\/30{border-color:#ef44444d}.border-red-500\/40{border-color:#ef444466}.border-red-700{--tw-border-opacity: 1;border-color:rgb(185 28 28 / var(--tw-border-opacity, 1))}.border-red-800{--tw-border-opacity: 1;border-color:rgb(153 27 27 / var(--tw-border-opacity, 1))}.border-red-900{--tw-border-opacity: 1;border-color:rgb(127 29 29 / var(--tw-border-opacity, 1))}.border-red-900\/50{border-color:#7f1d1d80}.border-slate-700{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.border-yellow-800{--tw-border-opacity: 1;border-color:rgb(133 77 14 / var(--tw-border-opacity, 1))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-blue-400{--tw-bg-opacity: 1;background-color:rgb(96 165 250 / var(--tw-bg-opacity, 1))}.bg-blue-500\/60{background-color:#3b82f699}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-blue-900{--tw-bg-opacity: 1;background-color:rgb(30 58 138 / var(--tw-bg-opacity, 1))}.bg-blue-900\/40{background-color:#1e3a8a66}.bg-blue-900\/50{background-color:#1e3a8a80}.bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.bg-gray-800{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.bg-gray-800\/50{background-color:#1f293780}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-gray-900\/30{background-color:#1118274d}.bg-gray-900\/50{background-color:#11182780}.bg-gray-950{--tw-bg-opacity: 1;background-color:rgb(3 7 18 / var(--tw-bg-opacity, 1))}.bg-green-400{--tw-bg-opacity: 1;background-color:rgb(74 222 128 / var(--tw-bg-opacity, 1))}.bg-green-900{--tw-bg-opacity: 1;background-color:rgb(20 83 45 / var(--tw-bg-opacity, 1))}.bg-green-900\/30{background-color:#14532d4d}.bg-green-950\/30{background-color:#052e164d}.bg-indigo-500{--tw-bg-opacity: 1;background-color:rgb(99 102 241 / var(--tw-bg-opacity, 1))}.bg-indigo-900{--tw-bg-opacity: 1;background-color:rgb(49 46 129 / var(--tw-bg-opacity, 1))}.bg-indigo-950\/30{background-color:#1e1b4b4d}.bg-red-900\/20{background-color:#7f1d1d33}.bg-red-900\/30{background-color:#7f1d1d4d}.bg-red-900\/50{background-color:#7f1d1d80}.bg-red-950\/30{background-color:#450a0a4d}.bg-yellow-900\/20{background-color:#713f1233}.\!p-0{padding:0!important}.p-0{padding:0}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-2{padding-bottom:.5rem}.pl-2{padding-left:.5rem}.pr-1{padding-right:.25rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-relaxed{line-height:1.625}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-cyan-400{--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-green-300{--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-indigo-300{--tw-text-opacity: 1;color:rgb(165 180 252 / var(--tw-text-opacity, 1))}.text-indigo-400{--tw-text-opacity: 1;color:rgb(129 140 248 / var(--tw-text-opacity, 1))}.text-orange-400{--tw-text-opacity: 1;color:rgb(251 146 60 / var(--tw-text-opacity, 1))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-teal-400{--tw-text-opacity: 1;color:rgb(45 212 191 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.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)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-300{transition-duration:.3s}.last\:mb-0:last-child{margin-bottom:0}.last\:border-0:last-child{border-width:0px}.hover\:border-gray-600:hover{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.hover\:bg-gray-700:hover{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.hover\:text-blue-300:hover{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.hover\:text-gray-300:hover{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.hover\:text-gray-400:hover{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.hover\:text-green-300:hover{--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.hover\:text-indigo-300:hover{--tw-text-opacity: 1;color:rgb(165 180 252 / var(--tw-text-opacity, 1))}.hover\:text-red-300:hover{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.hover\:text-yellow-300:hover{--tw-text-opacity: 1;color:rgb(253 224 71 / var(--tw-text-opacity, 1))}@media(min-width:360px){.min-\[360px\]\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:640px){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:768px){.md\:col-span-2{grid-column:span 2 / span 2}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media(min-width:1024px){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}html{-webkit-text-size-adjust:100%}*{-webkit-tap-highlight-color:rgba(217,119,6,.15)}:root{--hm-font-sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--hm-font-mono: "Fira Code", "Cascadia Code", "JetBrains Mono", ui-monospace, monospace;--hm-text-xs: .6875rem;--hm-text-sm: .75rem;--hm-text-base: .8125rem;--hm-text-md: .875rem;--hm-text-lg: 1rem;--hm-text-xl: 1.25rem;--hm-text-2xl: 1.5rem;--hm-leading-tight: 1.25;--hm-leading-normal: 1.5;--hm-leading-relaxed: 1.65;--hm-space-1: .25rem;--hm-space-2: .375rem;--hm-space-3: .5rem;--hm-space-4: .75rem;--hm-space-5: 1rem;--hm-space-6: 1.5rem;--hm-space-8: 2rem;--hm-radius-full: 9999px;--hm-shadow-glow: 0 0 20px rgba(197, 139, 50, .15), 0 0 4px rgba(197, 139, 50, .1);--hm-shadow-glow-sm: 0 0 8px rgba(197, 139, 50, .1);--hm-transition-fast: .1s ease;--hm-transition-base: .15s ease;--hm-transition-slow: .25s ease;--hm-transition-spring: .3s cubic-bezier(.34, 1.56, .64, 1)}body{font-family:var(--hm-font-sans);font-size:var(--hm-text-md);line-height:var(--hm-leading-normal);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;letter-spacing:-.011em}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--hm-bg)}::-webkit-scrollbar-thumb{background:#374151;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#4b5563}*{scrollbar-width:thin;scrollbar-color:#374151 var(--hm-bg)}.status-dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex-shrink:0}.status-dot.online{background:var(--hm-success);box-shadow:0 0 6px var(--hm-success)}.status-dot.offline{background:var(--hm-danger);box-shadow:0 0 6px var(--hm-danger)}.status-dot.starting{background:var(--hm-warning);box-shadow:0 0 6px var(--hm-warning)}.hm-card{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);padding:var(--hm-space-5);box-shadow:var(--hm-shadow-sm);transition:border-color var(--hm-transition-base),box-shadow var(--hm-transition-base)}.hm-table{width:100%;border-collapse:collapse;font-size:var(--hm-text-md)}.hm-table th{text-align:left;padding:var(--hm-space-3) var(--hm-space-4);color:var(--hm-text-muted);font-weight:500;font-size:var(--hm-text-sm);text-transform:uppercase;letter-spacing:.04em;border-bottom:1px solid var(--hm-border);white-space:nowrap}.hm-table td{padding:var(--hm-space-3) var(--hm-space-4);border-bottom:1px solid rgba(31,41,55,.5)}.hm-table tr:hover td{background:#1f29374d}.btn{display:inline-flex;align-items:center;gap:var(--hm-space-2);padding:var(--hm-space-2) var(--hm-space-4);border-radius:var(--hm-radius-md);font-size:var(--hm-text-base);font-weight:500;font-family:var(--hm-font-sans);cursor:pointer;border:none;transition:background var(--hm-transition-base),box-shadow var(--hm-transition-base),transform var(--hm-transition-fast);letter-spacing:-.006em}.btn:active:not(:disabled){transform:scale(.97)}.btn-primary{background:var(--hm-accent);color:#fff}.btn-primary:hover{background:var(--hm-accent-hover);box-shadow:var(--hm-shadow-glow-sm)}.btn-danger{background:#ef444426;color:#f87171}.btn-danger:hover{background:#ef444440}.btn-ghost{background:transparent;color:var(--hm-text-muted)}.btn-ghost:hover{background:var(--hm-surface-hover);color:var(--hm-text)}.btn:disabled{opacity:.5;cursor:not-allowed}.hm-input{background:var(--hm-bg);border:1px solid var(--hm-border);border-radius:var(--hm-radius-md);padding:var(--hm-space-3) var(--hm-space-4);color:var(--hm-text);font-size:var(--hm-text-md);font-family:var(--hm-font-sans);width:100%;outline:none;transition:border-color var(--hm-transition-base),box-shadow var(--hm-transition-base)}.hm-input:focus{border-color:var(--hm-accent);box-shadow:0 0 0 3px var(--hm-accent-glow)}textarea.hm-input{font-family:var(--hm-font-mono);resize:vertical;min-height:120px}.toggle-switch{position:relative;display:inline-block;width:36px;height:20px;flex-shrink:0}.toggle-switch input{opacity:0;width:0;height:0}.toggle-slider{position:absolute;top:0;right:0;bottom:0;left:0;background:#374151;border-radius:10px;cursor:pointer;transition:background .2s}.toggle-slider:before{content:"";position:absolute;width:14px;height:14px;left:3px;bottom:3px;background:#fff;border-radius:50%;transition:transform .2s}.toggle-switch input:checked+.toggle-slider{background:var(--hm-accent);box-shadow:var(--hm-shadow-glow-sm)}.toggle-switch input:checked+.toggle-slider:before{transform:translate(16px)}.toggle-switch input:disabled+.toggle-slider{opacity:.4;cursor:not-allowed}.field-changed td:first-child{border-left:2px solid var(--hm-accent)}.config-tag{display:inline-flex;align-items:center;gap:var(--hm-space-1);padding:.125rem .5rem;background:var(--hm-gold-dim);border:1px solid rgba(217,119,6,.2);border-radius:var(--hm-radius-sm);font-size:var(--hm-text-sm);font-family:var(--hm-font-mono);color:var(--hm-text)}.config-tag button{background:none;border:none;color:var(--hm-text-muted);cursor:pointer;padding:0;font-size:var(--hm-text-md);line-height:1}.config-tag button:hover{color:var(--hm-danger)}.hm-select{background:var(--hm-bg);border:1px solid var(--hm-border);border-radius:var(--hm-radius-md);padding:var(--hm-space-2) var(--hm-space-3);color:var(--hm-text);font-size:var(--hm-text-base);font-family:var(--hm-font-sans);outline:none;cursor:pointer;transition:border-color var(--hm-transition-base)}.hm-select:focus{border-color:var(--hm-accent)}.badge{display:inline-block;padding:.125rem .5rem;border-radius:var(--hm-radius-full);font-size:var(--hm-text-sm);font-weight:500;letter-spacing:.01em}.badge-success{background:#22c55e26;color:#4ade80}.badge-warning{background:#eab30826;color:#facc15}.badge-danger{background:#ef444426;color:#f87171}.badge-info{background:var(--hm-accent-dim);color:var(--hm-gold)}.spinner{width:20px;height:20px;border:2px solid var(--hm-border);border-top-color:var(--hm-accent);border-radius:50%;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:50}.modal-content{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-xl);padding:var(--hm-space-6);max-width:600px;width:90%;max-height:80vh;overflow-y:auto;box-shadow:var(--hm-shadow-lg)}.skeleton{background:linear-gradient(90deg,var(--hm-surface) 25%,var(--hm-surface-hover) 50%,var(--hm-surface) 75%);background-size:200% 100%;animation:shimmer 1.5s infinite;border-radius:var(--hm-radius-sm)}.skeleton-text{height:.875rem;margin-bottom:.5rem}.skeleton-stat{height:2rem;width:3rem;margin:0 auto .25rem}.skeleton-row{height:2.25rem;margin-bottom:.375rem}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.flash-new{animation:flash-highlight 1.5s ease-out}@keyframes flash-highlight{0%{background-color:#d9770640}to{background-color:transparent}}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}.error-state{display:flex;flex-direction:column;align-items:center;gap:var(--hm-space-4);padding:var(--hm-space-6);text-align:center}.error-state .error-icon{font-size:1.5rem;opacity:.6}.chat-container{display:flex;flex-direction:column;height:calc(100vh - var(--hm-topbar-h));overflow:hidden}.page-viewport .chat-container.page-fade-in{max-width:none;margin-inline:0;--chat-work-lane: 1400px;--chat-reading-lane: 1080px}.chat-messages{flex:1;overflow-y:auto;padding:var(--hm-space-5) var(--hm-space-5) var(--hm-space-3);scroll-behavior:smooth}.chat-messages>.chat-message,.chat-messages>.chat-date-sep{max-width:var(--chat-reading-lane);margin-inline:auto}.chat-messages>.chat-message:has(pre) .chat-bubble-wrap,.chat-messages>.chat-message:has(table) .chat-bubble-wrap{max-width:100%;width:100%}.chat-empty{display:flex;align-items:center;justify-content:center;height:100%}.chat-welcome{text-align:center;max-width:28rem}.chat-welcome-icon{color:var(--hm-accent);margin-bottom:var(--hm-space-4);opacity:.8}.chat-welcome-title{font-size:1.25rem;font-weight:700;color:var(--hm-text);margin-bottom:var(--hm-space-2);letter-spacing:.01em}.chat-welcome-subtitle{font-size:var(--hm-text-sm);color:var(--hm-text-muted);margin-bottom:var(--hm-space-5)}.chat-suggestions{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--hm-space-2)}.chat-suggestion{background:var(--hm-surface-elevated);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);padding:var(--hm-space-2) var(--hm-space-4);color:var(--hm-text-muted);font-size:var(--hm-text-sm);cursor:pointer;transition:border-color var(--hm-transition-base),color var(--hm-transition-base)}.chat-suggestion:hover{border-color:var(--hm-accent);color:var(--hm-accent-hover)}.chat-date-sep{display:flex;align-items:center;gap:var(--hm-space-4);margin:var(--hm-space-4) 0}.chat-date-sep:before,.chat-date-sep:after{content:"";flex:1;height:1px;background:var(--hm-border)}.chat-date-sep span{font-size:var(--hm-text-xs);color:var(--hm-text-muted);white-space:nowrap}.chat-message{display:flex;gap:var(--hm-space-3);margin-bottom:var(--hm-space-4);align-items:flex-start}.chat-message.chat-user{flex-direction:row-reverse}.chat-message.chat-bot{flex-direction:row}.chat-avatar{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px}.chat-avatar-bot{background:linear-gradient(135deg,#d9770633,#d977061a);border:1px solid rgba(217,119,6,.3);color:var(--hm-accent)}.chat-avatar-user{background:var(--hm-surface-hover);border:1px solid var(--hm-border);color:var(--hm-text-muted)}.chat-avatar-eye,.chat-avatar-user{display:flex;align-items:center;justify-content:center}.chat-avatar-pulse{animation:avatar-pulse 2s ease-in-out infinite}@keyframes avatar-pulse{0%,to{opacity:1}50%{opacity:.5}}.chat-bubble-wrap{max-width:75%;min-width:0}.chat-message.chat-user .chat-bubble-wrap{align-items:flex-end;display:flex;flex-direction:column}.chat-bubble{border-radius:var(--hm-radius-xl);padding:.625rem .875rem;font-size:var(--hm-text-md);line-height:var(--hm-leading-normal);word-break:break-word}.chat-bubble-user{background:linear-gradient(135deg,var(--hm-accent),#b45309);color:#fff;border-bottom-right-radius:var(--hm-radius-sm);box-shadow:var(--hm-shadow-sm)}.chat-bubble-bot{background:var(--hm-surface-elevated);border:1px solid var(--hm-border);border-bottom-left-radius:var(--hm-radius-sm)}.chat-bubble-typing{display:flex;align-items:center;gap:var(--hm-space-3)}.chat-bubble-header{display:flex;align-items:center;gap:var(--hm-space-2);margin-bottom:var(--hm-space-1)}.chat-bubble-label{font-size:var(--hm-text-xs);color:var(--hm-accent-hover);font-weight:600;letter-spacing:.02em}.chat-error-indicator{font-size:.625rem;color:#f87171;background:#ef444426;border:1px solid rgba(239,68,68,.3);border-radius:var(--hm-radius-sm);padding:0 .375rem;line-height:1.4;font-weight:600;text-transform:uppercase;letter-spacing:.04em}.chat-bubble-text{white-space:pre-wrap}.chat-timestamp{font-size:.625rem;color:var(--hm-text-muted);margin-top:2px;opacity:0;transition:opacity var(--hm-transition-base);padding:0 .25rem}.chat-message:hover .chat-timestamp{opacity:1}.chat-markdown{white-space:normal}.chat-markdown p{margin:0 0 .5rem}.chat-markdown p:last-child{margin-bottom:0}.chat-markdown code{background:#0000004d;padding:.125rem .375rem;border-radius:var(--hm-radius-sm);font-size:var(--hm-text-base);font-family:var(--hm-font-mono)}.chat-markdown pre{background:#0000004d;border-radius:var(--hm-radius-md);padding:var(--hm-space-3) var(--hm-space-4);margin:var(--hm-space-2) 0;overflow-x:auto;position:relative}.chat-markdown pre code{background:none;padding:0}.chat-markdown ul,.chat-markdown ol{margin:.25rem 0;padding-left:1.25rem}.chat-markdown blockquote{border-left:3px solid var(--hm-accent);padding-left:var(--hm-space-4);margin:var(--hm-space-2) 0;color:var(--hm-text-muted)}.chat-markdown a{color:var(--hm-accent-hover);text-decoration:underline}.chat-markdown table{border-collapse:collapse;margin:var(--hm-space-2) 0;font-size:var(--hm-text-sm);display:block;width:-moz-max-content;width:max-content;max-width:100%;overflow-x:auto}.chat-markdown th,.chat-markdown td{border:1px solid var(--hm-border);padding:var(--hm-space-2) var(--hm-space-3);text-align:left;white-space:nowrap;word-break:normal}.chat-markdown th{background:#0003;font-weight:600}.chat-code-copy{position:absolute;top:var(--hm-space-2);right:var(--hm-space-2);background:var(--hm-surface-hover);border:1px solid var(--hm-border);border-radius:var(--hm-radius-sm);color:var(--hm-text-muted);font-size:.625rem;padding:2px 8px;cursor:pointer;opacity:0;transition:opacity var(--hm-transition-base),color var(--hm-transition-base);font-family:var(--hm-font-sans);text-transform:uppercase;letter-spacing:.04em}.chat-code-copy:hover{color:var(--hm-accent-hover)}.chat-tool-cards{margin-bottom:var(--hm-space-2)}.chat-tools-toggle{background:none;border:none;color:var(--hm-text-muted);font-size:var(--hm-text-sm);cursor:pointer;display:flex;align-items:center;gap:var(--hm-space-1);padding:.125rem 0}.chat-tools-toggle:hover{color:var(--hm-text)}.chat-tools-toggle-icon{font-size:.5rem}.chat-tools-toggle-count{background:#d9770626;color:var(--hm-accent-hover);border-radius:var(--hm-radius-sm);padding:0 .375rem;font-weight:600;font-size:var(--hm-text-xs)}.chat-tool-list{display:flex;flex-wrap:wrap;gap:var(--hm-space-1);margin-top:var(--hm-space-2)}.chat-tool-card{display:flex;align-items:center;gap:var(--hm-space-2);background:#0003;border:1px solid var(--hm-border);border-radius:var(--hm-radius-md);padding:var(--hm-space-1) var(--hm-space-3);font-size:var(--hm-text-xs)}.chat-tool-icon{font-size:var(--hm-text-sm)}.chat-tool-name{font-family:var(--hm-font-mono);color:var(--hm-text-muted)}.chat-images{display:flex;flex-wrap:wrap;gap:var(--hm-space-2);margin-top:var(--hm-space-2)}.chat-image-thumb{border-radius:var(--hm-radius-md);overflow:hidden;border:1px solid var(--hm-border);max-width:240px;cursor:pointer;transition:border-color var(--hm-transition-base)}.chat-image-thumb:hover{border-color:var(--hm-accent)}.chat-image-thumb img{display:block;width:100%;height:auto;max-height:200px;-o-object-fit:cover;object-fit:cover}.chat-typing{display:flex;gap:var(--hm-space-1);padding:var(--hm-space-1) 0}.chat-typing span{width:6px;height:6px;background:var(--hm-accent);border-radius:50%;animation:typing-dot 1.4s infinite ease-in-out both}.chat-typing span:nth-child(1){animation-delay:0s}.chat-typing span:nth-child(2){animation-delay:.2s}.chat-typing span:nth-child(3){animation-delay:.4s}@keyframes typing-dot{0%,80%,to{transform:scale(.6);opacity:.4}40%{transform:scale(1);opacity:1}}.chat-typing-text{font-size:var(--hm-text-xs);color:var(--hm-text-muted);margin-left:var(--hm-space-2);font-style:italic}.chat-input-area{border-top:1px solid var(--hm-border);background:var(--hm-surface);padding:var(--hm-space-4) var(--hm-space-5);min-height:var(--hm-rail-h);display:flex;flex-direction:column;justify-content:center}.chat-input-row,.chat-input-hint{width:100%;max-width:var(--chat-work-lane);margin-inline:auto}.chat-input-row{display:flex;gap:var(--hm-space-3);align-items:flex-end}.chat-input{flex:1;background:var(--hm-bg);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);padding:var(--hm-space-3) var(--hm-space-4);color:var(--hm-text);font-size:var(--hm-text-md);resize:none;outline:none;line-height:var(--hm-leading-normal);max-height:120px;font-family:inherit;transition:border-color var(--hm-transition-base),box-shadow var(--hm-transition-base)}.chat-input:focus{border-color:var(--hm-accent);box-shadow:0 0 0 3px var(--hm-accent-glow)}.chat-input:disabled{opacity:.5}.chat-send-btn{height:36px;min-width:44px;flex-shrink:0;display:flex;align-items:center;justify-content:center}.chat-send-icon{pointer-events:none}.chat-input-hint{display:flex;justify-content:space-between;align-items:center;padding-top:var(--hm-space-1)}.chat-connection-status{display:flex;align-items:center;gap:var(--hm-space-1);font-size:var(--hm-text-xs)}.chat-status-dot{width:6px;height:6px;border-radius:50%}.chat-ws-on .chat-status-dot{background:#4ade80}.chat-ws-off .chat-status-dot{background:#f87171}.chat-ws-on{color:var(--hm-text-muted)}.chat-ws-off{color:#f87171}.session-card{transition:border-color var(--hm-transition-base),box-shadow var(--hm-transition-base)}.session-card:hover{border-color:var(--hm-accent);box-shadow:var(--hm-shadow-glow-sm)}.session-selected{border-color:var(--hm-accent)!important;background:#d977060d}.session-checkbox{width:14px;height:14px;accent-color:var(--hm-accent);cursor:pointer;flex-shrink:0}.session-preview-role{font-weight:600;font-family:var(--hm-font-mono);flex-shrink:0;width:36px}.session-msg-content{font-size:var(--hm-text-base)}.sess-source-icon{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:var(--hm-text-sm)}.sess-source-discord{background:#5865f226;border:1px solid rgba(88,101,242,.3)}.sess-source-web{background:var(--hm-accent-dim);border:1px solid rgba(217,119,6,.3)}.sess-expand-icon{font-size:.5rem;color:var(--hm-text-dim);transition:transform var(--hm-transition-base);display:inline-block;margin-right:var(--hm-space-2)}.sess-summary-banner{padding:var(--hm-space-3) var(--hm-space-4);background:linear-gradient(135deg,#eab30814,#eab30808);border:1px solid rgba(234,179,8,.2);border-radius:var(--hm-radius-md)}.sess-summary-label{font-size:var(--hm-text-xs);font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--hm-warning)}.sess-view-btn{background:#ffffff0d;border:1px solid transparent;border-radius:var(--hm-radius-md);padding:var(--hm-space-1) var(--hm-space-4);font-size:var(--hm-text-xs);color:var(--hm-text-muted);cursor:pointer;transition:all var(--hm-transition-base);font-family:var(--hm-font-sans)}.sess-view-btn:hover{background:#ffffff1a}.sess-view-active{background:var(--hm-accent-dim)!important;color:var(--hm-gold);border-color:#d9770666}.sess-thread-container{max-height:32rem;overflow-y:auto;scrollbar-gutter:stable;display:flex;flex-direction:column;gap:var(--hm-space-3)}.sess-thread{background:var(--hm-bg);border:1px solid var(--hm-border);border-radius:var(--hm-radius-md);overflow:hidden;transition:border-color var(--hm-transition-base)}.sess-thread:hover{border-color:#ffffff1a}.sess-thread-header{display:flex;align-items:center;gap:var(--hm-space-2);padding:var(--hm-space-3) var(--hm-space-4);cursor:pointer;transition:background var(--hm-transition-base)}.sess-thread-header:hover{background:#ffffff08}.sess-thread-num{width:22px;height:22px;border-radius:50%;background:var(--hm-accent-dim);color:var(--hm-accent-hover);display:flex;align-items:center;justify-content:center;font-size:var(--hm-text-xs);font-weight:700;flex-shrink:0}.sess-thread-arrow{font-size:.5rem;color:var(--hm-text-dim);transition:transform var(--hm-transition-base);display:inline-block}.sess-thread-arrow-open{transform:rotate(90deg)}.sess-thread-summary{flex:1;min-width:0;font-size:var(--hm-text-sm);color:var(--hm-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sess-thread-count{flex-shrink:0}.sess-thread-messages{border-top:1px solid var(--hm-border);padding:var(--hm-space-3) var(--hm-space-4);display:flex;flex-direction:column;gap:var(--hm-space-3)}.sess-thread-msg{padding:8px 12px;border-radius:6px;margin-bottom:8px}.sess-msg-user{background:#06b6d414;border-left:3px solid rgba(6,182,212,.5)}.sess-msg-assistant{background:#6366f114;border-left:3px solid rgba(99,102,241,.5)}.sess-msg-system{background:#6b728014;border-left:3px solid rgba(107,114,128,.4)}.sess-msg-header{display:flex;align-items:center;gap:var(--hm-space-2);margin-bottom:var(--hm-space-2)}.sess-role-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}.sess-dot-user{background:#06b6d4;box-shadow:0 0 4px #06b6d480}.sess-dot-assistant{background:#6366f1;box-shadow:0 0 4px #6366f180}.sess-dot-system{background:#6b7280}.sess-role-label{font-size:var(--hm-text-xs);font-weight:600}.sess-msg-content{font-size:13px;color:var(--hm-text);line-height:1.5;white-space:pre-wrap;word-break:break-word;overflow-wrap:break-word;max-height:200px;overflow-y:auto}.sess-filter-bar,.logs-filter-bar{border-bottom:1px solid var(--hm-border);padding-bottom:var(--hm-space-3)}.sess-preset-chip{display:inline-flex;align-items:center;gap:var(--hm-space-1);padding:var(--hm-space-1) var(--hm-space-4);border-radius:var(--hm-radius-full);font-size:var(--hm-text-xs);font-weight:500;cursor:pointer;border:1px solid transparent;transition:all var(--hm-transition-base);background:#ffffff0d;color:var(--hm-text-muted);font-family:var(--hm-font-sans)}.sess-preset-chip:hover{background:#ffffff1a;color:var(--hm-text)}.sess-preset-active{background:var(--hm-accent-dim)!important;color:var(--hm-gold)!important;border-color:#d9770666}.sess-preset-icon{font-size:var(--hm-text-sm)}.sess-preset-custom{border-style:dashed;border-color:#ffffff1a}.sess-preset-remove{margin-left:var(--hm-space-1);font-size:var(--hm-text-md);color:var(--hm-text-dim);cursor:pointer;line-height:1}.sess-preset-remove:hover{color:var(--hm-danger)}.log-line{border-left:2px solid transparent;padding-left:var(--hm-space-3)}.log-line-error{color:#f87171;border-left-color:#ef4444;background:#ef44440d}.log-line-warning{color:#fbbf24;border-left-color:#eab308;background:#eab3080a}.log-ts{transition:color var(--hm-transition-base)}.log-chip{display:inline-flex;align-items:center;padding:.125rem .5rem;border-radius:var(--hm-radius-full);font-size:var(--hm-text-xs);font-weight:600;cursor:pointer;border:1px solid transparent;transition:all var(--hm-transition-base);font-family:var(--hm-font-mono);background:#ffffff0d;color:var(--hm-text-muted)}.log-chip:hover{background:#ffffff1a}.log-chip-info.log-chip-active{background:#d9770633;color:var(--hm-gold);border-color:#d9770666}.log-chip-warning.log-chip-active{background:#eab30833;color:#facc15;border-color:#eab30866}.log-chip-error.log-chip-active{background:#ef444433;color:#f87171;border-color:#ef444466}.log-chip-clear{background:#ffffff0d;color:var(--hm-text-muted)}.log-chip-clear:hover{background:#ffffff1a;color:var(--hm-text)}.log-jump-btn{position:absolute;bottom:1rem;left:50%;transform:translate(-50%);background:var(--hm-accent);color:#fff;border:none;border-radius:var(--hm-radius-full);padding:var(--hm-space-2) var(--hm-space-5);font-size:var(--hm-text-sm);font-weight:500;cursor:pointer;z-index:10;box-shadow:0 2px 8px #0006;transition:background var(--hm-transition-base),transform var(--hm-transition-base);animation:jump-btn-in .2s ease-out}.log-jump-btn:hover{background:var(--hm-accent-hover)}@keyframes jump-btn-in{0%{opacity:0;transform:translate(-50%) translateY(.5rem)}to{opacity:1;transform:translate(-50%) translateY(0)}}.logs-tool-badge{display:inline-block;background:#d977061a;border:1px solid rgba(217,119,6,.2);border-radius:var(--hm-radius-sm);padding:0 var(--hm-space-2);font-size:var(--hm-text-xs);color:var(--hm-accent-hover);margin-right:var(--hm-space-2);font-family:var(--hm-font-mono)}.logs-timeline{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-md);padding:var(--hm-space-3) var(--hm-space-4)}.logs-timeline-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--hm-space-2)}.logs-timeline-chart{display:flex;gap:2px;align-items:flex-end;height:48px}.logs-timeline-bar-wrap{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;cursor:pointer;min-width:0}.logs-timeline-bar{width:100%;height:40px;display:flex;flex-direction:column-reverse;border-radius:2px 2px 0 0;overflow:hidden;background:#ffffff05;transition:background var(--hm-transition-base)}.logs-timeline-bar-wrap:hover .logs-timeline-bar{background:#ffffff0f}.logs-timeline-segment{width:100%;min-height:1px;transition:height var(--hm-transition-slow)}.logs-tl-error{background:#ef4444b3}.logs-tl-warning{background:#eab30899}.logs-tl-info{background:#3b82f666}.logs-timeline-label{font-size:.5rem;color:var(--hm-text-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.stat-card{position:relative;overflow:hidden}.stat-card:before{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,var(--hm-accent),transparent);opacity:0;transition:opacity var(--hm-transition-base)}.stat-card:hover:before{opacity:1}.stat-icon{font-size:var(--hm-text-md);margin-bottom:var(--hm-space-1);opacity:.7}.dash-hero{display:flex;flex-wrap:wrap;align-items:center;gap:var(--hm-space-5);position:relative}.dash-hero-left{display:flex;align-items:center;gap:var(--hm-space-4);flex:1;min-width:0}.dash-hero-ring{position:relative;width:48px;height:48px;flex-shrink:0}.dash-ring-svg{width:48px;height:48px;transform:rotate(-90deg)}.ring-online{color:var(--hm-success)}.ring-starting{color:var(--hm-warning)}.dash-ring-progress{transition:stroke-dashoffset 1s ease}.dash-hero-icon{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:1rem;color:var(--hm-text-muted)}.dash-hero-name{font-size:var(--hm-text-lg);font-weight:600;color:var(--hm-text);letter-spacing:-.02em}.dash-hero-sub{display:flex;align-items:center;gap:var(--hm-space-2);font-size:var(--hm-text-sm);color:var(--hm-text-muted)}.dash-hero-sep{opacity:.4}.dash-hero-actions{display:flex;gap:var(--hm-space-2);flex-shrink:0}.dash-hero-skeleton{display:flex;align-items:center;gap:var(--hm-space-4)}.dash-stat{display:flex;flex-direction:column;gap:var(--hm-space-1);padding:var(--hm-space-4) var(--hm-space-5)}.dash-stat-header{display:flex;align-items:center;gap:var(--hm-space-2)}.dash-stat-icon{font-size:var(--hm-text-md);opacity:.7}.dash-stat-label{font-size:var(--hm-text-xs);color:var(--hm-text-dim);text-transform:uppercase;letter-spacing:.04em;font-weight:500}.dash-stat-value{font-size:var(--hm-text-2xl);font-weight:700;letter-spacing:-.02em;line-height:1}.dash-stat-sub{font-size:var(--hm-text-xs)}.dash-stat-highlight{border-color:#d9770640;background:linear-gradient(135deg,var(--hm-surface),rgba(217,119,6,.03))}.dash-health-bar{padding:var(--hm-space-4) var(--hm-space-5)}.dash-health-items{display:flex;flex-wrap:wrap;gap:var(--hm-space-4)}.dash-health-item{display:flex;align-items:center;gap:var(--hm-space-2);font-size:var(--hm-text-sm)}.dash-health-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.dash-health-ok{background:var(--hm-success);box-shadow:0 0 6px var(--hm-success)}.dash-health-warn{background:var(--hm-warning);box-shadow:0 0 6px var(--hm-warning)}.dash-health-error{background:var(--hm-danger);box-shadow:0 0 6px var(--hm-danger)}.dash-health-label{color:var(--hm-text);font-weight:500}.dash-health-detail{color:var(--hm-text-muted)}.dash-panel{padding:var(--hm-space-4) var(--hm-space-5);min-height:120px}.dash-panel-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--hm-space-3)}.dash-panel-title{font-size:var(--hm-text-sm);font-weight:600;color:var(--hm-text-muted);text-transform:uppercase;letter-spacing:.04em}.dash-empty{display:flex;flex-direction:column;align-items:center;gap:var(--hm-space-2);padding:var(--hm-space-5) 0;color:var(--hm-text-dim);font-size:var(--hm-text-sm)}.dash-empty-icon{font-size:1.25rem;opacity:.3}.dash-agent-list{display:flex;flex-direction:column;gap:var(--hm-space-3)}.dash-agent-item{padding:var(--hm-space-3);background:var(--hm-bg);border:1px solid var(--hm-border);border-radius:var(--hm-radius-md)}.dash-agent-top{display:flex;align-items:center;gap:var(--hm-space-2);margin-bottom:var(--hm-space-1)}.dash-agent-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}.dash-agent-running{background:var(--hm-success);box-shadow:0 0 4px var(--hm-success);animation:loop-pulse 2s ease-in-out infinite}.dash-agent-completed{background:var(--hm-info)}.dash-agent-failed{background:var(--hm-danger)}.dash-agent-timeout{background:var(--hm-warning)}.dash-agent-killed{background:var(--hm-text-dim)}.dash-agent-label{font-weight:600;font-size:var(--hm-text-sm);color:var(--hm-text);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dash-agent-iters{font-size:var(--hm-text-xs);color:var(--hm-text-dim);font-family:var(--hm-font-mono);flex-shrink:0}.dash-agent-goal{font-size:var(--hm-text-xs);color:var(--hm-text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dash-agent-meta{display:flex;gap:var(--hm-space-3);font-size:var(--hm-text-xs);color:var(--hm-text-dim);margin-top:var(--hm-space-1)}.dash-agent-tools{font-family:var(--hm-font-mono)}.dash-activity-list{display:flex;flex-direction:column}.dash-activity-item{display:flex;align-items:center;gap:var(--hm-space-2);padding:var(--hm-space-2) 0;border-bottom:1px solid rgba(31,41,55,.5);font-size:var(--hm-text-xs)}.dash-activity-item:last-child{border-bottom:none}.dash-activity-dot{width:5px;height:5px;border-radius:50%;flex-shrink:0}.dot-ok{background:var(--hm-success)}.dot-error{background:var(--hm-danger)}.dash-activity-tool{font-family:var(--hm-font-mono);color:var(--hm-text);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dash-activity-time{color:var(--hm-text-dim);white-space:nowrap;flex-shrink:0}.dash-guild-item{display:flex;align-items:center;gap:var(--hm-space-2);font-size:var(--hm-text-sm)}.dash-guild-count{margin-left:auto;font-size:var(--hm-text-xs);color:var(--hm-text-dim)}.dash-error-list{display:flex;flex-direction:column;gap:var(--hm-space-2)}.dash-error-item{padding:var(--hm-space-2) 0;border-bottom:1px solid rgba(31,41,55,.5);font-size:var(--hm-text-xs)}.dash-error-item:last-child{border-bottom:none}.dash-error-top{display:flex;align-items:center;gap:var(--hm-space-2)}.dash-error-tool{font-family:var(--hm-font-mono);color:#f87171;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dash-error-time{color:var(--hm-text-dim);white-space:nowrap;flex-shrink:0}.dash-error-msg{color:var(--hm-text-dim);padding-left:1.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:90%}.tool-expand-icon{font-size:.625rem;display:inline-block;transition:transform var(--hm-transition-base)}.tool-detail-row td{padding:0!important}.tool-detail-cell{padding:var(--hm-space-4) var(--hm-space-5) var(--hm-space-4) 2rem!important;background:#11182780;border-left:2px solid var(--hm-accent)}.tl-stat-card{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);padding:var(--hm-space-4) var(--hm-space-5);text-align:center;position:relative;overflow:hidden}.tl-stat-card:hover{border-color:var(--hm-accent-dim)}.tl-stat-value{font-size:var(--hm-text-2xl);font-weight:700;color:var(--hm-text);line-height:1.2}.tl-stat-label{font-size:var(--hm-text-xs);color:var(--hm-text-dim);margin-top:var(--hm-space-1)}.tl-stat-spark{display:flex;justify-content:center;margin-top:var(--hm-space-2)}.tl-view-toggle{display:inline-flex;background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-md);overflow:hidden}.tl-view-btn{padding:var(--hm-space-1) var(--hm-space-3);background:none;border:none;color:var(--hm-text-dim);cursor:pointer;font-size:var(--hm-text-sm);transition:all var(--hm-transition-base)}.tl-view-btn:hover{color:var(--hm-text);background:var(--hm-surface-hover)}.tl-view-active{color:var(--hm-accent)!important;background:var(--hm-accent-dim)!important}.tl-search{flex:1;min-width:200px}.tl-category-chips{display:flex;flex-wrap:wrap;gap:var(--hm-space-1)}.tl-category-chip{padding:var(--hm-space-1) var(--hm-space-3);border-radius:var(--hm-radius-full);border:1px solid var(--hm-border);background:var(--hm-surface);color:var(--hm-text-muted);font-size:var(--hm-text-xs);cursor:pointer;transition:all var(--hm-transition-base);white-space:nowrap}.tl-category-chip:hover{border-color:var(--hm-accent-dim);color:var(--hm-text)}.tl-category-active{background:var(--hm-accent-dim)!important;border-color:var(--hm-accent)!important;color:var(--hm-accent)!important}.tl-group-header{display:flex;align-items:center;gap:var(--hm-space-2);margin-bottom:var(--hm-space-3);padding-bottom:var(--hm-space-2);border-bottom:1px solid var(--hm-border-subtle)}.tl-group-icon{font-size:var(--hm-text-md)}.tl-group-label{font-size:var(--hm-text-sm);font-weight:600;color:var(--hm-text)}.tl-tool-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:var(--hm-space-3)}.tl-tool-card{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);padding:var(--hm-space-4);cursor:pointer;transition:all var(--hm-transition-base)}.tl-tool-card:hover{border-color:#d977064d;box-shadow:var(--hm-shadow-glow-sm)}.tl-tool-card-active{border-left:2px solid var(--hm-accent)}.tl-tool-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--hm-space-2)}.tl-tool-name{font-family:var(--hm-font-mono);font-size:var(--hm-text-sm);font-weight:600;color:var(--hm-text)}.tl-tool-desc{font-size:var(--hm-text-xs);color:var(--hm-text-muted);line-height:var(--hm-leading-normal);margin-bottom:var(--hm-space-3)}.tl-tool-footer{display:flex;align-items:center;justify-content:space-between}.tl-tool-usage{display:flex;align-items:baseline;gap:var(--hm-space-1)}.tl-tool-usage-count{font-family:var(--hm-font-mono);font-size:var(--hm-text-sm);font-weight:600;color:var(--hm-accent)}.tl-tool-usage-zero{font-size:var(--hm-text-sm);color:var(--hm-text-dim)}.tl-tool-usage-label{font-size:var(--hm-text-xs);color:var(--hm-text-dim)}.tl-tool-spark{display:flex;align-items:center}.tl-sparkline{display:block}.tl-tool-detail{margin-top:var(--hm-space-3);padding-top:var(--hm-space-3);border-top:1px solid var(--hm-border-subtle)}.tl-tool-detail-desc{font-size:var(--hm-text-xs);color:var(--hm-text);line-height:var(--hm-leading-relaxed);white-space:pre-wrap;margin-bottom:var(--hm-space-3)}.tl-tool-params{margin-top:var(--hm-space-2)}.tl-tool-params-title{font-size:var(--hm-text-xs);font-weight:600;color:var(--hm-text-muted);margin-bottom:var(--hm-space-2)}.tl-tool-param{display:flex;align-items:center;gap:var(--hm-space-2);padding:var(--hm-space-1) 0;font-size:var(--hm-text-xs)}.tl-tool-param-name{font-family:var(--hm-font-mono);color:var(--hm-text);font-weight:500}.tl-tool-param-type{color:var(--hm-info);font-family:var(--hm-font-mono)}.tl-tool-param-req{color:var(--hm-warning);font-size:.625rem;font-weight:600;text-transform:uppercase}.sk-stat-card{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);padding:var(--hm-space-4) var(--hm-space-5);text-align:center}.sk-stat-card:hover{border-color:var(--hm-accent-dim)}.sk-stat-value{font-size:var(--hm-text-2xl);font-weight:700;color:var(--hm-text);line-height:1.2}.sk-stat-label{font-size:var(--hm-text-xs);color:var(--hm-text-dim);margin-top:var(--hm-space-1)}.sk-search{width:100%;max-width:400px}.sk-card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,360px),1fr));gap:var(--hm-space-4)}.sk-card{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);overflow:hidden;transition:border-color var(--hm-transition-base),box-shadow var(--hm-transition-base)}.sk-card:hover{border-color:#d977064d;box-shadow:var(--hm-shadow-glow-sm)}.sk-card-tested{border-left:2px solid var(--hm-success)}.sk-card-header{display:flex;align-items:center;justify-content:space-between;padding:var(--hm-space-4) var(--hm-space-5);border-bottom:1px solid var(--hm-border-subtle);flex-wrap:wrap;gap:var(--hm-space-2)}.sk-card-title-row{display:flex;align-items:center;gap:var(--hm-space-2)}.sk-card-icon{font-size:var(--hm-text-md);opacity:.7}.sk-card-name{font-family:var(--hm-font-mono);font-size:var(--hm-text-sm);font-weight:600;color:var(--hm-text)}.sk-card-runs{font-size:var(--hm-text-xs);color:var(--hm-text-dim);font-family:var(--hm-font-mono)}.sk-card-actions{display:flex;gap:var(--hm-space-1)}.sk-action-btn{width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:var(--hm-radius-md);border:1px solid var(--hm-border);background:var(--hm-surface);color:var(--hm-text-muted);cursor:pointer;font-size:var(--hm-text-xs);transition:all var(--hm-transition-base)}.sk-action-btn:hover{background:var(--hm-surface-hover);color:var(--hm-text)}.sk-action-test:hover{color:var(--hm-success);border-color:#22c55e4d}.sk-action-code:hover{color:var(--hm-info);border-color:#3b82f64d}.sk-action-edit:hover{color:var(--hm-accent);border-color:var(--hm-accent-dim)}.sk-action-delete:hover{color:var(--hm-danger);border-color:#ef44444d}.sk-card-body{padding:var(--hm-space-4) var(--hm-space-5)}.sk-card-desc{font-size:var(--hm-text-sm);color:var(--hm-text-muted);line-height:var(--hm-leading-normal);margin-bottom:var(--hm-space-2)}.sk-card-meta{display:flex;align-items:center;gap:var(--hm-space-4);font-size:var(--hm-text-xs);color:var(--hm-text-dim)}.sk-card-date,.sk-card-lines{white-space:nowrap}.sk-test-result{margin:0 var(--hm-space-5) var(--hm-space-4);padding:var(--hm-space-3) var(--hm-space-4);border-radius:var(--hm-radius-md);font-family:var(--hm-font-mono);font-size:var(--hm-text-xs)}.sk-test-pass{background:#22c55e14;border:1px solid rgba(34,197,94,.2)}.sk-test-fail{background:#ef444414;border:1px solid rgba(239,68,68,.2)}.sk-test-label{font-weight:600;font-family:var(--hm-font-sans);font-size:var(--hm-text-xs);margin-bottom:var(--hm-space-1)}.sk-test-pass .sk-test-label{color:var(--hm-success)}.sk-test-fail .sk-test-label{color:var(--hm-danger)}.sk-test-output{white-space:pre-wrap;color:var(--hm-text-muted);max-height:120px;overflow-y:auto}.sk-code-container{border-top:1px solid var(--hm-border-subtle)}.sk-code-header{display:flex;align-items:center;justify-content:space-between;padding:var(--hm-space-2) var(--hm-space-5);background:#03071280;border-bottom:1px solid var(--hm-border-subtle)}.sk-code-filename{font-family:var(--hm-font-mono);font-size:var(--hm-text-xs);color:var(--hm-text-dim)}.sk-code-copy{background:none;border:none;color:var(--hm-text-dim);cursor:pointer;font-size:var(--hm-text-sm);padding:var(--hm-space-1);border-radius:var(--hm-radius-sm);transition:color var(--hm-transition-base)}.sk-code-copy:hover{color:var(--hm-text)}.sk-code-wrap{display:flex;max-height:400px;overflow:auto}.sk-line-numbers{padding:var(--hm-space-4) var(--hm-space-3);text-align:right;color:var(--hm-text-dim);font-family:var(--hm-font-mono);font-size:var(--hm-text-xs);line-height:var(--hm-leading-relaxed);background:#03071280;border-right:1px solid var(--hm-border-subtle);-webkit-user-select:none;-moz-user-select:none;user-select:none;min-width:2.5rem;margin:0;flex-shrink:0}.sk-code-block{flex:1;padding:var(--hm-space-4) var(--hm-space-5);margin:0;background:var(--hm-bg);font-family:var(--hm-font-mono);font-size:var(--hm-text-xs);line-height:var(--hm-leading-relaxed);color:var(--hm-text);overflow-x:auto}.sk-code-block code{background:none;padding:0;font-size:inherit}.sk-kw{color:#c084fc;font-weight:600}.sk-str{color:#86efac}.sk-cmt{color:var(--hm-text-dim);font-style:italic}.sk-dec{color:var(--hm-gold)}.sk-num{color:#67e8f9}.sk-builtin{color:#93c5fd}.sk-editor-panel{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);padding:var(--hm-space-5) var(--hm-space-6);margin-top:var(--hm-space-4)}.sk-editor-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--hm-space-4)}.sk-editor-title{font-size:var(--hm-text-md);font-weight:600;color:var(--hm-text)}.sk-field-label{display:block;font-size:var(--hm-text-xs);color:var(--hm-text-muted);margin-bottom:var(--hm-space-1)}.sk-field-hint{font-size:var(--hm-text-xs);color:var(--hm-text-dim);margin-top:var(--hm-space-1)}.sk-editor-wrap{display:flex;border:1px solid var(--hm-border);border-radius:var(--hm-radius-md);overflow:hidden;background:var(--hm-bg)}.sk-editor-gutter{padding:var(--hm-space-4) var(--hm-space-3);text-align:right;color:var(--hm-text-dim);font-family:var(--hm-font-mono);font-size:var(--hm-text-base);line-height:var(--hm-leading-relaxed);background:#03071280;border-right:1px solid var(--hm-border-subtle);-webkit-user-select:none;-moz-user-select:none;user-select:none;min-width:2.5rem;white-space:pre;overflow:hidden;flex-shrink:0}.sk-editor-textarea{flex:1;padding:var(--hm-space-4) var(--hm-space-5);background:transparent;border:none;color:var(--hm-text);font-family:var(--hm-font-mono);font-size:var(--hm-text-base);line-height:var(--hm-leading-relaxed);resize:vertical;-moz-tab-size:4;-o-tab-size:4;tab-size:4;outline:none;min-height:300px;width:100%}.sk-editor-textarea::-moz-placeholder{color:var(--hm-text-dim)}.sk-editor-textarea::placeholder{color:var(--hm-text-dim)}.sk-editor-status{display:flex;gap:var(--hm-space-4);margin-top:var(--hm-space-2);font-size:var(--hm-text-xs);color:var(--hm-text-dim)}.sk-editor-line-count,.sk-editor-char-count{font-family:var(--hm-font-mono)}.sk-validation-box{padding:var(--hm-space-3) var(--hm-space-4);border-radius:var(--hm-radius-md);font-size:var(--hm-text-xs);margin-bottom:var(--hm-space-3)}.sk-validation-ok{background:#22c55e14;border:1px solid rgba(34,197,94,.2);color:var(--hm-success)}.sk-validation-err{background:#eab30814;border:1px solid rgba(234,179,8,.2);color:var(--hm-warning)}.skill-code-block{background:var(--hm-bg);border:1px solid var(--hm-border);border-radius:var(--hm-radius-md);padding:var(--hm-space-4) var(--hm-space-5);font-size:var(--hm-text-base);font-family:var(--hm-font-mono);overflow-x:auto;line-height:var(--hm-leading-relaxed);max-height:400px;overflow-y:auto;margin:0;color:var(--hm-text)}.skill-card{transition:border-color var(--hm-transition-base),box-shadow var(--hm-transition-base)}.skill-card:hover{border-color:#d977064d;box-shadow:var(--hm-shadow-glow-sm)}.skill-editor{font-family:var(--hm-font-mono);font-size:var(--hm-text-base);line-height:var(--hm-leading-relaxed);-moz-tab-size:4;-o-tab-size:4;tab-size:4;min-height:300px}.cfg-group{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);overflow:hidden;box-shadow:var(--hm-shadow-sm)}.cfg-group-header{display:flex;align-items:center;gap:var(--hm-space-3);padding:var(--hm-space-4) var(--hm-space-5);background:linear-gradient(135deg,var(--hm-surface),var(--hm-surface-elevated));border-bottom:1px solid var(--hm-border);transition:background var(--hm-transition-base)}.cfg-group-header:hover{background:var(--hm-surface-hover)}.cfg-group-icon{font-size:var(--hm-text-lg);opacity:.8}.cfg-group-label{font-weight:600;font-size:var(--hm-text-md);color:var(--hm-text);flex:1}.cfg-group-arrow{font-size:var(--hm-text-xs);color:var(--hm-text-dim);font-family:var(--hm-font-mono)}.cfg-group-body{padding:var(--hm-space-3);display:flex;flex-direction:column;gap:var(--hm-space-3)}.cfg-section{background:var(--hm-bg);border:1px solid rgba(31,41,55,.5);border-radius:var(--hm-radius-md);overflow:hidden}.cfg-section-header{display:flex;align-items:center;gap:var(--hm-space-2);padding:var(--hm-space-3) var(--hm-space-4);transition:background var(--hm-transition-base)}.cfg-section-header:hover{background:#1f29374d}.cfg-section-name{font-size:var(--hm-text-sm);font-weight:500;color:var(--hm-text)}.cfg-section-body{padding:0 var(--hm-space-3) var(--hm-space-3)}.cfg-field-error{font-size:var(--hm-text-xs);color:#f87171;margin-top:2px;font-family:var(--hm-font-sans);font-weight:400}.cfg-input-error{border-color:#ef444480!important;box-shadow:0 0 0 2px #ef444426!important}.cfg-change-count{font-size:var(--hm-text-xs);color:var(--hm-accent-hover);background:var(--hm-accent-dim);padding:2px 8px;border-radius:var(--hm-radius-full);font-weight:600}.cfg-diff-list{max-height:50vh;overflow-y:auto;display:flex;flex-direction:column;gap:var(--hm-space-3)}.cfg-diff-entry{border:1px solid var(--hm-border);border-radius:var(--hm-radius-md);overflow:hidden}.cfg-diff-path{padding:var(--hm-space-2) var(--hm-space-3);background:var(--hm-surface-hover);border-bottom:1px solid var(--hm-border);color:var(--hm-accent-hover)}.cfg-diff-values{font-size:var(--hm-text-sm)}.cfg-diff-old{padding:var(--hm-space-2) var(--hm-space-3);background:#ef444414;border-bottom:1px solid rgba(31,41,55,.3);color:#f87171;white-space:pre-wrap;word-break:break-word}.cfg-diff-new{padding:var(--hm-space-2) var(--hm-space-3);background:#22c55e14;color:#4ade80;white-space:pre-wrap;word-break:break-word}.cfg-diff-label{display:inline-block;width:1.25rem;font-weight:700;font-family:var(--hm-font-mono)}.knowledge-highlight{background:#d977064d;color:#fde68a;padding:0 2px;border-radius:2px}.knowledge-preview{border-left:2px solid var(--hm-border);padding-left:var(--hm-space-4);max-height:4rem;overflow:hidden;font-style:italic}.kb-stats-bar{display:flex;gap:var(--hm-space-4);margin-bottom:var(--hm-space-4);flex-wrap:wrap}.kb-stat{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);padding:var(--hm-space-3) var(--hm-space-4);text-align:center;min-width:80px}.kb-stat-value{display:block;font-size:1.25rem;font-weight:700;color:var(--hm-gold)}.kb-stat-label{display:block;font-size:var(--hm-text-xs);color:var(--hm-text-dim)}.kb-score-badge{font-family:var(--hm-font-mono);font-size:var(--hm-text-xs);color:var(--hm-text-dim);background:var(--hm-gold-dim);padding:1px 6px;border-radius:3px}.kb-search-result{border-left:3px solid var(--hm-accent-dim)}.kb-ingest-form{border-left:3px solid var(--hm-accent)}.kb-tree,.kb-tree-list{display:flex;flex-direction:column;gap:var(--hm-space-2)}.kb-tree-node{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);overflow:hidden}.kb-tree-header{display:flex;align-items:center;gap:var(--hm-space-2);padding:var(--hm-space-3) var(--hm-space-4);cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:background .15s}.kb-tree-header:hover{background:var(--hm-surface-hover)}.kb-tree-arrow{font-size:10px;color:var(--hm-text-dim);transition:transform .2s;flex-shrink:0}.kb-tree-icon{font-size:1rem;flex-shrink:0}.kb-tree-name{font-family:var(--hm-font-mono);font-size:var(--hm-text-sm);font-weight:600}.kb-tree-actions{margin-left:auto;display:flex;gap:var(--hm-space-1);flex-shrink:0}.kb-tree-meta{padding:0 var(--hm-space-4) var(--hm-space-2) 2.25rem;font-size:var(--hm-text-xs);color:var(--hm-text-dim)}.kb-tree-preview{padding:0 var(--hm-space-4) var(--hm-space-3) 2.25rem;font-size:var(--hm-text-sm);color:var(--hm-text-muted);font-style:italic;max-height:3rem;overflow:hidden;white-space:pre-wrap;word-break:break-word}.kb-chunk-browser{padding:0 var(--hm-space-4) var(--hm-space-4) var(--hm-space-4)}.kb-chunk-loading{display:flex;align-items:center;gap:var(--hm-space-2);color:var(--hm-text-dim);font-size:var(--hm-text-sm);padding:var(--hm-space-2) 0}.kb-chunk-list{display:flex;flex-direction:column;gap:var(--hm-space-1)}.kb-chunk-header{display:flex;justify-content:space-between;padding:var(--hm-space-2) 0;border-bottom:1px solid var(--hm-border)}.kb-chunk-empty{padding:var(--hm-space-2) 0}.kb-chunk-item{padding:var(--hm-space-2) var(--hm-space-3);border-radius:var(--hm-radius-md);border:1px solid var(--hm-border-subtle);cursor:pointer;transition:all .15s}.kb-chunk-item:hover{background:var(--hm-surface-hover);border-color:var(--hm-border)}.kb-chunk-selected{background:var(--hm-gold-dim)!important;border-color:#d977064d!important}.kb-chunk-item-header{display:flex;align-items:center;gap:var(--hm-space-2);margin-bottom:2px}.kb-chunk-index{font-family:var(--hm-font-mono);font-size:var(--hm-text-xs);font-weight:600;color:var(--hm-accent);min-width:2rem}.kb-chunk-chars{font-size:var(--hm-text-xs);color:var(--hm-text-dim);min-width:4.5rem}.kb-chunk-bar{flex:1;height:4px;background:var(--hm-border);border-radius:2px;overflow:hidden}.kb-chunk-bar-fill{height:100%;background:var(--hm-accent);border-radius:2px;transition:width .3s}.kb-chunk-preview{font-size:var(--hm-text-xs);color:var(--hm-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kb-chunk-content{font-size:var(--hm-text-sm);color:var(--hm-text);white-space:pre-wrap;word-break:break-word;max-height:20rem;overflow-y:auto;margin-top:var(--hm-space-2);padding:var(--hm-space-2);background:var(--hm-bg);border-radius:var(--hm-radius-md);border:1px solid var(--hm-border)}.memory-scope-badge{display:inline-block;padding:2px 8px;border-radius:4px;font-size:var(--hm-text-sm);font-weight:600;font-family:var(--hm-font-mono)}.memory-scope-global{background:#d9770633;color:var(--hm-gold);border:1px solid rgba(217,119,6,.3)}.memory-scope-user{background:#eab30826;color:#fde047;border:1px solid rgba(234,179,8,.25)}.memory-checkbox{width:16px;height:16px;accent-color:var(--hm-accent);cursor:pointer}.mem-stats-bar{display:flex;gap:var(--hm-space-4);margin-bottom:var(--hm-space-4);flex-wrap:wrap}.mem-stat{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);padding:var(--hm-space-3) var(--hm-space-4);text-align:center;min-width:80px}.mem-stat-value{display:block;font-size:1.25rem;font-weight:700;color:var(--hm-gold)}.mem-stat-label{display:block;font-size:var(--hm-text-xs);color:var(--hm-text-dim)}.mem-stat-action{display:flex;align-items:center;justify-content:center}.mem-add-form{border-left:3px solid var(--hm-accent)}.mem-tree{display:flex;flex-direction:column;gap:var(--hm-space-2)}.mem-tree-node{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);overflow:hidden}.mem-tree-header{display:flex;align-items:center;gap:var(--hm-space-2);padding:var(--hm-space-3) var(--hm-space-4);cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:background .15s}.mem-tree-header:hover{background:var(--hm-surface-hover)}.mem-tree-arrow{font-size:10px;color:var(--hm-text-dim);transition:transform .2s;flex-shrink:0}.mem-tree-entries{padding:0 var(--hm-space-4) var(--hm-space-3)}.mem-tree-loading{display:flex;align-items:center;gap:var(--hm-space-2);color:var(--hm-text-dim);font-size:var(--hm-text-sm);padding:var(--hm-space-2) 0}.mem-tree-empty{padding:var(--hm-space-2) 0}.mem-tree-entry{padding:var(--hm-space-2) var(--hm-space-3);border-radius:var(--hm-radius-md);border:1px solid var(--hm-border-subtle);margin-bottom:var(--hm-space-1);transition:all .15s}.mem-tree-entry:hover{background:var(--hm-surface-hover)}.mem-tree-entry-selected{background:var(--hm-gold-dim);border-color:#d977064d}.mem-tree-entry-header{display:flex;align-items:center;gap:var(--hm-space-2);margin-bottom:2px}.mem-tree-key{font-family:var(--hm-font-mono);font-size:var(--hm-text-xs);font-weight:500;color:var(--hm-text-muted)}.mem-tree-entry-actions{margin-left:auto;display:flex;gap:var(--hm-space-1);flex-shrink:0}.mem-tree-value{font-size:var(--hm-text-sm);color:var(--hm-text);white-space:pre-wrap;word-break:break-word;max-height:6rem;overflow:hidden;padding-left:1.5rem}.mem-tree-edit{padding-left:1.5rem;margin-top:var(--hm-space-1)}.ag-checkbox{width:14px;height:14px;accent-color:var(--hm-accent);cursor:pointer}.ag-stats-bar{display:flex;gap:var(--hm-space-4);margin-bottom:var(--hm-space-4);flex-wrap:wrap}.ag-stat{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);padding:var(--hm-space-3) var(--hm-space-4);text-align:center;min-width:80px}.ag-stat-value{display:block;font-size:1.25rem;font-weight:700;color:var(--hm-gold)}.ag-stat-label{display:block;font-size:var(--hm-text-xs);color:var(--hm-text-dim)}.ag-stat-running{color:var(--hm-success)!important}.ag-stat-completed{color:var(--hm-info)!important}.ag-stat-failed{color:var(--hm-danger)!important}.ag-filter-bar{display:flex;gap:var(--hm-space-2);margin-bottom:var(--hm-space-4);flex-wrap:wrap}.ag-filter-btn{padding:var(--hm-space-1) var(--hm-space-3);border-radius:var(--hm-radius-md);font-size:var(--hm-text-xs);color:var(--hm-text-muted);background:var(--hm-surface);border:1px solid var(--hm-border);cursor:pointer;transition:all .15s;display:flex;align-items:center;gap:var(--hm-space-1)}.ag-filter-btn:hover{background:var(--hm-surface-hover);color:var(--hm-text)}.ag-filter-active{background:var(--hm-accent-dim)!important;border-color:var(--hm-accent)!important;color:var(--hm-gold)!important}.ag-filter-count{font-family:var(--hm-font-mono);font-weight:600;font-size:.65rem;background:var(--hm-border);padding:0 4px;border-radius:3px}.ag-filter-active .ag-filter-count{background:#d977064d}.ag-card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,340px),1fr));gap:var(--hm-space-4)}.ag-card{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);padding:var(--hm-space-4);display:flex;flex-direction:column;gap:var(--hm-space-2);transition:border-color .2s,box-shadow .2s}.ag-card:hover{border-color:var(--hm-border)}.ag-card-running{border-left:3px solid var(--hm-success)}.ag-card-completed{border-left:3px solid var(--hm-info)}.ag-card-failed{border-left:3px solid var(--hm-danger)}.ag-card-timeout{border-left:3px solid var(--hm-warning)}.ag-card-killed{border-left:3px solid var(--hm-text-dim)}.ag-card-header{display:flex;align-items:center;justify-content:space-between}.ag-card-title-row{display:flex;align-items:center;gap:var(--hm-space-2);min-width:0;flex-wrap:nowrap}.ag-card-label{font-weight:600;font-size:var(--hm-text-sm);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ag-card-id{font-family:var(--hm-font-mono);font-size:var(--hm-text-xs);color:var(--hm-text-dim);flex:none}.ag-status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.ag-dot-running{background:var(--hm-success);box-shadow:0 0 6px var(--hm-success);animation:loop-pulse 2s ease-in-out infinite}.ag-dot-completed{background:var(--hm-info)}.ag-dot-failed{background:var(--hm-danger)}.ag-dot-timeout{background:var(--hm-warning)}.ag-dot-killed{background:var(--hm-text-dim)}.ag-status-badge{font-size:var(--hm-text-xs);font-weight:600;padding:1px 8px;border-radius:4px;text-transform:uppercase;letter-spacing:.05em}.ag-badge-running{background:#22c55e26;color:var(--hm-success)}.ag-badge-completed{background:#3b82f626;color:var(--hm-info)}.ag-badge-failed{background:#ef444426;color:var(--hm-danger)}.ag-badge-timeout{background:#eab30826;color:var(--hm-warning)}.ag-badge-killed{background:#9ca3af26;color:var(--hm-text-dim)}.ag-card-goal{font-size:var(--hm-text-sm);color:var(--hm-text-muted);line-height:1.4;height:3.5rem;overflow:hidden;position:relative}.ag-card-goal:after{content:"";position:absolute;inset:auto 0 0 0;height:1.5rem;background:linear-gradient(transparent,var(--hm-surface));pointer-events:none}.ag-card-clickable:hover .ag-card-goal:after{background:linear-gradient(transparent,var(--hm-surface-hover))}.ag-progress-bar{height:3px;background:var(--hm-border);border-radius:2px;overflow:hidden}.ag-progress-fill{height:100%;background:var(--hm-success);border-radius:2px;transition:width .5s;animation:ag-progress-glow 2s ease-in-out infinite}@keyframes ag-progress-glow{0%,to{opacity:1}50%{opacity:.6}}.ag-card-stats{display:flex;gap:var(--hm-space-3)}.ag-card-stat{flex:1;text-align:center}.ag-card-stat-label{display:block;font-size:.6rem;color:var(--hm-text-dim);text-transform:uppercase;letter-spacing:.05em}.ag-card-stat-value{display:block;font-family:var(--hm-font-mono);font-size:var(--hm-text-sm);font-weight:600}.ag-card-tools{display:flex;flex-wrap:wrap;gap:4px}.ag-tool-chip{font-family:var(--hm-font-mono);font-size:.6rem;padding:1px 6px;background:var(--hm-gold-dim);color:var(--hm-text-muted);border-radius:3px;border:1px solid var(--hm-border-subtle)}.ag-card-policy{display:flex;flex-wrap:nowrap;gap:4px;min-width:0}.ag-policy-chip{font-family:var(--hm-font-mono);font-size:.62rem;padding:1px 7px;color:var(--hm-text-muted);background:var(--hm-surface-elevated);border:1px solid var(--hm-border);border-radius:3px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ag-policy-chip:not(.ag-policy-effort){flex:0 1 auto}.ag-policy-effort{flex:0 0 auto;color:var(--hm-accent);border-color:#c58b3247}.ag-card-body{display:flex;flex-direction:column;gap:var(--hm-space-2);text-align:left;border-radius:var(--hm-radius-md)}.ag-card-clickable{cursor:pointer;transition:background .12s ease,box-shadow .12s ease}.ag-card-clickable:hover{background:var(--hm-surface-hover)}.ag-card-clickable:focus-visible{outline:2px solid var(--hm-accent);outline-offset:2px}.modal-content.ag-detail-modal{width:min(1000px,94vw);max-width:min(1000px,94vw);max-height:88vh;display:flex;flex-direction:column;gap:var(--hm-space-3);overflow-y:auto}.ag-detail-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--hm-space-3)}.ag-detail-title-row{display:flex;align-items:center;flex-wrap:wrap;gap:var(--hm-space-2);min-width:0}.ag-detail-title{margin:0;font-size:1rem;font-weight:650;letter-spacing:-.015em;color:#f2f3f6}.ag-detail-meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--hm-space-2) var(--hm-space-3)}.ag-detail-meta-item{display:flex;flex-direction:column;gap:1px;min-width:0}.ag-detail-meta-label{font-size:.6rem;color:var(--hm-text-dim);text-transform:uppercase;letter-spacing:.05em}.ag-detail-meta-value{font-family:var(--hm-font-mono);font-size:var(--hm-text-xs);color:var(--hm-text);word-break:break-word}.ag-detail-source{margin:0;font-size:.66rem;color:var(--hm-text-dim);font-style:italic}.ag-detail-section{display:flex;flex-direction:column;gap:4px}.ag-detail-section-head{display:flex;align-items:center;justify-content:space-between;gap:var(--hm-space-2)}.ag-detail-text{margin:0;padding:var(--hm-space-2);max-height:34vh;overflow:auto;font-family:var(--hm-font-mono);font-size:var(--hm-text-xs);line-height:1.5;white-space:pre-wrap;word-break:break-word;color:var(--hm-text-muted);background:var(--hm-bg);border:1px solid var(--hm-border);border-radius:var(--hm-radius-md)}.ag-detail-pending{margin:0;font-size:var(--hm-text-xs);color:var(--hm-text-dim)}@media(max-width:640px){.modal-content.ag-detail-modal{width:96vw;max-width:96vw;max-height:92vh}.ag-detail-text{max-height:40vh}}.ag-card-meta{display:flex;justify-content:space-between;gap:var(--hm-space-2)}.ag-card-result,.ag-card-error{padding:var(--hm-space-2);border-radius:var(--hm-radius-md);background:var(--hm-bg);border:1px solid var(--hm-border)}.ag-result-label{font-size:.6rem;color:var(--hm-text-dim);text-transform:uppercase;margin-bottom:2px}.ag-result-text{font-size:var(--hm-text-xs);white-space:pre-wrap;word-break:break-word;max-height:6rem;overflow:hidden;color:var(--hm-text-muted)}.ag-card-error{border-color:#ef444433}.ag-card-actions{display:flex;justify-content:flex-end}.loop-status-dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex-shrink:0}.loop-status-running{background:var(--hm-success);box-shadow:0 0 6px var(--hm-success);animation:loop-pulse 2s ease-in-out infinite}.loop-status-error{background:var(--hm-danger);box-shadow:0 0 6px var(--hm-danger)}.loop-status-stopped{background:var(--hm-text-dim)}@keyframes loop-pulse{0%,to{opacity:1;box-shadow:0 0 6px var(--hm-success)}50%{opacity:.5;box-shadow:0 0 2px var(--hm-success)}}.loop-history{background:var(--hm-bg);border:1px solid var(--hm-border);border-radius:var(--hm-radius-md);padding:var(--hm-space-3) var(--hm-space-4);max-height:200px;overflow-y:auto}.log-filter-field{flex:1 1 0%;min-width:0}.log-filter-row{display:flex;align-items:center;gap:.375rem;min-width:0}.log-filter-input{min-width:120px}@media(max-width:640px){.log-filter-field{flex:1 0 100%}.log-filter-input{min-width:0}}.loop-history-entry{font-size:var(--hm-text-sm);font-family:var(--hm-font-mono);color:var(--hm-text-muted);padding:var(--hm-space-1) 0;border-bottom:1px solid rgba(31,41,55,.3);white-space:pre-wrap;word-break:break-word}.loop-history-entry:last-child{border-bottom:none}.loop-card{display:flex;flex-direction:column;gap:var(--hm-space-3)}.loop-card-main{min-width:0;cursor:pointer;border-radius:var(--hm-radius-md);transition:background .12s ease,box-shadow .12s ease}.loop-card-main:hover{background:var(--hm-surface-hover)}.loop-card-goal{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden;margin-bottom:var(--hm-space-2);color:var(--hm-text);font-size:var(--hm-text-sm);line-height:1.45}.loop-card-main:focus-visible{outline:2px solid var(--hm-accent);outline-offset:3px}.loop-card-actions{display:flex;justify-content:flex-end;gap:var(--hm-space-2)}.loop-card-preview{display:flex;flex-direction:column;gap:3px;margin-top:var(--hm-space-3);padding:var(--hm-space-2);border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-md);background:var(--hm-bg);font-size:var(--hm-text-xs);color:var(--hm-text-dim);max-height:4.5rem;overflow:hidden;white-space:pre-wrap;word-break:break-word}.loop-detail-modal{gap:var(--hm-space-4)}.loop-detail-goal{max-height:22vh}.loop-detail-condition{max-height:14vh}.loop-detail-history-head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--hm-space-3);border-top:1px solid var(--hm-border);padding-top:var(--hm-space-3)}.loop-detail-history-head h3{margin:0 0 2px;font-size:var(--hm-text-sm)}.loop-detail-notice{padding:var(--hm-space-2);color:var(--hm-text-muted);font-size:var(--hm-text-xs);background:#c58b3214;border:1px solid rgba(197,139,50,.2);border-radius:var(--hm-radius-md)}.loop-detail-iterations{display:flex;flex-direction:column;gap:var(--hm-space-3)}.loop-detail-iteration{display:flex;flex-direction:column;gap:var(--hm-space-2);padding:var(--hm-space-3);border:1px solid var(--hm-border);background:var(--hm-surface-elevated);border-radius:var(--hm-radius-lg)}.loop-detail-iteration-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--hm-space-2)}.loop-detail-iteration-head>div{display:flex;flex-direction:column;min-width:0}.loop-detail-turn-meta{display:flex;flex-wrap:wrap;gap:5px var(--hm-space-3);font-family:var(--hm-font-mono);font-size:.65rem;color:var(--hm-text-dim)}.loop-detail-response{max-height:30vh}.loop-detail-tools{display:flex;flex-wrap:wrap;gap:4px}.loop-context-details{padding:var(--hm-space-3);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);background:var(--hm-bg)}.loop-context-details summary{cursor:pointer;color:var(--hm-text-muted);font-size:var(--hm-text-xs);font-weight:600}.loop-context-details[open] summary{margin-bottom:var(--hm-space-2)}.loop-context-list{display:flex;flex-direction:column;gap:var(--hm-space-2);margin-top:var(--hm-space-2)}.loop-context-entry{max-height:18vh}@media(max-width:640px){.loop-card-actions{justify-content:stretch}.loop-card-actions .btn{flex:1}.loop-detail-history-head{align-items:flex-start}.loop-detail-turn-meta{display:grid;grid-template-columns:1fr 1fr}}.process-output-preview{background:var(--hm-bg);border:1px solid var(--hm-border);border-radius:var(--hm-radius-md);padding:var(--hm-space-3) var(--hm-space-4);font-size:var(--hm-text-sm);font-family:var(--hm-font-mono);color:var(--hm-text-muted);max-height:120px;overflow-y:auto;white-space:pre-wrap;word-break:break-word;margin:0}.hm-input:focus-visible,.hm-select:focus-visible,.chat-input:focus-visible,.toggle-switch input:focus-visible+.toggle-slider,.session-checkbox:focus-visible,.memory-checkbox:focus-visible{outline:2px solid var(--hm-accent);outline-offset:2px}.page-fade-in{animation:page-fade .2s ease-out}@keyframes page-fade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.empty-state{display:flex;flex-direction:column;align-items:center;gap:var(--hm-space-3);padding:var(--hm-space-8) var(--hm-space-5);text-align:center}.empty-state-icon{font-size:1.75rem;opacity:.4}.empty-state-text{color:var(--hm-text-muted);font-size:var(--hm-text-md)}.empty-state-hint{color:var(--hm-text-dim);font-size:var(--hm-text-sm)}.cron-preset-btn{display:inline-block;padding:.125rem .5rem;background:var(--hm-gold-dim);border:1px solid rgba(217,119,6,.2);border-radius:var(--hm-radius-sm);font-size:var(--hm-text-xs);color:var(--hm-text-muted);cursor:pointer;transition:all var(--hm-transition-base)}.cron-preset-btn:hover{background:var(--hm-accent-dim);color:var(--hm-text);border-color:#d9770666}.hm-card-accent{border-top:2px solid var(--hm-accent)}.hm-divider{height:1px;background:linear-gradient(90deg,transparent,var(--hm-accent-dim),transparent);border:none;margin:var(--hm-space-5) 0}.hm-mono{font-family:var(--hm-font-mono)}.hm-section-title{font-size:var(--hm-text-sm);font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--hm-text-dim)}.ws-indicator{width:8px;height:8px;border-radius:50%;display:inline-block;flex-shrink:0;transition:background .3s,box-shadow .3s}.ws-connected{background:var(--hm-success);box-shadow:0 0 6px var(--hm-success)}.ws-disconnected{background:var(--hm-danger);box-shadow:0 0 6px var(--hm-danger)}.ws-connecting,.ws-reconnecting{background:var(--hm-warning);box-shadow:0 0 6px var(--hm-warning);animation:ws-pulse 1.2s ease-in-out infinite}@keyframes ws-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(.75)}}.ws-toast{position:fixed;bottom:var(--hm-space-5);left:50%;transform:translate(-50%);z-index:9999;padding:var(--hm-space-3) var(--hm-space-5);border-radius:var(--hm-radius-lg);font-size:var(--hm-text-sm);font-weight:500;box-shadow:var(--hm-shadow-lg);pointer-events:none}.ws-toast-success{background:#22c55e26;border:1px solid rgba(34,197,94,.3);color:#4ade80}.ws-toast-warn{background:#eab30826;border:1px solid rgba(234,179,8,.3);color:#fbbf24}.ws-toast-info{background:#3b82f626;border:1px solid rgba(59,130,246,.3);color:#60a5fa}.ws-toast-enter-active{animation:ws-toast-in .3s ease-out}.ws-toast-leave-active{animation:ws-toast-out .25s ease-in forwards}@keyframes ws-toast-in{0%{opacity:0;transform:translate(-50%) translateY(12px)}to{opacity:1;transform:translate(-50%) translateY(0)}}@keyframes ws-toast-out{0%{opacity:1;transform:translate(-50%) translateY(0)}to{opacity:0;transform:translate(-50%) translateY(12px)}}.toast-stack{position:fixed;bottom:var(--hm-space-5);right:var(--hm-space-5);z-index:9999;display:flex;flex-direction:column;align-items:flex-end;gap:var(--hm-space-2);pointer-events:none}.toast-item{display:flex;align-items:center;gap:var(--hm-space-2);max-width:380px;padding:var(--hm-space-3) var(--hm-space-4);border-radius:var(--hm-radius-lg);font-size:var(--hm-text-sm);font-weight:500;box-shadow:var(--hm-shadow-lg);cursor:pointer;pointer-events:auto;background:var(--hm-surface);border:1px solid var(--hm-border);color:var(--hm-text)}.toast-item .toast-icon{flex-shrink:0}.toast-item .toast-text{overflow-wrap:anywhere}.toast-success{background:#22c55e1f;border-color:#22c55e4d;color:#4ade80}.toast-error{background:#ef44441f;border-color:#ef444459;color:#f87171}.toast-info{background:#3b82f61f;border-color:#3b82f64d;color:#60a5fa}.toast-enter-active{transition:all .25s ease-out}.toast-leave-active{transition:all .2s ease-in}.toast-enter-from,.toast-leave-to{opacity:0;transform:translateY(10px)}.modal-enter-active{transition:opacity .15s ease-out}.modal-leave-active{transition:opacity .12s ease-in}.modal-enter-from,.modal-leave-to{opacity:0}.confirm-dialog{max-width:420px}.palette-overlay{align-items:flex-start;padding-top:14vh}.palette{width:90%;max-width:520px;background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-xl);box-shadow:var(--hm-shadow-lg);overflow:hidden}.palette-input{width:100%;background:transparent;border:none;border-bottom:1px solid var(--hm-border);padding:var(--hm-space-4) var(--hm-space-5);font-size:var(--hm-text-base);color:var(--hm-text);outline:none}.palette-input::-moz-placeholder{color:var(--hm-text-muted)}.palette-input::placeholder{color:var(--hm-text-muted)}.palette-results{max-height:320px;overflow-y:auto;padding:var(--hm-space-2)}.palette-item{display:flex;align-items:center;gap:var(--hm-space-2);width:100%;text-align:left;padding:var(--hm-space-2) var(--hm-space-3);border-radius:var(--hm-radius-md);font-size:var(--hm-text-sm);color:var(--hm-text);background:transparent;border:none;cursor:pointer}.palette-item.selected{background:var(--hm-surface-hover)}.palette-item .palette-icon{flex-shrink:0}.palette-item .palette-group{color:var(--hm-text-muted)}.palette-empty{padding:var(--hm-space-4);text-align:center;color:var(--hm-text-muted);font-size:var(--hm-text-sm)}.palette-footer{display:flex;gap:var(--hm-space-3);padding:var(--hm-space-2) var(--hm-space-4);border-top:1px solid var(--hm-border);font-size:var(--hm-text-xs);color:var(--hm-text-muted)}.palette-footer kbd{padding:0 .3em;background:var(--hm-bg);border:1px solid var(--hm-border);border-radius:var(--hm-radius-sm)}.item-enter{animation:item-slide-in .25s ease-out}@keyframes item-slide-in{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:translate(0)}}.dash-stat-value{transition:color var(--hm-transition-slow)}.badge{transition:transform var(--hm-transition-fast),background var(--hm-transition-base)}.badge-pop{animation:badge-pop .3s var(--hm-transition-spring)}@keyframes badge-pop{0%{transform:scale(1)}50%{transform:scale(1.3)}to{transform:scale(1)}}.action-pending{opacity:.6;pointer-events:none}.action-success{animation:action-flash-ok .5s ease-out}.action-error{animation:action-flash-err .5s ease-out}@keyframes action-flash-ok{0%{box-shadow:0 0 #22c55e66}to{box-shadow:0 0 0 0 transparent}}@keyframes action-flash-err{0%{box-shadow:0 0 #ef444466}to{box-shadow:0 0 0 0 transparent}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-nav{position:absolute;top:-100%;left:var(--hm-space-5);z-index:1000;padding:var(--hm-space-3) var(--hm-space-5);background:var(--hm-accent);color:#fff;border-radius:var(--hm-radius-md);font-size:var(--hm-text-md);font-weight:600;text-decoration:none;transition:top var(--hm-transition-base)}.skip-nav:focus{top:var(--hm-space-3)}.ag-filter-btn:focus-visible,.kb-tree-header:focus-visible,.kb-chunk-item:focus-visible,.cron-preset-btn:focus-visible,.dash-health-item:focus-visible,[role=tab]:focus-visible,[role=button]:focus-visible,a:focus-visible{outline:2px solid var(--hm-accent);outline-offset:2px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}.spinner{animation:none;border-top-color:var(--hm-accent)}.page-fade-in{animation:none}.hm-sidebar,.dash-ring-progress{transition:none}.ws-connecting,.ws-reconnecting,.ws-toast{animation:none}}@media(forced-colors:active){.status-dot,.ag-status-dot,.dash-health-dot,.loop-status-dot{forced-color-adjust:none}.btn-primary{border:1px solid ButtonText}.hm-card{border:1px solid CanvasText}.nav-item.active{border-left:3px solid Highlight}}.hm-main .p-6{max-width:1600px}@media(min-width:1200px){:root{--hm-text-md: .9375rem}}@media(max-width:768px){.hm-main .p-6{padding:var(--hm-space-5)}.hm-table{font-size:var(--hm-text-sm)}.hm-table th,.hm-table td{padding:var(--hm-space-2) var(--hm-space-3)}.mobile-hide{display:none!important}.chat-bubble{max-width:90%}.btn{min-height:36px}.hm-input,.hm-select{min-height:36px;font-size:1rem}.toggle-switch{width:44px;height:24px}.toggle-slider:before{width:18px;height:18px}.toggle-switch input:checked+.toggle-slider:before{transform:translate(20px)}.modal-content{padding:var(--hm-space-5);width:95%}.config-key-col{width:auto!important;min-width:80px}.log-chip{padding:var(--hm-space-1) .625rem;font-size:var(--hm-text-sm)}.session-checkbox,.memory-checkbox{width:18px;height:18px}.cron-preset-btn{padding:var(--hm-space-1) .625rem;font-size:var(--hm-text-sm)}}@media(max-width:640px){.dash-hero-left{flex-basis:100%}}@media(max-width:480px){.chat-bubble-wrap{max-width:90%}.chat-avatar{width:24px;height:24px}.chat-input-row{flex-direction:column;align-items:stretch}.chat-input{width:100%}.chat-send-btn{width:100%;min-width:unset}.chat-suggestions{flex-direction:column}.chat-suggestion{width:100%}.stat-grid-mobile{grid-template-columns:repeat(2,1fr)!important}h1{font-size:1.125rem!important}.hm-main .p-6{padding:var(--hm-space-4)}}.fts-result-user{background:#11182780;border-color:#1f2937}.fts-result-assistant{background:#312e814d;border-color:#312e814d}.fts-result-summary{background:#451a0333;border-color:#78350f4d}.fts-result-fts{background:#022c2233;border-color:#064e3b4d}.fts-result-channel{background:#3b076433;border-color:#581c874d}.fts-result-default{background:#1118274d;border-color:#1f293780}.fts-highlight{background:#d977064d;color:var(--hm-gold);border-radius:2px;padding:0 2px}.health-card{padding:1rem;border-left:3px solid transparent;transition:border-color .2s}.health-card-ok{border-left-color:#22c55e}.health-card-degraded{border-left-color:#eab308}.health-card-down{border-left-color:#ef4444}.health-card-unconfigured{border-left-color:var(--hm-border)}.health-card-header{display:flex;align-items:center;gap:.5rem;margin-bottom:.375rem}.health-card-icon{font-size:.875rem;flex-shrink:0}.health-card-name{font-size:.8125rem;font-weight:600;flex:1}.health-card-detail{font-size:.75rem;color:var(--hm-text-muted);line-height:1.4}.health-card-meta{margin-top:.5rem;padding-top:.5rem;border-top:1px solid var(--hm-border-subtle)}.health-meta-row{display:flex;align-items:center;gap:.5rem;padding:1px 0}.health-host-item{display:flex;align-items:center;gap:.375rem;padding:2px 0}.health-host-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}.health-host-dot.dot-connected{background:#22c55e}.health-host-dot.dot-idle{background:#6b7280}.health-host-dot.dot-unknown{background:#374151}.res-bar-bg{height:8px;background:#1e293b;border-radius:4px;overflow:hidden}.res-bar-fill{height:100%;border-radius:4px;transition:width .4s ease;min-width:2px}.res-bar-blue{background:#3b82f6}.res-bar-purple{background:#a855f7}.res-bar-emerald{background:#10b981}.res-bar-amber{background:#f59e0b}.discord-global-card{display:grid;gap:var(--hm-space-4)}.discord-global-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--hm-space-4)}.discord-global-heading p{margin-top:.2rem;color:var(--hm-text-dim);font-size:var(--hm-text-xs)}.discord-global-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--hm-space-3)}.discord-global-toggle,.discord-global-list{padding:var(--hm-space-4);border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-md);background:#04070b40}.discord-global-toggle{display:flex;align-items:center;justify-content:space-between;gap:var(--hm-space-4);color:var(--hm-text-muted);font-size:var(--hm-text-xs)}.discord-global-list{display:grid;gap:var(--hm-space-2)}.discord-global-list strong{color:var(--hm-text);font-size:var(--hm-text-xs)}.discord-global-list>p{color:var(--hm-text-dim);font-size:.64rem;line-height:1.45}.discord-global-footer{padding-top:var(--hm-space-3);display:flex;align-items:center;justify-content:space-between;gap:var(--hm-space-4);border-top:1px solid var(--hm-border-subtle)}.discord-global-footer span{color:var(--hm-text-dim);font-size:var(--hm-text-xs)}@media(max-width:760px){.discord-global-heading,.discord-global-footer{align-items:stretch;flex-direction:column}.discord-global-grid{grid-template-columns:minmax(0,1fr)}.discord-global-footer .btn{width:100%}}.llm-advanced{margin-top:var(--hm-space-4);overflow:hidden;background:#04070b45;border:1px solid var(--hm-border);border-radius:var(--hm-radius-md)}.llm-advanced>summary{min-height:50px;padding:var(--hm-space-3) var(--hm-space-4);display:flex;align-items:center;justify-content:space-between;gap:var(--hm-space-4);color:var(--hm-text);cursor:pointer;list-style:none}.llm-advanced>summary::-webkit-details-marker{display:none}.llm-advanced>summary:after{content:"+";flex:none;color:var(--hm-accent);font-size:1rem}.llm-advanced[open]>summary:after{content:"−"}.llm-advanced>summary span{font-size:var(--hm-text-sm);font-weight:650}.llm-advanced>summary small{color:var(--hm-text-dim);font-size:var(--hm-text-xs);text-align:right}.llm-advanced-body{padding:var(--hm-space-4);display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--hm-space-4);border-top:1px solid var(--hm-border-subtle)}.llm-advanced-group{padding:var(--hm-space-4);display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--hm-space-3);background:#111720a6;border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-md)}.llm-advanced-group>header{grid-column:1 / -1;display:grid;gap:.1rem}.llm-advanced-group>header strong{color:var(--hm-text);font-size:var(--hm-text-xs)}.llm-advanced-group>header span{color:var(--hm-text-dim);font-size:.62rem}.llm-advanced-group>label{min-width:0;display:grid;align-content:start;gap:.3rem;color:var(--hm-text-muted);font-size:var(--hm-text-xs)}.llm-advanced-group>label small{color:var(--hm-text-dim)}.llm-advanced-group.single{grid-template-columns:minmax(0,360px)}.llm-advanced-toggle{grid-template-columns:minmax(0,1fr) auto;align-items:center}.llm-advanced-footer{grid-column:1 / -1;display:flex;align-items:center;justify-content:space-between;gap:var(--hm-space-4)}.llm-advanced-footer p{max-width:680px;color:var(--hm-text-dim);font-size:var(--hm-text-xs);line-height:1.5}.llm-advanced-state{grid-column:1 / -1;margin:0;color:var(--hm-text-dim);font-size:var(--hm-text-xs);line-height:1.45}.llm-advanced-state.pending{color:var(--hm-warning-text)}.llm-advanced.compact .llm-advanced-body{grid-template-columns:minmax(0,1fr) auto;align-items:end}.llm-advanced.compact .llm-advanced-footer{grid-column:auto}.llm-field-note{display:block;margin-top:.3rem;color:#9a8255;line-height:1.4}@media(max-width:760px){.llm-advanced>summary{align-items:flex-start}.llm-advanced>summary small{text-align:left}.llm-advanced-body,.llm-advanced.compact .llm-advanced-body,.llm-advanced-group{grid-template-columns:minmax(0,1fr)}.llm-advanced-footer,.llm-advanced.compact .llm-advanced-footer{grid-column:1;align-items:stretch;flex-direction:column}.llm-advanced-footer .btn{width:100%}}.config-center-page{--cfgc-rail-w: 218px;--cfgc-panel-border: rgba(49, 57, 71, .86);height:calc(100vh - var(--hm-topbar-h) - var(--hm-section-tabs-h));min-height:0!important;padding-bottom:0;display:flex;flex-direction:column;overflow:hidden}.cfgc-page-header{position:relative;z-index:16;flex:none;display:flex;align-items:flex-start;justify-content:space-between;gap:var(--hm-space-6);margin-bottom:var(--hm-space-5)}.cfgc-eyebrow{margin-bottom:.28rem;color:var(--hm-accent);font-size:.625rem;font-weight:700;letter-spacing:.115em;line-height:1.2;text-transform:uppercase}.cfgc-page-summary{margin-top:.35rem;color:var(--hm-text-dim);font-size:var(--hm-text-xs)}.cfgc-header-actions{display:flex;align-items:center;justify-content:flex-end;gap:var(--hm-space-2);flex-wrap:wrap}.cfgc-header-actions .btn{display:inline-flex;align-items:center;gap:var(--hm-space-2)}.cfgc-loading{display:grid;gap:var(--hm-space-4)}.cfgc-loading-grid{display:grid;grid-template-columns:var(--cfgc-rail-w) minmax(0,1fr);gap:var(--hm-space-5)}.cfgc-loading-grid .skeleton:last-child{grid-column:2}.cfgc-health{flex:none;margin-bottom:var(--hm-space-5);padding:var(--hm-space-5);background:radial-gradient(circle at 100% 0,rgba(197,139,50,.09),transparent 30%),linear-gradient(150deg,#131821fa,#0c1017fa);border:1px solid var(--cfgc-panel-border);border-radius:var(--hm-radius-lg);box-shadow:var(--hm-shadow-sm)}.cfgc-health-heading{display:flex;align-items:center;gap:var(--hm-space-4);margin-bottom:var(--hm-space-4)}.cfgc-health-heading>div:first-child{flex:1;min-width:0}.cfgc-health-heading h2,.cfgc-category-panel-heading h2,.cfgc-empty h2,.cfgc-review-header h2{color:var(--hm-text);font-size:var(--hm-text-lg);font-weight:650;letter-spacing:-.015em}.cfgc-health-ok,.cfgc-unsaved-pill{display:inline-flex;align-items:center;gap:var(--hm-space-2);padding:.3rem .55rem;border-radius:var(--hm-radius-full);font-size:var(--hm-text-xs);font-weight:650;white-space:nowrap}.cfgc-health-ok{color:#83d6a6;background:#22c55e14;border:1px solid rgba(34,197,94,.19)}.cfgc-unsaved-pill{color:#ecc16f;background:#d977061a;border:1px solid rgba(217,119,6,.24)}.cfgc-health-filters{display:grid;grid-template-columns:repeat(7,minmax(112px,1fr));gap:var(--hm-space-2);overflow-x:auto;scrollbar-width:thin}.cfgc-health-filter{min-width:0;min-height:56px;padding:.55rem .6rem;display:flex;align-items:center;gap:var(--hm-space-3);color:var(--hm-text-muted);background:#06090d61;border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-md);text-align:left;cursor:pointer;transition:color var(--hm-transition-base),border-color var(--hm-transition-base),background var(--hm-transition-base)}.cfgc-health-filter:hover{color:var(--hm-text);border-color:var(--hm-border);background:#ffffff06}.cfgc-health-filter.active{color:var(--hm-text);border-color:#c58b326b;background:#c58b3213;box-shadow:inset 0 0 0 1px #c58b320d}.cfgc-health-icon{width:28px;height:28px;display:inline-grid;place-items:center;flex:none;color:#a5afbd;background:#ffffff0a;border-radius:var(--hm-radius-md)}.cfgc-health-icon.state-applied{color:#69c78e;background:#22c55e14}.cfgc-health-icon.state-pending_restart{color:#e1aa55;background:#d977061a}.cfgc-health-icon.state-dormant{color:#a792d8;background:#8b5cf617}.cfgc-health-icon.state-invalid{color:#e17878;background:#ef444417}.cfgc-health-icon.state-drift{color:#e1bd65;background:#eab30817}.cfgc-health-icon.state-unknown{color:#9aa6b6;background:#94a3b817}.cfgc-health-copy{min-width:0;display:grid;gap:.1rem}.cfgc-health-copy>span{font-size:var(--hm-text-xs);font-weight:650;line-height:1.25;overflow-wrap:anywhere;white-space:normal}.cfgc-health-copy small{color:var(--hm-text-dim);font-size:.625rem;white-space:nowrap}.cfgc-health-alert{display:flex;align-items:flex-start;gap:var(--hm-space-3);margin-top:var(--hm-space-3);padding:var(--hm-space-3) var(--hm-space-4);border-radius:var(--hm-radius-md);font-size:var(--hm-text-xs)}.cfgc-health-alert>.odin-icon{flex:none;margin-top:.1rem}.cfgc-health-alert>div{display:grid;gap:.1rem}.cfgc-health-alert>div span{color:var(--hm-text-muted)}.cfgc-health-alert.danger{color:#eb8a8a;background:#ef444413;border:1px solid rgba(239,68,68,.19)}.cfgc-health-alert.warning{color:#e3bb69;background:#eab30811;border:1px solid rgba(234,179,8,.17)}.cfgc-workspace{min-height:0;flex:1;display:grid;grid-template-columns:var(--cfgc-rail-w) minmax(0,1fr);align-items:stretch;gap:var(--hm-space-5);overflow:hidden}.cfgc-category-rail{position:relative;top:auto;height:100%;max-height:none;padding:var(--hm-space-3);overflow:hidden auto;background:#0c1017e6;border:1px solid var(--cfgc-panel-border);border-radius:var(--hm-radius-lg);box-shadow:var(--hm-shadow-sm)}.cfgc-rail-label{padding:var(--hm-space-2) var(--hm-space-3) var(--hm-space-3);color:var(--hm-text-dim);font-size:.625rem;font-weight:700;letter-spacing:.105em;text-transform:uppercase}.cfgc-category-scroll{display:grid;gap:.2rem}.cfgc-category{width:100%;min-width:0;padding:.55rem var(--hm-space-3);display:grid;grid-template-columns:26px minmax(0,1fr) auto;align-items:center;gap:var(--hm-space-2);color:var(--hm-text-muted);background:transparent;border:1px solid transparent;border-radius:var(--hm-radius-md);text-align:left;cursor:pointer}.cfgc-category:hover{color:var(--hm-text);background:#ffffff07}.cfgc-category.active{color:#edd19a;background:#c58b3218;border-color:#c58b323d}.cfgc-category-icon{width:26px;height:26px;display:inline-grid;place-items:center;color:currentColor;background:#ffffff09;border-radius:var(--hm-radius-md)}.cfgc-category-copy{min-width:0;display:grid;gap:.05rem}.cfgc-category-copy>span{overflow:hidden;font-size:var(--hm-text-sm);font-weight:600;text-overflow:ellipsis;white-space:nowrap}.cfgc-category-copy small{color:var(--hm-text-dim);font-size:.6rem}.cfgc-category-counts{display:flex;align-items:center;justify-content:flex-end;gap:.18rem;flex-wrap:wrap;max-width:50px}.cfgc-category-counts>span,.cfgc-rail-key b{display:inline-grid;min-width:18px;height:18px;place-items:center;padding:0 .2rem;border-radius:4px;font-size:.55rem;font-weight:750}.cfgc-category-counts .modified,.cfgc-rail-key .modified{color:#edc171;background:#d977061f}.cfgc-category-counts .restart,.cfgc-rail-key .restart{color:#dfaa5d;background:#b4681b21}.cfgc-category-counts .invalid,.cfgc-rail-key .invalid{color:#e38282;background:#ef44441c}.cfgc-category-counts .dormant,.cfgc-rail-key .dormant{color:#b09adf;background:#8b5cf61f}.cfgc-rail-key{margin-top:var(--hm-space-3);padding:var(--hm-space-3) var(--hm-space-2) var(--hm-space-1);display:grid;grid-template-columns:1fr 1fr;gap:.32rem;color:var(--hm-text-dim);border-top:1px solid var(--hm-border-subtle);font-size:.56rem}.cfgc-rail-key span{display:flex;align-items:center;gap:.25rem}.cfgc-rail-key b{font-style:normal}.cfgc-main{min-width:0;min-height:0;height:100%;overflow-y:auto;padding-bottom:5rem}.cfgc-toolbar{position:sticky;top:0;z-index:12;margin:0 0 var(--hm-space-4);padding:var(--hm-space-3);display:flex;align-items:center;gap:var(--hm-space-3);background:#090c11f0;border:1px solid var(--cfgc-panel-border);border-radius:var(--hm-radius-lg);box-shadow:var(--hm-shadow-sm);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.cfgc-search{min-width:0;height:38px;display:flex;align-items:center;flex:1;gap:var(--hm-space-3);padding:0 .45rem 0 .75rem;color:var(--hm-text-dim);background:#04070b8c;border:1px solid var(--hm-border);border-radius:var(--hm-radius-md)}.cfgc-search:focus-within{color:var(--hm-accent);border-color:#c58b3275;box-shadow:0 0 0 3px #c58b3214}.cfgc-search input{min-width:0;height:100%;flex:1;color:var(--hm-text);background:transparent;border:0;outline:0;font-size:var(--hm-text-sm)}.cfgc-search input::-moz-placeholder{color:#5f6977}.cfgc-search input::placeholder{color:#5f6977}.cfgc-search .icon-btn{width:28px;height:28px}.cfgc-category-panel{display:grid;gap:var(--hm-space-3)}.cfgc-category-panel+.cfgc-category-panel{margin-top:var(--hm-space-6)}.cfgc-category-panel-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--hm-space-4);padding:0 var(--hm-space-1)}.cfgc-category-panel-heading>span{color:var(--hm-text-dim);font-size:var(--hm-text-xs)}.cfgc-empty{min-height:280px;display:grid;place-items:center;align-content:center;gap:var(--hm-space-3);color:var(--hm-text-dim);text-align:center}.cfgc-empty p{max-width:520px;color:var(--hm-text-muted);font-size:var(--hm-text-sm)}.cfgc-empty code{color:#c5a569}.cfgc-section{overflow:clip;background:linear-gradient(150deg,#121720f5,#0d1118fa);border:1px solid var(--cfgc-panel-border);border-radius:var(--hm-radius-lg);box-shadow:var(--hm-shadow-sm);transition:border-color var(--hm-transition-base),box-shadow var(--hm-transition-base)}.cfgc-section:hover{border-color:#394252}.cfgc-section.modified{border-color:#c58b3266;box-shadow:inset 3px 0 #c58b328c,var(--hm-shadow-sm)}.cfgc-section.editing{border-color:#c58b3294;box-shadow:inset 3px 0 var(--hm-accent),var(--hm-shadow-glow-sm)}.cfgc-section-header{width:100%;min-width:0;min-height:66px;padding:var(--hm-space-4) var(--hm-space-5);display:grid;grid-template-columns:20px minmax(150px,.65fr) minmax(220px,1.35fr) auto;align-items:center;gap:var(--hm-space-3);color:inherit;background:transparent;border:0;text-align:left;cursor:pointer}.cfgc-section-header:hover{background:#ffffff05}.cfgc-section-chevron{color:var(--hm-text-dim)}.cfgc-section-title{min-width:0;display:grid;gap:.12rem}.cfgc-section-title>span{overflow:hidden;color:var(--hm-text);font-size:var(--hm-text-sm);font-weight:650;text-overflow:ellipsis;white-space:nowrap}.cfgc-section-title small{overflow:hidden;color:#67717f;font-family:var(--hm-font-mono);font-size:.6rem;text-overflow:ellipsis;white-space:nowrap}.cfgc-section-summary{min-width:0;overflow:hidden;color:var(--hm-text-muted);font-size:var(--hm-text-xs);line-height:1.45;text-overflow:ellipsis;white-space:nowrap}.cfgc-section-badges{min-width:0;display:flex;align-items:center;justify-content:flex-end;gap:.3rem;flex-wrap:wrap}.cfgc-section-badges .badge{padding:.15rem .4rem;font-size:.56rem}.cfgc-badge-restart{color:#dba454;background:#d9770617;border:1px solid rgba(217,119,6,.22)}.cfgc-badge-dormant{color:#ac98d7;background:#8b5cf617;border:1px solid rgba(139,92,246,.2)}.cfgc-field-count{min-width:27px;height:22px;display:inline-grid;place-items:center;padding:0 .35rem;color:var(--hm-text-dim);background:#ffffff09;border-radius:var(--hm-radius-full);font-family:var(--hm-font-mono);font-size:.6rem}.cfgc-section-body{border-top:1px solid var(--hm-border-subtle)}.cfgc-section-actions{min-height:58px;padding:var(--hm-space-3) var(--hm-space-5);display:flex;align-items:center;justify-content:space-between;gap:var(--hm-space-4);background:#04070b47;border-bottom:1px solid var(--hm-border-subtle)}.cfgc-section-actions>div:first-child{min-width:0;display:grid;gap:.1rem}.cfgc-section-actions strong{color:var(--hm-text);font-size:var(--hm-text-xs);font-weight:650}.cfgc-section-actions span{overflow:hidden;color:var(--hm-text-dim);font-size:.625rem;text-overflow:ellipsis;white-space:nowrap}.cfgc-section-actions .btn{display:inline-flex;align-items:center;gap:var(--hm-space-2)}.cfgc-search-hits{padding:var(--hm-space-3) var(--hm-space-5);display:flex;align-items:center;gap:var(--hm-space-2);flex-wrap:wrap;color:var(--hm-text-dim);background:#c58b320a;border-bottom:1px solid rgba(197,139,50,.12);font-size:.625rem}.cfgc-search-hits button{padding:.22rem .4rem;color:#dbbd84;background:#c58b3214;border:1px solid rgba(197,139,50,.18);border-radius:5px;cursor:pointer}.cfgc-search-hits code{margin-left:.2rem;color:#7b8491}.cfgc-owner-card{margin:var(--hm-space-5);padding:var(--hm-space-5);display:grid;grid-template-columns:36px minmax(0,1fr) auto;align-items:center;gap:var(--hm-space-4);background:#c58b320e;border:1px solid rgba(197,139,50,.18);border-radius:var(--hm-radius-md)}.cfgc-owner-card.compact{margin-bottom:0}.cfgc-owner-icon{width:36px;height:36px;display:inline-grid;place-items:center;color:#ddba78;background:#c58b321a;border-radius:var(--hm-radius-md)}.cfgc-owner-card strong{color:var(--hm-text);font-size:var(--hm-text-sm)}.cfgc-owner-card p{margin-top:.18rem;color:var(--hm-text-muted);font-size:var(--hm-text-xs);line-height:1.5}.cfgc-owner-card .btn{display:inline-flex;align-items:center;gap:var(--hm-space-2)}.cfgc-fields{padding:0 var(--hm-space-5)}.cfgc-field{min-width:0;padding:var(--hm-space-5) 0;display:grid;grid-template-columns:minmax(210px,.95fr) minmax(240px,1.05fr);gap:var(--hm-space-6);scroll-margin-top:calc(var(--hm-topbar-h) + var(--hm-section-tabs-h) + 70px);border-bottom:1px solid var(--hm-border-subtle)}.cfgc-field:last-child{border-bottom:0}.cfgc-field.changed{margin-inline:calc(var(--hm-space-3) * -1);padding-inline:var(--hm-space-3);background:#c58b3209;border-radius:var(--hm-radius-md)}.cfgc-field.invalid{background:#ef444409}.cfgc-field-copy{min-width:0;padding-inline:var(--hm-space-4)}.cfgc-field-copy>label{display:block;color:var(--hm-text);font-size:var(--hm-text-sm);font-weight:630}.cfgc-field-copy>code{display:block;margin-top:.2rem;overflow-wrap:anywhere;color:#687382;font-family:var(--hm-font-mono);font-size:.6rem}.cfgc-field-copy>p{max-width:620px;margin-top:.42rem;color:var(--hm-text-muted);font-size:var(--hm-text-xs);line-height:1.52}.cfgc-field-meta{margin-top:var(--hm-space-3);display:flex;align-items:center;gap:var(--hm-space-2);flex-wrap:wrap;color:var(--hm-text-dim);font-size:.6rem}.cfgc-apply-pill{display:inline-flex;align-items:center;min-height:20px;padding:.14rem .42rem;color:#9ea8b5;background:#ffffff09;border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-full);font-size:.58rem;font-weight:650;line-height:1.2}.cfgc-apply-pill.apply-live-read,.cfgc-apply-pill.apply-live-apply{color:#78cb98;background:#22c55e12;border-color:#22c55e2b}.cfgc-apply-pill.apply-live-for-new-work{color:#78b9d6;background:#0ea5e912;border-color:#0ea5e92e}.cfgc-apply-pill.apply-restart{color:#dfa858;background:#d9770614;border-color:#d9770630}.cfgc-apply-pill.apply-activation-required,.cfgc-apply-pill.apply-dormant{color:#af99df;background:#8b5cf614;border-color:#8b5cf62e}.cfgc-apply-pill.apply-legacy-control{color:#d8bd70;background:#eab30812;border-color:#eab3082e}.cfgc-sensitive{display:inline-flex;align-items:center;gap:.22rem;color:#b6a06f}.cfgc-apply-details{margin-top:var(--hm-space-3);display:grid;gap:var(--hm-space-2)}.cfgc-section-apply-details{margin:0 var(--hm-space-5) var(--hm-space-4);display:grid;gap:var(--hm-space-2)}.cfgc-apply-detail{padding:.55rem .65rem;background:#04070b42;border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-md)}.cfgc-apply-detail-heading{display:flex;align-items:center;justify-content:space-between;gap:var(--hm-space-2)}.cfgc-apply-detail-heading strong{color:#aeb8c5;font-size:.64rem;font-weight:650}.cfgc-apply-detail>p{margin-top:.3rem;color:var(--hm-text-dim);font-size:.62rem;line-height:1.45}.cfgc-apply-detail>code{display:block;margin-top:.3rem;overflow-wrap:anywhere;color:#c8ad75;font-family:var(--hm-font-mono);font-size:.6rem}.cfgc-apply-detail.detail-restart{border-color:#d9770629}.cfgc-apply-detail.detail-activation{border-color:#8b5cf62b}.cfgc-field-control{min-width:0;display:grid;align-content:start}.cfgc-field-control .hm-input,.cfgc-field-control .hm-select{width:100%}.cfgc-field-control .hm-input[type=number]{max-width:250px}.cfgc-value{display:block;min-width:0;padding:.52rem .65rem;overflow:hidden;color:#c2c9d2;background:#04070b5e;border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-md);font-family:var(--hm-font-mono);font-size:var(--hm-text-xs);text-overflow:ellipsis;white-space:nowrap}.cfgc-value-block{max-height:160px;margin:0;padding:var(--hm-space-3);overflow:auto;color:#aeb7c3;background:#04070b5e;border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-md);font-family:var(--hm-font-mono);font-size:.65rem;line-height:1.55;white-space:pre-wrap;overflow-wrap:anywhere}.cfgc-boolean-control{min-height:38px;padding:.42rem .6rem;display:flex;align-items:center;justify-content:space-between;gap:var(--hm-space-4);color:var(--hm-text-muted);background:#04070b57;border:1px solid var(--hm-border);border-radius:var(--hm-radius-md);font-size:var(--hm-text-xs)}.cfgc-json-input{resize:vertical;line-height:1.5}.cfgc-expert-note{margin-top:.35rem;color:var(--hm-text-dim);font-size:.6rem}.cfgc-field-error{margin-top:.35rem;color:#e27c7c;font-size:var(--hm-text-xs)}.cfgc-write-only{padding:var(--hm-space-3);display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.15rem var(--hm-space-4);background:#c58b320b;border:1px solid rgba(197,139,50,.15);border-radius:var(--hm-radius-md)}.cfgc-write-only>span{display:inline-flex;align-items:center;gap:var(--hm-space-2);color:#cdb57e;font-size:var(--hm-text-xs);font-weight:620}.cfgc-write-only>small{grid-column:1;color:var(--hm-text-dim);font-size:.6rem}.cfgc-write-only>button{grid-column:2;grid-row:1 / span 2}.cfgc-mobile-action-bar{display:none}.cfgc-review-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:80;display:flex;justify-content:flex-end;background:#000000a8;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.cfgc-review-tray{width:min(680px,94vw);height:100%;display:grid;grid-template-rows:auto minmax(0,1fr) auto;color:var(--hm-text);background:#0c1017;border-left:1px solid #303846;box-shadow:-24px 0 70px #0000006b;outline:0;animation:cfgc-tray-in .18s ease-out}@keyframes cfgc-tray-in{0%{transform:translate(20px);opacity:.55}to{transform:translate(0);opacity:1}}.cfgc-review-header{padding:var(--hm-space-6);display:flex;align-items:flex-start;justify-content:space-between;gap:var(--hm-space-4);border-bottom:1px solid var(--hm-border)}.cfgc-review-header p{margin-top:.32rem;color:var(--hm-text-muted);font-size:var(--hm-text-xs)}.cfgc-review-body{min-height:0;padding:var(--hm-space-5) var(--hm-space-6);overflow-y:auto}.cfgc-review-group{overflow:hidden;background:#121720bd;border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg)}.cfgc-review-group+.cfgc-review-group{margin-top:var(--hm-space-4)}.cfgc-review-group>header{padding:var(--hm-space-3) var(--hm-space-4);display:flex;align-items:center;justify-content:space-between;background:#05080c5c;border-bottom:1px solid var(--hm-border-subtle)}.cfgc-review-group>header>span:last-child{min-width:23px;height:23px;display:inline-grid;place-items:center;color:var(--hm-text-dim);background:#ffffff0a;border-radius:var(--hm-radius-full);font-family:var(--hm-font-mono);font-size:.6rem}.cfgc-review-entry{padding:var(--hm-space-4);display:grid;grid-template-columns:minmax(160px,.7fr) minmax(200px,1.3fr);align-items:center;gap:var(--hm-space-4);border-bottom:1px solid var(--hm-border-subtle)}.cfgc-review-entry:last-child{border-bottom:0}.cfgc-review-entry>div:first-child{min-width:0;display:grid;gap:.17rem}.cfgc-review-entry strong{overflow:hidden;font-size:var(--hm-text-xs);font-weight:620;text-overflow:ellipsis;white-space:nowrap}.cfgc-review-entry code{overflow-wrap:anywhere;color:var(--hm-text-dim);font-size:.58rem}.cfgc-review-values{min-width:0;display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:var(--hm-space-2)}.cfgc-review-values span{min-width:0;padding:.38rem .48rem;overflow:hidden;color:#9da7b4;background:#04070b66;border:1px solid var(--hm-border-subtle);border-radius:5px;font-family:var(--hm-font-mono);font-size:.6rem;text-overflow:ellipsis;white-space:nowrap}.cfgc-review-values span:last-child{color:#d5bd89;border-color:#c58b322b}.cfgc-review-values .odin-icon{color:var(--hm-text-dim)}.cfgc-review-footer{padding:var(--hm-space-5) var(--hm-space-6);display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:var(--hm-space-3);background:#080b10f5;border-top:1px solid var(--hm-border)}.cfgc-review-footer>div{min-width:0;display:grid;gap:.1rem}.cfgc-review-footer strong{color:var(--hm-text);font-size:var(--hm-text-xs);font-weight:620}.cfgc-review-footer span{color:var(--hm-text-dim);font-size:.6rem}.config-center-page{max-width:1600px;margin-inline:auto}.cfgc-health-filters{grid-template-columns:repeat(auto-fit,minmax(128px,1fr))}.cfgc-restart-banner{flex:none;margin-bottom:var(--hm-space-5);padding:var(--hm-space-4) var(--hm-space-5);display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--hm-space-4);color:#e6ba6c;background:#b4681b17;border:1px solid rgba(217,119,6,.28);border-radius:var(--hm-radius-lg)}.cfgc-restart-banner>div:nth-child(2){min-width:0;display:grid;gap:.15rem}.cfgc-restart-banner strong{color:#f0cf92;font-size:var(--hm-text-sm)}.cfgc-restart-banner span{color:var(--hm-text-muted);font-size:var(--hm-text-xs)}.cfgc-restart-actions{display:flex;align-items:center;justify-content:flex-end;gap:var(--hm-space-2);flex-wrap:wrap}.cfgc-restart-dialog{width:min(620px,calc(100vw - 2rem));margin:auto;padding:var(--hm-space-6);color:var(--hm-text);background:#0f141c;border:1px solid #3a4352;border-radius:var(--hm-radius-lg);box-shadow:var(--hm-shadow-lg)}.cfgc-restart-dialog h2{font-size:var(--hm-text-xl);font-weight:650}.cfgc-restart-dialog>p{margin-top:var(--hm-space-3);color:var(--hm-text-muted);font-size:var(--hm-text-sm);line-height:1.55}.cfgc-restart-dialog-actions{margin-top:var(--hm-space-5);display:flex;justify-content:flex-end;gap:var(--hm-space-2);flex-wrap:wrap}.cfgc-field-groups{display:grid;gap:var(--hm-space-4);padding:0 var(--hm-space-5) var(--hm-space-5)}.cfgc-field-group{overflow:clip;border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-md)}.cfgc-field-group:not(.nested){border-color:transparent}.cfgc-field-group-header{padding:var(--hm-space-3) var(--hm-space-4);display:flex;align-items:flex-start;justify-content:space-between;gap:var(--hm-space-4);background:#04070b59;border-bottom:1px solid var(--hm-border-subtle)}.cfgc-field-group-header>div{min-width:0;display:grid;gap:.18rem}.cfgc-field-group-header strong{color:var(--hm-text);font-size:var(--hm-text-sm)}.cfgc-field-group-header code{color:var(--hm-text-dim);font-size:.58rem}.cfgc-field-group-header p{color:var(--hm-text-muted);font-size:var(--hm-text-xs);line-height:1.45}.cfgc-field-group-header>span{flex:none;color:var(--hm-text-dim);font-size:.6rem}.cfgc-field-group .cfgc-fields{padding:0}.cfgc-field{grid-template-columns:minmax(180px,4fr) minmax(190px,5fr);align-items:start}.cfgc-field-runtime-note{grid-column:1 / -1;min-width:0;margin-top:calc(var(--hm-space-2) * -1);padding:var(--hm-space-3);display:grid;gap:.25rem;background:#8b5cf60b;border:1px solid rgba(139,92,246,.16);border-radius:var(--hm-radius-md)}.cfgc-field-runtime-note strong{color:#b9a6df;font-size:.6rem;text-transform:uppercase;letter-spacing:.055em}.cfgc-field-runtime-note p{color:var(--hm-text-muted);font-size:.66rem;line-height:1.45}.cfgc-field-runtime-note .btn{margin-top:var(--hm-space-2);justify-self:start}.cfgc-runtime-summary-list{margin-top:var(--hm-space-3);display:grid;gap:var(--hm-space-2)}.cfgc-runtime-summary{padding:var(--hm-space-3);background:#04070b45;border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-md)}.cfgc-runtime-summary strong{color:#b8c0cb;font-size:.62rem}.cfgc-runtime-summary p{margin-top:.25rem;color:var(--hm-text-muted);font-size:.66rem;line-height:1.45}.cfgc-group-apply-details{padding:0 var(--hm-space-4) var(--hm-space-4)}.cfgc-group-apply-details summary{color:var(--hm-text-dim);cursor:pointer;font-size:var(--hm-text-xs)}.cfgc-apply-detail-list{margin-top:var(--hm-space-3);display:grid;gap:var(--hm-space-2)}.discord-user-combobox{position:relative;width:100%}.discord-user-combobox>.hm-input{width:100%}.discord-user-combobox-options{position:absolute;z-index:60;top:calc(100% + .25rem);left:0;right:0;max-height:15rem;overflow-y:auto;background:#0d121a;border:1px solid #3b4555;border-radius:var(--hm-radius-md);box-shadow:var(--hm-shadow-lg)}.discord-user-combobox-option{width:100%;min-height:38px;padding:.45rem .65rem;display:flex;align-items:center;gap:var(--hm-space-2);color:var(--hm-text-muted);background:transparent;border:0;cursor:pointer;font-size:var(--hm-text-xs);text-align:left}.discord-user-combobox-option:hover,.discord-user-combobox-option.active{color:var(--hm-text);background:#c58b3217}.discord-user-combobox-option img,.discord-user-combobox-avatar{width:22px;height:22px;flex:none;border-radius:var(--hm-radius-full)}.discord-user-combobox-avatar{display:inline-grid;place-items:center;color:var(--hm-text-dim);background:#293140;font-size:.6rem}.discord-user-combobox-name{min-width:0;overflow:hidden;color:inherit;text-overflow:ellipsis;white-space:nowrap}.discord-user-combobox-username{min-width:0;overflow:hidden;color:var(--hm-text-dim);text-overflow:ellipsis;white-space:nowrap}.discord-user-combobox-bot{margin-left:auto;padding:.08rem .25rem;color:#c4b5fd;background:#6366f133;border-radius:3px;font-size:.52rem}.discord-global-user-picker{display:block}.discord-global-list-full{grid-column:1 / -1}.cfgc-chip-editor{display:grid;gap:var(--hm-space-3)}.cfgc-chip-list{min-height:32px;display:flex;align-items:center;gap:.35rem;flex-wrap:wrap}.cfgc-chip{max-width:100%;padding:.25rem .35rem .25rem .55rem;display:inline-flex;align-items:center;gap:.35rem;overflow-wrap:anywhere;color:#d8c28e;background:#c58b3214;border:1px solid rgba(197,139,50,.2);border-radius:var(--hm-radius-full);font-family:var(--hm-font-mono);font-size:var(--hm-text-xs)}.cfgc-chip button{width:20px;height:20px;color:#a9956e;background:transparent;border:0;border-radius:50%;cursor:pointer}.cfgc-chip button:hover{color:#fff;background:#ffffff14}.cfgc-chip-empty{color:var(--hm-text-dim);font-size:var(--hm-text-xs)}.cfgc-chip-add{display:flex;align-items:center;gap:var(--hm-space-2);flex-wrap:wrap;color:var(--hm-text-muted);font-size:var(--hm-text-xs)}.cfgc-chip-add .hm-input{width:min(170px,100%)}.cfgc-structured-summary{padding:var(--hm-space-3);display:grid;gap:.15rem;background:#04070b52;border:1px solid var(--hm-border);border-radius:var(--hm-radius-md)}.cfgc-structured-summary span{color:var(--hm-text);font-size:var(--hm-text-xs)}.cfgc-structured-summary small{color:var(--hm-text-dim);font-size:.62rem;line-height:1.4}@media(max-width:1180px){.config-center-page{--cfgc-rail-w: 190px}.cfgc-health-filters{grid-template-columns:repeat(7,minmax(106px,1fr))}.cfgc-category-copy small{display:none}.cfgc-section-header{grid-template-columns:20px minmax(0,1fr) auto}.cfgc-section-summary{grid-column:2;white-space:normal}.cfgc-section-badges{grid-column:3;grid-row:1 / span 2}.cfgc-field{grid-template-columns:minmax(180px,5fr) minmax(220px,7fr)}}@media(max-width:900px){.config-center-page{--cfgc-rail-w: 100%;height:auto;min-height:100%!important;overflow:visible}.cfgc-workspace{min-height:auto;flex:none;grid-template-columns:minmax(0,1fr);align-items:start;gap:var(--hm-space-3);overflow:visible}.cfgc-main{height:auto;overflow:visible;padding-bottom:5rem}.cfgc-category-rail{position:sticky;top:calc(var(--hm-topbar-h) + var(--hm-section-tabs-h));height:auto;z-index:13;max-height:none;padding:var(--hm-space-2);overflow:visible}.cfgc-rail-label,.cfgc-rail-key{display:none}.cfgc-category-scroll{display:flex;gap:var(--hm-space-2);overflow-x:auto;scroll-snap-type:x proximity}.cfgc-category{width:auto;min-width:150px;grid-template-columns:24px minmax(0,1fr) auto;flex:0 0 auto;scroll-snap-align:start}.cfgc-category-copy small{display:block}.cfgc-toolbar{top:calc(var(--hm-topbar-h) + var(--hm-section-tabs-h) + 59px)}.cfgc-section-header{grid-template-columns:20px minmax(120px,.8fr) minmax(150px,1.2fr) auto}.cfgc-field{grid-template-columns:minmax(180px,.85fr) minmax(210px,1.15fr);gap:var(--hm-space-4)}}@media(max-width:760px){.section-tabs-wrap{position:sticky;overflow:hidden}.section-tabs-wrap:after{content:"";position:absolute;top:0;right:0;bottom:0;width:34px;pointer-events:none;background:linear-gradient(90deg,transparent,rgba(9,12,17,.98));border-right:2px solid rgba(197,139,50,.28)}.config-center-page{padding-bottom:6.75rem!important}.cfgc-page-header{align-items:stretch}.cfgc-header-actions{flex:none}.cfgc-header-actions .cfgc-desktop-history,.cfgc-header-actions .btn-primary{display:none}.cfgc-health{margin-inline:-.15rem;padding:var(--hm-space-4)}.cfgc-health-heading{align-items:flex-start;flex-wrap:wrap}.cfgc-health-filters{grid-template-columns:repeat(7,122px);margin-inline:calc(var(--hm-space-4) * -1);padding-inline:var(--hm-space-4);padding-bottom:.2rem;scroll-snap-type:x proximity}.cfgc-health-filter{scroll-snap-align:start}.cfgc-category-rail{top:calc(var(--hm-topbar-h) + var(--hm-section-tabs-h));margin-inline:-.1rem}.cfgc-category-scroll{padding-right:1.5rem}.cfgc-category-scroll:after{content:"";flex:0 0 .1rem}.cfgc-toolbar{top:calc(var(--hm-topbar-h) + var(--hm-section-tabs-h) + 58px);padding:var(--hm-space-2)}.cfgc-toolbar>.btn{display:none}.cfgc-search input{font-size:1rem}.cfgc-category-panel-heading{align-items:center}.cfgc-section-header{min-height:72px;padding:var(--hm-space-4);grid-template-columns:18px minmax(0,1fr) auto;gap:var(--hm-space-2)}.cfgc-section-summary,.cfgc-section-badges .badge{display:none}.cfgc-section-actions{padding:var(--hm-space-3) var(--hm-space-4);align-items:stretch;flex-direction:column}.cfgc-section-actions>div:last-child{justify-content:flex-end}.cfgc-search-hits{padding-inline:var(--hm-space-4)}.cfgc-owner-card{margin:var(--hm-space-4);grid-template-columns:34px minmax(0,1fr);padding:var(--hm-space-4)}.cfgc-owner-card .btn{grid-column:1 / -1;width:100%;justify-content:center}.cfgc-field-groups{padding-inline:var(--hm-space-4)}.cfgc-fields{padding:0}.cfgc-field{grid-template-columns:minmax(0,1fr);gap:var(--hm-space-3);padding-block:var(--hm-space-4)}.cfgc-field-copy>p{line-height:1.45}.cfgc-write-only{grid-template-columns:minmax(0,1fr)}.cfgc-write-only>small,.cfgc-write-only>button{grid-column:1;grid-row:auto}.cfgc-write-only>button{width:100%;margin-top:var(--hm-space-2)}.cfgc-restart-banner{grid-template-columns:auto minmax(0,1fr);padding:var(--hm-space-4)}.cfgc-restart-actions{grid-column:1 / -1;justify-content:stretch}.cfgc-restart-actions .btn{flex:1}.cfgc-restart-dialog-actions{display:grid}.cfgc-mobile-action-bar{position:fixed;z-index:55;left:0;right:0;bottom:0;min-height:68px;padding:var(--hm-space-3) max(var(--hm-space-4),env(safe-area-inset-right)) calc(var(--hm-space-3) + env(safe-area-inset-bottom)) max(var(--hm-space-4),env(safe-area-inset-left));display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto;align-items:center;gap:var(--hm-space-2);background:#090c11fa;border-top:1px solid #394252;box-shadow:0 -12px 32px #0006;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.cfgc-mobile-action-bar .btn{min-width:0;padding-inline:.55rem}.cfgc-mobile-overflow{position:relative}.cfgc-mobile-overflow-menu{position:absolute;right:0;bottom:calc(100% + var(--hm-space-2));width:170px;padding:var(--hm-space-2);display:grid;gap:.15rem;background:#111720;border:1px solid #3a4352;border-radius:var(--hm-radius-md);box-shadow:var(--hm-shadow-lg)}.cfgc-mobile-overflow-menu button{min-height:38px;padding:0 var(--hm-space-3);display:flex;align-items:center;gap:var(--hm-space-2);color:var(--hm-text-muted);background:transparent;border:0;border-radius:5px;font-size:var(--hm-text-sm);text-align:left}.cfgc-mobile-overflow-menu button:hover:not(:disabled){color:var(--hm-text);background:#ffffff0a}.cfgc-mobile-overflow-menu button:disabled{opacity:.38}.cfgc-review-tray{width:100%;max-width:none}.cfgc-review-header{padding:var(--hm-space-5) var(--hm-space-4)}.cfgc-review-body{padding:var(--hm-space-4)}.cfgc-review-entry{grid-template-columns:minmax(0,1fr);gap:var(--hm-space-3)}.cfgc-review-footer{padding:var(--hm-space-4);grid-template-columns:1fr 1fr}.cfgc-review-footer>div{grid-column:1 / -1}}@media(max-width:420px){.cfgc-page-header{gap:var(--hm-space-3)}.cfgc-header-actions .btn{padding-inline:.65rem}.cfgc-page-summary{max-width:220px}.cfgc-mobile-action-bar{grid-template-columns:minmax(70px,1fr) minmax(90px,1fr) 36px}.cfgc-section-title>span{white-space:normal}.cfgc-review-values{grid-template-columns:minmax(0,1fr)}.cfgc-review-values .odin-icon{margin:-.1rem auto;transform:rotate(90deg)}}.llm-context-summary{min-height:58px;padding:.48rem .65rem;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.2rem var(--hm-space-2);background:#070a0f61;border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-md)}.llm-context-summary>span:first-child{color:var(--hm-text-dim);font-size:var(--hm-text-xs)}.llm-context-summary strong{color:#e7d39d;font-size:var(--hm-text-sm);font-variant-numeric:tabular-nums}.llm-context-summary strong small{color:var(--hm-text-dim);font-size:.58rem;font-weight:500}.llm-context-summary .llm-budget-provenance{justify-self:end}.llm-context-summary>small{grid-column:1 / -1;color:var(--hm-text-dim);font-size:.58rem}.llm-context-budget-panel{grid-column:1 / -1;overflow:hidden;background:radial-gradient(circle at 100% 0,rgba(201,162,78,.075),transparent 32rem),#080c12c7;border:1px solid rgba(116,96,57,.58);border-radius:var(--hm-radius-md)}.llm-context-budget-heading{padding:var(--hm-space-4);display:flex;align-items:end;justify-content:space-between;gap:var(--hm-space-5);border-bottom:1px solid var(--hm-border-subtle)}.llm-context-budget-heading>div{min-width:0;display:grid;gap:.15rem}.llm-context-budget-heading strong{color:var(--hm-text);font-size:var(--hm-text-sm)}.llm-context-budget-heading>div>span{color:var(--hm-text-dim);font-size:var(--hm-text-xs)}.llm-utilization-field{min-width:176px;display:grid;gap:.35rem;color:var(--hm-text-muted);font-size:var(--hm-text-xs)}.llm-utilization-input{display:grid;grid-template-columns:minmax(0,1fr) 2rem;align-items:center}.llm-utilization-input .hm-input{border-radius:var(--hm-radius-md) 0 0 var(--hm-radius-md);text-align:right;font-variant-numeric:tabular-nums}.llm-utilization-input small{align-self:stretch;display:grid;place-items:center;color:var(--hm-accent);background:#c9a24e14;border:1px solid var(--hm-border);border-left:0;border-radius:0 var(--hm-radius-md) var(--hm-radius-md) 0}.llm-context-budget-copy{margin:0;padding:var(--hm-space-3) var(--hm-space-4);color:var(--hm-text-dim);background:#070a0f8c;border-bottom:1px solid var(--hm-border-subtle);font-size:var(--hm-text-xs);line-height:1.55}.llm-context-budget-loading,.llm-context-budget-error{min-height:112px;padding:var(--hm-space-5);display:flex;align-items:center;justify-content:center;gap:var(--hm-space-3);color:var(--hm-text-muted);font-size:var(--hm-text-xs)}.llm-context-budget-loading .spinner{width:16px;height:16px}.llm-context-budget-error{color:var(--hm-danger)}.llm-context-budget-table-wrap{overflow-x:auto}.llm-context-budget-table{min-width:1040px;table-layout:fixed}.llm-context-budget-table th{padding:0 var(--hm-space-3);font-size:.58rem}.llm-context-budget-table td{padding:var(--hm-space-3);font-size:var(--hm-text-xs)}.llm-context-budget-table th:nth-child(1){width:17%}.llm-context-budget-table th:nth-child(2){width:13%}.llm-context-budget-table th:nth-child(3){width:22%}.llm-context-budget-table th:nth-child(4){width:14%}.llm-context-budget-table th:nth-child(5){width:15%}.llm-context-budget-table th:nth-child(6){width:19%}.llm-context-budget-table tbody tr.has-clamp td{background:#d3943109}.llm-context-budget-table code,.llm-clamp-card code{color:#e4e8ef;font-size:.72rem;letter-spacing:-.015em}.llm-context-budget-table td>small{display:block;margin-top:.2rem;color:var(--hm-text-dim);font-size:.58rem;line-height:1.3}.llm-budget-value{color:var(--hm-text-muted);font-variant-numeric:tabular-nums}.llm-budget-effective{color:#e7d39d;font-weight:650}.llm-budget-override{display:flex;align-items:center;gap:var(--hm-space-2)}.llm-budget-override .hm-input{min-width:0;height:34px;padding:0 var(--hm-space-2);font-size:var(--hm-text-xs);font-variant-numeric:tabular-nums}.llm-budget-reset{padding:0;color:var(--hm-text-dim);border:0;background:transparent;font-size:.62rem;cursor:pointer}.llm-budget-reset:hover{color:var(--hm-accent)}.llm-budget-warning{color:var(--hm-warning-text)!important}.llm-budget-provenance{display:inline-flex;align-items:center;min-height:22px;padding:.16rem .48rem;border:1px solid transparent;border-radius:var(--hm-radius-full);font-size:.58rem;font-weight:650;white-space:nowrap}.llm-budget-provenance.is-built-in{color:#94a0b0;background:#7e889817;border-color:#7e88982e}.llm-budget-provenance.is-override{color:#ccb474;background:#c9a24e17;border-color:#c9a24e33}.llm-budget-provenance.is-clamp{color:var(--hm-warning-text);background:#d977061a;border-color:#d977063b}.llm-clamp-list{padding:var(--hm-space-4);border-top:1px solid rgba(217,119,6,.2)}.llm-clamp-list-heading{display:flex;align-items:center;justify-content:space-between;gap:var(--hm-space-4);margin-bottom:var(--hm-space-3)}.llm-clamp-list-heading>div{display:grid;gap:.1rem}.llm-clamp-list-heading strong{color:var(--hm-warning-text);font-size:var(--hm-text-xs)}.llm-clamp-list-heading>div>span{color:var(--hm-text-dim);font-size:.6rem}.llm-clamp-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--hm-space-3)}.llm-clamp-card{min-width:0;padding:var(--hm-space-3);display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.25rem var(--hm-space-3);background:#d977060b;border:1px solid rgba(217,119,6,.16);border-radius:var(--hm-radius-md)}.llm-clamp-card>div{min-width:0;display:flex;align-items:baseline;gap:var(--hm-space-2);overflow:hidden}.llm-clamp-card>div span{color:var(--hm-warning-text);font-size:var(--hm-text-xs);font-variant-numeric:tabular-nums;white-space:nowrap}.llm-clamp-card p{grid-column:1;margin:0;color:var(--hm-text-dim);font-size:.58rem}.llm-clamp-card .btn{grid-column:2;grid-row:1 / span 2}@media(max-width:1180px){.llm-context-budget-table{min-width:900px}.llm-clamp-grid{grid-template-columns:minmax(0,1fr)}}@media(max-width:900px){.llm-context-budget-panel+.llm-advanced-footer{align-items:stretch;flex-direction:column}.llm-context-budget-panel+.llm-advanced-footer .btn{width:100%;justify-content:center}.llm-context-budget-heading{align-items:stretch;flex-direction:column}.llm-utilization-field{min-width:0}.llm-context-budget-table-wrap{overflow:visible}.llm-context-budget-table,.llm-context-budget-table tbody,.llm-context-budget-table tr,.llm-context-budget-table td{display:block;width:100%;min-width:0}.llm-context-budget-table thead{display:none}.llm-context-budget-table tbody{padding:var(--hm-space-3);display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--hm-space-3)}.llm-context-budget-table tr{margin-bottom:0;overflow:hidden;background:#111720b3;border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-md)}.llm-context-budget-table td{min-height:44px;padding:var(--hm-space-2) var(--hm-space-3);display:grid;grid-template-columns:minmax(104px,.85fr) minmax(0,1.15fr);align-items:center;gap:var(--hm-space-3);text-align:right}.llm-context-budget-table td:before{content:attr(data-label);color:var(--hm-text-dim);font-size:.58rem;font-weight:650;letter-spacing:.045em;text-align:left;text-transform:uppercase}.llm-context-budget-table td:first-child{min-height:48px;background:#070a0f73}.llm-context-budget-table td>small{margin:-.1rem 0 0;grid-column:2}.llm-budget-override{justify-content:flex-end}.llm-budget-override .hm-input{width:150px}.llm-clamp-list-heading{align-items:flex-start}.llm-clamp-card{grid-template-columns:minmax(0,1fr)}.llm-clamp-card p,.llm-clamp-card .btn{grid-column:1;grid-row:auto}.llm-clamp-card .btn{width:100%;justify-content:center;margin-top:var(--hm-space-2)}}@media(max-width:600px){.llm-context-budget-table tbody{grid-template-columns:minmax(0,1fr)}.llm-budget-override{gap:.35rem}.llm-budget-override .hm-input{width:min(105px,100%)}}:root{--hm-topbar-h: 76px;--hm-rail-h: 107px;--hm-section-tabs-inner-h: 48px;--hm-section-tabs-border: 1px;--hm-section-tabs-h: calc(var(--hm-section-tabs-inner-h) + var(--hm-section-tabs-border));--hm-bg: #07090d;--hm-bg-raised: #0b0e14;--hm-surface: #10141c;--hm-surface-hover: #171d28;--hm-surface-elevated: #151a24;--hm-border: #252c39;--hm-border-subtle: #1a202b;--hm-accent: #c58b32;--hm-accent-hover: #dda84f;--hm-accent-dim: rgba(197, 139, 50, .13);--hm-accent-glow: rgba(197, 139, 50, .16);--hm-gold: #e0b766;--hm-gold-dim: rgba(197, 139, 50, .08);--hm-text: #edf0f5;--hm-text-muted: #9aa4b3;--hm-text-dim: #667182;--hm-success: #3db983;--hm-warning: #d8a342;--hm-danger: #e06464;--hm-info: #668fd7;--hm-radius-sm: 5px;--hm-radius-md: 7px;--hm-radius-lg: 10px;--hm-radius-xl: 14px;--hm-shadow-sm: 0 1px 2px rgba(0,0,0,.24), 0 0 0 1px rgba(255,255,255,.015);--hm-shadow-md: 0 10px 30px rgba(0,0,0,.28);--hm-shadow-lg: 0 24px 64px rgba(0,0,0,.48);--shell-sidebar: 252px;--shell-sidebar-collapsed: 72px}html{background:var(--hm-bg)}body{color:var(--hm-text);background:radial-gradient(circle at 72% -20%,rgba(197,139,50,.055),transparent 34rem),linear-gradient(180deg,#080a0f 0%,var(--hm-bg) 35%)}button,input,select,textarea{font:inherit}::-moz-selection{background:#c58b3252;color:#fff}::selection{background:#c58b3252;color:#fff}.odin-icon{display:block;flex:none}.app-loading{min-height:100vh;display:grid;place-items:center}.brand-loader{color:var(--hm-accent-hover);animation:brand-pulse 1.4s ease-in-out infinite}@keyframes brand-pulse{50%{opacity:.45;transform:scale(.94)}}.app-shell{display:flex;min-height:100vh}.hm-sidebar{position:relative;width:var(--shell-sidebar);min-width:var(--shell-sidebar);height:100vh;min-height:0;background:#0d1017f5;border-right:1px solid var(--hm-border-subtle);box-shadow:10px 0 35px #0000001f;transition:width .22s ease,min-width .22s ease,transform .22s ease;display:flex;flex-direction:column;z-index:40}.hm-sidebar:before{content:"";position:absolute;inset:0 auto 0 0;width:2px;background:linear-gradient(180deg,transparent 3%,var(--hm-accent) 24%,rgba(197,139,50,.15) 68%,transparent);opacity:.65;pointer-events:none}.hm-sidebar.collapsed{width:var(--shell-sidebar-collapsed);min-width:var(--shell-sidebar-collapsed)}.sidebar-brand{min-height:76px;padding:0 16px 0 18px;display:flex;align-items:center;gap:11px;border-bottom:1px solid var(--hm-border-subtle)}.brand-mark{width:34px;height:34px;display:grid;place-items:center;color:var(--hm-accent-hover);background:linear-gradient(145deg,#c58b3229,#c58b3209);border:1px solid rgba(197,139,50,.3);border-radius:9px;flex:none}.sidebar-brand-copy{display:flex;flex-direction:column;min-width:0;line-height:1}.brand-wordmark{font-size:.83rem;letter-spacing:.23em;font-weight:700;color:#f2dfb8}.brand-caption{margin-top:7px;font-size:.61rem;letter-spacing:.1em;text-transform:uppercase;color:var(--hm-text-dim)}.sidebar-toggle-btn{margin-left:auto}.hm-sidebar.collapsed .sidebar-brand{padding-inline:18px;justify-content:center}.hm-sidebar.collapsed .sidebar-brand-copy,.hm-sidebar.collapsed .nav-label,.hm-sidebar.collapsed .nav-section-label,.hm-sidebar.collapsed .connection-copy,.hm-sidebar.collapsed .shortcut-hint span,.hm-sidebar.collapsed .shortcut-hint kbd,.hm-sidebar.collapsed .brand-mark{display:none}.hm-sidebar.collapsed .sidebar-toggle-btn{margin-left:0}.sidebar-nav{flex:1;min-height:0;padding:13px 10px;overflow:auto}.nav-group+.nav-group{margin-top:18px}.nav-section-label{padding:0 10px 6px;color:#555f6f;font-size:.625rem;line-height:1;text-transform:uppercase;letter-spacing:.14em;font-weight:700}.nav-item{position:relative;min-height:40px;display:flex;align-items:center;white-space:nowrap;overflow:hidden;margin:2px 0;padding:0 10px;gap:11px;color:#8d97a7;border-radius:7px;font-size:.79rem;font-weight:500;text-decoration:none;cursor:pointer;transition:background var(--hm-transition-base),color var(--hm-transition-base)}.nav-item:hover{background:#ffffff09;color:#d9dee7}.nav-item.active{background:linear-gradient(90deg,#c58b3224,#c58b320b);color:#ebc982;box-shadow:inset 2px 0 0 var(--hm-accent)}.nav-item.active:after{content:"";position:absolute;right:10px;width:4px;height:4px;background:var(--hm-accent-hover);border-radius:50%;box-shadow:0 0 8px var(--hm-accent)}.nav-icon{width:20px;display:grid;flex:none;place-items:center;color:#717d8f}.nav-item:hover .nav-icon{color:#aeb7c4}.nav-item.active .nav-icon{color:var(--hm-accent-hover)}.hm-sidebar.collapsed .sidebar-nav{padding-inline:12px}.hm-sidebar.collapsed .nav-item{padding:0;justify-content:center}.hm-sidebar.collapsed .nav-item.active:after{right:5px}.sidebar-footer{min-height:var(--hm-rail-h);padding:12px;border-top:1px solid var(--hm-border-subtle);display:grid;gap:8px;align-content:center}.connection-card{min-height:42px;padding:8px 10px;display:flex;align-items:center;gap:9px;border:1px solid var(--hm-border-subtle);background:#00000024;border-radius:8px}.connection-copy{min-width:0;display:flex;flex:1;justify-content:space-between;align-items:baseline;gap:8px}.connection-label{font-size:.7rem;color:var(--hm-text-muted)}.connection-latency{font-family:var(--hm-font-mono);font-size:.58rem;color:var(--hm-text-dim)}.shortcut-hint{width:100%;min-height:32px;display:flex;align-items:center;gap:7px;padding:0 9px;border:0;border-radius:6px;background:transparent;color:var(--hm-text-dim);font-size:.67rem;cursor:pointer}.shortcut-hint:hover{color:var(--hm-text-muted);background:#ffffff08}.shortcut-hint kbd{margin-left:auto}.hm-sidebar.collapsed .connection-card,.hm-sidebar.collapsed .shortcut-hint{justify-content:center;padding-inline:0}.hm-main{flex:1;min-width:0;height:100vh;max-height:none;overflow-y:auto;background:transparent}.hm-topbar{position:sticky;top:0;display:flex;align-items:center;z-index:25;height:var(--hm-topbar-h);padding:0 28px;gap:22px;background:#07090de0;border-bottom:1px solid var(--hm-border-subtle);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px)}.topbar-context{display:flex;flex-direction:column;min-width:140px}.topbar-kicker{margin-bottom:2px;color:var(--hm-accent);font-size:.57rem;line-height:1;text-transform:uppercase;letter-spacing:.16em;font-weight:700}.topbar-title-row{display:flex;align-items:center;gap:10px}.topbar-title-row h1{margin:0;color:#f3f4f7;font-size:1rem;line-height:1.25;font-weight:650;letter-spacing:-.018em}.topbar-description{margin:0;padding-left:22px;border-left:1px solid var(--hm-border);color:var(--hm-text-dim);font-size:.72rem}.topbar-actions{margin-left:auto;display:flex;align-items:center;gap:8px}.uptime-label{margin-right:5px;color:var(--hm-text-dim);font-family:var(--hm-font-mono);font-size:.62rem}.status-pill{display:inline-flex;align-items:center;gap:5px;color:var(--hm-text-muted);font-size:.58rem;text-transform:capitalize;font-weight:600}.status-pill .status-dot{width:6px;height:6px;box-shadow:none}.command-trigger{min-height:34px;padding:0 8px 0 10px;display:flex;align-items:center;gap:7px;color:var(--hm-text-muted);background:#ffffff06;border:1px solid var(--hm-border);border-radius:7px;font-size:.68rem;cursor:pointer}.command-trigger:hover{color:var(--hm-text);border-color:#3a4352;background:#ffffff0b}kbd{padding:2px 5px;color:#818b99;background:#090c11;border:1px solid #2b3340;border-radius:4px;font-family:var(--hm-font-sans);font-size:.57rem;box-shadow:inset 0 -1px #ffffff09}.page-viewport{min-height:calc(100vh - var(--hm-topbar-h))}.icon-btn.mobile-menu-btn,.mobile-scrim{display:none}.icon-btn{width:34px;height:34px;padding:0;display:inline-grid;place-items:center;flex:none;color:var(--hm-text-muted);background:transparent;border:1px solid transparent;border-radius:7px;cursor:pointer;transition:color .15s ease,border-color .15s ease,background .15s ease}.icon-btn:hover{color:var(--hm-text);background:#ffffff0b;border-color:var(--hm-border)}.icon-btn-danger{color:#d67a7a}.icon-btn-danger:hover{color:#f08a8a;background:#e064641a;border-color:#e064643d}.section-shell{min-height:calc(100vh - var(--hm-topbar-h))}.section-tabs-wrap{position:sticky;top:var(--hm-topbar-h);z-index:20;padding:0 24px;background:#090c11eb;border-bottom:var(--hm-section-tabs-border) solid var(--hm-border-subtle);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.section-tabs{display:flex;align-items:stretch;gap:2px;min-height:var(--hm-section-tabs-inner-h);overflow-x:auto}.section-tab{position:relative;padding:0 13px;white-space:nowrap;color:#7f8998;background:transparent;border:0;font-size:.72rem;font-weight:550;cursor:pointer}.section-tab:hover{color:#c8ced7}.section-tab.active{color:#e9ca8e}.section-tab.active:after{content:"";position:absolute;left:13px;right:13px;bottom:0;height:2px;background:var(--hm-accent);border-radius:2px 2px 0 0;box-shadow:0 -3px 12px #c58b3233}.section-panel>*{min-height:100%}.hm-card{background:linear-gradient(150deg,#121720f5,#0e1219fa);border-color:var(--hm-border);box-shadow:var(--hm-shadow-sm)}.hm-card:hover{border-color:#303847}.hm-table th{background:#07090d4d;color:#7e8898;font-size:.64rem;letter-spacing:.075em;font-weight:650}.hm-table td{border-bottom-color:var(--hm-border-subtle)}.hm-table tr:hover td{background:#ffffff05}.btn{min-height:34px;padding:7px 12px;border:1px solid transparent;font-weight:600}.btn-primary{color:#171006;background:linear-gradient(180deg,#d4a14e,#b77b29);border-color:#dcaa57;box-shadow:inset 0 1px #ffffff21,0 5px 14px #83521324}.btn-primary:hover{background:linear-gradient(180deg,#e2b35f,#c88a31);box-shadow:0 7px 18px #83521333}.btn-ghost{border-color:var(--hm-border);background:#ffffff04}.btn-ghost:hover{border-color:#394251;background:#ffffff0a}.hm-input{min-height:38px;background:#090c11;border-color:#2a3240}.hm-input:hover{border-color:#36404f}.hm-input:focus{border-color:var(--hm-accent);box-shadow:0 0 0 3px #c58b321a}.login-shell{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(circle at 50% 20%,rgba(197,139,50,.09),transparent 30rem)}.login-panel{width:100%;max-width:380px;padding:34px;background:linear-gradient(150deg,#131821f7,#0b0e14fc);border:1px solid var(--hm-border);border-radius:14px;box-shadow:var(--hm-shadow-lg)}.login-brand{width:48px;height:48px;margin-bottom:26px;display:grid;place-items:center;color:var(--hm-accent-hover);background:var(--hm-accent-dim);border:1px solid rgba(197,139,50,.3);border-radius:11px}.login-eyebrow{margin:0 0 7px;color:var(--hm-accent);font-size:.63rem;font-weight:700;letter-spacing:.15em;text-transform:uppercase}.login-title{margin:0;color:#f2f3f6;font-size:1.65rem;line-height:1.2;font-weight:650;letter-spacing:-.035em}.login-subtitle{margin:7px 0 25px;color:var(--hm-text-muted);font-size:.8rem}.modal-overlay{background:#030508c2;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.modal-content,.palette{background:linear-gradient(155deg,#171c25,#0f131a);border-color:#303847;box-shadow:var(--hm-shadow-lg)}.confirm-heading{display:flex;gap:13px;margin-bottom:22px}.confirm-heading h3{margin:2px 0 6px;font-size:.92rem;font-weight:650}.confirm-heading p{margin:0;color:var(--hm-text-muted);font-size:.76rem;line-height:1.55}.confirm-icon{width:38px;height:38px;display:grid;place-items:center;flex:none;color:var(--hm-info);background:#668fd71a;border:1px solid rgba(102,143,215,.22);border-radius:9px}.confirm-icon.danger{color:var(--hm-danger);background:#e064641a;border-color:#e0646438}.toast-item{min-width:260px;padding:11px 13px;background:#141923;border-color:#2b3442;border-left-width:3px;color:var(--hm-text)}.toast-success{border-left-color:var(--hm-success)}.toast-error{border-left-color:var(--hm-danger)}.toast-info{border-left-color:var(--hm-info)}.toast-success,.toast-error,.toast-info{background:#141923;color:var(--hm-text)}.toast-success .toast-icon{color:var(--hm-success)}.toast-error .toast-icon{color:var(--hm-danger)}.toast-info .toast-icon{color:var(--hm-info)}.palette-overlay{padding-top:12vh}.palette{max-width:570px}.palette-search{display:flex;align-items:center;gap:10px;padding-left:17px;color:var(--hm-text-dim);border-bottom:1px solid var(--hm-border)}.palette-input{border:0;padding:17px 17px 17px 0;font-size:.82rem}.palette-results{max-height:390px;padding:8px}.palette-item{min-height:48px;gap:11px;padding:6px 10px}.palette-item.selected{background:linear-gradient(90deg,#c58b321f,#c58b3209)}.palette-icon{width:30px;height:30px;display:grid;place-items:center;color:#8994a4;background:#ffffff09;border:1px solid var(--hm-border-subtle);border-radius:7px}.palette-item.selected .palette-icon{color:var(--hm-accent-hover);border-color:#c58b3240}.palette-copy{display:flex;flex-direction:column;gap:2px}.palette-label{color:#dfe3e9;font-size:.76rem;font-weight:550}.palette-group{color:var(--hm-text-dim);font-size:.61rem}.palette-arrow{margin-left:auto;color:#4e5867}.palette-footer{justify-content:flex-end;gap:16px;padding:10px 14px}.palette-footer span{display:flex;align-items:center;gap:5px}.error-icon,.empty-state-icon{display:grid;place-items:center;color:var(--hm-text-dim)}.empty-state{min-height:220px;border-style:dashed}.empty-state-icon{width:44px;height:44px;font-size:initial;background:#ffffff06;border:1px solid var(--hm-border-subtle);border-radius:10px}@media(max-width:900px){.hm-sidebar{position:fixed;left:0;top:0;transform:translate(-102%);width:min(280px,86vw);min-width:min(280px,86vw);box-shadow:20px 0 60px #00000080}.hm-sidebar.mobile-open{transform:translate(0)}.hm-sidebar.collapsed{width:min(280px,86vw);min-width:min(280px,86vw)}.hm-sidebar.collapsed .sidebar-brand-copy,.hm-sidebar.collapsed .nav-label,.hm-sidebar.collapsed .nav-section-label,.hm-sidebar.collapsed .connection-copy,.hm-sidebar.collapsed .shortcut-hint span,.hm-sidebar.collapsed .shortcut-hint kbd{display:flex}.hm-sidebar.collapsed .sidebar-brand{justify-content:flex-start}.hm-sidebar.collapsed .brand-mark{display:grid}.hm-sidebar.collapsed .nav-item{padding:0 10px;justify-content:flex-start}.mobile-scrim{display:block;position:fixed;top:0;right:0;bottom:0;left:0;z-index:35;background:#0000009e;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.icon-btn.mobile-menu-btn{display:inline-grid}.hm-sidebar .sidebar-toggle-btn{display:none}.hm-topbar{padding:0 16px;gap:12px}.topbar-description,.uptime-label,.command-trigger span{display:none}.command-trigger{width:34px;padding:0;justify-content:center}.command-trigger kbd{display:none}}@media(max-width:640px){:root{--hm-topbar-h: 64px}.section-tabs-wrap{padding:0 12px}.topbar-kicker{display:none}.topbar-title-row h1{font-size:.9rem}.status-pill{display:none}.section-tab{padding-inline:10px}.section-panel .p-6{padding:1rem}.login-panel{padding:26px}.toast-stack{left:12px;right:12px;bottom:12px}.toast-item{width:100%;max-width:none}}@media(prefers-reduced-motion:reduce){.brand-loader{animation:none}}.page-viewport .page-fade-in{width:100%;max-width:1600px;margin-inline:0}.page-viewport .p-6{padding:clamp(1rem,2vw,1.75rem)}.page-viewport h1.text-xl{color:#f2f3f6;font-size:1.12rem;line-height:1.3;letter-spacing:-.025em;font-weight:650}.page-viewport h2,.page-viewport h3{letter-spacing:-.012em}.page-lede{margin-top:4px;max-width:64ch;color:var(--hm-text-dim);font-size:.72rem;line-height:1.55}.form-panel{position:relative;overflow:hidden;border-color:#c58b3238;background:linear-gradient(145deg,#c58b320b,#0d1118fa 35%)}.form-panel:before{content:"";position:absolute;inset:0 auto 0 0;width:2px;background:linear-gradient(180deg,var(--hm-accent),transparent 75%)}.provider-choice-list{display:grid;gap:8px}.provider-choice{padding:11px 12px;border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-md);background:#0000001f}.provider-choice:has(input:checked){border-color:#c58b324d;background:var(--hm-accent-dim)}.provider-choice-label{display:flex;align-items:center;gap:9px;cursor:pointer}.provider-control{accent-color:var(--hm-accent)}.hm-card{padding:1rem;border-radius:var(--hm-radius-lg)}.hm-card>h2:first-child,.hm-card>h3:first-child{color:#e5e8ee}.table-responsive{border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-lg);background:#06080c3d}.hm-table{width:100%;border-collapse:collapse}.hm-table th{height:38px;padding:0 12px;white-space:nowrap}.hm-table td{padding:10px 12px;vertical-align:middle}.hm-table tbody tr:last-child td{border-bottom:0}.hm-select,select.hm-input{min-height:38px;background-color:#090c11;border-color:#2a3240}textarea.hm-input{min-height:90px;line-height:1.55}label{accent-color:var(--hm-accent)}input[type=checkbox]{width:15px;height:15px;accent-color:var(--hm-accent);border-radius:4px;cursor:pointer}input[type=checkbox]:focus-visible{outline:2px solid var(--hm-accent);outline-offset:3px}input[type=checkbox]:disabled{cursor:not-allowed;opacity:.45}.btn-danger{color:#f6b2b2;background:#e0646414;border-color:#e0646452}.btn-danger:hover{color:#ffd0d0;background:#e0646429;border-color:#e0646480}.btn:focus-visible,.icon-btn:focus-visible,.nav-item:focus-visible,.section-tab:focus-visible{outline:2px solid var(--hm-accent);outline-offset:2px}.modal-content{width:min(92vw,520px);padding:22px;border-radius:var(--hm-radius-xl)}.modal-content h2,.modal-content h3{color:#f0f2f5}.modal-content .btn{min-width:76px}.error-state{min-height:180px;border-color:#e0646442!important;background:linear-gradient(150deg,#34141852,#0e1219fa)}.error-icon{width:42px;height:42px;border-radius:10px;background:#e0646417;border:1px solid rgba(224,100,100,.2)}.sess-preset-icon,.tl-group-icon,.cfg-group-icon,.chat-tool-icon{display:inline-grid;place-items:center;flex:none}.sk-action-btn{display:inline-grid;place-items:center}.sk-card-icon{display:inline-grid;color:var(--hm-accent-hover)}.health-card-icon{display:inline-grid}.provider-status{display:inline-flex;align-items:center;gap:6px}.provider-status .status-dot{width:7px;height:7px;box-shadow:none}.row-expander{width:28px;height:28px;display:inline-grid;place-items:center;border:0;border-radius:6px;color:var(--hm-text-dim);background:transparent;cursor:pointer}.row-expander:hover{color:var(--hm-text);background:#ffffff0b}.row-expander:focus-visible{outline:2px solid var(--hm-accent);outline-offset:2px}.tool-expand-icon .odin-icon,.chat-tools-toggle-icon .odin-icon,.cfg-group-arrow .odin-icon,.sess-expand-icon .odin-icon,.mem-tree-arrow .odin-icon,.kb-tree-arrow .odin-icon{transition:transform var(--hm-transition-base)}.chat-markdown .chat-code-copy{opacity:0}.chat-markdown pre:hover .chat-code-copy,.chat-markdown .chat-code-copy:focus-visible{opacity:1}.fts-highlight,.knowledge-highlight{background:#e0b7663d;color:#fff0c8;border-radius:2px;padding-inline:1px}@media(max-width:640px){.page-viewport .p-6,.hm-card{padding:.85rem}.hm-table th,.hm-table td{padding-inline:9px}.modal-content{padding:18px}} +@font-face{font-family:Fira Code;font-style:normal;font-weight:400;font-display:swap;src:url(/ui/assets/fira-code-400-CHoedHDv.woff2) format("woff2")}@font-face{font-family:Fira Code;font-style:normal;font-weight:500;font-display:swap;src:url(/ui/assets/fira-code-400-CHoedHDv.woff2) format("woff2")}@font-face{font-family:Fira Code;font-style:normal;font-weight:600;font-display:swap;src:url(/ui/assets/fira-code-400-CHoedHDv.woff2) format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:400;font-display:swap;src:url(/ui/assets/inter-400-Dx4kXJAl.woff2) format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:500;font-display:swap;src:url(/ui/assets/inter-400-Dx4kXJAl.woff2) format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:600;font-display:swap;src:url(/ui/assets/inter-400-Dx4kXJAl.woff2) format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:700;font-display:swap;src:url(/ui/assets/inter-400-Dx4kXJAl.woff2) format("woff2")}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.container{width:100%}@media(min-width:640px){.container{max-width:640px}}@media(min-width:768px){.container{max-width:768px}}@media(min-width:1024px){.container{max-width:1024px}}@media(min-width:1280px){.container{max-width:1280px}}@media(min-width:1536px){.container{max-width:1536px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.m-2{margin:.5rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-2{height:.5rem}.h-5{height:1.25rem}.h-8{height:2rem}.h-full{height:100%}.max-h-24{max-height:6rem}.max-h-32{max-height:8rem}.max-h-40{max-height:10rem}.max-h-48{max-height:12rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-96{max-height:24rem}.min-h-screen{min-height:100vh}.w-2{width:.5rem}.w-32{width:8rem}.w-5{width:1.25rem}.w-72{width:18rem}.w-8{width:2rem}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-\[100px\]{min-width:100px}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-md{max-width:28rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-1{row-gap:.25rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.self-end{align-self:flex-end}.self-center{align-self:center}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-amber-900{--tw-border-opacity: 1;border-color:rgb(120 53 15 / var(--tw-border-opacity, 1))}.border-blue-500\/30{border-color:#3b82f64d}.border-gray-600{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.border-gray-700{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.border-gray-700\/50{border-color:#37415180}.border-gray-800{--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity, 1))}.border-gray-800\/50{border-color:#1f293780}.border-green-500\/30{border-color:#22c55e4d}.border-green-500\/40{border-color:#22c55e66}.border-green-800{--tw-border-opacity: 1;border-color:rgb(22 101 52 / var(--tw-border-opacity, 1))}.border-indigo-900\/30{border-color:#312e814d}.border-red-500\/30{border-color:#ef44444d}.border-red-500\/40{border-color:#ef444466}.border-red-700{--tw-border-opacity: 1;border-color:rgb(185 28 28 / var(--tw-border-opacity, 1))}.border-red-800{--tw-border-opacity: 1;border-color:rgb(153 27 27 / var(--tw-border-opacity, 1))}.border-red-900{--tw-border-opacity: 1;border-color:rgb(127 29 29 / var(--tw-border-opacity, 1))}.border-red-900\/50{border-color:#7f1d1d80}.border-slate-700{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.border-yellow-800{--tw-border-opacity: 1;border-color:rgb(133 77 14 / var(--tw-border-opacity, 1))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-blue-400{--tw-bg-opacity: 1;background-color:rgb(96 165 250 / var(--tw-bg-opacity, 1))}.bg-blue-500\/60{background-color:#3b82f699}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-blue-900{--tw-bg-opacity: 1;background-color:rgb(30 58 138 / var(--tw-bg-opacity, 1))}.bg-blue-900\/40{background-color:#1e3a8a66}.bg-blue-900\/50{background-color:#1e3a8a80}.bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.bg-gray-800{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.bg-gray-800\/50{background-color:#1f293780}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-gray-900\/30{background-color:#1118274d}.bg-gray-900\/50{background-color:#11182780}.bg-gray-950{--tw-bg-opacity: 1;background-color:rgb(3 7 18 / var(--tw-bg-opacity, 1))}.bg-green-400{--tw-bg-opacity: 1;background-color:rgb(74 222 128 / var(--tw-bg-opacity, 1))}.bg-green-900{--tw-bg-opacity: 1;background-color:rgb(20 83 45 / var(--tw-bg-opacity, 1))}.bg-green-900\/30{background-color:#14532d4d}.bg-green-950\/30{background-color:#052e164d}.bg-indigo-500{--tw-bg-opacity: 1;background-color:rgb(99 102 241 / var(--tw-bg-opacity, 1))}.bg-indigo-900{--tw-bg-opacity: 1;background-color:rgb(49 46 129 / var(--tw-bg-opacity, 1))}.bg-indigo-950\/30{background-color:#1e1b4b4d}.bg-red-900\/20{background-color:#7f1d1d33}.bg-red-900\/30{background-color:#7f1d1d4d}.bg-red-900\/50{background-color:#7f1d1d80}.bg-red-950\/30{background-color:#450a0a4d}.bg-yellow-900\/20{background-color:#713f1233}.\!p-0{padding:0!important}.p-0{padding:0}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-2{padding-bottom:.5rem}.pl-2{padding-left:.5rem}.pr-1{padding-right:.25rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-relaxed{line-height:1.625}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-cyan-400{--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-green-300{--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-indigo-300{--tw-text-opacity: 1;color:rgb(165 180 252 / var(--tw-text-opacity, 1))}.text-indigo-400{--tw-text-opacity: 1;color:rgb(129 140 248 / var(--tw-text-opacity, 1))}.text-orange-400{--tw-text-opacity: 1;color:rgb(251 146 60 / var(--tw-text-opacity, 1))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-teal-400{--tw-text-opacity: 1;color:rgb(45 212 191 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.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)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-300{transition-duration:.3s}.last\:mb-0:last-child{margin-bottom:0}.last\:border-0:last-child{border-width:0px}.hover\:border-gray-600:hover{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.hover\:bg-gray-700:hover{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.hover\:text-blue-300:hover{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.hover\:text-gray-300:hover{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.hover\:text-gray-400:hover{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.hover\:text-green-300:hover{--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.hover\:text-indigo-300:hover{--tw-text-opacity: 1;color:rgb(165 180 252 / var(--tw-text-opacity, 1))}.hover\:text-red-300:hover{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.hover\:text-yellow-300:hover{--tw-text-opacity: 1;color:rgb(253 224 71 / var(--tw-text-opacity, 1))}@media(min-width:360px){.min-\[360px\]\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:640px){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:768px){.md\:col-span-2{grid-column:span 2 / span 2}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media(min-width:1024px){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}html{-webkit-text-size-adjust:100%}*{-webkit-tap-highlight-color:rgba(217,119,6,.15)}:root{--hm-font-sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--hm-font-mono: "Fira Code", "Cascadia Code", "JetBrains Mono", ui-monospace, monospace;--hm-text-xs: .6875rem;--hm-text-sm: .75rem;--hm-text-base: .8125rem;--hm-text-md: .875rem;--hm-text-lg: 1rem;--hm-text-xl: 1.25rem;--hm-text-2xl: 1.5rem;--hm-leading-tight: 1.25;--hm-leading-normal: 1.5;--hm-leading-relaxed: 1.65;--hm-space-1: .25rem;--hm-space-2: .375rem;--hm-space-3: .5rem;--hm-space-4: .75rem;--hm-space-5: 1rem;--hm-space-6: 1.5rem;--hm-space-8: 2rem;--hm-radius-full: 9999px;--hm-shadow-glow: 0 0 20px rgba(197, 139, 50, .15), 0 0 4px rgba(197, 139, 50, .1);--hm-shadow-glow-sm: 0 0 8px rgba(197, 139, 50, .1);--hm-transition-fast: .1s ease;--hm-transition-base: .15s ease;--hm-transition-slow: .25s ease;--hm-transition-spring: .3s cubic-bezier(.34, 1.56, .64, 1)}body{font-family:var(--hm-font-sans);font-size:var(--hm-text-md);line-height:var(--hm-leading-normal);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;letter-spacing:-.011em}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--hm-bg)}::-webkit-scrollbar-thumb{background:#374151;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#4b5563}*{scrollbar-width:thin;scrollbar-color:#374151 var(--hm-bg)}.status-dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex-shrink:0}.status-dot.online{background:var(--hm-success);box-shadow:0 0 6px var(--hm-success)}.status-dot.offline{background:var(--hm-danger);box-shadow:0 0 6px var(--hm-danger)}.status-dot.starting{background:var(--hm-warning);box-shadow:0 0 6px var(--hm-warning)}.hm-card{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);padding:var(--hm-space-5);box-shadow:var(--hm-shadow-sm);transition:border-color var(--hm-transition-base),box-shadow var(--hm-transition-base)}.hm-table{width:100%;border-collapse:collapse;font-size:var(--hm-text-md)}.hm-table th{text-align:left;padding:var(--hm-space-3) var(--hm-space-4);color:var(--hm-text-muted);font-weight:500;font-size:var(--hm-text-sm);text-transform:uppercase;letter-spacing:.04em;border-bottom:1px solid var(--hm-border);white-space:nowrap}.hm-table td{padding:var(--hm-space-3) var(--hm-space-4);border-bottom:1px solid rgba(31,41,55,.5)}.hm-table tr:hover td{background:#1f29374d}.btn{display:inline-flex;align-items:center;gap:var(--hm-space-2);padding:var(--hm-space-2) var(--hm-space-4);border-radius:var(--hm-radius-md);font-size:var(--hm-text-base);font-weight:500;font-family:var(--hm-font-sans);cursor:pointer;border:none;transition:background var(--hm-transition-base),box-shadow var(--hm-transition-base),transform var(--hm-transition-fast);letter-spacing:-.006em}.btn:active:not(:disabled){transform:scale(.97)}.btn-primary{background:var(--hm-accent);color:#fff}.btn-primary:hover{background:var(--hm-accent-hover);box-shadow:var(--hm-shadow-glow-sm)}.btn-danger{background:#ef444426;color:#f87171}.btn-danger:hover{background:#ef444440}.btn-ghost{background:transparent;color:var(--hm-text-muted)}.btn-ghost:hover{background:var(--hm-surface-hover);color:var(--hm-text)}.btn:disabled{opacity:.5;cursor:not-allowed}.hm-input{background:var(--hm-bg);border:1px solid var(--hm-border);border-radius:var(--hm-radius-md);padding:var(--hm-space-3) var(--hm-space-4);color:var(--hm-text);font-size:var(--hm-text-md);font-family:var(--hm-font-sans);width:100%;outline:none;transition:border-color var(--hm-transition-base),box-shadow var(--hm-transition-base)}.hm-input:focus{border-color:var(--hm-accent);box-shadow:0 0 0 3px var(--hm-accent-glow)}textarea.hm-input{font-family:var(--hm-font-mono);resize:vertical;min-height:120px}.toggle-switch{position:relative;display:inline-block;width:36px;height:20px;flex-shrink:0}.toggle-switch input{opacity:0;width:0;height:0}.toggle-slider{position:absolute;top:0;right:0;bottom:0;left:0;background:#374151;border-radius:10px;cursor:pointer;transition:background .2s}.toggle-slider:before{content:"";position:absolute;width:14px;height:14px;left:3px;bottom:3px;background:#fff;border-radius:50%;transition:transform .2s}.toggle-switch input:checked+.toggle-slider{background:var(--hm-accent);box-shadow:var(--hm-shadow-glow-sm)}.toggle-switch input:checked+.toggle-slider:before{transform:translate(16px)}.toggle-switch input:disabled+.toggle-slider{opacity:.4;cursor:not-allowed}.field-changed td:first-child{border-left:2px solid var(--hm-accent)}.config-tag{display:inline-flex;align-items:center;gap:var(--hm-space-1);padding:.125rem .5rem;background:var(--hm-gold-dim);border:1px solid rgba(217,119,6,.2);border-radius:var(--hm-radius-sm);font-size:var(--hm-text-sm);font-family:var(--hm-font-mono);color:var(--hm-text)}.config-tag button{background:none;border:none;color:var(--hm-text-muted);cursor:pointer;padding:0;font-size:var(--hm-text-md);line-height:1}.config-tag button:hover{color:var(--hm-danger)}.hm-select{background:var(--hm-bg);border:1px solid var(--hm-border);border-radius:var(--hm-radius-md);padding:var(--hm-space-2) var(--hm-space-3);color:var(--hm-text);font-size:var(--hm-text-base);font-family:var(--hm-font-sans);outline:none;cursor:pointer;transition:border-color var(--hm-transition-base)}.hm-select:focus{border-color:var(--hm-accent)}.badge{display:inline-block;padding:.125rem .5rem;border-radius:var(--hm-radius-full);font-size:var(--hm-text-sm);font-weight:500;letter-spacing:.01em}.badge-success{background:#22c55e26;color:#4ade80}.badge-warning{background:#eab30826;color:#facc15}.badge-danger{background:#ef444426;color:#f87171}.badge-info{background:var(--hm-accent-dim);color:var(--hm-gold)}.spinner{width:20px;height:20px;border:2px solid var(--hm-border);border-top-color:var(--hm-accent);border-radius:50%;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:50}.modal-content{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-xl);padding:var(--hm-space-6);max-width:600px;width:90%;max-height:80vh;overflow-y:auto;box-shadow:var(--hm-shadow-lg)}.skeleton{background:linear-gradient(90deg,var(--hm-surface) 25%,var(--hm-surface-hover) 50%,var(--hm-surface) 75%);background-size:200% 100%;animation:shimmer 1.5s infinite;border-radius:var(--hm-radius-sm)}.skeleton-text{height:.875rem;margin-bottom:.5rem}.skeleton-stat{height:2rem;width:3rem;margin:0 auto .25rem}.skeleton-row{height:2.25rem;margin-bottom:.375rem}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.flash-new{animation:flash-highlight 1.5s ease-out}@keyframes flash-highlight{0%{background-color:#d9770640}to{background-color:transparent}}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}.error-state{display:flex;flex-direction:column;align-items:center;gap:var(--hm-space-4);padding:var(--hm-space-6);text-align:center}.error-state .error-icon{font-size:1.5rem;opacity:.6}.chat-container{display:flex;flex-direction:column;height:calc(100vh - var(--hm-topbar-h));overflow:hidden}.page-viewport .chat-container.page-fade-in{max-width:none;margin-inline:0;--chat-work-lane: 1400px;--chat-reading-lane: 1080px}.chat-messages{flex:1;overflow-y:auto;padding:var(--hm-space-5) var(--hm-space-5) var(--hm-space-3);scroll-behavior:smooth}.chat-messages>.chat-message,.chat-messages>.chat-date-sep{max-width:var(--chat-reading-lane);margin-inline:auto}.chat-messages>.chat-message:has(pre) .chat-bubble-wrap,.chat-messages>.chat-message:has(table) .chat-bubble-wrap{max-width:100%;width:100%}.chat-empty{display:flex;align-items:center;justify-content:center;height:100%}.chat-welcome{text-align:center;max-width:28rem}.chat-welcome-icon{color:var(--hm-accent);margin-bottom:var(--hm-space-4);opacity:.8}.chat-welcome-title{font-size:1.25rem;font-weight:700;color:var(--hm-text);margin-bottom:var(--hm-space-2);letter-spacing:.01em}.chat-welcome-subtitle{font-size:var(--hm-text-sm);color:var(--hm-text-muted);margin-bottom:var(--hm-space-5)}.chat-suggestions{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--hm-space-2)}.chat-suggestion{background:var(--hm-surface-elevated);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);padding:var(--hm-space-2) var(--hm-space-4);color:var(--hm-text-muted);font-size:var(--hm-text-sm);cursor:pointer;transition:border-color var(--hm-transition-base),color var(--hm-transition-base)}.chat-suggestion:hover{border-color:var(--hm-accent);color:var(--hm-accent-hover)}.chat-date-sep{display:flex;align-items:center;gap:var(--hm-space-4);margin:var(--hm-space-4) 0}.chat-date-sep:before,.chat-date-sep:after{content:"";flex:1;height:1px;background:var(--hm-border)}.chat-date-sep span{font-size:var(--hm-text-xs);color:var(--hm-text-muted);white-space:nowrap}.chat-message{display:flex;gap:var(--hm-space-3);margin-bottom:var(--hm-space-4);align-items:flex-start}.chat-message.chat-user{flex-direction:row-reverse}.chat-message.chat-bot{flex-direction:row}.chat-avatar{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px}.chat-avatar-bot{background:linear-gradient(135deg,#d9770633,#d977061a);border:1px solid rgba(217,119,6,.3);color:var(--hm-accent)}.chat-avatar-user{background:var(--hm-surface-hover);border:1px solid var(--hm-border);color:var(--hm-text-muted)}.chat-avatar-eye,.chat-avatar-user{display:flex;align-items:center;justify-content:center}.chat-avatar-pulse{animation:avatar-pulse 2s ease-in-out infinite}@keyframes avatar-pulse{0%,to{opacity:1}50%{opacity:.5}}.chat-bubble-wrap{max-width:75%;min-width:0}.chat-message.chat-user .chat-bubble-wrap{align-items:flex-end;display:flex;flex-direction:column}.chat-bubble{border-radius:var(--hm-radius-xl);padding:.625rem .875rem;font-size:var(--hm-text-md);line-height:var(--hm-leading-normal);word-break:break-word}.chat-bubble-user{background:linear-gradient(135deg,var(--hm-accent),#b45309);color:#fff;border-bottom-right-radius:var(--hm-radius-sm);box-shadow:var(--hm-shadow-sm)}.chat-bubble-bot{background:var(--hm-surface-elevated);border:1px solid var(--hm-border);border-bottom-left-radius:var(--hm-radius-sm)}.chat-bubble-typing{display:flex;align-items:center;gap:var(--hm-space-3)}.chat-bubble-header{display:flex;align-items:center;gap:var(--hm-space-2);margin-bottom:var(--hm-space-1)}.chat-bubble-label{font-size:var(--hm-text-xs);color:var(--hm-accent-hover);font-weight:600;letter-spacing:.02em}.chat-error-indicator{font-size:.625rem;color:#f87171;background:#ef444426;border:1px solid rgba(239,68,68,.3);border-radius:var(--hm-radius-sm);padding:0 .375rem;line-height:1.4;font-weight:600;text-transform:uppercase;letter-spacing:.04em}.chat-bubble-text{white-space:pre-wrap}.chat-timestamp{font-size:.625rem;color:var(--hm-text-muted);margin-top:2px;opacity:0;transition:opacity var(--hm-transition-base);padding:0 .25rem}.chat-message:hover .chat-timestamp{opacity:1}.chat-markdown{white-space:normal}.chat-markdown p{margin:0 0 .5rem}.chat-markdown p:last-child{margin-bottom:0}.chat-markdown code{background:#0000004d;padding:.125rem .375rem;border-radius:var(--hm-radius-sm);font-size:var(--hm-text-base);font-family:var(--hm-font-mono)}.chat-markdown pre{background:#0000004d;border-radius:var(--hm-radius-md);padding:var(--hm-space-3) var(--hm-space-4);margin:var(--hm-space-2) 0;overflow-x:auto;position:relative}.chat-markdown pre code{background:none;padding:0}.chat-markdown ul,.chat-markdown ol{margin:.25rem 0;padding-left:1.25rem}.chat-markdown blockquote{border-left:3px solid var(--hm-accent);padding-left:var(--hm-space-4);margin:var(--hm-space-2) 0;color:var(--hm-text-muted)}.chat-markdown a{color:var(--hm-accent-hover);text-decoration:underline}.chat-markdown table{border-collapse:collapse;margin:var(--hm-space-2) 0;font-size:var(--hm-text-sm);display:block;width:-moz-max-content;width:max-content;max-width:100%;overflow-x:auto}.chat-markdown th,.chat-markdown td{border:1px solid var(--hm-border);padding:var(--hm-space-2) var(--hm-space-3);text-align:left;white-space:nowrap;word-break:normal}.chat-markdown th{background:#0003;font-weight:600}.chat-code-copy{position:absolute;top:var(--hm-space-2);right:var(--hm-space-2);background:var(--hm-surface-hover);border:1px solid var(--hm-border);border-radius:var(--hm-radius-sm);color:var(--hm-text-muted);font-size:.625rem;padding:2px 8px;cursor:pointer;opacity:0;transition:opacity var(--hm-transition-base),color var(--hm-transition-base);font-family:var(--hm-font-sans);text-transform:uppercase;letter-spacing:.04em}.chat-code-copy:hover{color:var(--hm-accent-hover)}.chat-tool-cards{margin-bottom:var(--hm-space-2)}.chat-tools-toggle{background:none;border:none;color:var(--hm-text-muted);font-size:var(--hm-text-sm);cursor:pointer;display:flex;align-items:center;gap:var(--hm-space-1);padding:.125rem 0}.chat-tools-toggle:hover{color:var(--hm-text)}.chat-tools-toggle-icon{font-size:.5rem}.chat-tools-toggle-count{background:#d9770626;color:var(--hm-accent-hover);border-radius:var(--hm-radius-sm);padding:0 .375rem;font-weight:600;font-size:var(--hm-text-xs)}.chat-tool-list{display:flex;flex-wrap:wrap;gap:var(--hm-space-1);margin-top:var(--hm-space-2)}.chat-tool-card{display:flex;align-items:center;gap:var(--hm-space-2);background:#0003;border:1px solid var(--hm-border);border-radius:var(--hm-radius-md);padding:var(--hm-space-1) var(--hm-space-3);font-size:var(--hm-text-xs)}.chat-tool-icon{font-size:var(--hm-text-sm)}.chat-tool-name{font-family:var(--hm-font-mono);color:var(--hm-text-muted)}.chat-images{display:flex;flex-wrap:wrap;gap:var(--hm-space-2);margin-top:var(--hm-space-2)}.chat-image-thumb{border-radius:var(--hm-radius-md);overflow:hidden;border:1px solid var(--hm-border);max-width:240px;cursor:pointer;transition:border-color var(--hm-transition-base)}.chat-image-thumb:hover{border-color:var(--hm-accent)}.chat-image-thumb img{display:block;width:100%;height:auto;max-height:200px;-o-object-fit:cover;object-fit:cover}.chat-typing{display:flex;gap:var(--hm-space-1);padding:var(--hm-space-1) 0}.chat-typing span{width:6px;height:6px;background:var(--hm-accent);border-radius:50%;animation:typing-dot 1.4s infinite ease-in-out both}.chat-typing span:nth-child(1){animation-delay:0s}.chat-typing span:nth-child(2){animation-delay:.2s}.chat-typing span:nth-child(3){animation-delay:.4s}@keyframes typing-dot{0%,80%,to{transform:scale(.6);opacity:.4}40%{transform:scale(1);opacity:1}}.chat-typing-text{font-size:var(--hm-text-xs);color:var(--hm-text-muted);margin-left:var(--hm-space-2);font-style:italic}.chat-input-area{border-top:1px solid var(--hm-border);background:var(--hm-surface);padding:var(--hm-space-4) var(--hm-space-5);min-height:var(--hm-rail-h);display:flex;flex-direction:column;justify-content:center}.chat-input-row,.chat-input-hint{width:100%;max-width:var(--chat-work-lane);margin-inline:auto}.chat-input-row{display:flex;gap:var(--hm-space-3);align-items:flex-end}.chat-input{flex:1;background:var(--hm-bg);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);padding:var(--hm-space-3) var(--hm-space-4);color:var(--hm-text);font-size:var(--hm-text-md);resize:none;outline:none;line-height:var(--hm-leading-normal);max-height:120px;font-family:inherit;transition:border-color var(--hm-transition-base),box-shadow var(--hm-transition-base)}.chat-input:focus{border-color:var(--hm-accent);box-shadow:0 0 0 3px var(--hm-accent-glow)}.chat-input:disabled{opacity:.5}.chat-send-btn{height:36px;min-width:44px;flex-shrink:0;display:flex;align-items:center;justify-content:center}.chat-send-icon{pointer-events:none}.chat-input-hint{display:flex;justify-content:space-between;align-items:center;padding-top:var(--hm-space-1)}.chat-connection-status{display:flex;align-items:center;gap:var(--hm-space-1);font-size:var(--hm-text-xs)}.chat-status-dot{width:6px;height:6px;border-radius:50%}.chat-ws-on .chat-status-dot{background:#4ade80}.chat-ws-off .chat-status-dot{background:#f87171}.chat-ws-on{color:var(--hm-text-muted)}.chat-ws-off{color:#f87171}.session-card{transition:border-color var(--hm-transition-base),box-shadow var(--hm-transition-base)}.session-card:hover{border-color:var(--hm-accent);box-shadow:var(--hm-shadow-glow-sm)}.session-selected{border-color:var(--hm-accent)!important;background:#d977060d}.session-checkbox{width:14px;height:14px;accent-color:var(--hm-accent);cursor:pointer;flex-shrink:0}.session-preview-role{font-weight:600;font-family:var(--hm-font-mono);flex-shrink:0;width:36px}.session-msg-content{font-size:var(--hm-text-base)}.sess-source-icon{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:var(--hm-text-sm)}.sess-source-discord{background:#5865f226;border:1px solid rgba(88,101,242,.3)}.sess-source-web{background:var(--hm-accent-dim);border:1px solid rgba(217,119,6,.3)}.sess-expand-icon{font-size:.5rem;color:var(--hm-text-dim);transition:transform var(--hm-transition-base);display:inline-block;margin-right:var(--hm-space-2)}.sess-summary-banner{padding:var(--hm-space-3) var(--hm-space-4);background:linear-gradient(135deg,#eab30814,#eab30808);border:1px solid rgba(234,179,8,.2);border-radius:var(--hm-radius-md)}.sess-summary-label{font-size:var(--hm-text-xs);font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--hm-warning)}.sess-view-btn{background:#ffffff0d;border:1px solid transparent;border-radius:var(--hm-radius-md);padding:var(--hm-space-1) var(--hm-space-4);font-size:var(--hm-text-xs);color:var(--hm-text-muted);cursor:pointer;transition:all var(--hm-transition-base);font-family:var(--hm-font-sans)}.sess-view-btn:hover{background:#ffffff1a}.sess-view-active{background:var(--hm-accent-dim)!important;color:var(--hm-gold);border-color:#d9770666}.sess-thread-container{max-height:32rem;overflow-y:auto;scrollbar-gutter:stable;display:flex;flex-direction:column;gap:var(--hm-space-3)}.sess-thread{background:var(--hm-bg);border:1px solid var(--hm-border);border-radius:var(--hm-radius-md);overflow:hidden;transition:border-color var(--hm-transition-base)}.sess-thread:hover{border-color:#ffffff1a}.sess-thread-header{display:flex;align-items:center;gap:var(--hm-space-2);padding:var(--hm-space-3) var(--hm-space-4);cursor:pointer;transition:background var(--hm-transition-base)}.sess-thread-header:hover{background:#ffffff08}.sess-thread-num{width:22px;height:22px;border-radius:50%;background:var(--hm-accent-dim);color:var(--hm-accent-hover);display:flex;align-items:center;justify-content:center;font-size:var(--hm-text-xs);font-weight:700;flex-shrink:0}.sess-thread-arrow{font-size:.5rem;color:var(--hm-text-dim);transition:transform var(--hm-transition-base);display:inline-block}.sess-thread-arrow-open{transform:rotate(90deg)}.sess-thread-summary{flex:1;min-width:0;font-size:var(--hm-text-sm);color:var(--hm-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sess-thread-count{flex-shrink:0}.sess-thread-messages{border-top:1px solid var(--hm-border);padding:var(--hm-space-3) var(--hm-space-4);display:flex;flex-direction:column;gap:var(--hm-space-3)}.sess-thread-msg{padding:8px 12px;border-radius:6px;margin-bottom:8px}.sess-msg-user{background:#06b6d414;border-left:3px solid rgba(6,182,212,.5)}.sess-msg-assistant{background:#6366f114;border-left:3px solid rgba(99,102,241,.5)}.sess-msg-system{background:#6b728014;border-left:3px solid rgba(107,114,128,.4)}.sess-msg-header{display:flex;align-items:center;gap:var(--hm-space-2);margin-bottom:var(--hm-space-2)}.sess-role-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}.sess-dot-user{background:#06b6d4;box-shadow:0 0 4px #06b6d480}.sess-dot-assistant{background:#6366f1;box-shadow:0 0 4px #6366f180}.sess-dot-system{background:#6b7280}.sess-role-label{font-size:var(--hm-text-xs);font-weight:600}.sess-msg-content{font-size:13px;color:var(--hm-text);line-height:1.5;white-space:pre-wrap;word-break:break-word;overflow-wrap:break-word;max-height:200px;overflow-y:auto}.sess-filter-bar,.logs-filter-bar{border-bottom:1px solid var(--hm-border);padding-bottom:var(--hm-space-3)}.sess-preset-chip{display:inline-flex;align-items:center;gap:var(--hm-space-1);padding:var(--hm-space-1) var(--hm-space-4);border-radius:var(--hm-radius-full);font-size:var(--hm-text-xs);font-weight:500;cursor:pointer;border:1px solid transparent;transition:all var(--hm-transition-base);background:#ffffff0d;color:var(--hm-text-muted);font-family:var(--hm-font-sans)}.sess-preset-chip:hover{background:#ffffff1a;color:var(--hm-text)}.sess-preset-active{background:var(--hm-accent-dim)!important;color:var(--hm-gold)!important;border-color:#d9770666}.sess-preset-icon{font-size:var(--hm-text-sm)}.sess-preset-custom{border-style:dashed;border-color:#ffffff1a}.sess-preset-remove{margin-left:var(--hm-space-1);font-size:var(--hm-text-md);color:var(--hm-text-dim);cursor:pointer;line-height:1}.sess-preset-remove:hover{color:var(--hm-danger)}.log-line{border-left:2px solid transparent;padding-left:var(--hm-space-3)}.log-line-error{color:#f87171;border-left-color:#ef4444;background:#ef44440d}.log-line-warning{color:#fbbf24;border-left-color:#eab308;background:#eab3080a}.log-ts{transition:color var(--hm-transition-base)}.log-chip{display:inline-flex;align-items:center;padding:.125rem .5rem;border-radius:var(--hm-radius-full);font-size:var(--hm-text-xs);font-weight:600;cursor:pointer;border:1px solid transparent;transition:all var(--hm-transition-base);font-family:var(--hm-font-mono);background:#ffffff0d;color:var(--hm-text-muted)}.log-chip:hover{background:#ffffff1a}.log-chip-info.log-chip-active{background:#d9770633;color:var(--hm-gold);border-color:#d9770666}.log-chip-warning.log-chip-active{background:#eab30833;color:#facc15;border-color:#eab30866}.log-chip-error.log-chip-active{background:#ef444433;color:#f87171;border-color:#ef444466}.log-chip-clear{background:#ffffff0d;color:var(--hm-text-muted)}.log-chip-clear:hover{background:#ffffff1a;color:var(--hm-text)}.log-jump-btn{position:absolute;bottom:1rem;left:50%;transform:translate(-50%);background:var(--hm-accent);color:#fff;border:none;border-radius:var(--hm-radius-full);padding:var(--hm-space-2) var(--hm-space-5);font-size:var(--hm-text-sm);font-weight:500;cursor:pointer;z-index:10;box-shadow:0 2px 8px #0006;transition:background var(--hm-transition-base),transform var(--hm-transition-base);animation:jump-btn-in .2s ease-out}.log-jump-btn:hover{background:var(--hm-accent-hover)}@keyframes jump-btn-in{0%{opacity:0;transform:translate(-50%) translateY(.5rem)}to{opacity:1;transform:translate(-50%) translateY(0)}}.logs-tool-badge{display:inline-block;background:#d977061a;border:1px solid rgba(217,119,6,.2);border-radius:var(--hm-radius-sm);padding:0 var(--hm-space-2);font-size:var(--hm-text-xs);color:var(--hm-accent-hover);margin-right:var(--hm-space-2);font-family:var(--hm-font-mono)}.logs-timeline{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-md);padding:var(--hm-space-3) var(--hm-space-4)}.logs-timeline-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--hm-space-2)}.logs-timeline-chart{display:flex;gap:2px;align-items:flex-end;height:48px}.logs-timeline-bar-wrap{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;cursor:pointer;min-width:0}.logs-timeline-bar{width:100%;height:40px;display:flex;flex-direction:column-reverse;border-radius:2px 2px 0 0;overflow:hidden;background:#ffffff05;transition:background var(--hm-transition-base)}.logs-timeline-bar-wrap:hover .logs-timeline-bar{background:#ffffff0f}.logs-timeline-segment{width:100%;min-height:1px;transition:height var(--hm-transition-slow)}.logs-tl-error{background:#ef4444b3}.logs-tl-warning{background:#eab30899}.logs-tl-info{background:#3b82f666}.logs-timeline-label{font-size:.5rem;color:var(--hm-text-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.stat-card{position:relative;overflow:hidden}.stat-card:before{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,var(--hm-accent),transparent);opacity:0;transition:opacity var(--hm-transition-base)}.stat-card:hover:before{opacity:1}.stat-icon{font-size:var(--hm-text-md);margin-bottom:var(--hm-space-1);opacity:.7}.dash-hero{display:flex;flex-wrap:wrap;align-items:center;gap:var(--hm-space-5);position:relative}.dash-hero-left{display:flex;align-items:center;gap:var(--hm-space-4);flex:1;min-width:0}.dash-hero-ring{position:relative;width:48px;height:48px;flex-shrink:0}.dash-ring-svg{width:48px;height:48px;transform:rotate(-90deg)}.ring-online{color:var(--hm-success)}.ring-starting{color:var(--hm-warning)}.dash-ring-progress{transition:stroke-dashoffset 1s ease}.dash-hero-icon{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:1rem;color:var(--hm-text-muted)}.dash-hero-name{font-size:var(--hm-text-lg);font-weight:600;color:var(--hm-text);letter-spacing:-.02em}.dash-hero-sub{display:flex;align-items:center;gap:var(--hm-space-2);font-size:var(--hm-text-sm);color:var(--hm-text-muted)}.dash-hero-sep{opacity:.4}.dash-hero-actions{display:flex;gap:var(--hm-space-2);flex-shrink:0}.dash-hero-skeleton{display:flex;align-items:center;gap:var(--hm-space-4)}.dash-stat{display:flex;flex-direction:column;gap:var(--hm-space-1);padding:var(--hm-space-4) var(--hm-space-5)}.dash-stat-header{display:flex;align-items:center;gap:var(--hm-space-2)}.dash-stat-icon{font-size:var(--hm-text-md);opacity:.7}.dash-stat-label{font-size:var(--hm-text-xs);color:var(--hm-text-dim);text-transform:uppercase;letter-spacing:.04em;font-weight:500}.dash-stat-value{font-size:var(--hm-text-2xl);font-weight:700;letter-spacing:-.02em;line-height:1}.dash-stat-sub{font-size:var(--hm-text-xs)}.dash-stat-highlight{border-color:#d9770640;background:linear-gradient(135deg,var(--hm-surface),rgba(217,119,6,.03))}.dash-health-bar{padding:var(--hm-space-4) var(--hm-space-5)}.dash-health-items{display:flex;flex-wrap:wrap;gap:var(--hm-space-4)}.dash-health-item{display:flex;align-items:center;gap:var(--hm-space-2);font-size:var(--hm-text-sm)}.dash-health-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.dash-health-ok{background:var(--hm-success);box-shadow:0 0 6px var(--hm-success)}.dash-health-warn{background:var(--hm-warning);box-shadow:0 0 6px var(--hm-warning)}.dash-health-error{background:var(--hm-danger);box-shadow:0 0 6px var(--hm-danger)}.dash-health-label{color:var(--hm-text);font-weight:500}.dash-health-detail{color:var(--hm-text-muted)}.dash-panel{padding:var(--hm-space-4) var(--hm-space-5);min-height:120px}.dash-panel-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--hm-space-3)}.dash-panel-title{font-size:var(--hm-text-sm);font-weight:600;color:var(--hm-text-muted);text-transform:uppercase;letter-spacing:.04em}.dash-empty{display:flex;flex-direction:column;align-items:center;gap:var(--hm-space-2);padding:var(--hm-space-5) 0;color:var(--hm-text-dim);font-size:var(--hm-text-sm)}.dash-empty-icon{font-size:1.25rem;opacity:.3}.dash-agent-list{display:flex;flex-direction:column;gap:var(--hm-space-3)}.dash-agent-item{padding:var(--hm-space-3);background:var(--hm-bg);border:1px solid var(--hm-border);border-radius:var(--hm-radius-md)}.dash-agent-top{display:flex;align-items:center;gap:var(--hm-space-2);margin-bottom:var(--hm-space-1)}.dash-agent-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}.dash-agent-running{background:var(--hm-success);box-shadow:0 0 4px var(--hm-success);animation:loop-pulse 2s ease-in-out infinite}.dash-agent-completed{background:var(--hm-info)}.dash-agent-failed{background:var(--hm-danger)}.dash-agent-timeout{background:var(--hm-warning)}.dash-agent-killed{background:var(--hm-text-dim)}.dash-agent-label{font-weight:600;font-size:var(--hm-text-sm);color:var(--hm-text);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dash-agent-iters{font-size:var(--hm-text-xs);color:var(--hm-text-dim);font-family:var(--hm-font-mono);flex-shrink:0}.dash-agent-goal{font-size:var(--hm-text-xs);color:var(--hm-text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dash-agent-meta{display:flex;gap:var(--hm-space-3);font-size:var(--hm-text-xs);color:var(--hm-text-dim);margin-top:var(--hm-space-1)}.dash-agent-tools{font-family:var(--hm-font-mono)}.dash-activity-list{display:flex;flex-direction:column}.dash-activity-item{display:flex;align-items:center;gap:var(--hm-space-2);padding:var(--hm-space-2) 0;border-bottom:1px solid rgba(31,41,55,.5);font-size:var(--hm-text-xs)}.dash-activity-item:last-child{border-bottom:none}.dash-activity-dot{width:5px;height:5px;border-radius:50%;flex-shrink:0}.dot-ok{background:var(--hm-success)}.dot-error{background:var(--hm-danger)}.dash-activity-tool{font-family:var(--hm-font-mono);color:var(--hm-text);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dash-activity-time{color:var(--hm-text-dim);white-space:nowrap;flex-shrink:0}.dash-guild-item{display:flex;align-items:center;gap:var(--hm-space-2);font-size:var(--hm-text-sm)}.dash-guild-count{margin-left:auto;font-size:var(--hm-text-xs);color:var(--hm-text-dim)}.dash-error-list{display:flex;flex-direction:column;gap:var(--hm-space-2)}.dash-error-item{padding:var(--hm-space-2) 0;border-bottom:1px solid rgba(31,41,55,.5);font-size:var(--hm-text-xs)}.dash-error-item:last-child{border-bottom:none}.dash-error-top{display:flex;align-items:center;gap:var(--hm-space-2)}.dash-error-tool{font-family:var(--hm-font-mono);color:#f87171;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dash-error-time{color:var(--hm-text-dim);white-space:nowrap;flex-shrink:0}.dash-error-msg{color:var(--hm-text-dim);padding-left:1.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:90%}.tool-expand-icon{font-size:.625rem;display:inline-block;transition:transform var(--hm-transition-base)}.tool-detail-row td{padding:0!important}.tool-detail-cell{padding:var(--hm-space-4) var(--hm-space-5) var(--hm-space-4) 2rem!important;background:#11182780;border-left:2px solid var(--hm-accent)}.tl-stat-card{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);padding:var(--hm-space-4) var(--hm-space-5);text-align:center;position:relative;overflow:hidden}.tl-stat-card:hover{border-color:var(--hm-accent-dim)}.tl-stat-value{font-size:var(--hm-text-2xl);font-weight:700;color:var(--hm-text);line-height:1.2}.tl-stat-label{font-size:var(--hm-text-xs);color:var(--hm-text-dim);margin-top:var(--hm-space-1)}.tl-stat-spark{display:flex;justify-content:center;margin-top:var(--hm-space-2)}.tl-view-toggle{display:inline-flex;background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-md);overflow:hidden}.tl-view-btn{padding:var(--hm-space-1) var(--hm-space-3);background:none;border:none;color:var(--hm-text-dim);cursor:pointer;font-size:var(--hm-text-sm);transition:all var(--hm-transition-base)}.tl-view-btn:hover{color:var(--hm-text);background:var(--hm-surface-hover)}.tl-view-active{color:var(--hm-accent)!important;background:var(--hm-accent-dim)!important}.tl-search{flex:1;min-width:200px}.tl-category-chips{display:flex;flex-wrap:wrap;gap:var(--hm-space-1)}.tl-category-chip{padding:var(--hm-space-1) var(--hm-space-3);border-radius:var(--hm-radius-full);border:1px solid var(--hm-border);background:var(--hm-surface);color:var(--hm-text-muted);font-size:var(--hm-text-xs);cursor:pointer;transition:all var(--hm-transition-base);white-space:nowrap}.tl-category-chip:hover{border-color:var(--hm-accent-dim);color:var(--hm-text)}.tl-category-active{background:var(--hm-accent-dim)!important;border-color:var(--hm-accent)!important;color:var(--hm-accent)!important}.tl-group-header{display:flex;align-items:center;gap:var(--hm-space-2);margin-bottom:var(--hm-space-3);padding-bottom:var(--hm-space-2);border-bottom:1px solid var(--hm-border-subtle)}.tl-group-icon{font-size:var(--hm-text-md)}.tl-group-label{font-size:var(--hm-text-sm);font-weight:600;color:var(--hm-text)}.tl-tool-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:var(--hm-space-3)}.tl-tool-card{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);padding:var(--hm-space-4);cursor:pointer;transition:all var(--hm-transition-base)}.tl-tool-card:hover{border-color:#d977064d;box-shadow:var(--hm-shadow-glow-sm)}.tl-tool-card-active{border-left:2px solid var(--hm-accent)}.tl-tool-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--hm-space-2)}.tl-tool-name{font-family:var(--hm-font-mono);font-size:var(--hm-text-sm);font-weight:600;color:var(--hm-text)}.tl-tool-desc{font-size:var(--hm-text-xs);color:var(--hm-text-muted);line-height:var(--hm-leading-normal);margin-bottom:var(--hm-space-3)}.tl-tool-footer{display:flex;align-items:center;justify-content:space-between}.tl-tool-usage{display:flex;align-items:baseline;gap:var(--hm-space-1)}.tl-tool-usage-count{font-family:var(--hm-font-mono);font-size:var(--hm-text-sm);font-weight:600;color:var(--hm-accent)}.tl-tool-usage-zero{font-size:var(--hm-text-sm);color:var(--hm-text-dim)}.tl-tool-usage-label{font-size:var(--hm-text-xs);color:var(--hm-text-dim)}.tl-tool-spark{display:flex;align-items:center}.tl-sparkline{display:block}.tl-tool-detail{margin-top:var(--hm-space-3);padding-top:var(--hm-space-3);border-top:1px solid var(--hm-border-subtle)}.tl-tool-detail-desc{font-size:var(--hm-text-xs);color:var(--hm-text);line-height:var(--hm-leading-relaxed);white-space:pre-wrap;margin-bottom:var(--hm-space-3)}.tl-tool-params{margin-top:var(--hm-space-2)}.tl-tool-params-title{font-size:var(--hm-text-xs);font-weight:600;color:var(--hm-text-muted);margin-bottom:var(--hm-space-2)}.tl-tool-param{display:flex;align-items:center;gap:var(--hm-space-2);padding:var(--hm-space-1) 0;font-size:var(--hm-text-xs)}.tl-tool-param-name{font-family:var(--hm-font-mono);color:var(--hm-text);font-weight:500}.tl-tool-param-type{color:var(--hm-info);font-family:var(--hm-font-mono)}.tl-tool-param-req{color:var(--hm-warning);font-size:.625rem;font-weight:600;text-transform:uppercase}.sk-stat-card{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);padding:var(--hm-space-4) var(--hm-space-5);text-align:center}.sk-stat-card:hover{border-color:var(--hm-accent-dim)}.sk-stat-value{font-size:var(--hm-text-2xl);font-weight:700;color:var(--hm-text);line-height:1.2}.sk-stat-label{font-size:var(--hm-text-xs);color:var(--hm-text-dim);margin-top:var(--hm-space-1)}.sk-search{width:100%;max-width:400px}.sk-card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,360px),1fr));gap:var(--hm-space-4)}.sk-card{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);overflow:hidden;transition:border-color var(--hm-transition-base),box-shadow var(--hm-transition-base)}.sk-card:hover{border-color:#d977064d;box-shadow:var(--hm-shadow-glow-sm)}.sk-card-tested{border-left:2px solid var(--hm-success)}.sk-card-header{display:flex;align-items:center;justify-content:space-between;padding:var(--hm-space-4) var(--hm-space-5);border-bottom:1px solid var(--hm-border-subtle);flex-wrap:wrap;gap:var(--hm-space-2)}.sk-card-title-row{display:flex;align-items:center;gap:var(--hm-space-2)}.sk-card-icon{font-size:var(--hm-text-md);opacity:.7}.sk-card-name{font-family:var(--hm-font-mono);font-size:var(--hm-text-sm);font-weight:600;color:var(--hm-text)}.sk-card-runs{font-size:var(--hm-text-xs);color:var(--hm-text-dim);font-family:var(--hm-font-mono)}.sk-card-actions{display:flex;gap:var(--hm-space-1)}.sk-action-btn{width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:var(--hm-radius-md);border:1px solid var(--hm-border);background:var(--hm-surface);color:var(--hm-text-muted);cursor:pointer;font-size:var(--hm-text-xs);transition:all var(--hm-transition-base)}.sk-action-btn:hover{background:var(--hm-surface-hover);color:var(--hm-text)}.sk-action-test:hover{color:var(--hm-success);border-color:#22c55e4d}.sk-action-code:hover{color:var(--hm-info);border-color:#3b82f64d}.sk-action-edit:hover{color:var(--hm-accent);border-color:var(--hm-accent-dim)}.sk-action-delete:hover{color:var(--hm-danger);border-color:#ef44444d}.sk-card-body{padding:var(--hm-space-4) var(--hm-space-5)}.sk-card-desc{font-size:var(--hm-text-sm);color:var(--hm-text-muted);line-height:var(--hm-leading-normal);margin-bottom:var(--hm-space-2)}.sk-card-meta{display:flex;align-items:center;gap:var(--hm-space-4);font-size:var(--hm-text-xs);color:var(--hm-text-dim)}.sk-card-date,.sk-card-lines{white-space:nowrap}.sk-test-result{margin:0 var(--hm-space-5) var(--hm-space-4);padding:var(--hm-space-3) var(--hm-space-4);border-radius:var(--hm-radius-md);font-family:var(--hm-font-mono);font-size:var(--hm-text-xs)}.sk-test-pass{background:#22c55e14;border:1px solid rgba(34,197,94,.2)}.sk-test-fail{background:#ef444414;border:1px solid rgba(239,68,68,.2)}.sk-test-label{font-weight:600;font-family:var(--hm-font-sans);font-size:var(--hm-text-xs);margin-bottom:var(--hm-space-1)}.sk-test-pass .sk-test-label{color:var(--hm-success)}.sk-test-fail .sk-test-label{color:var(--hm-danger)}.sk-test-output{white-space:pre-wrap;color:var(--hm-text-muted);max-height:120px;overflow-y:auto}.sk-code-container{border-top:1px solid var(--hm-border-subtle)}.sk-code-header{display:flex;align-items:center;justify-content:space-between;padding:var(--hm-space-2) var(--hm-space-5);background:#03071280;border-bottom:1px solid var(--hm-border-subtle)}.sk-code-filename{font-family:var(--hm-font-mono);font-size:var(--hm-text-xs);color:var(--hm-text-dim)}.sk-code-copy{background:none;border:none;color:var(--hm-text-dim);cursor:pointer;font-size:var(--hm-text-sm);padding:var(--hm-space-1);border-radius:var(--hm-radius-sm);transition:color var(--hm-transition-base)}.sk-code-copy:hover{color:var(--hm-text)}.sk-code-wrap{display:flex;max-height:400px;overflow:auto}.sk-line-numbers{padding:var(--hm-space-4) var(--hm-space-3);text-align:right;color:var(--hm-text-dim);font-family:var(--hm-font-mono);font-size:var(--hm-text-xs);line-height:var(--hm-leading-relaxed);background:#03071280;border-right:1px solid var(--hm-border-subtle);-webkit-user-select:none;-moz-user-select:none;user-select:none;min-width:2.5rem;margin:0;flex-shrink:0}.sk-code-block{flex:1;padding:var(--hm-space-4) var(--hm-space-5);margin:0;background:var(--hm-bg);font-family:var(--hm-font-mono);font-size:var(--hm-text-xs);line-height:var(--hm-leading-relaxed);color:var(--hm-text);overflow-x:auto}.sk-code-block code{background:none;padding:0;font-size:inherit}.sk-kw{color:#c084fc;font-weight:600}.sk-str{color:#86efac}.sk-cmt{color:var(--hm-text-dim);font-style:italic}.sk-dec{color:var(--hm-gold)}.sk-num{color:#67e8f9}.sk-builtin{color:#93c5fd}.sk-editor-panel{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);padding:var(--hm-space-5) var(--hm-space-6);margin-top:var(--hm-space-4)}.sk-editor-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--hm-space-4)}.sk-editor-title{font-size:var(--hm-text-md);font-weight:600;color:var(--hm-text)}.sk-field-label{display:block;font-size:var(--hm-text-xs);color:var(--hm-text-muted);margin-bottom:var(--hm-space-1)}.sk-field-hint{font-size:var(--hm-text-xs);color:var(--hm-text-dim);margin-top:var(--hm-space-1)}.sk-editor-wrap{display:flex;border:1px solid var(--hm-border);border-radius:var(--hm-radius-md);overflow:hidden;background:var(--hm-bg)}.sk-editor-gutter{padding:var(--hm-space-4) var(--hm-space-3);text-align:right;color:var(--hm-text-dim);font-family:var(--hm-font-mono);font-size:var(--hm-text-base);line-height:var(--hm-leading-relaxed);background:#03071280;border-right:1px solid var(--hm-border-subtle);-webkit-user-select:none;-moz-user-select:none;user-select:none;min-width:2.5rem;white-space:pre;overflow:hidden;flex-shrink:0}.sk-editor-textarea{flex:1;padding:var(--hm-space-4) var(--hm-space-5);background:transparent;border:none;color:var(--hm-text);font-family:var(--hm-font-mono);font-size:var(--hm-text-base);line-height:var(--hm-leading-relaxed);resize:vertical;-moz-tab-size:4;-o-tab-size:4;tab-size:4;outline:none;min-height:300px;width:100%}.sk-editor-textarea::-moz-placeholder{color:var(--hm-text-dim)}.sk-editor-textarea::placeholder{color:var(--hm-text-dim)}.sk-editor-status{display:flex;gap:var(--hm-space-4);margin-top:var(--hm-space-2);font-size:var(--hm-text-xs);color:var(--hm-text-dim)}.sk-editor-line-count,.sk-editor-char-count{font-family:var(--hm-font-mono)}.sk-validation-box{padding:var(--hm-space-3) var(--hm-space-4);border-radius:var(--hm-radius-md);font-size:var(--hm-text-xs);margin-bottom:var(--hm-space-3)}.sk-validation-ok{background:#22c55e14;border:1px solid rgba(34,197,94,.2);color:var(--hm-success)}.sk-validation-err{background:#eab30814;border:1px solid rgba(234,179,8,.2);color:var(--hm-warning)}.skill-code-block{background:var(--hm-bg);border:1px solid var(--hm-border);border-radius:var(--hm-radius-md);padding:var(--hm-space-4) var(--hm-space-5);font-size:var(--hm-text-base);font-family:var(--hm-font-mono);overflow-x:auto;line-height:var(--hm-leading-relaxed);max-height:400px;overflow-y:auto;margin:0;color:var(--hm-text)}.skill-card{transition:border-color var(--hm-transition-base),box-shadow var(--hm-transition-base)}.skill-card:hover{border-color:#d977064d;box-shadow:var(--hm-shadow-glow-sm)}.skill-editor{font-family:var(--hm-font-mono);font-size:var(--hm-text-base);line-height:var(--hm-leading-relaxed);-moz-tab-size:4;-o-tab-size:4;tab-size:4;min-height:300px}.cfg-group{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);overflow:hidden;box-shadow:var(--hm-shadow-sm)}.cfg-group-header{display:flex;align-items:center;gap:var(--hm-space-3);padding:var(--hm-space-4) var(--hm-space-5);background:linear-gradient(135deg,var(--hm-surface),var(--hm-surface-elevated));border-bottom:1px solid var(--hm-border);transition:background var(--hm-transition-base)}.cfg-group-header:hover{background:var(--hm-surface-hover)}.cfg-group-icon{font-size:var(--hm-text-lg);opacity:.8}.cfg-group-label{font-weight:600;font-size:var(--hm-text-md);color:var(--hm-text);flex:1}.cfg-group-arrow{font-size:var(--hm-text-xs);color:var(--hm-text-dim);font-family:var(--hm-font-mono)}.cfg-group-body{padding:var(--hm-space-3);display:flex;flex-direction:column;gap:var(--hm-space-3)}.cfg-section{background:var(--hm-bg);border:1px solid rgba(31,41,55,.5);border-radius:var(--hm-radius-md);overflow:hidden}.cfg-section-header{display:flex;align-items:center;gap:var(--hm-space-2);padding:var(--hm-space-3) var(--hm-space-4);transition:background var(--hm-transition-base)}.cfg-section-header:hover{background:#1f29374d}.cfg-section-name{font-size:var(--hm-text-sm);font-weight:500;color:var(--hm-text)}.cfg-section-body{padding:0 var(--hm-space-3) var(--hm-space-3)}.cfg-field-error{font-size:var(--hm-text-xs);color:#f87171;margin-top:2px;font-family:var(--hm-font-sans);font-weight:400}.cfg-input-error{border-color:#ef444480!important;box-shadow:0 0 0 2px #ef444426!important}.cfg-change-count{font-size:var(--hm-text-xs);color:var(--hm-accent-hover);background:var(--hm-accent-dim);padding:2px 8px;border-radius:var(--hm-radius-full);font-weight:600}.cfg-diff-list{max-height:50vh;overflow-y:auto;display:flex;flex-direction:column;gap:var(--hm-space-3)}.cfg-diff-entry{border:1px solid var(--hm-border);border-radius:var(--hm-radius-md);overflow:hidden}.cfg-diff-path{padding:var(--hm-space-2) var(--hm-space-3);background:var(--hm-surface-hover);border-bottom:1px solid var(--hm-border);color:var(--hm-accent-hover)}.cfg-diff-values{font-size:var(--hm-text-sm)}.cfg-diff-old{padding:var(--hm-space-2) var(--hm-space-3);background:#ef444414;border-bottom:1px solid rgba(31,41,55,.3);color:#f87171;white-space:pre-wrap;word-break:break-word}.cfg-diff-new{padding:var(--hm-space-2) var(--hm-space-3);background:#22c55e14;color:#4ade80;white-space:pre-wrap;word-break:break-word}.cfg-diff-label{display:inline-block;width:1.25rem;font-weight:700;font-family:var(--hm-font-mono)}.knowledge-highlight{background:#d977064d;color:#fde68a;padding:0 2px;border-radius:2px}.knowledge-preview{border-left:2px solid var(--hm-border);padding-left:var(--hm-space-4);max-height:4rem;overflow:hidden;font-style:italic}.kb-stats-bar{display:flex;gap:var(--hm-space-4);margin-bottom:var(--hm-space-4);flex-wrap:wrap}.kb-stat{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);padding:var(--hm-space-3) var(--hm-space-4);text-align:center;min-width:80px}.kb-stat-value{display:block;font-size:1.25rem;font-weight:700;color:var(--hm-gold)}.kb-stat-label{display:block;font-size:var(--hm-text-xs);color:var(--hm-text-dim)}.kb-score-badge{font-family:var(--hm-font-mono);font-size:var(--hm-text-xs);color:var(--hm-text-dim);background:var(--hm-gold-dim);padding:1px 6px;border-radius:3px}.kb-search-result{border-left:3px solid var(--hm-accent-dim)}.kb-ingest-form{border-left:3px solid var(--hm-accent)}.kb-tree,.kb-tree-list{display:flex;flex-direction:column;gap:var(--hm-space-2)}.kb-tree-node{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);overflow:hidden}.kb-tree-header{display:flex;align-items:center;gap:var(--hm-space-2);padding:var(--hm-space-3) var(--hm-space-4);cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:background .15s}.kb-tree-header:hover{background:var(--hm-surface-hover)}.kb-tree-arrow{font-size:10px;color:var(--hm-text-dim);transition:transform .2s;flex-shrink:0}.kb-tree-icon{font-size:1rem;flex-shrink:0}.kb-tree-name{font-family:var(--hm-font-mono);font-size:var(--hm-text-sm);font-weight:600}.kb-tree-actions{margin-left:auto;display:flex;gap:var(--hm-space-1);flex-shrink:0}.kb-tree-meta{padding:0 var(--hm-space-4) var(--hm-space-2) 2.25rem;font-size:var(--hm-text-xs);color:var(--hm-text-dim)}.kb-tree-preview{padding:0 var(--hm-space-4) var(--hm-space-3) 2.25rem;font-size:var(--hm-text-sm);color:var(--hm-text-muted);font-style:italic;max-height:3rem;overflow:hidden;white-space:pre-wrap;word-break:break-word}.kb-chunk-browser{padding:0 var(--hm-space-4) var(--hm-space-4) var(--hm-space-4)}.kb-chunk-loading{display:flex;align-items:center;gap:var(--hm-space-2);color:var(--hm-text-dim);font-size:var(--hm-text-sm);padding:var(--hm-space-2) 0}.kb-chunk-list{display:flex;flex-direction:column;gap:var(--hm-space-1)}.kb-chunk-header{display:flex;justify-content:space-between;padding:var(--hm-space-2) 0;border-bottom:1px solid var(--hm-border)}.kb-chunk-empty{padding:var(--hm-space-2) 0}.kb-chunk-item{padding:var(--hm-space-2) var(--hm-space-3);border-radius:var(--hm-radius-md);border:1px solid var(--hm-border-subtle);cursor:pointer;transition:all .15s}.kb-chunk-item:hover{background:var(--hm-surface-hover);border-color:var(--hm-border)}.kb-chunk-selected{background:var(--hm-gold-dim)!important;border-color:#d977064d!important}.kb-chunk-item-header{display:flex;align-items:center;gap:var(--hm-space-2);margin-bottom:2px}.kb-chunk-index{font-family:var(--hm-font-mono);font-size:var(--hm-text-xs);font-weight:600;color:var(--hm-accent);min-width:2rem}.kb-chunk-chars{font-size:var(--hm-text-xs);color:var(--hm-text-dim);min-width:4.5rem}.kb-chunk-bar{flex:1;height:4px;background:var(--hm-border);border-radius:2px;overflow:hidden}.kb-chunk-bar-fill{height:100%;background:var(--hm-accent);border-radius:2px;transition:width .3s}.kb-chunk-preview{font-size:var(--hm-text-xs);color:var(--hm-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kb-chunk-content{font-size:var(--hm-text-sm);color:var(--hm-text);white-space:pre-wrap;word-break:break-word;max-height:20rem;overflow-y:auto;margin-top:var(--hm-space-2);padding:var(--hm-space-2);background:var(--hm-bg);border-radius:var(--hm-radius-md);border:1px solid var(--hm-border)}.memory-scope-badge{display:inline-block;padding:2px 8px;border-radius:4px;font-size:var(--hm-text-sm);font-weight:600;font-family:var(--hm-font-mono)}.memory-scope-global{background:#d9770633;color:var(--hm-gold);border:1px solid rgba(217,119,6,.3)}.memory-scope-user{background:#eab30826;color:#fde047;border:1px solid rgba(234,179,8,.25)}.memory-checkbox{width:16px;height:16px;accent-color:var(--hm-accent);cursor:pointer}.mem-stats-bar{display:flex;gap:var(--hm-space-4);margin-bottom:var(--hm-space-4);flex-wrap:wrap}.mem-stat{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);padding:var(--hm-space-3) var(--hm-space-4);text-align:center;min-width:80px}.mem-stat-value{display:block;font-size:1.25rem;font-weight:700;color:var(--hm-gold)}.mem-stat-label{display:block;font-size:var(--hm-text-xs);color:var(--hm-text-dim)}.mem-stat-action{display:flex;align-items:center;justify-content:center}.mem-add-form{border-left:3px solid var(--hm-accent)}.mem-tree{display:flex;flex-direction:column;gap:var(--hm-space-2)}.mem-tree-node{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);overflow:hidden}.mem-tree-header{display:flex;align-items:center;gap:var(--hm-space-2);padding:var(--hm-space-3) var(--hm-space-4);cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:background .15s}.mem-tree-header:hover{background:var(--hm-surface-hover)}.mem-tree-arrow{font-size:10px;color:var(--hm-text-dim);transition:transform .2s;flex-shrink:0}.mem-tree-entries{padding:0 var(--hm-space-4) var(--hm-space-3)}.mem-tree-loading{display:flex;align-items:center;gap:var(--hm-space-2);color:var(--hm-text-dim);font-size:var(--hm-text-sm);padding:var(--hm-space-2) 0}.mem-tree-empty{padding:var(--hm-space-2) 0}.mem-tree-entry{padding:var(--hm-space-2) var(--hm-space-3);border-radius:var(--hm-radius-md);border:1px solid var(--hm-border-subtle);margin-bottom:var(--hm-space-1);transition:all .15s}.mem-tree-entry:hover{background:var(--hm-surface-hover)}.mem-tree-entry-selected{background:var(--hm-gold-dim);border-color:#d977064d}.mem-tree-entry-header{display:flex;align-items:center;gap:var(--hm-space-2);margin-bottom:2px}.mem-tree-key{font-family:var(--hm-font-mono);font-size:var(--hm-text-xs);font-weight:500;color:var(--hm-text-muted)}.mem-tree-entry-actions{margin-left:auto;display:flex;gap:var(--hm-space-1);flex-shrink:0}.mem-tree-value{font-size:var(--hm-text-sm);color:var(--hm-text);white-space:pre-wrap;word-break:break-word;max-height:6rem;overflow:hidden;padding-left:1.5rem}.mem-tree-edit{padding-left:1.5rem;margin-top:var(--hm-space-1)}.ag-checkbox{width:14px;height:14px;accent-color:var(--hm-accent);cursor:pointer}.ag-stats-bar{display:flex;gap:var(--hm-space-4);margin-bottom:var(--hm-space-4);flex-wrap:wrap}.ag-stat{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);padding:var(--hm-space-3) var(--hm-space-4);text-align:center;min-width:80px}.ag-stat-value{display:block;font-size:1.25rem;font-weight:700;color:var(--hm-gold)}.ag-stat-label{display:block;font-size:var(--hm-text-xs);color:var(--hm-text-dim)}.ag-stat-running{color:var(--hm-success)!important}.ag-stat-completed{color:var(--hm-info)!important}.ag-stat-failed{color:var(--hm-danger)!important}.ag-filter-bar{display:flex;gap:var(--hm-space-2);margin-bottom:var(--hm-space-4);flex-wrap:wrap}.ag-filter-btn{padding:var(--hm-space-1) var(--hm-space-3);border-radius:var(--hm-radius-md);font-size:var(--hm-text-xs);color:var(--hm-text-muted);background:var(--hm-surface);border:1px solid var(--hm-border);cursor:pointer;transition:all .15s;display:flex;align-items:center;gap:var(--hm-space-1)}.ag-filter-btn:hover{background:var(--hm-surface-hover);color:var(--hm-text)}.ag-filter-active{background:var(--hm-accent-dim)!important;border-color:var(--hm-accent)!important;color:var(--hm-gold)!important}.ag-filter-count{font-family:var(--hm-font-mono);font-weight:600;font-size:.65rem;background:var(--hm-border);padding:0 4px;border-radius:3px}.ag-filter-active .ag-filter-count{background:#d977064d}.ag-card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,340px),1fr));gap:var(--hm-space-4)}.ag-card{background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);padding:var(--hm-space-4);display:flex;flex-direction:column;gap:var(--hm-space-2);transition:border-color .2s,box-shadow .2s}.ag-card:hover{border-color:var(--hm-border)}.ag-card-running{border-left:3px solid var(--hm-success)}.ag-card-completed{border-left:3px solid var(--hm-info)}.ag-card-failed{border-left:3px solid var(--hm-danger)}.ag-card-timeout{border-left:3px solid var(--hm-warning)}.ag-card-killed{border-left:3px solid var(--hm-text-dim)}.ag-card-header{display:flex;align-items:center;justify-content:space-between}.ag-card-title-row{display:flex;align-items:center;gap:var(--hm-space-2);min-width:0;flex-wrap:nowrap}.ag-card-label{font-weight:600;font-size:var(--hm-text-sm);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ag-card-id{font-family:var(--hm-font-mono);font-size:var(--hm-text-xs);color:var(--hm-text-dim);flex:none}.ag-status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.ag-dot-running{background:var(--hm-success);box-shadow:0 0 6px var(--hm-success);animation:loop-pulse 2s ease-in-out infinite}.ag-dot-completed{background:var(--hm-info)}.ag-dot-failed{background:var(--hm-danger)}.ag-dot-timeout{background:var(--hm-warning)}.ag-dot-killed{background:var(--hm-text-dim)}.ag-status-badge{font-size:var(--hm-text-xs);font-weight:600;padding:1px 8px;border-radius:4px;text-transform:uppercase;letter-spacing:.05em}.ag-badge-running{background:#22c55e26;color:var(--hm-success)}.ag-badge-completed{background:#3b82f626;color:var(--hm-info)}.ag-badge-failed{background:#ef444426;color:var(--hm-danger)}.ag-badge-timeout{background:#eab30826;color:var(--hm-warning)}.ag-badge-killed{background:#9ca3af26;color:var(--hm-text-dim)}.ag-card-goal{font-size:var(--hm-text-sm);color:var(--hm-text-muted);line-height:1.4;height:3.5rem;overflow:hidden;position:relative}.ag-card-goal:after{content:"";position:absolute;inset:auto 0 0 0;height:1.5rem;background:linear-gradient(transparent,var(--hm-surface));pointer-events:none}.ag-card-clickable:hover .ag-card-goal:after{background:linear-gradient(transparent,var(--hm-surface-hover))}.ag-progress-bar{height:3px;background:var(--hm-border);border-radius:2px;overflow:hidden}.ag-progress-fill{height:100%;background:var(--hm-success);border-radius:2px;transition:width .5s;animation:ag-progress-glow 2s ease-in-out infinite}@keyframes ag-progress-glow{0%,to{opacity:1}50%{opacity:.6}}.ag-card-stats{display:flex;gap:var(--hm-space-3)}.ag-card-stat{flex:1;text-align:center}.ag-card-stat-label{display:block;font-size:.6rem;color:var(--hm-text-dim);text-transform:uppercase;letter-spacing:.05em}.ag-card-stat-value{display:block;font-family:var(--hm-font-mono);font-size:var(--hm-text-sm);font-weight:600}.ag-card-tools{display:flex;flex-wrap:wrap;gap:4px}.ag-tool-chip{font-family:var(--hm-font-mono);font-size:.6rem;padding:1px 6px;background:var(--hm-gold-dim);color:var(--hm-text-muted);border-radius:3px;border:1px solid var(--hm-border-subtle)}.ag-card-policy{display:flex;flex-wrap:nowrap;gap:4px;min-width:0}.ag-policy-chip{font-family:var(--hm-font-mono);font-size:.62rem;padding:1px 7px;color:var(--hm-text-muted);background:var(--hm-surface-elevated);border:1px solid var(--hm-border);border-radius:3px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ag-policy-chip:not(.ag-policy-effort){flex:0 1 auto}.ag-policy-effort{flex:0 0 auto;color:var(--hm-accent);border-color:#c58b3247}.ag-card-body{display:flex;flex-direction:column;gap:var(--hm-space-2);text-align:left;border-radius:var(--hm-radius-md)}.ag-card-clickable{cursor:pointer;transition:background .12s ease,box-shadow .12s ease}.ag-card-clickable:hover{background:var(--hm-surface-hover)}.ag-card-clickable:focus-visible{outline:2px solid var(--hm-accent);outline-offset:2px}.modal-content.ag-detail-modal{width:min(1000px,94vw);max-width:min(1000px,94vw);max-height:88vh;display:flex;flex-direction:column;gap:var(--hm-space-3);overflow-y:auto}.ag-detail-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--hm-space-3)}.ag-detail-title-row{display:flex;align-items:center;flex-wrap:wrap;gap:var(--hm-space-2);min-width:0}.ag-detail-title{margin:0;font-size:1rem;font-weight:650;letter-spacing:-.015em;color:#f2f3f6}.ag-detail-meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--hm-space-2) var(--hm-space-3)}.ag-detail-meta-item{display:flex;flex-direction:column;gap:1px;min-width:0}.ag-detail-meta-label{font-size:.6rem;color:var(--hm-text-dim);text-transform:uppercase;letter-spacing:.05em}.ag-detail-meta-value{font-family:var(--hm-font-mono);font-size:var(--hm-text-xs);color:var(--hm-text);word-break:break-word}.ag-detail-source{margin:0;font-size:.66rem;color:var(--hm-text-dim);font-style:italic}.ag-detail-section{display:flex;flex-direction:column;gap:4px}.ag-detail-section-head{display:flex;align-items:center;justify-content:space-between;gap:var(--hm-space-2)}.ag-detail-text{margin:0;padding:var(--hm-space-2);max-height:34vh;overflow:auto;font-family:var(--hm-font-mono);font-size:var(--hm-text-xs);line-height:1.5;white-space:pre-wrap;word-break:break-word;color:var(--hm-text-muted);background:var(--hm-bg);border:1px solid var(--hm-border);border-radius:var(--hm-radius-md)}.ag-detail-pending{margin:0;font-size:var(--hm-text-xs);color:var(--hm-text-dim)}@media(max-width:640px){.modal-content.ag-detail-modal{width:96vw;max-width:96vw;max-height:92vh}.ag-detail-text{max-height:40vh}}.ag-card-meta{display:flex;justify-content:space-between;gap:var(--hm-space-2)}.ag-card-result,.ag-card-error{padding:var(--hm-space-2);border-radius:var(--hm-radius-md);background:var(--hm-bg);border:1px solid var(--hm-border)}.ag-result-label{font-size:.6rem;color:var(--hm-text-dim);text-transform:uppercase;margin-bottom:2px}.ag-result-text{font-size:var(--hm-text-xs);white-space:pre-wrap;word-break:break-word;max-height:6rem;overflow:hidden;color:var(--hm-text-muted)}.ag-card-error{border-color:#ef444433}.ag-card-actions{display:flex;justify-content:flex-end}.loop-status-dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex-shrink:0}.loop-status-running{background:var(--hm-success);box-shadow:0 0 6px var(--hm-success);animation:loop-pulse 2s ease-in-out infinite}.loop-status-error{background:var(--hm-danger);box-shadow:0 0 6px var(--hm-danger)}.loop-status-stopped{background:var(--hm-text-dim)}@keyframes loop-pulse{0%,to{opacity:1;box-shadow:0 0 6px var(--hm-success)}50%{opacity:.5;box-shadow:0 0 2px var(--hm-success)}}.loop-history{background:var(--hm-bg);border:1px solid var(--hm-border);border-radius:var(--hm-radius-md);padding:var(--hm-space-3) var(--hm-space-4);max-height:200px;overflow-y:auto}.log-filter-field{flex:1 1 0%;min-width:0}.log-filter-row{display:flex;align-items:center;gap:.375rem;min-width:0}.log-filter-input{min-width:120px}@media(max-width:640px){.log-filter-field{flex:1 0 100%}.log-filter-input{min-width:0}}.loop-history-entry{font-size:var(--hm-text-sm);font-family:var(--hm-font-mono);color:var(--hm-text-muted);padding:var(--hm-space-1) 0;border-bottom:1px solid rgba(31,41,55,.3);white-space:pre-wrap;word-break:break-word}.loop-history-entry:last-child{border-bottom:none}.loop-card{display:flex;flex-direction:column;gap:var(--hm-space-3)}.loop-card-main{min-width:0;cursor:pointer;border-radius:var(--hm-radius-md);transition:background .12s ease,box-shadow .12s ease}.loop-card-main:hover{background:var(--hm-surface-hover)}.loop-card-goal{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden;margin-bottom:var(--hm-space-2);color:var(--hm-text);font-size:var(--hm-text-sm);line-height:1.45}.loop-card-main:focus-visible{outline:2px solid var(--hm-accent);outline-offset:3px}.loop-card-actions{display:flex;justify-content:flex-end;gap:var(--hm-space-2)}.loop-card-preview{display:flex;flex-direction:column;gap:3px;margin-top:var(--hm-space-3);padding:var(--hm-space-2);border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-md);background:var(--hm-bg);font-size:var(--hm-text-xs);color:var(--hm-text-dim);max-height:4.5rem;overflow:hidden;white-space:pre-wrap;word-break:break-word}.loop-detail-modal{gap:var(--hm-space-4)}.loop-detail-goal{max-height:22vh}.loop-detail-condition{max-height:14vh}.loop-detail-history-head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--hm-space-3);border-top:1px solid var(--hm-border);padding-top:var(--hm-space-3)}.loop-detail-history-head h3{margin:0 0 2px;font-size:var(--hm-text-sm)}.loop-detail-notice{padding:var(--hm-space-2);color:var(--hm-text-muted);font-size:var(--hm-text-xs);background:#c58b3214;border:1px solid rgba(197,139,50,.2);border-radius:var(--hm-radius-md)}.loop-detail-iterations{display:flex;flex-direction:column;gap:var(--hm-space-3)}.loop-detail-iteration{display:flex;flex-direction:column;gap:var(--hm-space-2);padding:var(--hm-space-3);border:1px solid var(--hm-border);background:var(--hm-surface-elevated);border-radius:var(--hm-radius-lg)}.loop-detail-iteration-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--hm-space-2)}.loop-detail-iteration-head>div{display:flex;flex-direction:column;min-width:0}.loop-detail-turn-meta{display:flex;flex-wrap:wrap;gap:5px var(--hm-space-3);font-family:var(--hm-font-mono);font-size:.65rem;color:var(--hm-text-dim)}.loop-detail-response{max-height:30vh}.loop-detail-tools{display:flex;flex-wrap:wrap;gap:4px}.loop-context-details{padding:var(--hm-space-3);border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg);background:var(--hm-bg)}.loop-context-details summary{cursor:pointer;color:var(--hm-text-muted);font-size:var(--hm-text-xs);font-weight:600}.loop-context-details[open] summary{margin-bottom:var(--hm-space-2)}.loop-context-list{display:flex;flex-direction:column;gap:var(--hm-space-2);margin-top:var(--hm-space-2)}.loop-context-entry{max-height:18vh}@media(max-width:640px){.loop-card-actions{justify-content:stretch}.loop-card-actions .btn{flex:1}.loop-detail-history-head{align-items:flex-start}.loop-detail-turn-meta{display:grid;grid-template-columns:1fr 1fr}}.process-output-preview{background:var(--hm-bg);border:1px solid var(--hm-border);border-radius:var(--hm-radius-md);padding:var(--hm-space-3) var(--hm-space-4);font-size:var(--hm-text-sm);font-family:var(--hm-font-mono);color:var(--hm-text-muted);max-height:120px;overflow-y:auto;white-space:pre-wrap;word-break:break-word;margin:0}.hm-input:focus-visible,.hm-select:focus-visible,.chat-input:focus-visible,.toggle-switch input:focus-visible+.toggle-slider,.session-checkbox:focus-visible,.memory-checkbox:focus-visible{outline:2px solid var(--hm-accent);outline-offset:2px}.page-fade-in{animation:page-fade .2s ease-out}@keyframes page-fade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.empty-state{display:flex;flex-direction:column;align-items:center;gap:var(--hm-space-3);padding:var(--hm-space-8) var(--hm-space-5);text-align:center}.empty-state-icon{font-size:1.75rem;opacity:.4}.empty-state-text{color:var(--hm-text-muted);font-size:var(--hm-text-md)}.empty-state-hint{color:var(--hm-text-dim);font-size:var(--hm-text-sm)}.cron-preset-btn{display:inline-block;padding:.125rem .5rem;background:var(--hm-gold-dim);border:1px solid rgba(217,119,6,.2);border-radius:var(--hm-radius-sm);font-size:var(--hm-text-xs);color:var(--hm-text-muted);cursor:pointer;transition:all var(--hm-transition-base)}.cron-preset-btn:hover{background:var(--hm-accent-dim);color:var(--hm-text);border-color:#d9770666}.hm-card-accent{border-top:2px solid var(--hm-accent)}.hm-divider{height:1px;background:linear-gradient(90deg,transparent,var(--hm-accent-dim),transparent);border:none;margin:var(--hm-space-5) 0}.hm-mono{font-family:var(--hm-font-mono)}.hm-section-title{font-size:var(--hm-text-sm);font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--hm-text-dim)}.ws-indicator{width:8px;height:8px;border-radius:50%;display:inline-block;flex-shrink:0;transition:background .3s,box-shadow .3s}.ws-connected{background:var(--hm-success);box-shadow:0 0 6px var(--hm-success)}.ws-disconnected{background:var(--hm-danger);box-shadow:0 0 6px var(--hm-danger)}.ws-connecting,.ws-reconnecting{background:var(--hm-warning);box-shadow:0 0 6px var(--hm-warning);animation:ws-pulse 1.2s ease-in-out infinite}@keyframes ws-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(.75)}}.ws-toast{position:fixed;bottom:var(--hm-space-5);left:50%;transform:translate(-50%);z-index:9999;padding:var(--hm-space-3) var(--hm-space-5);border-radius:var(--hm-radius-lg);font-size:var(--hm-text-sm);font-weight:500;box-shadow:var(--hm-shadow-lg);pointer-events:none}.ws-toast-success{background:#22c55e26;border:1px solid rgba(34,197,94,.3);color:#4ade80}.ws-toast-warn{background:#eab30826;border:1px solid rgba(234,179,8,.3);color:#fbbf24}.ws-toast-info{background:#3b82f626;border:1px solid rgba(59,130,246,.3);color:#60a5fa}.ws-toast-enter-active{animation:ws-toast-in .3s ease-out}.ws-toast-leave-active{animation:ws-toast-out .25s ease-in forwards}@keyframes ws-toast-in{0%{opacity:0;transform:translate(-50%) translateY(12px)}to{opacity:1;transform:translate(-50%) translateY(0)}}@keyframes ws-toast-out{0%{opacity:1;transform:translate(-50%) translateY(0)}to{opacity:0;transform:translate(-50%) translateY(12px)}}.toast-stack{position:fixed;bottom:var(--hm-space-5);right:var(--hm-space-5);z-index:9999;display:flex;flex-direction:column;align-items:flex-end;gap:var(--hm-space-2);pointer-events:none}.toast-item{display:flex;align-items:center;gap:var(--hm-space-2);max-width:380px;padding:var(--hm-space-3) var(--hm-space-4);border-radius:var(--hm-radius-lg);font-size:var(--hm-text-sm);font-weight:500;box-shadow:var(--hm-shadow-lg);cursor:pointer;pointer-events:auto;background:var(--hm-surface);border:1px solid var(--hm-border);color:var(--hm-text)}.toast-item .toast-icon{flex-shrink:0}.toast-item .toast-text{overflow-wrap:anywhere}.toast-success{background:#22c55e1f;border-color:#22c55e4d;color:#4ade80}.toast-error{background:#ef44441f;border-color:#ef444459;color:#f87171}.toast-info{background:#3b82f61f;border-color:#3b82f64d;color:#60a5fa}.toast-enter-active{transition:all .25s ease-out}.toast-leave-active{transition:all .2s ease-in}.toast-enter-from,.toast-leave-to{opacity:0;transform:translateY(10px)}.modal-enter-active{transition:opacity .15s ease-out}.modal-leave-active{transition:opacity .12s ease-in}.modal-enter-from,.modal-leave-to{opacity:0}.confirm-dialog{max-width:420px}.palette-overlay{align-items:flex-start;padding-top:14vh}.palette{width:90%;max-width:520px;background:var(--hm-surface);border:1px solid var(--hm-border);border-radius:var(--hm-radius-xl);box-shadow:var(--hm-shadow-lg);overflow:hidden}.palette-input{width:100%;background:transparent;border:none;border-bottom:1px solid var(--hm-border);padding:var(--hm-space-4) var(--hm-space-5);font-size:var(--hm-text-base);color:var(--hm-text);outline:none}.palette-input::-moz-placeholder{color:var(--hm-text-muted)}.palette-input::placeholder{color:var(--hm-text-muted)}.palette-results{max-height:320px;overflow-y:auto;padding:var(--hm-space-2)}.palette-item{display:flex;align-items:center;gap:var(--hm-space-2);width:100%;text-align:left;padding:var(--hm-space-2) var(--hm-space-3);border-radius:var(--hm-radius-md);font-size:var(--hm-text-sm);color:var(--hm-text);background:transparent;border:none;cursor:pointer}.palette-item.selected{background:var(--hm-surface-hover)}.palette-item .palette-icon{flex-shrink:0}.palette-item .palette-group{color:var(--hm-text-muted)}.palette-empty{padding:var(--hm-space-4);text-align:center;color:var(--hm-text-muted);font-size:var(--hm-text-sm)}.palette-footer{display:flex;gap:var(--hm-space-3);padding:var(--hm-space-2) var(--hm-space-4);border-top:1px solid var(--hm-border);font-size:var(--hm-text-xs);color:var(--hm-text-muted)}.palette-footer kbd{padding:0 .3em;background:var(--hm-bg);border:1px solid var(--hm-border);border-radius:var(--hm-radius-sm)}.item-enter{animation:item-slide-in .25s ease-out}@keyframes item-slide-in{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:translate(0)}}.dash-stat-value{transition:color var(--hm-transition-slow)}.badge{transition:transform var(--hm-transition-fast),background var(--hm-transition-base)}.badge-pop{animation:badge-pop .3s var(--hm-transition-spring)}@keyframes badge-pop{0%{transform:scale(1)}50%{transform:scale(1.3)}to{transform:scale(1)}}.action-pending{opacity:.6;pointer-events:none}.action-success{animation:action-flash-ok .5s ease-out}.action-error{animation:action-flash-err .5s ease-out}@keyframes action-flash-ok{0%{box-shadow:0 0 #22c55e66}to{box-shadow:0 0 0 0 transparent}}@keyframes action-flash-err{0%{box-shadow:0 0 #ef444466}to{box-shadow:0 0 0 0 transparent}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-nav{position:absolute;top:-100%;left:var(--hm-space-5);z-index:1000;padding:var(--hm-space-3) var(--hm-space-5);background:var(--hm-accent);color:#fff;border-radius:var(--hm-radius-md);font-size:var(--hm-text-md);font-weight:600;text-decoration:none;transition:top var(--hm-transition-base)}.skip-nav:focus{top:var(--hm-space-3)}.ag-filter-btn:focus-visible,.kb-tree-header:focus-visible,.kb-chunk-item:focus-visible,.cron-preset-btn:focus-visible,.dash-health-item:focus-visible,[role=tab]:focus-visible,[role=button]:focus-visible,a:focus-visible{outline:2px solid var(--hm-accent);outline-offset:2px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}.spinner{animation:none;border-top-color:var(--hm-accent)}.page-fade-in{animation:none}.hm-sidebar,.dash-ring-progress{transition:none}.ws-connecting,.ws-reconnecting,.ws-toast{animation:none}}@media(forced-colors:active){.status-dot,.ag-status-dot,.dash-health-dot,.loop-status-dot{forced-color-adjust:none}.btn-primary{border:1px solid ButtonText}.hm-card{border:1px solid CanvasText}.nav-item.active{border-left:3px solid Highlight}}.hm-main .p-6{max-width:1600px}@media(min-width:1200px){:root{--hm-text-md: .9375rem}}@media(max-width:768px){.hm-main .p-6{padding:var(--hm-space-5)}.hm-table{font-size:var(--hm-text-sm)}.hm-table th,.hm-table td{padding:var(--hm-space-2) var(--hm-space-3)}.mobile-hide{display:none!important}.chat-bubble{max-width:90%}.btn{min-height:36px}.hm-input,.hm-select{min-height:36px;font-size:1rem}.toggle-switch{width:44px;height:24px}.toggle-slider:before{width:18px;height:18px}.toggle-switch input:checked+.toggle-slider:before{transform:translate(20px)}.modal-content{padding:var(--hm-space-5);width:95%}.config-key-col{width:auto!important;min-width:80px}.log-chip{padding:var(--hm-space-1) .625rem;font-size:var(--hm-text-sm)}.session-checkbox,.memory-checkbox{width:18px;height:18px}.cron-preset-btn{padding:var(--hm-space-1) .625rem;font-size:var(--hm-text-sm)}}@media(max-width:640px){.dash-hero-left{flex-basis:100%}}@media(max-width:480px){.chat-bubble-wrap{max-width:90%}.chat-avatar{width:24px;height:24px}.chat-input-row{flex-direction:column;align-items:stretch}.chat-input{width:100%}.chat-send-btn{width:100%;min-width:unset}.chat-suggestions{flex-direction:column}.chat-suggestion{width:100%}.stat-grid-mobile{grid-template-columns:repeat(2,1fr)!important}h1{font-size:1.125rem!important}.hm-main .p-6{padding:var(--hm-space-4)}}.fts-result-user{background:#11182780;border-color:#1f2937}.fts-result-assistant{background:#312e814d;border-color:#312e814d}.fts-result-summary{background:#451a0333;border-color:#78350f4d}.fts-result-fts{background:#022c2233;border-color:#064e3b4d}.fts-result-channel{background:#3b076433;border-color:#581c874d}.fts-result-default{background:#1118274d;border-color:#1f293780}.fts-highlight{background:#d977064d;color:var(--hm-gold);border-radius:2px;padding:0 2px}.health-card{padding:1rem;border-left:3px solid transparent;transition:border-color .2s}.health-card-ok{border-left-color:#22c55e}.health-card-degraded{border-left-color:#eab308}.health-card-down{border-left-color:#ef4444}.health-card-unconfigured{border-left-color:var(--hm-border)}.health-card-header{display:flex;align-items:center;gap:.5rem;margin-bottom:.375rem}.health-card-icon{font-size:.875rem;flex-shrink:0}.health-card-name{font-size:.8125rem;font-weight:600;flex:1}.health-card-detail{font-size:.75rem;color:var(--hm-text-muted);line-height:1.4}.health-card-meta{margin-top:.5rem;padding-top:.5rem;border-top:1px solid var(--hm-border-subtle)}.health-meta-row{display:flex;align-items:center;gap:.5rem;padding:1px 0}.health-host-item{display:flex;align-items:center;gap:.375rem;padding:2px 0}.health-host-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}.health-host-dot.dot-connected{background:#22c55e}.health-host-dot.dot-idle{background:#6b7280}.health-host-dot.dot-unknown{background:#374151}.res-bar-bg{height:8px;background:#1e293b;border-radius:4px;overflow:hidden}.res-bar-fill{height:100%;border-radius:4px;transition:width .4s ease;min-width:2px}.res-bar-blue{background:#3b82f6}.res-bar-purple{background:#a855f7}.res-bar-emerald{background:#10b981}.res-bar-amber{background:#f59e0b}.discord-global-card{display:grid;gap:var(--hm-space-4)}.discord-global-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--hm-space-4)}.discord-global-heading p{margin-top:.2rem;color:var(--hm-text-dim);font-size:var(--hm-text-xs)}.discord-global-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--hm-space-3)}.discord-global-toggle,.discord-global-list{padding:var(--hm-space-4);border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-md);background:#04070b40}.discord-global-toggle{display:flex;align-items:center;justify-content:space-between;gap:var(--hm-space-4);color:var(--hm-text-muted);font-size:var(--hm-text-xs)}.discord-global-list{display:grid;gap:var(--hm-space-2)}.discord-global-list strong{color:var(--hm-text);font-size:var(--hm-text-xs)}.discord-global-list>p{color:var(--hm-text-dim);font-size:.64rem;line-height:1.45}.discord-global-footer{padding-top:var(--hm-space-3);display:flex;align-items:center;justify-content:space-between;gap:var(--hm-space-4);border-top:1px solid var(--hm-border-subtle)}.discord-global-footer span{color:var(--hm-text-dim);font-size:var(--hm-text-xs)}@media(max-width:760px){.discord-global-heading,.discord-global-footer{align-items:stretch;flex-direction:column}.discord-global-grid{grid-template-columns:minmax(0,1fr)}.discord-global-footer .btn{width:100%}}.llm-advanced{margin-top:var(--hm-space-4);overflow:hidden;background:#04070b45;border:1px solid var(--hm-border);border-radius:var(--hm-radius-md)}.llm-advanced>summary{min-height:50px;padding:var(--hm-space-3) var(--hm-space-4);display:flex;align-items:center;justify-content:space-between;gap:var(--hm-space-4);color:var(--hm-text);cursor:pointer;list-style:none}.llm-advanced>summary::-webkit-details-marker{display:none}.llm-advanced>summary:after{content:"+";flex:none;color:var(--hm-accent);font-size:1rem}.llm-advanced[open]>summary:after{content:"−"}.llm-advanced>summary span{font-size:var(--hm-text-sm);font-weight:650}.llm-advanced>summary small{color:var(--hm-text-dim);font-size:var(--hm-text-xs);text-align:right}.llm-advanced-body{padding:var(--hm-space-4);display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--hm-space-4);border-top:1px solid var(--hm-border-subtle)}.llm-advanced-group{padding:var(--hm-space-4);display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--hm-space-3);background:#111720a6;border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-md)}.llm-advanced-group>header{grid-column:1 / -1;display:grid;gap:.1rem}.llm-advanced-group>header strong{color:var(--hm-text);font-size:var(--hm-text-xs)}.llm-advanced-group>header span{color:var(--hm-text-dim);font-size:.62rem}.llm-advanced-group>label{min-width:0;display:grid;align-content:start;gap:.3rem;color:var(--hm-text-muted);font-size:var(--hm-text-xs)}.llm-advanced-group>label small{color:var(--hm-text-dim)}.llm-advanced-group.single{grid-template-columns:minmax(0,360px)}.llm-advanced-toggle{grid-template-columns:minmax(0,1fr) auto;align-items:center}.llm-advanced-footer{grid-column:1 / -1;display:flex;align-items:center;justify-content:space-between;gap:var(--hm-space-4)}.llm-advanced-footer p{max-width:680px;color:var(--hm-text-dim);font-size:var(--hm-text-xs);line-height:1.5}.llm-advanced-state{grid-column:1 / -1;margin:0;color:var(--hm-text-dim);font-size:var(--hm-text-xs);line-height:1.45}.llm-advanced-state.pending{color:var(--hm-warning-text)}.llm-advanced.compact .llm-advanced-body{grid-template-columns:minmax(0,1fr) auto;align-items:end}.llm-advanced.compact .llm-advanced-footer{grid-column:auto}.llm-field-note{display:block;margin-top:.3rem;color:#9a8255;line-height:1.4}@media(max-width:760px){.llm-advanced>summary{align-items:flex-start}.llm-advanced>summary small{text-align:left}.llm-advanced-body,.llm-advanced.compact .llm-advanced-body,.llm-advanced-group{grid-template-columns:minmax(0,1fr)}.llm-advanced-footer,.llm-advanced.compact .llm-advanced-footer{grid-column:1;align-items:stretch;flex-direction:column}.llm-advanced-footer .btn{width:100%}}.config-center-page{--cfgc-rail-w: 218px;--cfgc-panel-border: rgba(49, 57, 71, .86);height:calc(100vh - var(--hm-topbar-h) - var(--hm-section-tabs-h));min-height:0!important;padding-bottom:0;display:flex;flex-direction:column;overflow:hidden}.cfgc-page-header{position:relative;z-index:16;flex:none;display:flex;align-items:flex-start;justify-content:space-between;gap:var(--hm-space-6);margin-bottom:var(--hm-space-5)}.cfgc-eyebrow{margin-bottom:.28rem;color:var(--hm-accent);font-size:.625rem;font-weight:700;letter-spacing:.115em;line-height:1.2;text-transform:uppercase}.cfgc-page-summary{margin-top:.35rem;color:var(--hm-text-dim);font-size:var(--hm-text-xs)}.cfgc-header-actions{display:flex;align-items:center;justify-content:flex-end;gap:var(--hm-space-2);flex-wrap:wrap}.cfgc-header-actions .btn{display:inline-flex;align-items:center;gap:var(--hm-space-2)}.cfgc-loading{display:grid;gap:var(--hm-space-4)}.cfgc-loading-grid{display:grid;grid-template-columns:var(--cfgc-rail-w) minmax(0,1fr);gap:var(--hm-space-5)}.cfgc-loading-grid .skeleton:last-child{grid-column:2}.cfgc-health{flex:none;margin-bottom:var(--hm-space-5);padding:var(--hm-space-5);background:radial-gradient(circle at 100% 0,rgba(197,139,50,.09),transparent 30%),linear-gradient(150deg,#131821fa,#0c1017fa);border:1px solid var(--cfgc-panel-border);border-radius:var(--hm-radius-lg);box-shadow:var(--hm-shadow-sm)}.cfgc-health-heading{display:flex;align-items:center;gap:var(--hm-space-4);margin-bottom:var(--hm-space-4)}.cfgc-health-heading>div:first-child{flex:1;min-width:0}.cfgc-health-heading h2,.cfgc-category-panel-heading h2,.cfgc-empty h2,.cfgc-review-header h2{color:var(--hm-text);font-size:var(--hm-text-lg);font-weight:650;letter-spacing:-.015em}.cfgc-health-ok,.cfgc-unsaved-pill{display:inline-flex;align-items:center;gap:var(--hm-space-2);padding:.3rem .55rem;border-radius:var(--hm-radius-full);font-size:var(--hm-text-xs);font-weight:650;white-space:nowrap}.cfgc-health-ok{color:#83d6a6;background:#22c55e14;border:1px solid rgba(34,197,94,.19)}.cfgc-unsaved-pill{color:#ecc16f;background:#d977061a;border:1px solid rgba(217,119,6,.24)}.cfgc-health-filters{display:grid;grid-template-columns:repeat(7,minmax(112px,1fr));gap:var(--hm-space-2);overflow-x:auto;scrollbar-width:thin}.cfgc-health-filter{min-width:0;min-height:56px;padding:.55rem .6rem;display:flex;align-items:center;gap:var(--hm-space-3);color:var(--hm-text-muted);background:#06090d61;border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-md);text-align:left;cursor:pointer;transition:color var(--hm-transition-base),border-color var(--hm-transition-base),background var(--hm-transition-base)}.cfgc-health-filter:hover{color:var(--hm-text);border-color:var(--hm-border);background:#ffffff06}.cfgc-health-filter.active{color:var(--hm-text);border-color:#c58b326b;background:#c58b3213;box-shadow:inset 0 0 0 1px #c58b320d}.cfgc-health-icon{width:28px;height:28px;display:inline-grid;place-items:center;flex:none;color:#a5afbd;background:#ffffff0a;border-radius:var(--hm-radius-md)}.cfgc-health-icon.state-applied{color:#69c78e;background:#22c55e14}.cfgc-health-icon.state-pending_restart{color:#e1aa55;background:#d977061a}.cfgc-health-icon.state-dormant{color:#a792d8;background:#8b5cf617}.cfgc-health-icon.state-invalid{color:#e17878;background:#ef444417}.cfgc-health-icon.state-drift{color:#e1bd65;background:#eab30817}.cfgc-health-icon.state-unknown{color:#9aa6b6;background:#94a3b817}.cfgc-health-copy{min-width:0;display:grid;gap:.1rem}.cfgc-health-copy>span{font-size:var(--hm-text-xs);font-weight:650;line-height:1.25;overflow-wrap:anywhere;white-space:normal}.cfgc-health-copy small{color:var(--hm-text-dim);font-size:.625rem;white-space:nowrap}.cfgc-health-alert{display:flex;align-items:flex-start;gap:var(--hm-space-3);margin-top:var(--hm-space-3);padding:var(--hm-space-3) var(--hm-space-4);border-radius:var(--hm-radius-md);font-size:var(--hm-text-xs)}.cfgc-health-alert>.odin-icon{flex:none;margin-top:.1rem}.cfgc-health-alert>div{display:grid;gap:.1rem}.cfgc-health-alert>div span{color:var(--hm-text-muted)}.cfgc-health-alert.danger{color:#eb8a8a;background:#ef444413;border:1px solid rgba(239,68,68,.19)}.cfgc-health-alert.warning{color:#e3bb69;background:#eab30811;border:1px solid rgba(234,179,8,.17)}.cfgc-workspace{min-height:0;flex:1;display:grid;grid-template-columns:var(--cfgc-rail-w) minmax(0,1fr);align-items:stretch;gap:var(--hm-space-5);overflow:hidden}.cfgc-category-rail{position:relative;top:auto;height:100%;max-height:none;padding:var(--hm-space-3);overflow:hidden auto;background:#0c1017e6;border:1px solid var(--cfgc-panel-border);border-radius:var(--hm-radius-lg);box-shadow:var(--hm-shadow-sm)}.cfgc-rail-label{padding:var(--hm-space-2) var(--hm-space-3) var(--hm-space-3);color:var(--hm-text-dim);font-size:.625rem;font-weight:700;letter-spacing:.105em;text-transform:uppercase}.cfgc-category-scroll{display:grid;gap:.2rem}.cfgc-category{width:100%;min-width:0;padding:.55rem var(--hm-space-3);display:grid;grid-template-columns:26px minmax(0,1fr) auto;align-items:center;gap:var(--hm-space-2);color:var(--hm-text-muted);background:transparent;border:1px solid transparent;border-radius:var(--hm-radius-md);text-align:left;cursor:pointer}.cfgc-category:hover{color:var(--hm-text);background:#ffffff07}.cfgc-category.active{color:#edd19a;background:#c58b3218;border-color:#c58b323d}.cfgc-category-icon{width:26px;height:26px;display:inline-grid;place-items:center;color:currentColor;background:#ffffff09;border-radius:var(--hm-radius-md)}.cfgc-category-copy{min-width:0;display:grid;gap:.05rem}.cfgc-category-copy>span{overflow:hidden;font-size:var(--hm-text-sm);font-weight:600;text-overflow:ellipsis;white-space:nowrap}.cfgc-category-copy small{color:var(--hm-text-dim);font-size:.6rem}.cfgc-category-counts{display:flex;align-items:center;justify-content:flex-end;gap:.18rem;flex-wrap:wrap;max-width:50px}.cfgc-category-counts>span,.cfgc-rail-key b{display:inline-grid;min-width:18px;height:18px;place-items:center;padding:0 .2rem;border-radius:4px;font-size:.55rem;font-weight:750}.cfgc-category-counts .modified,.cfgc-rail-key .modified{color:#edc171;background:#d977061f}.cfgc-category-counts .restart,.cfgc-rail-key .restart{color:#dfaa5d;background:#b4681b21}.cfgc-category-counts .invalid,.cfgc-rail-key .invalid{color:#e38282;background:#ef44441c}.cfgc-category-counts .dormant,.cfgc-rail-key .dormant{color:#b09adf;background:#8b5cf61f}.cfgc-rail-key{margin-top:var(--hm-space-3);padding:var(--hm-space-3) var(--hm-space-2) var(--hm-space-1);display:grid;grid-template-columns:1fr 1fr;gap:.32rem;color:var(--hm-text-dim);border-top:1px solid var(--hm-border-subtle);font-size:.56rem}.cfgc-rail-key span{display:flex;align-items:center;gap:.25rem}.cfgc-rail-key b{font-style:normal}.cfgc-main{min-width:0;min-height:0;height:100%;overflow-y:auto;padding-bottom:5rem}.cfgc-toolbar{position:sticky;top:0;z-index:12;margin:0 0 var(--hm-space-4);padding:var(--hm-space-3);display:flex;align-items:center;gap:var(--hm-space-3);background:#090c11f0;border:1px solid var(--cfgc-panel-border);border-radius:var(--hm-radius-lg);box-shadow:var(--hm-shadow-sm);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.cfgc-search{min-width:0;height:38px;display:flex;align-items:center;flex:1;gap:var(--hm-space-3);padding:0 .45rem 0 .75rem;color:var(--hm-text-dim);background:#04070b8c;border:1px solid var(--hm-border);border-radius:var(--hm-radius-md)}.cfgc-search:focus-within{color:var(--hm-accent);border-color:#c58b3275;box-shadow:0 0 0 3px #c58b3214}.cfgc-search input{min-width:0;height:100%;flex:1;color:var(--hm-text);background:transparent;border:0;outline:0;font-size:var(--hm-text-sm)}.cfgc-search input::-moz-placeholder{color:#5f6977}.cfgc-search input::placeholder{color:#5f6977}.cfgc-search .icon-btn{width:28px;height:28px}.cfgc-category-panel{display:grid;gap:var(--hm-space-3)}.cfgc-category-panel+.cfgc-category-panel{margin-top:var(--hm-space-6)}.cfgc-category-panel-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--hm-space-4);padding:0 var(--hm-space-1)}.cfgc-category-panel-heading>span{color:var(--hm-text-dim);font-size:var(--hm-text-xs)}.cfgc-empty{min-height:280px;display:grid;place-items:center;align-content:center;gap:var(--hm-space-3);color:var(--hm-text-dim);text-align:center}.cfgc-empty p{max-width:520px;color:var(--hm-text-muted);font-size:var(--hm-text-sm)}.cfgc-empty code{color:#c5a569}.cfgc-section{overflow:clip;background:linear-gradient(150deg,#121720f5,#0d1118fa);border:1px solid var(--cfgc-panel-border);border-radius:var(--hm-radius-lg);box-shadow:var(--hm-shadow-sm);transition:border-color var(--hm-transition-base),box-shadow var(--hm-transition-base)}.cfgc-section:hover{border-color:#394252}.cfgc-section.modified{border-color:#c58b3266;box-shadow:inset 3px 0 #c58b328c,var(--hm-shadow-sm)}.cfgc-section.editing{border-color:#c58b3294;box-shadow:inset 3px 0 var(--hm-accent),var(--hm-shadow-glow-sm)}.cfgc-section-header{width:100%;min-width:0;min-height:66px;padding:var(--hm-space-4) var(--hm-space-5);display:grid;grid-template-columns:20px minmax(150px,.65fr) minmax(220px,1.35fr) auto;align-items:center;gap:var(--hm-space-3);color:inherit;background:transparent;border:0;text-align:left;cursor:pointer}.cfgc-section-header:hover{background:#ffffff05}.cfgc-section-chevron{color:var(--hm-text-dim)}.cfgc-section-title{min-width:0;display:grid;gap:.12rem}.cfgc-section-title>span{overflow:hidden;color:var(--hm-text);font-size:var(--hm-text-sm);font-weight:650;text-overflow:ellipsis;white-space:nowrap}.cfgc-section-title small{overflow:hidden;color:#67717f;font-family:var(--hm-font-mono);font-size:.6rem;text-overflow:ellipsis;white-space:nowrap}.cfgc-section-summary{min-width:0;overflow:hidden;color:var(--hm-text-muted);font-size:var(--hm-text-xs);line-height:1.45;text-overflow:ellipsis;white-space:nowrap}.cfgc-section-badges{min-width:0;display:flex;align-items:center;justify-content:flex-end;gap:.3rem;flex-wrap:wrap}.cfgc-section-badges .badge{padding:.15rem .4rem;font-size:.56rem}.cfgc-badge-restart{color:#dba454;background:#d9770617;border:1px solid rgba(217,119,6,.22)}.cfgc-badge-dormant{color:#ac98d7;background:#8b5cf617;border:1px solid rgba(139,92,246,.2)}.cfgc-field-count{min-width:27px;height:22px;display:inline-grid;place-items:center;padding:0 .35rem;color:var(--hm-text-dim);background:#ffffff09;border-radius:var(--hm-radius-full);font-family:var(--hm-font-mono);font-size:.6rem}.cfgc-section-body{border-top:1px solid var(--hm-border-subtle)}.cfgc-section-actions{min-height:58px;padding:var(--hm-space-3) var(--hm-space-5);display:flex;align-items:center;justify-content:space-between;gap:var(--hm-space-4);background:#04070b47;border-bottom:1px solid var(--hm-border-subtle)}.cfgc-section-actions>div:first-child{min-width:0;display:grid;gap:.1rem}.cfgc-section-actions strong{color:var(--hm-text);font-size:var(--hm-text-xs);font-weight:650}.cfgc-section-actions span{overflow:hidden;color:var(--hm-text-dim);font-size:.625rem;text-overflow:ellipsis;white-space:nowrap}.cfgc-section-actions .btn{display:inline-flex;align-items:center;gap:var(--hm-space-2)}.cfgc-search-hits{padding:var(--hm-space-3) var(--hm-space-5);display:flex;align-items:center;gap:var(--hm-space-2);flex-wrap:wrap;color:var(--hm-text-dim);background:#c58b320a;border-bottom:1px solid rgba(197,139,50,.12);font-size:.625rem}.cfgc-search-hits button{padding:.22rem .4rem;color:#dbbd84;background:#c58b3214;border:1px solid rgba(197,139,50,.18);border-radius:5px;cursor:pointer}.cfgc-search-hits code{margin-left:.2rem;color:#7b8491}.cfgc-owner-card{margin:var(--hm-space-5);padding:var(--hm-space-5);display:grid;grid-template-columns:36px minmax(0,1fr) auto;align-items:center;gap:var(--hm-space-4);background:#c58b320e;border:1px solid rgba(197,139,50,.18);border-radius:var(--hm-radius-md)}.cfgc-owner-card.compact{margin-bottom:0}.cfgc-owner-icon{width:36px;height:36px;display:inline-grid;place-items:center;color:#ddba78;background:#c58b321a;border-radius:var(--hm-radius-md)}.cfgc-owner-card strong{color:var(--hm-text);font-size:var(--hm-text-sm)}.cfgc-owner-card p{margin-top:.18rem;color:var(--hm-text-muted);font-size:var(--hm-text-xs);line-height:1.5}.cfgc-owner-card .btn{display:inline-flex;align-items:center;gap:var(--hm-space-2)}.cfgc-fields{padding:0 var(--hm-space-5)}.cfgc-field{min-width:0;padding:var(--hm-space-5) 0;display:grid;grid-template-columns:minmax(210px,.95fr) minmax(240px,1.05fr);gap:var(--hm-space-6);scroll-margin-top:calc(var(--hm-topbar-h) + var(--hm-section-tabs-h) + 70px);border-bottom:1px solid var(--hm-border-subtle)}.cfgc-field:last-child{border-bottom:0}.cfgc-field.changed{margin-inline:calc(var(--hm-space-3) * -1);padding-inline:var(--hm-space-3);background:#c58b3209;border-radius:var(--hm-radius-md)}.cfgc-field.invalid{background:#ef444409}.cfgc-field-copy{min-width:0;padding-inline:var(--hm-space-4)}.cfgc-field-copy>label{display:block;color:var(--hm-text);font-size:var(--hm-text-sm);font-weight:630}.cfgc-field-copy>code{display:block;margin-top:.2rem;overflow-wrap:anywhere;color:#687382;font-family:var(--hm-font-mono);font-size:.6rem}.cfgc-field-copy>p{max-width:620px;margin-top:.42rem;color:var(--hm-text-muted);font-size:var(--hm-text-xs);line-height:1.52}.cfgc-field-meta{margin-top:var(--hm-space-3);display:flex;align-items:center;gap:var(--hm-space-2);flex-wrap:wrap;color:var(--hm-text-dim);font-size:.6rem}.cfgc-apply-pill{display:inline-flex;align-items:center;min-height:20px;padding:.14rem .42rem;color:#9ea8b5;background:#ffffff09;border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-full);font-size:.58rem;font-weight:650;line-height:1.2}.cfgc-apply-pill.apply-live-read,.cfgc-apply-pill.apply-live-apply{color:#78cb98;background:#22c55e12;border-color:#22c55e2b}.cfgc-apply-pill.apply-live-for-new-work{color:#78b9d6;background:#0ea5e912;border-color:#0ea5e92e}.cfgc-apply-pill.apply-restart{color:#dfa858;background:#d9770614;border-color:#d9770630}.cfgc-apply-pill.apply-activation-required,.cfgc-apply-pill.apply-dormant{color:#af99df;background:#8b5cf614;border-color:#8b5cf62e}.cfgc-apply-pill.apply-legacy-control{color:#d8bd70;background:#eab30812;border-color:#eab3082e}.cfgc-sensitive{display:inline-flex;align-items:center;gap:.22rem;color:#b6a06f}.cfgc-apply-details{margin-top:var(--hm-space-3);display:grid;gap:var(--hm-space-2)}.cfgc-section-apply-details{margin:0 var(--hm-space-5) var(--hm-space-4);display:grid;gap:var(--hm-space-2)}.cfgc-apply-detail{padding:.55rem .65rem;background:#04070b42;border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-md)}.cfgc-apply-detail-heading{display:flex;align-items:center;justify-content:space-between;gap:var(--hm-space-2)}.cfgc-apply-detail-heading strong{color:#aeb8c5;font-size:.64rem;font-weight:650}.cfgc-apply-detail>p{margin-top:.3rem;color:var(--hm-text-dim);font-size:.62rem;line-height:1.45}.cfgc-apply-detail>code{display:block;margin-top:.3rem;overflow-wrap:anywhere;color:#c8ad75;font-family:var(--hm-font-mono);font-size:.6rem}.cfgc-apply-detail.detail-restart{border-color:#d9770629}.cfgc-apply-detail.detail-activation{border-color:#8b5cf62b}.cfgc-field-control{min-width:0;display:grid;align-content:start}.cfgc-field-control .hm-input,.cfgc-field-control .hm-select{width:100%}.cfgc-field-control .hm-input[type=number]{max-width:250px}.cfgc-value{display:block;min-width:0;padding:.52rem .65rem;overflow:hidden;color:#c2c9d2;background:#04070b5e;border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-md);font-family:var(--hm-font-mono);font-size:var(--hm-text-xs);text-overflow:ellipsis;white-space:nowrap}.cfgc-value-block{max-height:160px;margin:0;padding:var(--hm-space-3);overflow:auto;color:#aeb7c3;background:#04070b5e;border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-md);font-family:var(--hm-font-mono);font-size:.65rem;line-height:1.55;white-space:pre-wrap;overflow-wrap:anywhere}.cfgc-boolean-control{min-height:38px;padding:.42rem .6rem;display:flex;align-items:center;justify-content:space-between;gap:var(--hm-space-4);color:var(--hm-text-muted);background:#04070b57;border:1px solid var(--hm-border);border-radius:var(--hm-radius-md);font-size:var(--hm-text-xs)}.cfgc-json-input{resize:vertical;line-height:1.5}.cfgc-expert-note{margin-top:.35rem;color:var(--hm-text-dim);font-size:.6rem}.cfgc-field-error{margin-top:.35rem;color:#e27c7c;font-size:var(--hm-text-xs)}.cfgc-write-only{padding:var(--hm-space-3);display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.15rem var(--hm-space-4);background:#c58b320b;border:1px solid rgba(197,139,50,.15);border-radius:var(--hm-radius-md)}.cfgc-write-only>span{display:inline-flex;align-items:center;gap:var(--hm-space-2);color:#cdb57e;font-size:var(--hm-text-xs);font-weight:620}.cfgc-write-only>small{grid-column:1;color:var(--hm-text-dim);font-size:.6rem}.cfgc-write-only>button{grid-column:2;grid-row:1 / span 2}.cfgc-mobile-action-bar{display:none}.cfgc-review-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:80;display:flex;justify-content:flex-end;background:#000000a8;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.cfgc-review-tray{width:min(680px,94vw);height:100%;display:grid;grid-template-rows:auto minmax(0,1fr) auto;color:var(--hm-text);background:#0c1017;border-left:1px solid #303846;box-shadow:-24px 0 70px #0000006b;outline:0;animation:cfgc-tray-in .18s ease-out}@keyframes cfgc-tray-in{0%{transform:translate(20px);opacity:.55}to{transform:translate(0);opacity:1}}.cfgc-review-header{padding:var(--hm-space-6);display:flex;align-items:flex-start;justify-content:space-between;gap:var(--hm-space-4);border-bottom:1px solid var(--hm-border)}.cfgc-review-header p{margin-top:.32rem;color:var(--hm-text-muted);font-size:var(--hm-text-xs)}.cfgc-review-body{min-height:0;padding:var(--hm-space-5) var(--hm-space-6);overflow-y:auto}.cfgc-review-group{overflow:hidden;background:#121720bd;border:1px solid var(--hm-border);border-radius:var(--hm-radius-lg)}.cfgc-review-group+.cfgc-review-group{margin-top:var(--hm-space-4)}.cfgc-review-group>header{padding:var(--hm-space-3) var(--hm-space-4);display:flex;align-items:center;justify-content:space-between;background:#05080c5c;border-bottom:1px solid var(--hm-border-subtle)}.cfgc-review-group>header>span:last-child{min-width:23px;height:23px;display:inline-grid;place-items:center;color:var(--hm-text-dim);background:#ffffff0a;border-radius:var(--hm-radius-full);font-family:var(--hm-font-mono);font-size:.6rem}.cfgc-review-entry{padding:var(--hm-space-4);display:grid;grid-template-columns:minmax(160px,.7fr) minmax(200px,1.3fr);align-items:center;gap:var(--hm-space-4);border-bottom:1px solid var(--hm-border-subtle)}.cfgc-review-entry:last-child{border-bottom:0}.cfgc-review-entry>div:first-child{min-width:0;display:grid;gap:.17rem}.cfgc-review-entry strong{overflow:hidden;font-size:var(--hm-text-xs);font-weight:620;text-overflow:ellipsis;white-space:nowrap}.cfgc-review-entry code{overflow-wrap:anywhere;color:var(--hm-text-dim);font-size:.58rem}.cfgc-review-values{min-width:0;display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:var(--hm-space-2)}.cfgc-review-values span{min-width:0;padding:.38rem .48rem;overflow:hidden;color:#9da7b4;background:#04070b66;border:1px solid var(--hm-border-subtle);border-radius:5px;font-family:var(--hm-font-mono);font-size:.6rem;text-overflow:ellipsis;white-space:nowrap}.cfgc-review-values span:last-child{color:#d5bd89;border-color:#c58b322b}.cfgc-review-values .odin-icon{color:var(--hm-text-dim)}.cfgc-review-footer{padding:var(--hm-space-5) var(--hm-space-6);display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:var(--hm-space-3);background:#080b10f5;border-top:1px solid var(--hm-border)}.cfgc-review-footer>div{min-width:0;display:grid;gap:.1rem}.cfgc-review-footer strong{color:var(--hm-text);font-size:var(--hm-text-xs);font-weight:620}.cfgc-review-footer span{color:var(--hm-text-dim);font-size:.6rem}.config-center-page{max-width:1600px;margin-inline:auto}.cfgc-health-filters{grid-template-columns:repeat(auto-fit,minmax(128px,1fr))}.cfgc-restart-banner{flex:none;margin-bottom:var(--hm-space-5);padding:var(--hm-space-4) var(--hm-space-5);display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--hm-space-4);color:#e6ba6c;background:#b4681b17;border:1px solid rgba(217,119,6,.28);border-radius:var(--hm-radius-lg)}.cfgc-restart-banner>div:nth-child(2){min-width:0;display:grid;gap:.15rem}.cfgc-restart-banner strong{color:#f0cf92;font-size:var(--hm-text-sm)}.cfgc-restart-banner span{color:var(--hm-text-muted);font-size:var(--hm-text-xs)}.cfgc-restart-actions{display:flex;align-items:center;justify-content:flex-end;gap:var(--hm-space-2);flex-wrap:wrap}.cfgc-restart-dialog{width:min(620px,calc(100vw - 2rem));margin:auto;padding:var(--hm-space-6);color:var(--hm-text);background:#0f141c;border:1px solid #3a4352;border-radius:var(--hm-radius-lg);box-shadow:var(--hm-shadow-lg)}.cfgc-restart-dialog h2{font-size:var(--hm-text-xl);font-weight:650}.cfgc-restart-dialog>p{margin-top:var(--hm-space-3);color:var(--hm-text-muted);font-size:var(--hm-text-sm);line-height:1.55}.cfgc-restart-dialog-actions{margin-top:var(--hm-space-5);display:flex;justify-content:flex-end;gap:var(--hm-space-2);flex-wrap:wrap}.cfgc-field-groups{display:grid;gap:var(--hm-space-4);padding:0 var(--hm-space-5) var(--hm-space-5)}.cfgc-field-group{overflow:clip;border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-md)}.cfgc-field-group:not(.nested){border-color:transparent}.cfgc-field-group-header{padding:var(--hm-space-3) var(--hm-space-4);display:flex;align-items:flex-start;justify-content:space-between;gap:var(--hm-space-4);background:#04070b59;border-bottom:1px solid var(--hm-border-subtle)}.cfgc-field-group-header>div{min-width:0;display:grid;gap:.18rem}.cfgc-field-group-header strong{color:var(--hm-text);font-size:var(--hm-text-sm)}.cfgc-field-group-header code{color:var(--hm-text-dim);font-size:.58rem}.cfgc-field-group-header p{color:var(--hm-text-muted);font-size:var(--hm-text-xs);line-height:1.45}.cfgc-field-group-header>span{flex:none;color:var(--hm-text-dim);font-size:.6rem}.cfgc-field-group .cfgc-fields{padding:0}.cfgc-field{grid-template-columns:minmax(180px,4fr) minmax(190px,5fr);align-items:start}.cfgc-field-runtime-note{grid-column:1 / -1;min-width:0;margin-top:calc(var(--hm-space-2) * -1);padding:var(--hm-space-3);display:grid;gap:.25rem;background:#8b5cf60b;border:1px solid rgba(139,92,246,.16);border-radius:var(--hm-radius-md)}.cfgc-field-runtime-note strong{color:#b9a6df;font-size:.6rem;text-transform:uppercase;letter-spacing:.055em}.cfgc-field-runtime-note p{color:var(--hm-text-muted);font-size:.66rem;line-height:1.45}.cfgc-field-runtime-note .btn{margin-top:var(--hm-space-2);justify-self:start}.cfgc-runtime-summary-list{margin-top:var(--hm-space-3);display:grid;gap:var(--hm-space-2)}.cfgc-runtime-summary{padding:var(--hm-space-3);background:#04070b45;border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-md)}.cfgc-runtime-summary strong{color:#b8c0cb;font-size:.62rem}.cfgc-runtime-summary p{margin-top:.25rem;color:var(--hm-text-muted);font-size:.66rem;line-height:1.45}.cfgc-group-apply-details{padding:0 var(--hm-space-4) var(--hm-space-4)}.cfgc-group-apply-details summary{color:var(--hm-text-dim);cursor:pointer;font-size:var(--hm-text-xs)}.cfgc-apply-detail-list{margin-top:var(--hm-space-3);display:grid;gap:var(--hm-space-2)}.discord-user-combobox{position:relative;width:100%}.discord-user-combobox>.hm-input{width:100%}.discord-user-combobox-options{position:absolute;z-index:60;top:calc(100% + .25rem);left:0;right:0;max-height:15rem;overflow-y:auto;background:#0d121a;border:1px solid #3b4555;border-radius:var(--hm-radius-md);box-shadow:var(--hm-shadow-lg)}.discord-user-combobox-option{width:100%;min-height:38px;padding:.45rem .65rem;display:flex;align-items:center;gap:var(--hm-space-2);color:var(--hm-text-muted);background:transparent;border:0;cursor:pointer;font-size:var(--hm-text-xs);text-align:left}.discord-user-combobox-option:hover,.discord-user-combobox-option.active{color:var(--hm-text);background:#c58b3217}.discord-user-combobox-option img,.discord-user-combobox-avatar{width:22px;height:22px;flex:none;border-radius:var(--hm-radius-full)}.discord-user-combobox-avatar{display:inline-grid;place-items:center;color:var(--hm-text-dim);background:#293140;font-size:.6rem}.discord-user-combobox-name{min-width:0;overflow:hidden;color:inherit;text-overflow:ellipsis;white-space:nowrap}.discord-user-combobox-username{min-width:0;overflow:hidden;color:var(--hm-text-dim);text-overflow:ellipsis;white-space:nowrap}.discord-user-combobox-bot{margin-left:auto;padding:.08rem .25rem;color:#c4b5fd;background:#6366f133;border-radius:3px;font-size:.52rem}.discord-global-user-picker{display:block}.discord-global-list-full{grid-column:1 / -1}.cfgc-chip-editor{display:grid;gap:var(--hm-space-3)}.cfgc-chip-list{min-height:32px;display:flex;align-items:center;gap:.35rem;flex-wrap:wrap}.cfgc-chip{max-width:100%;padding:.25rem .35rem .25rem .55rem;display:inline-flex;align-items:center;gap:.35rem;overflow-wrap:anywhere;color:#d8c28e;background:#c58b3214;border:1px solid rgba(197,139,50,.2);border-radius:var(--hm-radius-full);font-family:var(--hm-font-mono);font-size:var(--hm-text-xs)}.cfgc-chip button{width:20px;height:20px;color:#a9956e;background:transparent;border:0;border-radius:50%;cursor:pointer}.cfgc-chip button:hover{color:#fff;background:#ffffff14}.cfgc-chip-empty{color:var(--hm-text-dim);font-size:var(--hm-text-xs)}.cfgc-chip-add{display:flex;align-items:center;gap:var(--hm-space-2);flex-wrap:wrap;color:var(--hm-text-muted);font-size:var(--hm-text-xs)}.cfgc-chip-add .hm-input{width:min(170px,100%)}.cfgc-structured-summary{padding:var(--hm-space-3);display:grid;gap:.15rem;background:#04070b52;border:1px solid var(--hm-border);border-radius:var(--hm-radius-md)}.cfgc-structured-summary span{color:var(--hm-text);font-size:var(--hm-text-xs)}.cfgc-structured-summary small{color:var(--hm-text-dim);font-size:.62rem;line-height:1.4}@media(max-width:1180px){.config-center-page{--cfgc-rail-w: 190px}.cfgc-health-filters{grid-template-columns:repeat(7,minmax(106px,1fr))}.cfgc-category-copy small{display:none}.cfgc-section-header{grid-template-columns:20px minmax(0,1fr) auto}.cfgc-section-summary{grid-column:2;white-space:normal}.cfgc-section-badges{grid-column:3;grid-row:1 / span 2}.cfgc-field{grid-template-columns:minmax(180px,5fr) minmax(220px,7fr)}}@media(max-width:900px){.config-center-page{--cfgc-rail-w: 100%;height:auto;min-height:100%!important;overflow:visible}.cfgc-workspace{min-height:auto;flex:none;grid-template-columns:minmax(0,1fr);align-items:start;gap:var(--hm-space-3);overflow:visible}.cfgc-main{height:auto;overflow:visible;padding-bottom:5rem}.cfgc-category-rail{position:sticky;top:calc(var(--hm-topbar-h) + var(--hm-section-tabs-h));height:auto;z-index:13;max-height:none;padding:var(--hm-space-2);overflow:visible}.cfgc-rail-label,.cfgc-rail-key{display:none}.cfgc-category-scroll{display:flex;gap:var(--hm-space-2);overflow-x:auto;scroll-snap-type:x proximity}.cfgc-category{width:auto;min-width:150px;grid-template-columns:24px minmax(0,1fr) auto;flex:0 0 auto;scroll-snap-align:start}.cfgc-category-copy small{display:block}.cfgc-toolbar{top:calc(var(--hm-topbar-h) + var(--hm-section-tabs-h) + 59px)}.cfgc-section-header{grid-template-columns:20px minmax(120px,.8fr) minmax(150px,1.2fr) auto}.cfgc-field{grid-template-columns:minmax(180px,.85fr) minmax(210px,1.15fr);gap:var(--hm-space-4)}}@media(max-width:760px){.section-tabs-wrap{position:sticky;overflow:hidden}.section-tabs-wrap:after{content:"";position:absolute;top:0;right:0;bottom:0;width:34px;pointer-events:none;background:linear-gradient(90deg,transparent,rgba(9,12,17,.98));border-right:2px solid rgba(197,139,50,.28)}.config-center-page{padding-bottom:6.75rem!important}.cfgc-page-header{align-items:stretch}.cfgc-header-actions{flex:none}.cfgc-header-actions .cfgc-desktop-history,.cfgc-header-actions .btn-primary{display:none}.cfgc-health{margin-inline:-.15rem;padding:var(--hm-space-4)}.cfgc-health-heading{align-items:flex-start;flex-wrap:wrap}.cfgc-health-filters{grid-template-columns:repeat(7,122px);margin-inline:calc(var(--hm-space-4) * -1);padding-inline:var(--hm-space-4);padding-bottom:.2rem;scroll-snap-type:x proximity}.cfgc-health-filter{scroll-snap-align:start}.cfgc-category-rail{top:calc(var(--hm-topbar-h) + var(--hm-section-tabs-h));margin-inline:-.1rem}.cfgc-category-scroll{padding-right:1.5rem}.cfgc-category-scroll:after{content:"";flex:0 0 .1rem}.cfgc-toolbar{top:calc(var(--hm-topbar-h) + var(--hm-section-tabs-h) + 58px);padding:var(--hm-space-2)}.cfgc-toolbar>.btn{display:none}.cfgc-search input{font-size:1rem}.cfgc-category-panel-heading{align-items:center}.cfgc-section-header{min-height:72px;padding:var(--hm-space-4);grid-template-columns:18px minmax(0,1fr) auto;gap:var(--hm-space-2)}.cfgc-section-summary,.cfgc-section-badges .badge{display:none}.cfgc-section-actions{padding:var(--hm-space-3) var(--hm-space-4);align-items:stretch;flex-direction:column}.cfgc-section-actions>div:last-child{justify-content:flex-end}.cfgc-search-hits{padding-inline:var(--hm-space-4)}.cfgc-owner-card{margin:var(--hm-space-4);grid-template-columns:34px minmax(0,1fr);padding:var(--hm-space-4)}.cfgc-owner-card .btn{grid-column:1 / -1;width:100%;justify-content:center}.cfgc-field-groups{padding-inline:var(--hm-space-4)}.cfgc-fields{padding:0}.cfgc-field{grid-template-columns:minmax(0,1fr);gap:var(--hm-space-3);padding-block:var(--hm-space-4)}.cfgc-field-copy>p{line-height:1.45}.cfgc-write-only{grid-template-columns:minmax(0,1fr)}.cfgc-write-only>small,.cfgc-write-only>button{grid-column:1;grid-row:auto}.cfgc-write-only>button{width:100%;margin-top:var(--hm-space-2)}.cfgc-restart-banner{grid-template-columns:auto minmax(0,1fr);padding:var(--hm-space-4)}.cfgc-restart-actions{grid-column:1 / -1;justify-content:stretch}.cfgc-restart-actions .btn{flex:1}.cfgc-restart-dialog-actions{display:grid}.cfgc-mobile-action-bar{position:fixed;z-index:55;left:0;right:0;bottom:0;min-height:68px;padding:var(--hm-space-3) max(var(--hm-space-4),env(safe-area-inset-right)) calc(var(--hm-space-3) + env(safe-area-inset-bottom)) max(var(--hm-space-4),env(safe-area-inset-left));display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto;align-items:center;gap:var(--hm-space-2);background:#090c11fa;border-top:1px solid #394252;box-shadow:0 -12px 32px #0006;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.cfgc-mobile-action-bar .btn{min-width:0;padding-inline:.55rem}.cfgc-mobile-overflow{position:relative}.cfgc-mobile-overflow-menu{position:absolute;right:0;bottom:calc(100% + var(--hm-space-2));width:170px;padding:var(--hm-space-2);display:grid;gap:.15rem;background:#111720;border:1px solid #3a4352;border-radius:var(--hm-radius-md);box-shadow:var(--hm-shadow-lg)}.cfgc-mobile-overflow-menu button{min-height:38px;padding:0 var(--hm-space-3);display:flex;align-items:center;gap:var(--hm-space-2);color:var(--hm-text-muted);background:transparent;border:0;border-radius:5px;font-size:var(--hm-text-sm);text-align:left}.cfgc-mobile-overflow-menu button:hover:not(:disabled){color:var(--hm-text);background:#ffffff0a}.cfgc-mobile-overflow-menu button:disabled{opacity:.38}.cfgc-review-tray{width:100%;max-width:none}.cfgc-review-header{padding:var(--hm-space-5) var(--hm-space-4)}.cfgc-review-body{padding:var(--hm-space-4)}.cfgc-review-entry{grid-template-columns:minmax(0,1fr);gap:var(--hm-space-3)}.cfgc-review-footer{padding:var(--hm-space-4);grid-template-columns:1fr 1fr}.cfgc-review-footer>div{grid-column:1 / -1}}@media(max-width:420px){.cfgc-page-header{gap:var(--hm-space-3)}.cfgc-header-actions .btn{padding-inline:.65rem}.cfgc-page-summary{max-width:220px}.cfgc-mobile-action-bar{grid-template-columns:minmax(70px,1fr) minmax(90px,1fr) 36px}.cfgc-section-title>span{white-space:normal}.cfgc-review-values{grid-template-columns:minmax(0,1fr)}.cfgc-review-values .odin-icon{margin:-.1rem auto;transform:rotate(90deg)}}.llm-context-summary{min-height:58px;padding:.48rem .65rem;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.2rem var(--hm-space-2);background:#070a0f61;border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-md)}.llm-context-summary>span:first-child{color:var(--hm-text-dim);font-size:var(--hm-text-xs)}.llm-context-summary strong{color:#e7d39d;font-size:var(--hm-text-sm);font-variant-numeric:tabular-nums}.llm-context-summary strong small{color:var(--hm-text-dim);font-size:.58rem;font-weight:500}.llm-context-summary .llm-budget-provenance{justify-self:end}.llm-context-summary>small{grid-column:1 / -1;color:var(--hm-text-dim);font-size:.58rem}.llm-context-budget-panel{grid-column:1 / -1;overflow:hidden;background:radial-gradient(circle at 100% 0,rgba(201,162,78,.075),transparent 32rem),#080c12c7;border:1px solid rgba(116,96,57,.58);border-radius:var(--hm-radius-md)}.llm-context-budget-heading{padding:var(--hm-space-4);display:flex;align-items:end;justify-content:space-between;gap:var(--hm-space-5);border-bottom:1px solid var(--hm-border-subtle)}.llm-context-budget-heading>div{min-width:0;display:grid;gap:.15rem}.llm-context-budget-heading strong{color:var(--hm-text);font-size:var(--hm-text-sm)}.llm-context-budget-heading>div>span{color:var(--hm-text-dim);font-size:var(--hm-text-xs)}.llm-utilization-field{min-width:176px;display:grid;gap:.35rem;color:var(--hm-text-muted);font-size:var(--hm-text-xs)}.llm-utilization-input{display:grid;grid-template-columns:minmax(0,1fr) 2rem;align-items:center}.llm-utilization-input .hm-input{border-radius:var(--hm-radius-md) 0 0 var(--hm-radius-md);text-align:right;font-variant-numeric:tabular-nums}.llm-utilization-input small{align-self:stretch;display:grid;place-items:center;color:var(--hm-accent);background:#c9a24e14;border:1px solid var(--hm-border);border-left:0;border-radius:0 var(--hm-radius-md) var(--hm-radius-md) 0}.llm-context-budget-copy{margin:0;padding:var(--hm-space-3) var(--hm-space-4);color:var(--hm-text-dim);background:#070a0f8c;border-bottom:1px solid var(--hm-border-subtle);font-size:var(--hm-text-xs);line-height:1.55}.llm-context-budget-loading,.llm-context-budget-error{min-height:112px;padding:var(--hm-space-5);display:flex;align-items:center;justify-content:center;gap:var(--hm-space-3);color:var(--hm-text-muted);font-size:var(--hm-text-xs)}.llm-context-budget-loading .spinner{width:16px;height:16px}.llm-context-budget-error{color:var(--hm-danger)}.llm-context-budget-table-wrap{overflow-x:auto}.llm-context-budget-table{min-width:1120px;table-layout:fixed}.llm-context-budget-table th{padding:0 var(--hm-space-3);font-size:.58rem}.llm-context-budget-table td{padding:var(--hm-space-3);font-size:var(--hm-text-xs)}.llm-context-budget-table th:nth-child(1){width:15%}.llm-context-budget-table th:nth-child(2){width:11%}.llm-context-budget-table th:nth-child(3){width:19%}.llm-context-budget-table th:nth-child(4){width:12%}.llm-context-budget-table th:nth-child(5){width:13%}.llm-context-budget-table th:nth-child(6){width:14%}.llm-context-budget-table th:nth-child(7){width:16%}.llm-context-budget-table tbody tr.has-clamp td{background:#d3943109}.llm-context-budget-table code,.llm-clamp-card code{color:#e4e8ef;font-size:.72rem;letter-spacing:-.015em}.llm-context-budget-table td>small{display:block;margin-top:.2rem;color:var(--hm-text-dim);font-size:.58rem;line-height:1.3}.llm-budget-value{color:var(--hm-text-muted);font-variant-numeric:tabular-nums}.llm-budget-effective{color:#e7d39d;font-weight:650}.llm-budget-override{display:flex;align-items:center;gap:var(--hm-space-2)}.llm-budget-override .hm-input{min-width:0;height:34px;padding:0 var(--hm-space-2);font-size:var(--hm-text-xs);font-variant-numeric:tabular-nums}.llm-budget-reset{padding:0;color:var(--hm-text-dim);border:0;background:transparent;font-size:.62rem;cursor:pointer}.llm-budget-reset:hover{color:var(--hm-accent)}.llm-budget-warning{color:var(--hm-warning-text)!important}.llm-budget-pending{display:inline-flex;margin-top:.3rem;padding:.12rem .42rem;color:var(--hm-warning-text);background:#d977061a;border:1px solid rgba(217,119,6,.23);border-radius:var(--hm-radius-full);font-size:.56rem;font-weight:650}.llm-budget-provenance{display:inline-flex;align-items:center;min-height:22px;padding:.16rem .48rem;border:1px solid transparent;border-radius:var(--hm-radius-full);font-size:.58rem;font-weight:650;white-space:nowrap}.llm-budget-provenance.is-built-in{color:#94a0b0;background:#7e889817;border-color:#7e88982e}.llm-budget-provenance.is-override{color:#ccb474;background:#c9a24e17;border-color:#c9a24e33}.llm-budget-provenance.is-clamp{color:var(--hm-warning-text);background:#d977061a;border-color:#d977063b}.llm-clamp-list{padding:var(--hm-space-4);border-top:1px solid rgba(217,119,6,.2)}.llm-clamp-list-heading{display:flex;align-items:center;justify-content:space-between;gap:var(--hm-space-4);margin-bottom:var(--hm-space-3)}.llm-clamp-list-heading>div{display:grid;gap:.1rem}.llm-clamp-list-heading strong{color:var(--hm-warning-text);font-size:var(--hm-text-xs)}.llm-clamp-list-heading>div>span{color:var(--hm-text-dim);font-size:.6rem}.llm-clamp-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--hm-space-3)}.llm-clamp-card{min-width:0;padding:var(--hm-space-3);display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.25rem var(--hm-space-3);background:#d977060b;border:1px solid rgba(217,119,6,.16);border-radius:var(--hm-radius-md)}.llm-clamp-card>div{min-width:0;display:flex;align-items:baseline;gap:var(--hm-space-2);overflow:hidden}.llm-clamp-card>div span{color:var(--hm-warning-text);font-size:var(--hm-text-xs);font-variant-numeric:tabular-nums;white-space:nowrap}.llm-clamp-card p{grid-column:1;margin:0;color:var(--hm-text-dim);font-size:.58rem}.llm-clamp-card .btn{grid-column:2;grid-row:1 / span 2}@media(max-width:1180px){.llm-context-budget-table{min-width:900px}.llm-clamp-grid{grid-template-columns:minmax(0,1fr)}}@media(max-width:900px){.llm-context-budget-panel+.llm-advanced-footer{align-items:stretch;flex-direction:column}.llm-context-budget-panel+.llm-advanced-footer .btn{width:100%;justify-content:center}.llm-context-budget-heading{align-items:stretch;flex-direction:column}.llm-utilization-field{min-width:0}.llm-context-budget-table-wrap{overflow:visible}.llm-context-budget-table,.llm-context-budget-table tbody,.llm-context-budget-table tr,.llm-context-budget-table td{display:block;width:100%;min-width:0}.llm-context-budget-table thead{display:none}.llm-context-budget-table tbody{padding:var(--hm-space-3);display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--hm-space-3)}.llm-context-budget-table tr{margin-bottom:0;overflow:hidden;background:#111720b3;border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-md)}.llm-context-budget-table td{min-height:44px;padding:var(--hm-space-2) var(--hm-space-3);display:grid;grid-template-columns:minmax(104px,.85fr) minmax(0,1.15fr);align-items:center;gap:var(--hm-space-3);text-align:right}.llm-context-budget-table td:before{content:attr(data-label);color:var(--hm-text-dim);font-size:.58rem;font-weight:650;letter-spacing:.045em;text-align:left;text-transform:uppercase}.llm-context-budget-table td:first-child{min-height:48px;background:#070a0f73}.llm-context-budget-table td>small{margin:-.1rem 0 0;grid-column:2}.llm-budget-override{justify-content:flex-end}.llm-budget-override .hm-input{width:150px}.llm-clamp-list-heading{align-items:flex-start}.llm-clamp-card{grid-template-columns:minmax(0,1fr)}.llm-clamp-card p,.llm-clamp-card .btn{grid-column:1;grid-row:auto}.llm-clamp-card .btn{width:100%;justify-content:center;margin-top:var(--hm-space-2)}}@media(max-width:600px){.llm-context-budget-table tbody{grid-template-columns:minmax(0,1fr)}.llm-budget-override{gap:.35rem}.llm-budget-override .hm-input{width:min(105px,100%)}}:root{--hm-topbar-h: 76px;--hm-rail-h: 107px;--hm-section-tabs-inner-h: 48px;--hm-section-tabs-border: 1px;--hm-section-tabs-h: calc(var(--hm-section-tabs-inner-h) + var(--hm-section-tabs-border));--hm-bg: #07090d;--hm-bg-raised: #0b0e14;--hm-surface: #10141c;--hm-surface-hover: #171d28;--hm-surface-elevated: #151a24;--hm-border: #252c39;--hm-border-subtle: #1a202b;--hm-accent: #c58b32;--hm-accent-hover: #dda84f;--hm-accent-dim: rgba(197, 139, 50, .13);--hm-accent-glow: rgba(197, 139, 50, .16);--hm-gold: #e0b766;--hm-gold-dim: rgba(197, 139, 50, .08);--hm-text: #edf0f5;--hm-text-muted: #9aa4b3;--hm-text-dim: #667182;--hm-success: #3db983;--hm-warning: #d8a342;--hm-danger: #e06464;--hm-info: #668fd7;--hm-radius-sm: 5px;--hm-radius-md: 7px;--hm-radius-lg: 10px;--hm-radius-xl: 14px;--hm-shadow-sm: 0 1px 2px rgba(0,0,0,.24), 0 0 0 1px rgba(255,255,255,.015);--hm-shadow-md: 0 10px 30px rgba(0,0,0,.28);--hm-shadow-lg: 0 24px 64px rgba(0,0,0,.48);--shell-sidebar: 252px;--shell-sidebar-collapsed: 72px}html{background:var(--hm-bg)}body{color:var(--hm-text);background:radial-gradient(circle at 72% -20%,rgba(197,139,50,.055),transparent 34rem),linear-gradient(180deg,#080a0f 0%,var(--hm-bg) 35%)}button,input,select,textarea{font:inherit}::-moz-selection{background:#c58b3252;color:#fff}::selection{background:#c58b3252;color:#fff}.odin-icon{display:block;flex:none}.app-loading{min-height:100vh;display:grid;place-items:center}.brand-loader{color:var(--hm-accent-hover);animation:brand-pulse 1.4s ease-in-out infinite}@keyframes brand-pulse{50%{opacity:.45;transform:scale(.94)}}.app-shell{display:flex;min-height:100vh}.hm-sidebar{position:relative;width:var(--shell-sidebar);min-width:var(--shell-sidebar);height:100vh;min-height:0;background:#0d1017f5;border-right:1px solid var(--hm-border-subtle);box-shadow:10px 0 35px #0000001f;transition:width .22s ease,min-width .22s ease,transform .22s ease;display:flex;flex-direction:column;z-index:40}.hm-sidebar:before{content:"";position:absolute;inset:0 auto 0 0;width:2px;background:linear-gradient(180deg,transparent 3%,var(--hm-accent) 24%,rgba(197,139,50,.15) 68%,transparent);opacity:.65;pointer-events:none}.hm-sidebar.collapsed{width:var(--shell-sidebar-collapsed);min-width:var(--shell-sidebar-collapsed)}.sidebar-brand{min-height:76px;padding:0 16px 0 18px;display:flex;align-items:center;gap:11px;border-bottom:1px solid var(--hm-border-subtle)}.brand-mark{width:34px;height:34px;display:grid;place-items:center;color:var(--hm-accent-hover);background:linear-gradient(145deg,#c58b3229,#c58b3209);border:1px solid rgba(197,139,50,.3);border-radius:9px;flex:none}.sidebar-brand-copy{display:flex;flex-direction:column;min-width:0;line-height:1}.brand-wordmark{font-size:.83rem;letter-spacing:.23em;font-weight:700;color:#f2dfb8}.brand-caption{margin-top:7px;font-size:.61rem;letter-spacing:.1em;text-transform:uppercase;color:var(--hm-text-dim)}.sidebar-toggle-btn{margin-left:auto}.hm-sidebar.collapsed .sidebar-brand{padding-inline:18px;justify-content:center}.hm-sidebar.collapsed .sidebar-brand-copy,.hm-sidebar.collapsed .nav-label,.hm-sidebar.collapsed .nav-section-label,.hm-sidebar.collapsed .connection-copy,.hm-sidebar.collapsed .shortcut-hint span,.hm-sidebar.collapsed .shortcut-hint kbd,.hm-sidebar.collapsed .brand-mark{display:none}.hm-sidebar.collapsed .sidebar-toggle-btn{margin-left:0}.sidebar-nav{flex:1;min-height:0;padding:13px 10px;overflow:auto}.nav-group+.nav-group{margin-top:18px}.nav-section-label{padding:0 10px 6px;color:#555f6f;font-size:.625rem;line-height:1;text-transform:uppercase;letter-spacing:.14em;font-weight:700}.nav-item{position:relative;min-height:40px;display:flex;align-items:center;white-space:nowrap;overflow:hidden;margin:2px 0;padding:0 10px;gap:11px;color:#8d97a7;border-radius:7px;font-size:.79rem;font-weight:500;text-decoration:none;cursor:pointer;transition:background var(--hm-transition-base),color var(--hm-transition-base)}.nav-item:hover{background:#ffffff09;color:#d9dee7}.nav-item.active{background:linear-gradient(90deg,#c58b3224,#c58b320b);color:#ebc982;box-shadow:inset 2px 0 0 var(--hm-accent)}.nav-item.active:after{content:"";position:absolute;right:10px;width:4px;height:4px;background:var(--hm-accent-hover);border-radius:50%;box-shadow:0 0 8px var(--hm-accent)}.nav-icon{width:20px;display:grid;flex:none;place-items:center;color:#717d8f}.nav-item:hover .nav-icon{color:#aeb7c4}.nav-item.active .nav-icon{color:var(--hm-accent-hover)}.hm-sidebar.collapsed .sidebar-nav{padding-inline:12px}.hm-sidebar.collapsed .nav-item{padding:0;justify-content:center}.hm-sidebar.collapsed .nav-item.active:after{right:5px}.sidebar-footer{min-height:var(--hm-rail-h);padding:12px;border-top:1px solid var(--hm-border-subtle);display:grid;gap:8px;align-content:center}.connection-card{min-height:42px;padding:8px 10px;display:flex;align-items:center;gap:9px;border:1px solid var(--hm-border-subtle);background:#00000024;border-radius:8px}.connection-copy{min-width:0;display:flex;flex:1;justify-content:space-between;align-items:baseline;gap:8px}.connection-label{font-size:.7rem;color:var(--hm-text-muted)}.connection-latency{font-family:var(--hm-font-mono);font-size:.58rem;color:var(--hm-text-dim)}.shortcut-hint{width:100%;min-height:32px;display:flex;align-items:center;gap:7px;padding:0 9px;border:0;border-radius:6px;background:transparent;color:var(--hm-text-dim);font-size:.67rem;cursor:pointer}.shortcut-hint:hover{color:var(--hm-text-muted);background:#ffffff08}.shortcut-hint kbd{margin-left:auto}.hm-sidebar.collapsed .connection-card,.hm-sidebar.collapsed .shortcut-hint{justify-content:center;padding-inline:0}.hm-main{flex:1;min-width:0;height:100vh;max-height:none;overflow-y:auto;background:transparent}.hm-topbar{position:sticky;top:0;display:flex;align-items:center;z-index:25;height:var(--hm-topbar-h);padding:0 28px;gap:22px;background:#07090de0;border-bottom:1px solid var(--hm-border-subtle);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px)}.topbar-context{display:flex;flex-direction:column;min-width:140px}.topbar-kicker{margin-bottom:2px;color:var(--hm-accent);font-size:.57rem;line-height:1;text-transform:uppercase;letter-spacing:.16em;font-weight:700}.topbar-title-row{display:flex;align-items:center;gap:10px}.topbar-title-row h1{margin:0;color:#f3f4f7;font-size:1rem;line-height:1.25;font-weight:650;letter-spacing:-.018em}.topbar-description{margin:0;padding-left:22px;border-left:1px solid var(--hm-border);color:var(--hm-text-dim);font-size:.72rem}.topbar-actions{margin-left:auto;display:flex;align-items:center;gap:8px}.uptime-label{margin-right:5px;color:var(--hm-text-dim);font-family:var(--hm-font-mono);font-size:.62rem}.status-pill{display:inline-flex;align-items:center;gap:5px;color:var(--hm-text-muted);font-size:.58rem;text-transform:capitalize;font-weight:600}.status-pill .status-dot{width:6px;height:6px;box-shadow:none}.command-trigger{min-height:34px;padding:0 8px 0 10px;display:flex;align-items:center;gap:7px;color:var(--hm-text-muted);background:#ffffff06;border:1px solid var(--hm-border);border-radius:7px;font-size:.68rem;cursor:pointer}.command-trigger:hover{color:var(--hm-text);border-color:#3a4352;background:#ffffff0b}kbd{padding:2px 5px;color:#818b99;background:#090c11;border:1px solid #2b3340;border-radius:4px;font-family:var(--hm-font-sans);font-size:.57rem;box-shadow:inset 0 -1px #ffffff09}.page-viewport{min-height:calc(100vh - var(--hm-topbar-h))}.icon-btn.mobile-menu-btn,.mobile-scrim{display:none}.icon-btn{width:34px;height:34px;padding:0;display:inline-grid;place-items:center;flex:none;color:var(--hm-text-muted);background:transparent;border:1px solid transparent;border-radius:7px;cursor:pointer;transition:color .15s ease,border-color .15s ease,background .15s ease}.icon-btn:hover{color:var(--hm-text);background:#ffffff0b;border-color:var(--hm-border)}.icon-btn-danger{color:#d67a7a}.icon-btn-danger:hover{color:#f08a8a;background:#e064641a;border-color:#e064643d}.section-shell{min-height:calc(100vh - var(--hm-topbar-h))}.section-tabs-wrap{position:sticky;top:var(--hm-topbar-h);z-index:20;padding:0 24px;background:#090c11eb;border-bottom:var(--hm-section-tabs-border) solid var(--hm-border-subtle);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.section-tabs{display:flex;align-items:stretch;gap:2px;min-height:var(--hm-section-tabs-inner-h);overflow-x:auto}.section-tab{position:relative;padding:0 13px;white-space:nowrap;color:#7f8998;background:transparent;border:0;font-size:.72rem;font-weight:550;cursor:pointer}.section-tab:hover{color:#c8ced7}.section-tab.active{color:#e9ca8e}.section-tab.active:after{content:"";position:absolute;left:13px;right:13px;bottom:0;height:2px;background:var(--hm-accent);border-radius:2px 2px 0 0;box-shadow:0 -3px 12px #c58b3233}.section-panel>*{min-height:100%}.hm-card{background:linear-gradient(150deg,#121720f5,#0e1219fa);border-color:var(--hm-border);box-shadow:var(--hm-shadow-sm)}.hm-card:hover{border-color:#303847}.hm-table th{background:#07090d4d;color:#7e8898;font-size:.64rem;letter-spacing:.075em;font-weight:650}.hm-table td{border-bottom-color:var(--hm-border-subtle)}.hm-table tr:hover td{background:#ffffff05}.btn{min-height:34px;padding:7px 12px;border:1px solid transparent;font-weight:600}.btn-primary{color:#171006;background:linear-gradient(180deg,#d4a14e,#b77b29);border-color:#dcaa57;box-shadow:inset 0 1px #ffffff21,0 5px 14px #83521324}.btn-primary:hover{background:linear-gradient(180deg,#e2b35f,#c88a31);box-shadow:0 7px 18px #83521333}.btn-ghost{border-color:var(--hm-border);background:#ffffff04}.btn-ghost:hover{border-color:#394251;background:#ffffff0a}.hm-input{min-height:38px;background:#090c11;border-color:#2a3240}.hm-input:hover{border-color:#36404f}.hm-input:focus{border-color:var(--hm-accent);box-shadow:0 0 0 3px #c58b321a}.login-shell{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(circle at 50% 20%,rgba(197,139,50,.09),transparent 30rem)}.login-panel{width:100%;max-width:380px;padding:34px;background:linear-gradient(150deg,#131821f7,#0b0e14fc);border:1px solid var(--hm-border);border-radius:14px;box-shadow:var(--hm-shadow-lg)}.login-brand{width:48px;height:48px;margin-bottom:26px;display:grid;place-items:center;color:var(--hm-accent-hover);background:var(--hm-accent-dim);border:1px solid rgba(197,139,50,.3);border-radius:11px}.login-eyebrow{margin:0 0 7px;color:var(--hm-accent);font-size:.63rem;font-weight:700;letter-spacing:.15em;text-transform:uppercase}.login-title{margin:0;color:#f2f3f6;font-size:1.65rem;line-height:1.2;font-weight:650;letter-spacing:-.035em}.login-subtitle{margin:7px 0 25px;color:var(--hm-text-muted);font-size:.8rem}.modal-overlay{background:#030508c2;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.modal-content,.palette{background:linear-gradient(155deg,#171c25,#0f131a);border-color:#303847;box-shadow:var(--hm-shadow-lg)}.confirm-heading{display:flex;gap:13px;margin-bottom:22px}.confirm-heading h3{margin:2px 0 6px;font-size:.92rem;font-weight:650}.confirm-heading p{margin:0;color:var(--hm-text-muted);font-size:.76rem;line-height:1.55}.confirm-icon{width:38px;height:38px;display:grid;place-items:center;flex:none;color:var(--hm-info);background:#668fd71a;border:1px solid rgba(102,143,215,.22);border-radius:9px}.confirm-icon.danger{color:var(--hm-danger);background:#e064641a;border-color:#e0646438}.toast-item{min-width:260px;padding:11px 13px;background:#141923;border-color:#2b3442;border-left-width:3px;color:var(--hm-text)}.toast-success{border-left-color:var(--hm-success)}.toast-error{border-left-color:var(--hm-danger)}.toast-info{border-left-color:var(--hm-info)}.toast-success,.toast-error,.toast-info{background:#141923;color:var(--hm-text)}.toast-success .toast-icon{color:var(--hm-success)}.toast-error .toast-icon{color:var(--hm-danger)}.toast-info .toast-icon{color:var(--hm-info)}.palette-overlay{padding-top:12vh}.palette{max-width:570px}.palette-search{display:flex;align-items:center;gap:10px;padding-left:17px;color:var(--hm-text-dim);border-bottom:1px solid var(--hm-border)}.palette-input{border:0;padding:17px 17px 17px 0;font-size:.82rem}.palette-results{max-height:390px;padding:8px}.palette-item{min-height:48px;gap:11px;padding:6px 10px}.palette-item.selected{background:linear-gradient(90deg,#c58b321f,#c58b3209)}.palette-icon{width:30px;height:30px;display:grid;place-items:center;color:#8994a4;background:#ffffff09;border:1px solid var(--hm-border-subtle);border-radius:7px}.palette-item.selected .palette-icon{color:var(--hm-accent-hover);border-color:#c58b3240}.palette-copy{display:flex;flex-direction:column;gap:2px}.palette-label{color:#dfe3e9;font-size:.76rem;font-weight:550}.palette-group{color:var(--hm-text-dim);font-size:.61rem}.palette-arrow{margin-left:auto;color:#4e5867}.palette-footer{justify-content:flex-end;gap:16px;padding:10px 14px}.palette-footer span{display:flex;align-items:center;gap:5px}.error-icon,.empty-state-icon{display:grid;place-items:center;color:var(--hm-text-dim)}.empty-state{min-height:220px;border-style:dashed}.empty-state-icon{width:44px;height:44px;font-size:initial;background:#ffffff06;border:1px solid var(--hm-border-subtle);border-radius:10px}@media(max-width:900px){.hm-sidebar{position:fixed;left:0;top:0;transform:translate(-102%);width:min(280px,86vw);min-width:min(280px,86vw);box-shadow:20px 0 60px #00000080}.hm-sidebar.mobile-open{transform:translate(0)}.hm-sidebar.collapsed{width:min(280px,86vw);min-width:min(280px,86vw)}.hm-sidebar.collapsed .sidebar-brand-copy,.hm-sidebar.collapsed .nav-label,.hm-sidebar.collapsed .nav-section-label,.hm-sidebar.collapsed .connection-copy,.hm-sidebar.collapsed .shortcut-hint span,.hm-sidebar.collapsed .shortcut-hint kbd{display:flex}.hm-sidebar.collapsed .sidebar-brand{justify-content:flex-start}.hm-sidebar.collapsed .brand-mark{display:grid}.hm-sidebar.collapsed .nav-item{padding:0 10px;justify-content:flex-start}.mobile-scrim{display:block;position:fixed;top:0;right:0;bottom:0;left:0;z-index:35;background:#0000009e;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.icon-btn.mobile-menu-btn{display:inline-grid}.hm-sidebar .sidebar-toggle-btn{display:none}.hm-topbar{padding:0 16px;gap:12px}.topbar-description,.uptime-label,.command-trigger span{display:none}.command-trigger{width:34px;padding:0;justify-content:center}.command-trigger kbd{display:none}}@media(max-width:640px){:root{--hm-topbar-h: 64px}.section-tabs-wrap{padding:0 12px}.topbar-kicker{display:none}.topbar-title-row h1{font-size:.9rem}.status-pill{display:none}.section-tab{padding-inline:10px}.section-panel .p-6{padding:1rem}.login-panel{padding:26px}.toast-stack{left:12px;right:12px;bottom:12px}.toast-item{width:100%;max-width:none}}@media(prefers-reduced-motion:reduce){.brand-loader{animation:none}}.page-viewport .page-fade-in{width:100%;max-width:1600px;margin-inline:0}.page-viewport .p-6{padding:clamp(1rem,2vw,1.75rem)}.page-viewport h1.text-xl{color:#f2f3f6;font-size:1.12rem;line-height:1.3;letter-spacing:-.025em;font-weight:650}.page-viewport h2,.page-viewport h3{letter-spacing:-.012em}.page-lede{margin-top:4px;max-width:64ch;color:var(--hm-text-dim);font-size:.72rem;line-height:1.55}.form-panel{position:relative;overflow:hidden;border-color:#c58b3238;background:linear-gradient(145deg,#c58b320b,#0d1118fa 35%)}.form-panel:before{content:"";position:absolute;inset:0 auto 0 0;width:2px;background:linear-gradient(180deg,var(--hm-accent),transparent 75%)}.provider-choice-list{display:grid;gap:8px}.provider-choice{padding:11px 12px;border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-md);background:#0000001f}.provider-choice:has(input:checked){border-color:#c58b324d;background:var(--hm-accent-dim)}.provider-choice-label{display:flex;align-items:center;gap:9px;cursor:pointer}.provider-control{accent-color:var(--hm-accent)}.hm-card{padding:1rem;border-radius:var(--hm-radius-lg)}.hm-card>h2:first-child,.hm-card>h3:first-child{color:#e5e8ee}.table-responsive{border:1px solid var(--hm-border-subtle);border-radius:var(--hm-radius-lg);background:#06080c3d}.hm-table{width:100%;border-collapse:collapse}.hm-table th{height:38px;padding:0 12px;white-space:nowrap}.hm-table td{padding:10px 12px;vertical-align:middle}.hm-table tbody tr:last-child td{border-bottom:0}.hm-select,select.hm-input{min-height:38px;background-color:#090c11;border-color:#2a3240}textarea.hm-input{min-height:90px;line-height:1.55}label{accent-color:var(--hm-accent)}input[type=checkbox]{width:15px;height:15px;accent-color:var(--hm-accent);border-radius:4px;cursor:pointer}input[type=checkbox]:focus-visible{outline:2px solid var(--hm-accent);outline-offset:3px}input[type=checkbox]:disabled{cursor:not-allowed;opacity:.45}.btn-danger{color:#f6b2b2;background:#e0646414;border-color:#e0646452}.btn-danger:hover{color:#ffd0d0;background:#e0646429;border-color:#e0646480}.btn:focus-visible,.icon-btn:focus-visible,.nav-item:focus-visible,.section-tab:focus-visible{outline:2px solid var(--hm-accent);outline-offset:2px}.modal-content{width:min(92vw,520px);padding:22px;border-radius:var(--hm-radius-xl)}.modal-content h2,.modal-content h3{color:#f0f2f5}.modal-content .btn{min-width:76px}.error-state{min-height:180px;border-color:#e0646442!important;background:linear-gradient(150deg,#34141852,#0e1219fa)}.error-icon{width:42px;height:42px;border-radius:10px;background:#e0646417;border:1px solid rgba(224,100,100,.2)}.sess-preset-icon,.tl-group-icon,.cfg-group-icon,.chat-tool-icon{display:inline-grid;place-items:center;flex:none}.sk-action-btn{display:inline-grid;place-items:center}.sk-card-icon{display:inline-grid;color:var(--hm-accent-hover)}.health-card-icon{display:inline-grid}.provider-status{display:inline-flex;align-items:center;gap:6px}.provider-status .status-dot{width:7px;height:7px;box-shadow:none}.row-expander{width:28px;height:28px;display:inline-grid;place-items:center;border:0;border-radius:6px;color:var(--hm-text-dim);background:transparent;cursor:pointer}.row-expander:hover{color:var(--hm-text);background:#ffffff0b}.row-expander:focus-visible{outline:2px solid var(--hm-accent);outline-offset:2px}.tool-expand-icon .odin-icon,.chat-tools-toggle-icon .odin-icon,.cfg-group-arrow .odin-icon,.sess-expand-icon .odin-icon,.mem-tree-arrow .odin-icon,.kb-tree-arrow .odin-icon{transition:transform var(--hm-transition-base)}.chat-markdown .chat-code-copy{opacity:0}.chat-markdown pre:hover .chat-code-copy,.chat-markdown .chat-code-copy:focus-visible{opacity:1}.fts-highlight,.knowledge-highlight{background:#e0b7663d;color:#fff0c8;border-radius:2px;padding-inline:1px}@media(max-width:640px){.page-viewport .p-6,.hm-card{padding:.85rem}.hm-table th,.hm-table td{padding-inline:9px}.modal-content{padding:18px}} diff --git a/ui/dist/index.html b/ui/dist/index.html index b7f22117..c5cb4d1a 100644 --- a/ui/dist/index.html +++ b/ui/dist/index.html @@ -9,8 +9,8 @@ Odin — Management - - + + Skip to main content diff --git a/ui/js/pages/llm-config.js b/ui/js/pages/llm-config.js index 01bba2b4..bce54c9d 100644 --- a/ui/js/pages/llm-config.js +++ b/ui/js/pages/llm-config.js @@ -280,7 +280,8 @@ export default {
    - + + @@ -300,7 +301,11 @@ export default { Above the known-safe floor - + +
    Built-in floor Configured override Effective budgetResulting targetConfigured targetRuntime target Provenance
    {{ formatCount(row.effectiveBudget) }}tokens{{ formatCount(row.primaryChars) }}characters{{ formatCount(row.configuredPrimaryChars) }}characters · saved policy + {{ formatCount(row.primaryChars) }}characters · active process + Restart pending + {{ row.provenance }} Expires {{ formatExpiry(row.clampExpiresAt) }} @@ -681,6 +686,7 @@ export default { floor: details.floor, override: details.override, effectiveBudget: details.effective?.effective_budget, + configuredPrimaryChars: details.configured?.primary_chars, primaryChars: details.effective?.primary_chars, provenance: details.provenance, clampExpiresAt: details.clamp_expires_at,