diff --git a/README.md b/README.md index 2122d04b..982a635d 100644 --- a/README.md +++ b/README.md @@ -267,6 +267,20 @@ export STRIX_REASONING_EFFORT="high" # control thinking effort (default: high, > [!NOTE] > Strix automatically saves your configuration to `~/.strix/cli-config.json`, so you don't have to re-enter it on every run. +#### Sign in with a ChatGPT subscription + +Instead of a metered API key, you can run Strix on your ChatGPT Plus/Pro subscription: + +```bash +strix auth login chatgpt # sign in with your ChatGPT account + +export STRIX_LLM="chatgpt/gpt-5.4" # chatgpt/ runs on the subscription +strix --target ./app-directory + +strix auth status # show the active sign-in +strix auth logout # forget the sign-in +``` + **Recommended models for best results:** - [OpenAI GPT-5.4](https://openai.com/api/) - `openai/gpt-5.4` diff --git a/pyproject.toml b/pyproject.toml index d389bd67..f51877d4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -215,6 +215,10 @@ ignore = [ # Test doubles use fixture tokens/passwords and match a callee signature whose # args they intentionally ignore. "tests/test_viewer_auth.py" = ["S105", "S106", "ARG001"] +"tests/test_codex_auth.py" = ["S105", "S106", "SLF001"] +# Stdlib HTTP handler overrides (do_GET/do_POST). +"strix/interface/auth_cli.py" = ["N802"] +"tests/test_codex_streaming.py" = ["N802"] "tests/test_report_pdf.py" = ["S105", "S106"] # Stdlib HTTP handler overrides (do_GET/do_POST) and lazy imports that avoid a # circular dependency with strix.telemetry / strix.viewer.report_pdf. @@ -253,9 +257,13 @@ ignore = [ "strix/core/runner.py" = ["TC003", "PLR0912", "PLR0915", "PLC0415"] # ReportState carries scan artifact/report fields and # a runtime ``Callable`` annotation on ``vulnerability_found_callback``. -"strix/report/state.py" = ["TC003", "PLR0912", "PLR0915", "E501", "PERF401"] +"strix/report/state.py" = ["TC003", "PLR0912", "PLR0915", "E501", "PERF401", "PLC0415"] "strix/report/usage.py" = ["PLC0415"] +"strix/telemetry/logging.py" = ["PLC0415"] "strix/config/models.py" = ["PLC0415"] +# Heavy inference deps (httpx, openai) imported lazily so auth-status checks +# don't pull them in. +"strix/config/codex.py" = ["PLC0415"] # Interface utility branches per scope-mode / target-type combination; # splitting would obscure the decision tree without simplifying it. "strix/interface/utils.py" = ["PLR0912", "BLE001", "PLC0415"] diff --git a/strix/config/codex.py b/strix/config/codex.py new file mode 100644 index 00000000..0359afb6 --- /dev/null +++ b/strix/config/codex.py @@ -0,0 +1,411 @@ +"""ChatGPT (Codex) subscription auth: OAuth login, token refresh, and the OpenAI +client that routes inference through the ChatGPT backend. + +Mirrors OpenAI's Codex CLI: OAuth 2.0 + PKCE against ``auth.openai.com``, with the +access token sent as a ``Bearer`` token to ``chatgpt.com/backend-api/codex``. Using +a ChatGPT subscription outside OpenAI's own products is not officially supported by +OpenAI; the user chooses this path knowingly. The OAuth constants are OpenAI's own +Codex CLI values (the backend only accepts that client). +""" + +from __future__ import annotations + +import base64 +import contextlib +import hashlib +import json +import logging +import secrets +import threading +import time +import urllib.error +import urllib.parse +import urllib.request +from pathlib import Path +from typing import TYPE_CHECKING, Any + + +if TYPE_CHECKING: + from collections.abc import Iterator + + from openai import AsyncOpenAI + + +logger = logging.getLogger(__name__) + + +PROVIDER = "codex" + +CLIENT_ID = "app_EMoamEEZ73f0CkXaXp7hrann" +AUTHORIZE_URL = "https://auth.openai.com/oauth/authorize" +TOKEN_URL = "https://auth.openai.com/oauth/token" # noqa: S105 # nosec B105 - URL, not a secret +CALLBACK_HOST = "localhost" +CALLBACK_PORT = 1455 +CALLBACK_PATH = "/auth/callback" +REDIRECT_URI = f"http://{CALLBACK_HOST}:{CALLBACK_PORT}{CALLBACK_PATH}" +SCOPE = "openid profile email offline_access" + +CODEX_BASE_URL = "https://chatgpt.com/backend-api/codex" +ORIGINATOR = "codex_cli_rs" +_ACCOUNT_CLAIM = "https://api.openai.com/auth" + +_TOKEN_TIMEOUT = 30 +_EXPIRY_SKEW_S = 300 + +_refresh_lock = threading.Lock() + +# Kept separate from cli-config.json so OAuth tokens never land in the env-var config. +AUTH_PATH = Path.home() / ".strix" / "subscription-auth.json" + + +def _read_store() -> dict[str, Any]: + try: + data = json.loads(AUTH_PATH.read_text(encoding="utf-8")) + except (OSError, json.JSONDecodeError): + return {} + return data if isinstance(data, dict) else {} + + +def _write_store(data: dict[str, Any]) -> None: + AUTH_PATH.parent.mkdir(parents=True, exist_ok=True) + tmp = AUTH_PATH.with_suffix(".json.tmp") + tmp.write_text(json.dumps(data, indent=2), encoding="utf-8") + with contextlib.suppress(OSError): + tmp.chmod(0o600) + tmp.replace(AUTH_PATH) + with contextlib.suppress(OSError): + AUTH_PATH.chmod(0o600) + + +def read_record() -> dict[str, Any] | None: + record = _read_store().get(PROVIDER) + if not isinstance(record, dict) or record.get("type") != "oauth": + return None + if not (record.get("access") and record.get("refresh") and record.get("account_id")): + return None + return record + + +def is_authenticated() -> bool: + return read_record() is not None + + +def save_record(record: dict[str, Any]) -> None: + data = _read_store() + data[PROVIDER] = record + _write_store(data) + + +def logout() -> None: + data = _read_store() + if PROVIDER not in data: + return + del data[PROVIDER] + if data: + _write_store(data) + return + with contextlib.suppress(OSError): + AUTH_PATH.unlink() + + +@contextlib.contextmanager +def _refresh_guard() -> Iterator[None]: + """Serialize token refresh within (lock) and across (flock) Strix processes, + so concurrent runs can't both spend the single-use refresh token.""" + with _refresh_lock: + try: + import fcntl + + lock_path = AUTH_PATH.with_suffix(".lock") + lock_path.parent.mkdir(parents=True, exist_ok=True) + handle = lock_path.open("w") + except (ImportError, OSError): + yield + return + try: + with contextlib.suppress(OSError): + fcntl.flock(handle.fileno(), fcntl.LOCK_EX) + yield + finally: + with contextlib.suppress(OSError): + fcntl.flock(handle.fileno(), fcntl.LOCK_UN) + handle.close() + + +class CodexAuthError(Exception): + def __init__(self, code: str, message: str | None = None) -> None: + self.code = code + super().__init__(message or code) + + +class CodexContentGuardrailError(Exception): + """The ChatGPT backend refused a request via its content guardrail. + Terminal — retrying identical content never clears the block.""" + + def __init__(self, model: str, original: BaseException | None = None) -> None: + self.model = model + self.original = original + super().__init__( + f"'{model}' was blocked by ChatGPT's content guardrails " + f"(flagged as a possible cybersecurity risk). " + f"Set STRIX_LLM to a model that isn't blocked and re-run." + ) + + +_GUARDRAIL_MARKERS = ( + "flagged for possible cybersecurity risk", + "trusted access for cyber", +) + + +def is_content_guardrail_error(exc: BaseException) -> bool: + if isinstance(exc, CodexContentGuardrailError): + return True + text = str(exc).lower() + return any(marker in text for marker in _GUARDRAIL_MARKERS) + + +def _b64url(raw: bytes) -> str: + return base64.urlsafe_b64encode(raw).rstrip(b"=").decode("ascii") + + +def generate_pkce() -> tuple[str, str]: + verifier = _b64url(secrets.token_bytes(64)) + challenge = _b64url(hashlib.sha256(verifier.encode("ascii")).digest()) + return verifier, challenge + + +def create_state() -> str: + return secrets.token_hex(16) + + +def build_authorize_url(challenge: str, state: str) -> str: + params = { + "response_type": "code", + "client_id": CLIENT_ID, + "redirect_uri": REDIRECT_URI, + "scope": SCOPE, + "code_challenge": challenge, + "code_challenge_method": "S256", + "state": state, + "id_token_add_organizations": "true", + "codex_cli_simplified_flow": "true", + "originator": ORIGINATOR, + } + return f"{AUTHORIZE_URL}?{urllib.parse.urlencode(params)}" + + +def parse_redirect_input(value: str) -> tuple[str | None, str | None]: + """Extract ``(code, state)`` from a pasted redirect URL, ``code#state``, + query string, or bare code.""" + value = (value or "").strip() + if not value: + return None, None + with contextlib.suppress(ValueError): + parsed = urllib.parse.urlparse(value) + if parsed.scheme and parsed.query: + query = urllib.parse.parse_qs(parsed.query) + return _first(query, "code"), _first(query, "state") + if "#" in value: + code, _, state = value.partition("#") + return code or None, state or None + if "code=" in value: + query = urllib.parse.parse_qs(value) + return _first(query, "code"), _first(query, "state") + return value, None + + +def _first(query: dict[str, list[str]], key: str) -> str | None: + values = query.get(key) + return values[0] if values else None + + +def _post_form(payload: dict[str, str]) -> dict[str, Any]: + body = urllib.parse.urlencode(payload).encode("ascii") + request = urllib.request.Request( # noqa: S310 - fixed https OAuth endpoint + TOKEN_URL, + data=body, + headers={ + "Content-Type": "application/x-www-form-urlencoded", + "Accept": "application/json", + }, + method="POST", + ) + try: + with urllib.request.urlopen( # noqa: S310 # nosec B310 - fixed https endpoint + request, timeout=_TOKEN_TIMEOUT + ) as response: + data = json.loads(response.read() or b"{}") + except urllib.error.HTTPError as exc: + detail = exc.read().decode("utf-8", "replace")[:300] + raise CodexAuthError("token_http_error", f"HTTP {exc.code}: {detail}") from exc + except (urllib.error.URLError, TimeoutError, OSError) as exc: + raise CodexAuthError("unavailable", str(exc)) from exc + if not isinstance(data, dict): + raise CodexAuthError("bad_response", "token endpoint returned non-object") + return data + + +def _record_from_token_response( + data: dict[str, Any], refresh_fallback: str | None = None +) -> dict[str, Any]: + access = data.get("access_token") + # A refresh response may omit refresh_token when it isn't rotated; keep the old one. + refresh = data.get("refresh_token") or refresh_fallback + expires_in = data.get("expires_in") + if not isinstance(access, str) or not access: + raise CodexAuthError("bad_response", "token response missing access_token") + if not isinstance(refresh, str) or not refresh: + raise CodexAuthError("bad_response", "token response missing refresh_token") + account_id = _account_id_from_jwt(access) or _account_id_from_jwt( + data.get("id_token") if isinstance(data.get("id_token"), str) else "" + ) + if not account_id: + raise CodexAuthError("no_account_id", "could not read chatgpt_account_id from token") + ttl = expires_in if isinstance(expires_in, int | float) else 3600 + return { + "type": "oauth", + "provider": PROVIDER, + "access": access, + "refresh": refresh, + "account_id": account_id, + "expires_at": time.time() + ttl, + } + + +def exchange_code(code: str, verifier: str) -> dict[str, Any]: + data = _post_form( + { + "grant_type": "authorization_code", + "client_id": CLIENT_ID, + "code": code, + "code_verifier": verifier, + "redirect_uri": REDIRECT_URI, + } + ) + return _record_from_token_response(data) + + +def refresh_tokens(refresh_token: str) -> dict[str, Any]: + data = _post_form( + { + "grant_type": "refresh_token", + "client_id": CLIENT_ID, + "refresh_token": refresh_token, + } + ) + return _record_from_token_response(data, refresh_fallback=refresh_token) + + +def _account_id_from_jwt(token: str | None) -> str | None: + """Read the account id claim without verifying the JWT (the server enforces + authenticity on use); it feeds the ``chatgpt-account-id`` header.""" + if not token or token.count(".") != 2: + return None + payload_b64 = token.split(".")[1] + padding = "=" * (-len(payload_b64) % 4) + try: + payload = json.loads(base64.urlsafe_b64decode(payload_b64 + padding)) + except (ValueError, json.JSONDecodeError): + return None + if not isinstance(payload, dict): + return None + auth = payload.get(_ACCOUNT_CLAIM) + if isinstance(auth, dict): + account_id = auth.get("chatgpt_account_id") + if isinstance(account_id, str) and account_id: + return account_id + organizations = payload.get("organizations") + if isinstance(organizations, list) and organizations and isinstance(organizations[0], dict): + org_id = organizations[0].get("id") + if isinstance(org_id, str) and org_id: + return org_id + return None + + +def _near_expiry(record: dict[str, Any]) -> bool: + expires_at = record.get("expires_at") + if not isinstance(expires_at, int | float): + return True + return expires_at - _EXPIRY_SKEW_S <= time.time() + + +def get_valid_token() -> tuple[str, str]: + """Return ``(access_token, account_id)``, refreshing under the cross-process + guard if near expiry.""" + record = read_record() + if record is None: + raise CodexAuthError("not_authenticated", "not signed in; run: strix auth login") + if not _near_expiry(record): + return record["access"], record["account_id"] + with _refresh_guard(): + record = read_record() + if record is None: + raise CodexAuthError("not_authenticated", "not signed in; run: strix auth login") + if not _near_expiry(record): + return record["access"], record["account_id"] + try: + refreshed = refresh_tokens(record["refresh"]) + except CodexAuthError: + # A peer process may have already spent this single-use refresh token. + latest = read_record() + if latest and latest["refresh"] != record["refresh"] and not _near_expiry(latest): + return latest["access"], latest["account_id"] + raise + save_record(refreshed) + return refreshed["access"], refreshed["account_id"] + + +def build_openai_client() -> AsyncOpenAI: + """An ``AsyncOpenAI`` for the ChatGPT backend. A per-request hook re-stamps a + fresh bearer token so long scans survive token expiry.""" + import asyncio + + import httpx + from openai import AsyncOpenAI + + get_valid_token() # fail fast at configure time if the sign-in is dead + + async def _auth_hook(request: httpx.Request) -> None: + access, account_id = await asyncio.to_thread(get_valid_token) + request.headers["Authorization"] = f"Bearer {access}" + request.headers["chatgpt-account-id"] = account_id + + http_client = httpx.AsyncClient( + timeout=httpx.Timeout(600.0, connect=30.0), + event_hooks={"request": [_auth_hook]}, + ) + return AsyncOpenAI( + api_key="strix-codex-oauth", # placeholder; the hook overwrites Authorization + base_url=CODEX_BASE_URL, + http_client=http_client, + default_headers={ + "OpenAI-Beta": "responses=experimental", + "originator": ORIGINATOR, + }, + ) + + +_subscription_client: AsyncOpenAI | None = None + + +def get_subscription_client() -> AsyncOpenAI: + global _subscription_client # noqa: PLW0603 + if _subscription_client is None: + _subscription_client = build_openai_client() + return _subscription_client + + +SUBSCRIPTION_PREFIX = "chatgpt/" + + +def subscription_model(model_name: str | None) -> str | None: + """The model slug behind a ``chatgpt/`` STRIX_LLM, or None.""" + name = (model_name or "").strip() + if not name.lower().startswith(SUBSCRIPTION_PREFIX): + return None + return name[len(SUBSCRIPTION_PREFIX) :] or None + + +def auth_mode(model_name: str | None) -> str: + return "subscription" if subscription_model(model_name) else "api_key" diff --git a/strix/config/models.py b/strix/config/models.py index 0ce107f5..38234d97 100644 --- a/strix/config/models.py +++ b/strix/config/models.py @@ -2,23 +2,38 @@ from __future__ import annotations +import contextlib +import inspect import os -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Any -from agents import set_default_openai_api, set_default_openai_key, set_tracing_disabled +from agents import ( + set_default_openai_api, + set_default_openai_key, + set_tracing_disabled, +) +from agents.model_settings import ModelSettings from agents.models.multi_provider import MultiProvider +from agents.models.openai_responses import OpenAIResponsesModel from agents.retry import ( ModelRetryBackoffSettings, ModelRetrySettings, RetryPolicyContext, retry_policies, ) +from openai.types.shared import Reasoning + +from strix.config import codex +from strix.config.loader import load_settings if TYPE_CHECKING: - from agents.models.interface import ModelProvider + from collections.abc import AsyncIterator - from strix.config.settings import Settings + from agents.models.interface import Model, ModelProvider + from openai import AsyncOpenAI + + from strix.config.settings import ReasoningEffort, Settings def request_timeout_extra_args(timeout_s: float | None) -> dict[str, float] | None: @@ -33,9 +48,93 @@ def _retry_statusless_provider_errors(context: RetryPolicyContext) -> bool: normalized = context.normalized if normalized.is_abort: return False + if codex.is_content_guardrail_error(context.error): + return False return normalized.status_code is None +class _CodexResponsesModel(OpenAIResponsesModel): + """Responses model for the ChatGPT subscription backend (always streamed, stateless).""" + + def __init__( + self, + model: str, + openai_client: AsyncOpenAI, + *, + reasoning_effort: ReasoningEffort | None = None, + ) -> None: + super().__init__(model, openai_client) + self._reasoning_effort = reasoning_effort + + def _codex_settings(self, model_settings: ModelSettings) -> ModelSettings: + overrides = ModelSettings(store=False, response_include=["reasoning.encrypted_content"]) + effort = self._reasoning_effort + if effort and effort != "none": + # Clamp to efforts the backend accepts. + if effort == "minimal": + effort = "low" + elif effort == "xhigh": + effort = "high" + overrides = overrides.resolve(ModelSettings(reasoning=Reasoning(effort=effort))) + return model_settings.resolve(overrides) + + async def _fetch_response(self, *args: Any, stream: bool = False, **kwargs: Any) -> Any: + if len(args) >= 3: # model_settings is positional arg 2 + args = (*args[:2], self._codex_settings(args[2]), *args[3:]) + try: + events = await super()._fetch_response(*args, stream=True, **kwargs) # type: ignore[call-overload] + except Exception as exc: + guardrail = self._as_guardrail(exc) + if guardrail is not None: + raise guardrail from exc + raise + guarded = self._guarded(events) + if stream: + return guarded + final_response = None + async for event in guarded: + if getattr(event, "type", None) == "response.completed": + final_response = event.response + if final_response is None: + msg = "ChatGPT backend stream ended without a completed response" + raise RuntimeError(msg) + return final_response + + def _as_guardrail(self, exc: BaseException) -> codex.CodexContentGuardrailError | None: + if isinstance(exc, codex.CodexContentGuardrailError): + return exc + if codex.is_content_guardrail_error(exc): + return codex.CodexContentGuardrailError(self.model, exc) + return None + + async def _guarded(self, events: Any) -> AsyncIterator[Any]: + """Convert mid-stream guardrail rejections and close the stream on exit.""" + try: + async for event in events: + yield event + except Exception as exc: + guardrail = self._as_guardrail(exc) + if guardrail is not None: + raise guardrail from exc + raise + finally: + await self._aclose(events) + + @staticmethod + async def _aclose(events: Any) -> None: + aclose = getattr(events, "aclose", None) + if callable(aclose): + with contextlib.suppress(Exception): + await aclose() + return + close = getattr(events, "close", None) + if callable(close): + with contextlib.suppress(Exception): + result = close() + if inspect.isawaitable(result): + await result + + class StrixProvider(MultiProvider): """Route any non-OpenAI prefix through LiteLLM with the prefix preserved, so users type ``deepseek/deepseek-chat`` rather than @@ -59,6 +158,16 @@ class StrixProvider(MultiProvider): return self._get_fallback_provider("litellm"), f"ollama_chat/{stripped_model_name}" return self._get_fallback_provider("litellm"), original_model_name + def get_model(self, model_name: str | None) -> Model: + slug = codex.subscription_model(model_name) + if slug: + return _CodexResponsesModel( + slug, + codex.get_subscription_client(), + reasoning_effort=load_settings().llm.reasoning_effort, + ) + return super().get_model(model_name) + DEFAULT_MODEL_RETRY = ModelRetrySettings( max_retries=5, @@ -77,39 +186,42 @@ DEFAULT_MODEL_RETRY = ModelRetrySettings( ) RECOMMENDED_MODEL_NAMES = ( - "openai/gpt-5.6", "openai/gpt-5.6-sol", "openai/gpt-5.6-terra", - "openai/gpt-5.5", + "openai/gpt-5.6-luna", + "openai/gpt-5.6", "openai/gpt-5.5-pro", + "openai/gpt-5.5", "openai/gpt-5.4", "openai/gpt-5.3-codex", "anthropic/claude-fable-5", + "anthropic/claude-opus-5", "anthropic/claude-opus-4-8", - "anthropic/claude-opus-4-7", "anthropic/claude-sonnet-5", "anthropic/claude-sonnet-4-6", "vertex_ai/gemini-3.1-pro-preview", "gemini/gemini-3.1-pro-preview", + "gemini/gemini-3.6-flash", "deepseek/deepseek-v4-pro", "deepseek/deepseek-v4-flash", + "dashscope/qwen3.8-max", "dashscope/qwen3.7-max-2026-06-08", + "moonshot/kimi-k3", "moonshot/kimi-k2.7-code", - "moonshot/kimi-k2.6", ) _RECOMMENDED_MODEL_NAME_SET = frozenset(name.lower() for name in RECOMMENDED_MODEL_NAMES) FRONTIER_MODEL_FAMILIES = ( - (("azure", "azure_ai", "bedrock_mantle", "openai"), ("gpt-5",)), + (("azure", "azure_ai", "bedrock_mantle", "chatgpt", "openai"), ("gpt-5",)), ( ("anthropic", "azure_ai", "bedrock", "claude", "databricks", "snowflake", "vertex_ai"), - ("claude-fable-5", "claude-opus-4", "claude-sonnet-5", "claude-sonnet-4"), + ("claude-fable-5", "claude-opus-5", "claude-opus-4", "claude-sonnet-5", "claude-sonnet-4"), ), (("google", "gemini", "vertex_ai"), ("gemini-3",)), (("deepseek",), ("deepseek-v4", "deepseek-r1", "deepseek-reasoner")), - (("alibaba", "dashscope", "qwen"), ("qwen3.7", "qwen3.5", "qwen3-max")), - (("moonshot", "moonshotai", "kimi"), ("kimi-k2.7", "kimi-k2.6", "kimi-k2.5")), + (("alibaba", "dashscope", "qwen"), ("qwen3.8", "qwen3.7", "qwen3-max")), + (("moonshot", "moonshotai", "kimi"), ("kimi-k3", "kimi-k2.7", "kimi-k2.6")), ) @@ -117,6 +229,8 @@ def configure_sdk_model_defaults(settings: Settings) -> None: """Apply Strix config to SDK-native defaults.""" llm = settings.llm set_tracing_disabled(True) + if codex.subscription_model(llm.model): + return _configure_litellm_compatibility() _configure_openrouter_attribution(llm.model) if llm.api_key: @@ -211,6 +325,8 @@ def _configure_litellm_default(name: str, value: str) -> None: def uses_chat_completions_tool_schema(model_name: str, settings: Settings) -> bool: """Return whether the resolved SDK route can only receive JSON function tools.""" + if codex.subscription_model(model_name): + return False model = model_name.strip().lower() if "/" in model and not model.startswith("openai/"): return True diff --git a/strix/core/agents.py b/strix/core/agents.py index 5cb48d2f..c08b24d6 100644 --- a/strix/core/agents.py +++ b/strix/core/agents.py @@ -41,6 +41,7 @@ class AgentCoordinator: self.names: dict[str, str] = {} self.metadata: dict[str, dict[str, Any]] = {} self.pending_counts: dict[str, int] = {} + self.errors: dict[str, str] = {} self.runtimes: dict[str, AgentRuntime] = {} self._lock = asyncio.Lock() self._snapshot_path: Path | None = None @@ -107,16 +108,23 @@ class AgentCoordinator: async with self._lock: if agent_id in self.statuses: self.statuses[agent_id] = "running" + self.errors.pop(agent_id, None) await self._maybe_snapshot() async def park_waiting(self, agent_id: str) -> None: await self.set_status(agent_id, "waiting") - async def set_status(self, agent_id: str, status: Status | str) -> None: + async def set_status( + self, agent_id: str, status: Status | str, *, error: str | None = None + ) -> None: async with self._lock: if agent_id not in self.statuses: return self.statuses[agent_id] = status # type: ignore[assignment] + if error is not None: + self.errors[agent_id] = error + elif status == "running": + self.errors.pop(agent_id, None) runtime = self.runtimes.setdefault(agent_id, AgentRuntime()) runtime.wake.set() logger.info("agent.status %s=%s", agent_id, status) @@ -246,9 +254,14 @@ class AgentCoordinator: async def graph_snapshot( self, - ) -> tuple[dict[str, str | None], dict[str, Status], dict[str, str]]: + ) -> tuple[dict[str, str | None], dict[str, Status], dict[str, str], dict[str, str]]: async with self._lock: - return dict(self.parent_of), dict(self.statuses), dict(self.names) + return ( + dict(self.parent_of), + dict(self.statuses), + dict(self.names), + dict(self.errors), + ) def _message_to_session_item(self, message: dict[str, Any]) -> TResponseInputItem: sender = str(message.get("from", "unknown")) @@ -286,6 +299,7 @@ class AgentCoordinator: "names": dict(self.names), "metadata": {aid: dict(md) for aid, md in self.metadata.items()}, "pending_counts": dict(self.pending_counts), + "errors": dict(self.errors), } async def restore(self, snap: dict[str, Any]) -> None: @@ -295,6 +309,7 @@ class AgentCoordinator: self.names = dict(snap.get("names", {})) self.metadata = {aid: dict(md) for aid, md in snap.get("metadata", {}).items()} self.pending_counts = dict(snap.get("pending_counts", {})) + self.errors = dict(snap.get("errors", {})) for aid in self.statuses: self.runtimes.setdefault(aid, AgentRuntime()) diff --git a/strix/core/execution.py b/strix/core/execution.py index d26486de..f7cf3759 100644 --- a/strix/core/execution.py +++ b/strix/core/execution.py @@ -437,10 +437,8 @@ async def _run_cycle( # noqa: PLR0912, PLR0915 else: status = "crashed" logger.exception("agent run failed for %s; parking as %s", agent_id, status) - await coordinator.set_status(agent_id, status) + await coordinator.set_status(agent_id, status, error=str(exc) or type(exc).__name__) await _notify_parent_on_crash(coordinator, agent_id, status) - if context.get("parent_id") is None and status in {"failed", "crashed"}: - raise return None else: await _settle_run_result(coordinator, agent_id, interactive) diff --git a/strix/interface/auth_cli.py b/strix/interface/auth_cli.py new file mode 100644 index 00000000..51e6b9fe --- /dev/null +++ b/strix/interface/auth_cli.py @@ -0,0 +1,419 @@ +"""`strix auth` — ChatGPT subscription sign-in (login / status / logout). + +Signing in only stores OAuth tokens (``~/.strix/subscription-auth.json``); model +selection stays with ``STRIX_LLM``. A ``chatgpt/`` STRIX_LLM runs on the +subscription. +""" + +from __future__ import annotations + +import argparse +import base64 +import logging +import threading +import webbrowser +from http.server import BaseHTTPRequestHandler, HTTPServer +from pathlib import Path +from typing import TYPE_CHECKING, Any +from urllib.parse import parse_qs, urlparse + +from rich.console import Console +from rich.panel import Panel +from rich.text import Text + +from strix.config import codex, load_settings + + +if TYPE_CHECKING: + from collections.abc import Callable + + +logger = logging.getLogger(__name__) + +_CALLBACK_TIMEOUT_S = 300 + +# CLI-facing name for the login provider. Internally this is the Codex OAuth +# flow (``codex.PROVIDER``), but users know it as ChatGPT, so that's what the +# command and messaging say. ``codex`` is accepted as an alias. +LOGIN_PROVIDER = "chatgpt" +_ACCEPTED_PROVIDERS = frozenset({LOGIN_PROVIDER, codex.PROVIDER}) + +_USAGE = "Usage:\n strix auth login chatgpt [--manual]\n strix auth status\n strix auth logout" + + +def run_auth(argv: list[str]) -> int: + """Entry point for ``strix auth …``. Returns a process exit code.""" + console = Console() + # Bare `strix auth` (no subcommand) defaults to login. + subcommand = argv[0] if argv else "login" + rest = argv[1:] + + if subcommand in ("-h", "--help", "help"): + console.print(_USAGE) + return 0 + + handlers: dict[str, Callable[[], int]] = { + "login": lambda: _login(console, rest), + "status": lambda: _status(console), + "logout": lambda: _logout(console), + } + handler = handlers.get(subcommand) + if handler is not None: + return handler() + + console.print(f"[red]Unknown auth command:[/] {subcommand}\n") + console.print(_USAGE) + return 2 + + +def _login(console: Console, argv: list[str]) -> int: + parser = argparse.ArgumentParser(prog="strix auth login", add_help=True) + parser.add_argument( + "provider", + nargs="?", + default=LOGIN_PROVIDER, + help="Model provider to sign in with (default: chatgpt).", + ) + parser.add_argument( + "--manual", + action="store_true", + help="Skip the local callback server and paste the redirect URL by hand.", + ) + try: + args = parser.parse_args(argv) + except SystemExit as exc: # argparse already printed the message + return int(exc.code or 2) + + if args.provider.lower() not in _ACCEPTED_PROVIDERS: + console.print( + f"[red]Unsupported provider:[/] {args.provider}. " + f"Only '{LOGIN_PROVIDER}' (ChatGPT subscription) is supported." + ) + return 2 + + verifier, challenge = codex.generate_pkce() + state = codex.create_state() + authorize_url = codex.build_authorize_url(challenge, state) + + console.print() + console.print("[bold]Signing in with ChatGPT[/] [dim](provider: chatgpt)[/]") + console.print( + "[dim]This uses your ChatGPT Plus/Pro plan for inference instead of a metered API key.[/]" + ) + console.print() + + try: + record = _run_oauth_flow(console, authorize_url, verifier, state, manual=args.manual) + except codex.CodexAuthError as exc: + return _fail(console, exc) + except KeyboardInterrupt: + console.print("\n[yellow]Sign-in cancelled.[/]") + return 130 + + codex.save_record(record) + _print_success(console) + return 0 + + +def _run_oauth_flow( + console: Console, + authorize_url: str, + verifier: str, + state: str, + *, + manual: bool, +) -> dict[str, Any]: + """Drive the browser (or manual) OAuth flow and return a token record.""" + server = None if manual else _try_start_callback_server() + + console.print("Open this URL in your browser to authorize:") + console.print(f"[cyan]{authorize_url}[/]") + console.print() + if not manual: + try: + webbrowser.open(authorize_url) + except Exception: # noqa: BLE001 - opening a browser is best-effort + logger.debug("could not open browser", exc_info=True) + + if server is not None: + console.print("[dim]Waiting for you to finish signing in…[/]") + result = server.wait(_CALLBACK_TIMEOUT_S) + server.shutdown() + if result is not None: + code, returned_state, error = result + if error: + raise codex.CodexAuthError("oauth_error", error) + return _finish(code, returned_state, verifier, state, require_state=True) + console.print("[yellow]Timed out waiting for the browser. Falling back to manual paste.[/]") + + # Manual fallback: the user completes sign-in and pastes the redirect URL + # (the browser lands on a localhost page that won't load if no server is up; + # the address bar still holds the code+state). + console.print() + try: + pasted = console.input("Paste the full redirect URL (or code#state): ").strip() + except EOFError as exc: + raise codex.CodexAuthError("no_input", "no redirect URL provided") from exc + code, returned_state = codex.parse_redirect_input(pasted) + return _finish(code, returned_state, verifier, state, require_state=False) + + +def _finish( + code: str | None, + returned_state: str | None, + verifier: str, + expected_state: str, + *, + require_state: bool, +) -> dict[str, Any]: + if not code: + raise codex.CodexAuthError("no_code", "no authorization code found in the redirect") + # The loopback callback from OpenAI always carries state, so a missing or + # mismatched value there is forged (CSRF) and must be rejected. Manual paste + # is user-initiated (the user copies their own redirect), so state is only + # validated when the pasted value includes it. + if require_state and returned_state is None: + raise codex.CodexAuthError("state_mismatch", "missing state in callback; possible CSRF") + if returned_state is not None and returned_state != expected_state: + raise codex.CodexAuthError("state_mismatch", "state did not match; possible CSRF") + return codex.exchange_code(code, verifier) + + +class _CallbackServer: + """A one-shot local HTTP server that catches the OAuth redirect.""" + + def __init__(self, httpd: HTTPServer, event: threading.Event, holder: dict[str, Any]) -> None: + self._httpd = httpd + self._event = event + self._holder = holder + self._thread = threading.Thread(target=httpd.serve_forever, daemon=True) + self._thread.start() + + def wait(self, timeout: float) -> tuple[str | None, str | None, str | None] | None: + if not self._event.wait(timeout): + return None + return ( + self._holder.get("code"), + self._holder.get("state"), + self._holder.get("error"), + ) + + def shutdown(self) -> None: + self._httpd.shutdown() + self._httpd.server_close() + + +def _try_start_callback_server() -> _CallbackServer | None: + event = threading.Event() + holder: dict[str, Any] = {} + + class Handler(BaseHTTPRequestHandler): + def log_message(self, *args: Any) -> None: # silence default stderr logging + pass + + def do_GET(self) -> None: + parsed = urlparse(self.path) + if parsed.path != codex.CALLBACK_PATH: + self.send_response(404) + self.end_headers() + return + query = parse_qs(parsed.query) + holder["code"] = _first(query, "code") + holder["state"] = _first(query, "state") + holder["error"] = _first(query, "error_description") or _first(query, "error") + body = _render_callback_html().encode("utf-8") + self.send_response(200) + self.send_header("Content-Type", "text/html; charset=utf-8") + self.send_header("Content-Length", str(len(body))) + self.end_headers() + self.wfile.write(body) + event.set() + + try: + httpd = HTTPServer(("127.0.0.1", codex.CALLBACK_PORT), Handler) + except OSError: + logger.debug("could not bind callback port %d", codex.CALLBACK_PORT, exc_info=True) + return None + return _CallbackServer(httpd, event, holder) + + +def _first(query: dict[str, list[str]], key: str) -> str | None: + values = query.get(key) + return values[0] if values else None + + +def _status(console: Console) -> int: + record = codex.read_record() + if record is None: + console.print("[yellow]Not signed in.[/] Run [cyan]strix auth login chatgpt[/] to sign in.") + return 1 + settings = load_settings() + console.print("[green]Signed in[/] with a ChatGPT subscription.") + console.print(f" Account: [bold]{record.get('account_id')}[/]") + if codex.subscription_model(settings.llm.model): + console.print(f" Runs use the subscription (STRIX_LLM=[bold]{settings.llm.model}[/]).") + else: + console.print( + " [yellow]Note:[/] set [cyan]STRIX_LLM[/] to e.g. [cyan]chatgpt/gpt-5.4[/] " + "to run on the subscription." + ) + return 0 + + +def _logout(console: Console) -> int: + codex.logout() + console.print("[green]Signed out.[/] Stored subscription credentials removed.") + return 0 + + +def _fail(console: Console, exc: codex.CodexAuthError) -> int: + error_text = Text() + error_text.append("SIGN-IN FAILED", style="bold red") + error_text.append("\n\n", style="white") + error_text.append(f"{exc}", style="white") + console.print() + console.print( + Panel( + error_text, + title="[bold white]STRIX", + title_align="left", + border_style="red", + padding=(1, 2), + ) + ) + return 1 + + +def _print_success(console: Console) -> None: + text = Text() + text.append("Signed in with your ChatGPT subscription", style="bold #22c55e") + text.append("\n\n", style="white") + text.append("Set ", style="white") + text.append("STRIX_LLM", style="bold white") + text.append(" to a ", style="white") + text.append("chatgpt/", style="bold cyan") + text.append(" model (e.g. ", style="white") + text.append("chatgpt/gpt-5.4", style="bold cyan") + text.append(") — runs are billed to your ChatGPT plan.", style="white") + text.append("\n\n", style="white") + text.append("Run a scan as usual, e.g. ", style="white") + text.append("strix --target https://example.com", style="bold cyan") + console.print() + console.print( + Panel( + text, + title="[bold white]STRIX", + title_align="left", + border_style="#22c55e", + padding=(1, 2), + ) + ) + console.print() + + +_LOGO_PATH = Path(__file__).resolve().parent.parent / "viewer" / "static" / "logo.png" + + +def _logo_img_tag() -> str: + """Return an ```` for the Strix logo as an inline data URI, or "". + + The callback page is served offline by the local OAuth server, so the logo + is embedded rather than linked. Missing/unreadable file degrades to just the + "Strix" wordmark. + """ + try: + data = _LOGO_PATH.read_bytes() + except OSError: + return "" + encoded = base64.b64encode(data).decode("ascii") + return f'' + + +def _render_callback_html() -> str: + return _CALLBACK_HTML.replace("", _logo_img_tag()) + + +_CALLBACK_HTML = """ + + +Strix — signed in + + + + + Strix + +
Strix
+

You're signed in

+
+
+

Strix is connected to your ChatGPT subscription. Head back to your + terminal — your security test runs there.

+
+

Autonomous AI hackers that find and fix your app's + vulnerabilities.

+ +
+

You can close this tab.

+""" + + +__all__ = ["run_auth"] diff --git a/strix/interface/main.py b/strix/interface/main.py index b52be0fc..39b48041 100644 --- a/strix/interface/main.py +++ b/strix/interface/main.py @@ -20,6 +20,7 @@ from rich.text import Text from strix.config import ( apply_config_override, + codex, load_settings, persist_current, ) @@ -92,6 +93,16 @@ def validate_environment() -> None: settings = load_settings() + if codex.subscription_model(settings.llm.model): + if not codex.is_authenticated(): + console.print( + f"[red]STRIX_LLM={settings.llm.model} uses your ChatGPT subscription, " + "but you're not signed in.[/] Run [cyan]strix auth login chatgpt[/] first." + ) + sys.exit(1) + logger.info("Environment OK (ChatGPT subscription)") + return + if not settings.llm.model: missing_required_vars.append("STRIX_LLM") @@ -274,6 +285,29 @@ def _provider_import_hint(exc: BaseException, model: str) -> str | None: return None +def _subscription_error_hint(exc: BaseException) -> str | None: + """Return an actionable hint for a known ChatGPT-subscription error, or None.""" + if not codex.subscription_model(load_settings().llm.model): + return None + joined = " ".join(_exception_messages(exc)).lower() + if "not supported when using codex with a chatgpt account" in joined: + return ( + "This model isn't available on your ChatGPT subscription. " + "Set STRIX_LLM to a model your plan includes (e.g. chatgpt/gpt-5.4)." + ) + if ( + "error code: 401" in joined + or "http 401" in joined + or "unauthorized" in joined + or "invalid_grant" in joined + ): + return ( + "Your ChatGPT sign-in has expired or was revoked. Sign in again:\n" + " strix auth login chatgpt" + ) + return None + + async def warm_up_llm(show_model_warning: bool = True) -> None: console = Console() logger.info("Warming up LLM connection") @@ -283,8 +317,8 @@ async def warm_up_llm(show_model_warning: bool = True) -> None: settings = load_settings() configure_sdk_model_defaults(settings) llm = settings.llm - raw_model = (llm.model or "").strip() + if ( raw_model and "/" not in raw_model @@ -363,20 +397,33 @@ async def warm_up_llm(show_model_warning: bool = True) -> None: except Exception as e: logger.exception("LLM warm-up failed") error_text = Text() - error_text.append("LLM CONNECTION FAILED", style="bold red") - error_text.append("\n\n", style="white") - error_text.append("Could not establish connection to the language model.\n", style="white") - error_text.append("Please check your configuration and try again.\n", style="white") - hint = _provider_import_hint(e, raw_model) - if hint is not None: - error_text.append(f"\n{hint}\n", style="bold yellow") - error_text.append(f"\nError: {e}", style="dim white") + sub_hint = _subscription_error_hint(e) + if sub_hint is not None: + # The model/backend answered with a clear, actionable rejection — + # show that instead of a generic "connection failed". + border_style = "yellow" + error_text.append("MODEL NOT AVAILABLE ON SUBSCRIPTION", style="bold yellow") + error_text.append("\n\n", style="white") + error_text.append(f"{sub_hint}\n", style="white") + error_text.append(f"\nDetails: {e}", style="dim white") + else: + border_style = "red" + error_text.append("LLM CONNECTION FAILED", style="bold red") + error_text.append("\n\n", style="white") + error_text.append( + "Could not establish connection to the language model.\n", style="white" + ) + error_text.append("Please check your configuration and try again.\n", style="white") + hint = _provider_import_hint(e, raw_model) + if hint is not None: + error_text.append(f"\n{hint}\n", style="bold yellow") + error_text.append(f"\nError: {e}", style="dim white") panel = Panel( error_text, title="[bold white]STRIX", title_align="left", - border_style="red", + border_style=border_style, padding=(1, 2), ) @@ -682,6 +729,7 @@ def _persist_run_record(args: argparse.Namespace) -> None: "status": "running", "start_time": datetime.now(UTC).isoformat(), "end_time": None, + "auth_mode": codex.auth_mode(load_settings().llm.model), "targets_info": args.targets_info, "scan_mode": args.scan_mode, "instruction": args.instruction, @@ -882,6 +930,13 @@ def main() -> None: run_view(sys.argv[2:]) return + # `strix auth …` manages model-subscription sign-in and exits; it needs no + # target, Docker, or scan setup. + if len(sys.argv) > 1 and sys.argv[1] == "auth": + from strix.interface.auth_cli import run_auth + + sys.exit(run_auth(sys.argv[2:])) + args = parse_arguments() if args.config: @@ -949,6 +1004,7 @@ def main() -> None: _telemetry_start_kwargs = { "model": load_settings().llm.model, + "auth_mode": codex.auth_mode(load_settings().llm.model), "scan_mode": args.scan_mode, "is_whitebox": is_whitebox_scan(args.targets_info), "interactive": not args.non_interactive, diff --git a/strix/interface/tui/app.py b/strix/interface/tui/app.py index 5f350898..e3344a65 100644 --- a/strix/interface/tui/app.py +++ b/strix/interface/tui/app.py @@ -802,6 +802,7 @@ class StrixTUIApp(App): # type: ignore[misc] self._scan_stop_event = threading.Event() self._scan_completed = threading.Event() self._scan_error: BaseException | None = None + self._error_noted_agents: set[str] = set() self._spinner_frame_index: int = 0 self._sweep_num_squares: int = 6 @@ -1015,22 +1016,32 @@ class StrixTUIApp(App): # type: ignore[misc] else: self._agent_graph_sync_future = None try: - parent_of, statuses, names = future.result() + parent_of, statuses, names, errors = future.result() except Exception: logger.exception("TUI agent graph sync failed") else: for agent_id, status in statuses.items(): + error = errors.get(agent_id) self.live_view.upsert_agent( agent_id, name=names.get(agent_id, agent_id), parent_id=parent_of.get(agent_id), status=status, + error_message=error, ) + if status in {"failed", "crashed"} and error: + if agent_id not in self._error_noted_agents: + self._error_noted_agents.add(agent_id) + self.live_view.record_agent_error(agent_id, error) + else: + self._error_noted_agents.discard(agent_id) if self._scan_loop is None or self._scan_loop.is_closed(): return - async def collect() -> tuple[dict[str, str | None], dict[str, Any], dict[str, str]]: + async def collect() -> tuple[ + dict[str, str | None], dict[str, Any], dict[str, str], dict[str, str] + ]: return await self.coordinator.graph_snapshot() self._agent_graph_sync_future = asyncio.run_coroutine_threadsafe(collect(), self._scan_loop) @@ -1049,6 +1060,7 @@ class StrixTUIApp(App): # type: ignore[misc] "waiting": "⏸", "completed": "🟢", "failed": "🔴", + "crashed": "🔴", "stopped": "■", } @@ -1234,13 +1246,12 @@ class StrixTUIApp(App): # type: ignore[misc] text.append(msg) return (text, Text(), False) - if status == "failed": + if status in {"failed", "crashed"}: error_msg = agent_data.get("error_message", "") text = Text() - if error_msg: - text.append(error_msg, style="red") - else: - text.append("Scan failed", style="red") + text.append(error_msg or "Agent failed", style="red") + text.append(" · ", style="dim") + text.append("Send message to resume", style="dim") self._stop_dot_animation() return (text, Text(), False) @@ -1539,6 +1550,7 @@ class StrixTUIApp(App): # type: ignore[misc] "waiting": "⏸", "completed": "🟢", "failed": "🔴", + "crashed": "🔴", "stopped": "■", } @@ -1584,6 +1596,7 @@ class StrixTUIApp(App): # type: ignore[misc] "waiting": "⏸", "completed": "🟢", "failed": "🔴", + "crashed": "🔴", "stopped": "■", } diff --git a/strix/interface/tui/live_view.py b/strix/interface/tui/live_view.py index 993074d6..ec4847dc 100644 --- a/strix/interface/tui/live_view.py +++ b/strix/interface/tui/live_view.py @@ -86,6 +86,17 @@ class TuiLiveView: current["error_message"] = error_message current["updated_at"] = now + def record_agent_error(self, agent_id: str, error: str) -> None: + self._append_event( + agent_id, + "chat", + { + "role": "assistant", + "content": (f"An error occurred: {error}\nI'm now waiting for new instructions."), + "metadata": {"source": "agent_error"}, + }, + ) + def record_user_message(self, agent_id: str, content: str) -> None: self._append_event( agent_id, diff --git a/strix/interface/utils.py b/strix/interface/utils.py index 27c10a46..44a570d1 100644 --- a/strix/interface/utils.py +++ b/strix/interface/utils.py @@ -253,6 +253,20 @@ def _llm_usage(report_state: Any) -> dict[str, Any]: return usage if isinstance(usage, dict) else {} +def _is_subscription(report_state: Any) -> bool: + """Whether this run uses a model subscription (no metered cost). + + Prefers the run record so it's correct for hydrated/resumed runs; falls back + to current settings. + """ + record = getattr(report_state, "run_record", None) + if isinstance(record, dict) and record.get("auth_mode"): + return record.get("auth_mode") == "subscription" + from strix.config import codex + + return codex.auth_mode(load_settings().llm.model) == "subscription" + + def _int_stat(usage: dict[str, Any], key: str) -> int: try: return max(0, int(usage.get(key) or 0)) @@ -283,11 +297,16 @@ def _build_llm_usage_stats( *, live: bool = False, ) -> None: + subscription = _is_subscription(report_state) usage = _llm_usage(report_state) if not usage or _int_stat(usage, "requests") <= 0: stats_text.append("\n") stats_text.append("Cost ", style="dim") - stats_text.append("$0.0000 ", style="#fbbf24") + if subscription: + stats_text.append("$0.00 ", style="#22c55e") + stats_text.append("(subscription) ", style="dim") + else: + stats_text.append("$0.0000 ", style="#fbbf24") stats_text.append("· ", style="dim white") stats_text.append("Tokens ", style="dim") stats_text.append("0", style="white") @@ -312,7 +331,12 @@ def _build_llm_usage_stats( stats_text.append("Output Tokens ", style="dim") stats_text.append(format_token_count(output_tokens), style="white") - if live or cost > 0: + if subscription: + stats_text.append(" · ", style="dim white") + stats_text.append("Cost ", style="dim") + stats_text.append("$0.00", style="#22c55e") + stats_text.append(" (subscription)", style="dim") + elif live or cost > 0: stats_text.append(" · ", style="dim white") stats_text.append("Cost ", style="dim") stats_text.append(f"${cost:.4f}", style="#fbbf24") @@ -337,6 +361,9 @@ def build_live_stats_text(report_state: Any) -> Text: model = load_settings().llm.model or "unknown" stats_text.append("Model ", style="dim") stats_text.append(str(model), style="white") + if _is_subscription(report_state): + stats_text.append(" · ", style="dim white") + stats_text.append("ChatGPT subscription", style="#22c55e") stats_text.append("\n") vuln_count = len(report_state.vulnerability_reports) @@ -379,6 +406,10 @@ def build_tui_stats_text(report_state: Any) -> Text: model = load_settings().llm.model or "unknown" stats_text.append(str(model), style="white") + subscription = _is_subscription(report_state) + if subscription: + stats_text.append("\n") + stats_text.append("ChatGPT subscription", style="#22c55e") usage = _llm_usage(report_state) if usage and _int_stat(usage, "total_tokens") > 0: @@ -388,7 +419,10 @@ def build_tui_stats_text(report_state: Any) -> Text: style="white", ) cost = _float_stat(usage, "cost") - if cost > 0: + if subscription: + stats_text.append(" · ", style="white") + stats_text.append("$0.00", style="white") + elif cost > 0: stats_text.append(" · ", style="white") stats_text.append(f"${cost:.2f}", style="white") @@ -1147,9 +1181,7 @@ def read_target_list_file(path_str: str) -> list[str]: if (target := line.strip()) and not target.startswith("#") ] except UnicodeDecodeError as e: - raise ValueError( - f"Target list file '{path_str}' must be valid UTF-8 text: {e!s}" - ) from e + raise ValueError(f"Target list file '{path_str}' must be valid UTF-8 text: {e!s}") from e except OSError as e: raise ValueError(f"Failed to read target list file '{path_str}': {e!s}") from e diff --git a/strix/report/state.py b/strix/report/state.py index 217b266d..1475ccf3 100644 --- a/strix/report/state.py +++ b/strix/report/state.py @@ -10,6 +10,8 @@ from uuid import uuid4 from agents.usage import Usage +from strix.config import codex +from strix.config.loader import load_settings from strix.core.paths import run_dir_for from strix.report.sarif import write_sarif from strix.report.usage import LLMUsageLedger @@ -117,12 +119,15 @@ class ReportState: self.scan_results: dict[str, Any] | None = None self.scan_config: dict[str, Any] | None = None self._llm_usage = LLMUsageLedger() + auth_mode = codex.auth_mode(load_settings().llm.model) + self._llm_usage.zero_cost = auth_mode == "subscription" self.run_record: dict[str, Any] = { "run_id": self.run_id, "run_name": self.run_name, "start_time": self.start_time, "end_time": None, "status": "running", + "auth_mode": auth_mode, "targets_info": [], "llm_usage": self._build_llm_usage_record(), } diff --git a/strix/report/usage.py b/strix/report/usage.py index b4f2b786..e3ddf494 100644 --- a/strix/report/usage.py +++ b/strix/report/usage.py @@ -19,6 +19,9 @@ class LLMUsageLedger: self._agent_usage: dict[str, Usage] = {} self._agent_metadata: dict[str, dict[str, str]] = {} self._total_cost = 0.0 + # When True, tokens are still tracked but cost stays $0 — the run is on a + # model subscription, so there is no metered per-token charge to report. + self.zero_cost = False def record( self, @@ -41,7 +44,7 @@ class LLMUsageLedger: if model: metadata["model"] = model - if not _is_litellm_routed(model): + if not self.zero_cost and not _is_litellm_routed(model): estimated = _estimate_litellm_cost(usage, model) if estimated: self._total_cost += estimated @@ -49,6 +52,8 @@ class LLMUsageLedger: return True def record_observed_cost(self, cost: float) -> None: + if self.zero_cost: + return if isinstance(cost, int | float) and cost > 0: self._total_cost += float(cost) diff --git a/strix/telemetry/README.md b/strix/telemetry/README.md index 3c594915..e774ab8f 100644 --- a/strix/telemetry/README.md +++ b/strix/telemetry/README.md @@ -15,7 +15,7 @@ We collect only very **basic** usage data including: **Session Errors:** Duration and error types (not messages or stack traces)\ **System Context:** OS type, architecture, Strix version\ **Scan Context:** Scan mode (quick/standard/deep), scan type (whitebox/blackbox)\ -**Model Usage:** Which LLM model is being used (not prompts or responses)\ +**Model Usage:** Which LLM model is being used and whether it runs via an API key or a model subscription (not prompts or responses)\ **Feature Usage:** Which built-in skills are loaded\ **Aggregate Metrics:** Vulnerability counts by severity and weakness category (CWE) diff --git a/strix/telemetry/posthog.py b/strix/telemetry/posthog.py index 43db11f2..79fb95d9 100644 --- a/strix/telemetry/posthog.py +++ b/strix/telemetry/posthog.py @@ -58,12 +58,14 @@ def start( is_whitebox: bool, interactive: bool, has_instructions: bool, + auth_mode: str | None = None, ) -> None: _send( "scan_started", { **base_props(), "model": model or "unknown", + "auth_mode": auth_mode or "api_key", "scan_mode": scan_mode or "unknown", "scan_type": "whitebox" if is_whitebox else "blackbox", "interactive": interactive, @@ -133,6 +135,7 @@ def end(report_state: "ReportState", exit_reason: str = "completed") -> None: "scan_ended", { **base_props(), + "auth_mode": report_state.run_record.get("auth_mode") or "api_key", "exit_reason": report_state.scan_ended_exit_reason, "duration_seconds": round(duration), "vulnerabilities_total": len(report_state.vulnerability_reports), diff --git a/strix/telemetry/scarf.py b/strix/telemetry/scarf.py index c0c62964..3fd9b1be 100644 --- a/strix/telemetry/scarf.py +++ b/strix/telemetry/scarf.py @@ -59,6 +59,7 @@ def start( is_whitebox: bool, interactive: bool, has_instructions: bool, + auth_mode: str | None = None, ) -> None: _send( "scan_started", @@ -66,6 +67,7 @@ def start( **base_props(), "session": SESSION_ID, "model": model or "unknown", + "auth_mode": auth_mode or "api_key", "scan_mode": scan_mode or "unknown", "scan_type": "whitebox" if is_whitebox else "blackbox", "interactive": interactive, @@ -140,6 +142,7 @@ def end(report_state: ReportState, exit_reason: str = "completed") -> None: { **base_props(), "session": SESSION_ID, + "auth_mode": report_state.run_record.get("auth_mode") or "api_key", "exit_reason": report_state.scan_ended_exit_reason, "duration_seconds": round(duration), "vulnerabilities_total": len(report_state.vulnerability_reports), diff --git a/strix/tools/agents_graph/tools.py b/strix/tools/agents_graph/tools.py index 478c1efb..7f937400 100644 --- a/strix/tools/agents_graph/tools.py +++ b/strix/tools/agents_graph/tools.py @@ -87,7 +87,7 @@ async def view_agent_graph(ctx: RunContextWrapper) -> str: default=str, ) - parent_of, statuses, names = await coordinator.graph_snapshot() + parent_of, statuses, names, _ = await coordinator.graph_snapshot() lines: list[str] = [] @@ -635,7 +635,7 @@ async def stop_agent( ensure_ascii=False, default=str, ) - _, statuses, _ = await coordinator.graph_snapshot() + _, statuses, _, _ = await coordinator.graph_snapshot() if target_agent_id not in statuses: return json.dumps( {"success": False, "error": f"Unknown agent_id: {target_agent_id}"}, diff --git a/strix/viewer/frontend/package-lock.json b/strix/viewer/frontend/package-lock.json index 9f86e348..09790806 100644 --- a/strix/viewer/frontend/package-lock.json +++ b/strix/viewer/frontend/package-lock.json @@ -63,7 +63,6 @@ "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", @@ -1605,7 +1604,6 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz", "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==", "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -1616,7 +1614,6 @@ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "devOptional": true, "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -1739,7 +1736,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.10.42", "caniuse-lite": "^1.0.30001803", @@ -1920,7 +1916,6 @@ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "license": "ISC", - "peer": true, "engines": { "node": ">=12" } @@ -3571,7 +3566,6 @@ "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -3623,7 +3617,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz", "integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -3633,7 +3626,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.7.tgz", "integrity": "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -4109,7 +4101,6 @@ "integrity": "sha512-NTKlcQjlAK7MlQoyb6LgaqHc8sso/pVyUJYWMws3jg21uTJw/LddqIFPcPqP6PzpgbIcZyKI85sFE4HBrQDA8A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", diff --git a/strix/viewer/frontend/src/components/RunDetails.tsx b/strix/viewer/frontend/src/components/RunDetails.tsx index e7059eba..53b66eca 100644 --- a/strix/viewer/frontend/src/components/RunDetails.tsx +++ b/strix/viewer/frontend/src/components/RunDetails.tsx @@ -100,6 +100,7 @@ export function RunDetails({ const reasoning = num(rec(arr(usage.output_tokens_details)[0]).reasoning_tokens); const totalTokens = num(usage.total_tokens); const cost = num(usage.cost); + const subscription = str(raw.auth_mode) === "subscription"; const sub = (n: number, word: string) => ( ({formatNumber(n)} {word}) @@ -175,6 +176,15 @@ export function RunDetails({ {hasUsage ? (
{models.length ? models.join(", ") : "n/a"} + {subscription && ( + + + + ChatGPT subscription + + + + )} {fmtDuration(durationSeconds)} {requests != null && {formatNumber(requests)}} {inputTokens != null && ( @@ -190,7 +200,14 @@ export function RunDetails({ )} {totalTokens != null && {formatNumber(totalTokens)}} - {cost != null && ${cost.toFixed(2)}} + {subscription ? ( + + $0.00 + (subscription) + + ) : ( + cost != null && ${cost.toFixed(2)} + )} {agents.length > 0 && {formatNumber(agents.length)}}
) : ( diff --git a/strix/viewer/static/assets/index-BdiSGmzb.css b/strix/viewer/static/assets/index-BdiSGmzb.css deleted file mode 100644 index 6e8eef74..00000000 --- a/strix/viewer/static/assets/index-BdiSGmzb.css +++ /dev/null @@ -1,10 +0,0 @@ -pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! - Theme: GitHub Dark - Description: Dark theme as seen on github.com - Author: github.com - Maintainer: @Hirse - Updated: 2021-05-15 - - Outdated base version: https://github.com/primer/github-syntax-dark - Current colors taken from GitHub's CSS -*/.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#79c0ff}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-comment,.hljs-code,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c}.react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgba(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgba(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #555;--xy-background-pattern-lines-color-default: #333;--xy-background-pattern-cross-color-default: #333;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1;touch-action:none}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px) translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px) translateY(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) )}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:5px;height:5px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));translate:-50% -50%}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-amber-400:oklch(82.8% .189 84.429);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-500:oklch(71.5% .143 215.221);--color-sky-400:oklch(74.6% .16 232.661);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-neutral-200:oklch(92.2% 0 none);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-xl:36rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-geist-sans);--default-mono-font-family:var(--font-geist-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{inset-inline:0}.top-0{top:0}.top-2{top:calc(var(--spacing) * 2)}.top-4{top:calc(var(--spacing) * 4)}.right-0{right:0}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.bottom-0{bottom:0}.bottom-3{bottom:calc(var(--spacing) * 3)}.bottom-full{bottom:100%}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing) * 2)}.left-3{left:calc(var(--spacing) * 3)}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.-mx-2{margin-inline:calc(var(--spacing) * -2)}.mx-0{margin-inline:0}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.my-4{margin-block:calc(var(--spacing) * 4)}.-mt-0\.5{margin-top:calc(var(--spacing) * -.5)}.mt-0{margin-top:0}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mt-\[1px\]{margin-top:1px}.-mr-0\.5{margin-right:calc(var(--spacing) * -.5)}.mr-1{margin-right:var(--spacing)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-2\.5{margin-bottom:calc(var(--spacing) * 2.5)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-auto{margin-left:auto}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.\!h-1\.5{height:calc(var(--spacing) * 1.5)!important}.h-0\.5{height:calc(var(--spacing) * .5)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-\[30px\]{height:30px}.h-\[60vh\]{height:60vh}.h-\[72px\]{height:72px}.h-\[480px\]{height:480px}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-96{max-height:calc(var(--spacing) * 96)}.max-h-\[160px\]{max-height:160px}.max-h-\[400px\]{max-height:400px}.max-h-\[1200px\]{max-height:1200px}.min-h-screen{min-height:100vh}.\!w-1\.5{width:calc(var(--spacing) * 1.5)!important}.w-0\.5{width:calc(var(--spacing) * .5)}.w-1{width:var(--spacing)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-11{width:calc(var(--spacing) * 11)}.w-28{width:calc(var(--spacing) * 28)}.w-96{width:calc(var(--spacing) * 96)}.w-\[1px\]{width:1px}.w-\[30px\]{width:30px}.w-\[180px\]{width:180px}.w-\[260px\]{width:260px}.w-\[calc\(100vw-4rem\)\]{width:calc(100vw - 4rem)}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-6xl{max-width:var(--container-6xl)}.max-w-\[75\%\]{max-width:75%}.max-w-\[80\%\]{max-width:80%}.max-w-\[88rem\]{max-width:88rem}.max-w-\[140px\]{max-width:140px}.max-w-\[240px\]{max-width:240px}.max-w-\[260px\]{max-width:260px}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:0}.min-w-\[80px\]{min-width:80px}.min-w-\[112px\]{min-width:112px}.min-w-\[160px\]{min-width:160px}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink-0,.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.origin-left{transform-origin:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-rotate-90{rotate:-90deg}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-col-resize{cursor:col-resize}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.scrollbar-thin{scrollbar-width:thin}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-\[7rem_1fr\]{grid-template-columns:7rem 1fr}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-10{gap:calc(var(--spacing) * 10)}.gap-px{gap:1px}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block:0}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-x-8{column-gap:calc(var(--spacing) * 8)}.gap-y-0\.5{row-gap:calc(var(--spacing) * .5)}.gap-y-1{row-gap:var(--spacing)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.gap-y-3{row-gap:calc(var(--spacing) * 3)}.gap-y-6{row-gap:calc(var(--spacing) * 6)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-clip{overflow-x:clip}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.\!border-0{border-style:var(--tw-border-style)!important;border-width:0!important}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\!border-none{--tw-border-style:none!important;border-style:none!important}.\!border-\[\#222\]{border-color:#222!important}.border-\[\#1a1a1a\]{border-color:#1a1a1a}.border-\[\#2a2a2a\]{border-color:#2a2a2a}.border-\[\#3a3a3a\]{border-color:#3a3a3a}.border-\[\#222\]{border-color:#222}.border-\[\#333\]{border-color:#333}.border-\[\#444\]{border-color:#444}.border-\[\#191919\]{border-color:#191919}.border-\[rgba\(255\,255\,255\,0\.08\)\]{border-color:#ffffff14}.border-blue-500\/20{border-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.border-blue-500\/20{border-color:color-mix(in oklab,var(--color-blue-500) 20%,transparent)}}.border-blue-500\/30{border-color:#3080ff4d}@supports (color:color-mix(in lab,red,red)){.border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500) 30%,transparent)}}.border-blue-500\/40{border-color:#3080ff66}@supports (color:color-mix(in lab,red,red)){.border-blue-500\/40{border-color:color-mix(in oklab,var(--color-blue-500) 40%,transparent)}}.border-emerald-500\/20{border-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500) 20%,transparent)}}.border-emerald-500\/25{border-color:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/25{border-color:color-mix(in oklab,var(--color-emerald-500) 25%,transparent)}}.border-emerald-500\/30{border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/30{border-color:color-mix(in oklab,var(--color-emerald-500) 30%,transparent)}}.border-gray-500\/20{border-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.border-gray-500\/20{border-color:color-mix(in oklab,var(--color-gray-500) 20%,transparent)}}.border-orange-500\/20{border-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.border-orange-500\/20{border-color:color-mix(in oklab,var(--color-orange-500) 20%,transparent)}}.border-orange-500\/30{border-color:#fe6e004d}@supports (color:color-mix(in lab,red,red)){.border-orange-500\/30{border-color:color-mix(in oklab,var(--color-orange-500) 30%,transparent)}}.border-purple-500\/20{border-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.border-purple-500\/20{border-color:color-mix(in oklab,var(--color-purple-500) 20%,transparent)}}.border-red-500\/20{border-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.border-red-500\/20{border-color:color-mix(in oklab,var(--color-red-500) 20%,transparent)}}.border-red-500\/25{border-color:#fb2c3640}@supports (color:color-mix(in lab,red,red)){.border-red-500\/25{border-color:color-mix(in oklab,var(--color-red-500) 25%,transparent)}}.border-red-500\/30{border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.border-red-500\/30{border-color:color-mix(in oklab,var(--color-red-500) 30%,transparent)}}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.border-white\/30{border-color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.border-white\/30{border-color:color-mix(in oklab,var(--color-white) 30%,transparent)}}.border-white\/\[0\.06\]{border-color:#ffffff0f}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.06\]{border-color:color-mix(in oklab,var(--color-white) 6%,transparent)}}.border-white\/\[0\.08\]{border-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.08\]{border-color:color-mix(in oklab,var(--color-white) 8%,transparent)}}.border-white\/\[0\.18\]{border-color:#ffffff2e}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.18\]{border-color:color-mix(in oklab,var(--color-white) 18%,transparent)}}.border-yellow-500\/20{border-color:#edb20033}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/20{border-color:color-mix(in oklab,var(--color-yellow-500) 20%,transparent)}}.border-yellow-500\/25{border-color:#edb20040}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/25{border-color:color-mix(in oklab,var(--color-yellow-500) 25%,transparent)}}.border-yellow-500\/30{border-color:#edb2004d}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/30{border-color:color-mix(in oklab,var(--color-yellow-500) 30%,transparent)}}.border-t-white{border-top-color:var(--color-white)}.\!bg-\[\#0a0a0a\]{background-color:#0a0a0a!important}.\!bg-\[\#444\]{background-color:#444!important}.\!bg-transparent{background-color:#0000!important}.bg-\[\#0a0a0a\]{background-color:#0a0a0a}.bg-\[\#1a1a1a\]{background-color:#1a1a1a}.bg-\[\#1e1e1e\]{background-color:#1e1e1e}.bg-\[\#2a2a2a\]{background-color:#2a2a2a}.bg-\[\#111\]{background-color:#111}.bg-\[\#222\]{background-color:#222}.bg-\[\#555\]{background-color:#555}.bg-\[\#888\]{background-color:#888}.bg-\[\#050505\]{background-color:#050505}.bg-\[\#252525\]{background-color:#252525}.bg-\[rgba\(255\,255\,255\,0\.02\)\]{background-color:#ffffff05}.bg-\[rgba\(255\,255\,255\,0\.3\)\]{background-color:#ffffff4d}.bg-\[rgba\(255\,255\,255\,0\.04\)\]{background-color:#ffffff0a}.bg-\[rgba\(255\,255\,255\,0\.05\)\]{background-color:#ffffff0d}.bg-\[rgba\(255\,255\,255\,0\.08\)\]{background-color:#ffffff14}.bg-\[rgba\(255\,255\,255\,0\.12\)\]{background-color:#ffffff1f}.bg-black{background-color:var(--color-black)}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.bg-black\/80{background-color:color-mix(in oklab,var(--color-black) 80%,transparent)}}.bg-blue-400{background-color:var(--color-blue-400)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500) 10%,transparent)}}.bg-blue-500\/20{background-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/20{background-color:color-mix(in oklab,var(--color-blue-500) 20%,transparent)}}.bg-blue-500\/\[0\.12\]{background-color:#3080ff1f}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/\[0\.12\]{background-color:color-mix(in oklab,var(--color-blue-500) 12%,transparent)}}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-emerald-500\/5{background-color:#00bb7f0d}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/5{background-color:color-mix(in oklab,var(--color-emerald-500) 5%,transparent)}}.bg-emerald-500\/10{background-color:#00bb7f1a}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/10{background-color:color-mix(in oklab,var(--color-emerald-500) 10%,transparent)}}.bg-emerald-500\/\[0\.06\]{background-color:#00bb7f0f}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/\[0\.06\]{background-color:color-mix(in oklab,var(--color-emerald-500) 6%,transparent)}}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-500\/10{background-color:#6a72821a}@supports (color:color-mix(in lab,red,red)){.bg-gray-500\/10{background-color:color-mix(in oklab,var(--color-gray-500) 10%,transparent)}}.bg-orange-500{background-color:var(--color-orange-500)}.bg-orange-500\/10{background-color:#fe6e001a}@supports (color:color-mix(in lab,red,red)){.bg-orange-500\/10{background-color:color-mix(in oklab,var(--color-orange-500) 10%,transparent)}}.bg-orange-500\/20{background-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.bg-orange-500\/20{background-color:color-mix(in oklab,var(--color-orange-500) 20%,transparent)}}.bg-purple-500{background-color:var(--color-purple-500)}.bg-purple-500\/10{background-color:#ac4bff1a}@supports (color:color-mix(in lab,red,red)){.bg-purple-500\/10{background-color:color-mix(in oklab,var(--color-purple-500) 10%,transparent)}}.bg-purple-500\/\[0\.08\]{background-color:#ac4bff14}@supports (color:color-mix(in lab,red,red)){.bg-purple-500\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-purple-500) 8%,transparent)}}.bg-red-400{background-color:var(--color-red-400)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\/5{background-color:#fb2c360d}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/5{background-color:color-mix(in oklab,var(--color-red-500) 5%,transparent)}}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}.bg-red-500\/15{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/15{background-color:color-mix(in oklab,var(--color-red-500) 15%,transparent)}}.bg-red-500\/20{background-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500) 20%,transparent)}}.bg-red-500\/\[0\.12\]{background-color:#fb2c361f}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/\[0\.12\]{background-color:color-mix(in oklab,var(--color-red-500) 12%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/8{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.bg-white\/8{background-color:color-mix(in oklab,var(--color-white) 8%,transparent)}}.bg-white\/60{background-color:#fff9}@supports (color:color-mix(in lab,red,red)){.bg-white\/60{background-color:color-mix(in oklab,var(--color-white) 60%,transparent)}}.bg-white\/\[0\.03\]{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.03\]{background-color:color-mix(in oklab,var(--color-white) 3%,transparent)}}.bg-white\/\[0\.08\]{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-white) 8%,transparent)}}.bg-white\/\[0\.015\]{background-color:#ffffff04}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.015\]{background-color:color-mix(in oklab,var(--color-white) 1.5%,transparent)}}.bg-yellow-400{background-color:var(--color-yellow-400)}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500) 10%,transparent)}}.bg-yellow-500\/15{background-color:#edb20026}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/15{background-color:color-mix(in oklab,var(--color-yellow-500) 15%,transparent)}}.bg-yellow-500\/20{background-color:#edb20033}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/20{background-color:color-mix(in oklab,var(--color-yellow-500) 20%,transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-emerald-400{--tw-gradient-from:var(--color-emerald-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-cyan-500{--tw-gradient-to:var(--color-cyan-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.object-cover{object-fit:cover}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-3\.5{padding:calc(var(--spacing) * 3.5)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.p-10{padding:calc(var(--spacing) * 10)}.px-0{padding-inline:0}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-8{padding-block:calc(var(--spacing) * 8)}.pt-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-10{padding-top:calc(var(--spacing) * 10)}.pt-\[5px\]{padding-top:5px}.pr-1{padding-right:var(--spacing)}.pr-1\.5{padding-right:calc(var(--spacing) * 1.5)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pb-2\.5{padding-bottom:calc(var(--spacing) * 2.5)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pb-10{padding-bottom:calc(var(--spacing) * 10)}.pl-1\.5{padding-left:calc(var(--spacing) * 1.5)}.pl-2\.5{padding-left:calc(var(--spacing) * 2.5)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:var(--font-geist-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-\[22px\]{--tw-leading:22px;line-height:22px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.4em\]{--tw-tracking:.4em;letter-spacing:.4em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#333\]{color:#333}.text-\[\#444\]{color:#444}.text-\[\#555\]{color:#555}.text-\[\#666\]{color:#666}.text-\[\#777\]{color:#777}.text-\[\#888\]{color:#888}.text-\[\#999\]{color:#999}.text-\[\#aaa\]{color:#aaa}.text-\[\#bbb\]{color:#bbb}.text-\[\#ddd\]{color:#ddd}.text-\[\#e5e5e5\]{color:#e5e5e5}.text-\[\#ededed\]{color:#ededed}.text-amber-400{color:var(--color-amber-400)}.text-amber-400\/80{color:#fcbb00cc}@supports (color:color-mix(in lab,red,red)){.text-amber-400\/80{color:color-mix(in oklab,var(--color-amber-400) 80%,transparent)}}.text-black{color:var(--color-black)}.text-blue-400{color:var(--color-blue-400)}.text-blue-400\/80{color:#54a2ffcc}@supports (color:color-mix(in lab,red,red)){.text-blue-400\/80{color:color-mix(in oklab,var(--color-blue-400) 80%,transparent)}}.text-blue-500{color:var(--color-blue-500)}.text-cyan-400{color:var(--color-cyan-400)}.text-cyan-400\/80{color:#00d2efcc}@supports (color:color-mix(in lab,red,red)){.text-cyan-400\/80{color:color-mix(in oklab,var(--color-cyan-400) 80%,transparent)}}.text-emerald-200{color:var(--color-emerald-200)}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-400\/30{color:#00d2944d}@supports (color:color-mix(in lab,red,red)){.text-emerald-400\/30{color:color-mix(in oklab,var(--color-emerald-400) 30%,transparent)}}.text-emerald-400\/60{color:#00d29499}@supports (color:color-mix(in lab,red,red)){.text-emerald-400\/60{color:color-mix(in oklab,var(--color-emerald-400) 60%,transparent)}}.text-emerald-400\/70{color:#00d294b3}@supports (color:color-mix(in lab,red,red)){.text-emerald-400\/70{color:color-mix(in oklab,var(--color-emerald-400) 70%,transparent)}}.text-emerald-400\/80{color:#00d294cc}@supports (color:color-mix(in lab,red,red)){.text-emerald-400\/80{color:color-mix(in oklab,var(--color-emerald-400) 80%,transparent)}}.text-gray-400{color:var(--color-gray-400)}.text-orange-400{color:var(--color-orange-400)}.text-orange-400\/60{color:#ff8b1a99}@supports (color:color-mix(in lab,red,red)){.text-orange-400\/60{color:color-mix(in oklab,var(--color-orange-400) 60%,transparent)}}.text-orange-400\/80{color:#ff8b1acc}@supports (color:color-mix(in lab,red,red)){.text-orange-400\/80{color:color-mix(in oklab,var(--color-orange-400) 80%,transparent)}}.text-orange-500{color:var(--color-orange-500)}.text-purple-400{color:var(--color-purple-400)}.text-purple-400\/60{color:#c07eff99}@supports (color:color-mix(in lab,red,red)){.text-purple-400\/60{color:color-mix(in oklab,var(--color-purple-400) 60%,transparent)}}.text-purple-400\/70{color:#c07effb3}@supports (color:color-mix(in lab,red,red)){.text-purple-400\/70{color:color-mix(in oklab,var(--color-purple-400) 70%,transparent)}}.text-purple-400\/80{color:#c07effcc}@supports (color:color-mix(in lab,red,red)){.text-purple-400\/80{color:color-mix(in oklab,var(--color-purple-400) 80%,transparent)}}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-400\/30{color:#ff65684d}@supports (color:color-mix(in lab,red,red)){.text-red-400\/30{color:color-mix(in oklab,var(--color-red-400) 30%,transparent)}}.text-red-400\/50{color:#ff656880}@supports (color:color-mix(in lab,red,red)){.text-red-400\/50{color:color-mix(in oklab,var(--color-red-400) 50%,transparent)}}.text-red-400\/60{color:#ff656899}@supports (color:color-mix(in lab,red,red)){.text-red-400\/60{color:color-mix(in oklab,var(--color-red-400) 60%,transparent)}}.text-red-400\/70{color:#ff6568b3}@supports (color:color-mix(in lab,red,red)){.text-red-400\/70{color:color-mix(in oklab,var(--color-red-400) 70%,transparent)}}.text-red-400\/80{color:#ff6568cc}@supports (color:color-mix(in lab,red,red)){.text-red-400\/80{color:color-mix(in oklab,var(--color-red-400) 80%,transparent)}}.text-red-500{color:var(--color-red-500)}.text-sky-400{color:var(--color-sky-400)}.text-sky-400\/80{color:#00bcfecc}@supports (color:color-mix(in lab,red,red)){.text-sky-400\/80{color:color-mix(in oklab,var(--color-sky-400) 80%,transparent)}}.text-white{color:var(--color-white)}.text-white\/80{color:#fffc}@supports (color:color-mix(in lab,red,red)){.text-white\/80{color:color-mix(in oklab,var(--color-white) 80%,transparent)}}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-400\/80{color:#fac800cc}@supports (color:color-mix(in lab,red,red)){.text-yellow-400\/80{color:color-mix(in oklab,var(--color-yellow-400) 80%,transparent)}}.text-yellow-500{color:var(--color-yellow-500)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.opacity-0{opacity:0}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.opacity-100{opacity:1}.\!shadow-none{--tw-shadow:0 0 #0000!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.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,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[font-variant-ligatures\:none\]{font-variant-ligatures:none}@media(hover:hover){.group-hover\:bg-\[rgba\(255\,255\,255\,0\.2\)\]:is(:where(.group):hover *){background-color:#fff3}.group-hover\:text-\[\#aaa\]:is(:where(.group):hover *){color:#aaa}.group-hover\:text-white:is(:where(.group):hover *){color:var(--color-white)}.group-hover\:opacity-90:is(:where(.group):hover *){opacity:.9}.group-hover\/code\:opacity-100:is(:where(.group\/code):hover *){opacity:1}}.placeholder\:text-\[\#444\]::placeholder{color:#444}@media(hover:hover){.hover\:border-\[\#333\]:hover{border-color:#333}.hover\:border-\[\#444\]:hover{border-color:#444}.hover\:border-\[\#555\]:hover{border-color:#555}.hover\:border-emerald-500\/40:hover{border-color:#00bb7f66}@supports (color:color-mix(in lab,red,red)){.hover\:border-emerald-500\/40:hover{border-color:color-mix(in oklab,var(--color-emerald-500) 40%,transparent)}}.hover\:border-white\/\[0\.12\]:hover{border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.hover\:border-white\/\[0\.12\]:hover{border-color:color-mix(in oklab,var(--color-white) 12%,transparent)}}.hover\:border-white\/\[0\.16\]:hover{border-color:#ffffff29}@supports (color:color-mix(in lab,red,red)){.hover\:border-white\/\[0\.16\]:hover{border-color:color-mix(in oklab,var(--color-white) 16%,transparent)}}.hover\:bg-\[\#1a1a1a\]:hover{background-color:#1a1a1a}.hover\:bg-\[\#2a2a2a\]:hover{background-color:#2a2a2a}.hover\:bg-\[rgba\(255\,255\,255\,0\.06\)\]:hover{background-color:#ffffff0f}.hover\:bg-\[rgba\(255\,255\,255\,0\.08\)\]:hover{background-color:#ffffff14}.hover\:bg-\[rgba\(255\,255\,255\,0\.09\)\]:hover{background-color:#ffffff17}.hover\:bg-neutral-200:hover{background-color:var(--color-neutral-200)}.hover\:bg-white\/\[0\.06\]:hover{background-color:#ffffff0f}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/\[0\.06\]:hover{background-color:color-mix(in oklab,var(--color-white) 6%,transparent)}}.hover\:text-\[\#888\]:hover{color:#888}.hover\:text-\[\#aaa\]:hover{color:#aaa}.hover\:text-\[\#ccc\]:hover{color:#ccc}.hover\:text-\[\#ededed\]:hover{color:#ededed}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}}.focus\:border-\[\#444\]:focus{border-color:#444}.focus\:border-white\/50:focus{border-color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.focus\:border-white\/50:focus{border-color:color-mix(in oklab,var(--color-white) 50%,transparent)}}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-white\/10:focus{--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.focus\:ring-white\/10:focus{--tw-ring-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-white\/20:focus-visible{--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-white\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-white) 20%, transparent)}}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:opacity-60:disabled{opacity:.6}@media(min-width:40rem){.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-8{padding:calc(var(--spacing) * 8)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:py-12{padding-block:calc(var(--spacing) * 12)}}@media(min-width:48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:64rem){.lg\:sticky{position:sticky}.lg\:top-6{top:calc(var(--spacing) * 6)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:max-h-\[calc\(100vh-3rem\)\]{max-height:calc(100vh - 3rem)}.lg\:grid-cols-\[1fr_340px\]{grid-template-columns:1fr 340px}.lg\:overflow-y-auto{overflow-y:auto}.lg\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.lg\:border-\[\#2a2a2a\]{border-color:#2a2a2a}.lg\:pl-6{padding-left:calc(var(--spacing) * 6)}}.\[\&_svg\]\:h-3\.5 svg{height:calc(var(--spacing) * 3.5)}.\[\&_svg\]\:w-3\.5 svg{width:calc(var(--spacing) * 3.5)}}:root{--font-geist-sans:ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--font-geist-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}html,body{color:#fff;font-family:var(--font-geist-sans);background:#000}.scrollbar-thin{scrollbar-width:thin;scrollbar-color:#ffffff26 transparent}.scrollbar-thin::-webkit-scrollbar{width:6px;height:6px}.scrollbar-thin::-webkit-scrollbar-thumb{background:#ffffff26;border-radius:3px}.scrollbar-thin::-webkit-scrollbar-track{background:0 0}@keyframes page-in{0%{opacity:0;filter:blur(8px);transform:translateY(8px)}to{opacity:1;filter:blur();transform:translateY(0)}}.animate-page-in{animation:.15s ease-out page-in}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.animate-fade-in{animation:.35s ease-out fade-in}@keyframes cardIn{0%{opacity:0;filter:blur(4px);transform:translateY(8px)scale(.97)}to{opacity:1;filter:blur();transform:translateY(0)scale(1)}}.animate-card-in{opacity:0;animation:.3s cubic-bezier(.16,1,.3,1) forwards cardIn}.animate-card-in:first-child{animation-delay:0s}.animate-card-in:nth-child(2){animation-delay:50ms}.animate-card-in:nth-child(3){animation-delay:.1s}.animate-card-in:nth-child(4){animation-delay:.15s}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(400%)}}.animate-shimmer{animation:2s infinite shimmer}@keyframes dialog-overlay-in{0%{opacity:0}to{opacity:1}}@keyframes dialog-overlay-out{0%{opacity:1}to{opacity:0}}@keyframes dialog-panel-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes dialog-panel-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.95)}}.dialog-overlay[data-state=open]{animation:.2s dialog-overlay-in}.dialog-overlay[data-state=closed]{animation:.2s forwards dialog-overlay-out}.dialog-panel[data-state=open]{animation:.2s dialog-panel-in}.dialog-panel[data-state=closed]{animation:.2s forwards dialog-panel-out}.agent-modal[data-state=open]{animation:.14s dialog-overlay-in}.agent-modal[data-state=closed]{animation:.14s forwards dialog-overlay-out}@keyframes tab-in{0%{opacity:0;filter:blur(4px);transform:translateY(6px)}to{opacity:1;filter:blur();transform:translateY(0)}}.animate-tab-in{animation:.2s ease-out tab-in}.prose-markdown{color:#999;word-wrap:break-word;overflow-wrap:break-word;font-size:14px;line-height:1.7}.prose-markdown p{margin-bottom:.75em}.prose-markdown p:last-child{margin-bottom:0}.prose-markdown strong{color:#ccc;font-weight:600}.prose-markdown em{font-style:italic}.prose-markdown code{color:#ccc;font-variant-ligatures:none;background:#0a0a0a;border:1px solid #111;border-radius:4px;padding:.15em .4em;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.9em}.prose-markdown pre{font-variant-ligatures:none;background:0 0;border:none;border-radius:0;margin:0;padding:0}.prose-markdown pre code{color:inherit;background:0 0;border:none;padding:0;font-size:13px}.prose-markdown ul,.prose-markdown ol{margin-bottom:.75em;padding-left:1.5em}.prose-markdown ul{list-style-type:disc}.prose-markdown ol{list-style-type:decimal}.prose-markdown li{margin-bottom:.25em}.prose-markdown li>ul,.prose-markdown li>ol{margin-top:.25em;margin-bottom:.25em;padding-left:1.5em}.prose-markdown ol+ul{margin-top:-.5em;padding-left:3em}.prose-markdown h1,.prose-markdown h2,.prose-markdown h3,.prose-markdown h4,.prose-markdown h5,.prose-markdown h6{color:#ddd;margin-top:1em;margin-bottom:.5em;font-weight:600}.prose-markdown a{color:inherit;pointer-events:none;text-decoration:none}.prose-markdown blockquote{color:#777;border-left:3px solid #333;margin:.75em 0;padding-left:1em}.prose-markdown hr{border:none;border-top:1px solid #222;margin:1em 0}.prose-markdown>table{border-collapse:collapse;width:100%;margin:.75em 0}.prose-markdown>table th,.prose-markdown>table td{text-align:left;border:1px solid #333;padding:.4em .75em;font-size:13px}.prose-markdown>table th{color:#ccc;background:#1a1a1a;font-weight:600}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}} diff --git a/strix/viewer/static/assets/index-BNKUksp9.js b/strix/viewer/static/assets/index-e2r6VuTm.js similarity index 90% rename from strix/viewer/static/assets/index-BNKUksp9.js rename to strix/viewer/static/assets/index-e2r6VuTm.js index 4e1b3ca6..a010dffe 100644 --- a/strix/viewer/static/assets/index-BNKUksp9.js +++ b/strix/viewer/static/assets/index-e2r6VuTm.js @@ -14,7 +14,7 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var V0;function bk(){if(V0)return Ve;V0=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.portal"),r=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),o=Symbol.for("react.consumer"),c=Symbol.for("react.context"),d=Symbol.for("react.forward_ref"),f=Symbol.for("react.suspense"),h=Symbol.for("react.memo"),m=Symbol.for("react.lazy"),p=Symbol.for("react.activity"),y=Symbol.iterator;function x(j){return j===null||typeof j!="object"?null:(j=y&&j[y]||j["@@iterator"],typeof j=="function"?j:null)}var _={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},N=Object.assign,S={};function w(j,Y,L){this.props=j,this.context=Y,this.refs=S,this.updater=L||_}w.prototype.isReactComponent={},w.prototype.setState=function(j,Y){if(typeof j!="object"&&typeof j!="function"&&j!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,j,Y,"setState")},w.prototype.forceUpdate=function(j){this.updater.enqueueForceUpdate(this,j,"forceUpdate")};function k(){}k.prototype=w.prototype;function E(j,Y,L){this.props=j,this.context=Y,this.refs=S,this.updater=L||_}var M=E.prototype=new k;M.constructor=E,N(M,w.prototype),M.isPureReactComponent=!0;var I=Array.isArray;function R(){}var U={H:null,A:null,T:null,S:null},B=Object.prototype.hasOwnProperty;function Z(j,Y,L){var G=L.ref;return{$$typeof:e,type:j,key:Y,ref:G!==void 0?G:null,props:L}}function D(j,Y){return Z(j.type,Y,j.props)}function z(j){return typeof j=="object"&&j!==null&&j.$$typeof===e}function P(j){var Y={"=":"=0",":":"=2"};return"$"+j.replace(/[=:]/g,function(L){return Y[L]})}var V=/\/+/g;function A(j,Y){return typeof j=="object"&&j!==null&&j.key!=null?P(""+j.key):Y.toString(36)}function $(j){switch(j.status){case"fulfilled":return j.value;case"rejected":throw j.reason;default:switch(typeof j.status=="string"?j.then(R,R):(j.status="pending",j.then(function(Y){j.status==="pending"&&(j.status="fulfilled",j.value=Y)},function(Y){j.status==="pending"&&(j.status="rejected",j.reason=Y)})),j.status){case"fulfilled":return j.value;case"rejected":throw j.reason}}throw j}function O(j,Y,L,G,q){var Q=typeof j;(Q==="undefined"||Q==="boolean")&&(j=null);var J=!1;if(j===null)J=!0;else switch(Q){case"bigint":case"string":case"number":J=!0;break;case"object":switch(j.$$typeof){case e:case t:J=!0;break;case m:return J=j._init,O(J(j._payload),Y,L,G,q)}}if(J)return q=q(j),J=G===""?"."+A(j,0):G,I(q)?(L="",J!=null&&(L=J.replace(V,"$&/")+"/"),O(q,Y,L,"",function(ce){return ce})):q!=null&&(z(q)&&(q=D(q,L+(q.key==null||j&&j.key===q.key?"":(""+q.key).replace(V,"$&/")+"/")+J)),Y.push(q)),1;J=0;var W=G===""?".":G+":";if(I(j))for(var te=0;te>>1,T=O[K];if(0>>1;Ks(L,X))Gs(q,L)?(O[K]=q,O[G]=X,K=G):(O[K]=L,O[Y]=X,K=Y);else if(Gs(q,X))O[K]=q,O[G]=X,K=G;else break e}}return H}function s(O,H){var X=O.sortIndex-H.sortIndex;return X!==0?X:O.id-H.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var c=Date,d=c.now();e.unstable_now=function(){return c.now()-d}}var f=[],h=[],m=1,p=null,y=3,x=!1,_=!1,N=!1,S=!1,w=typeof setTimeout=="function"?setTimeout:null,k=typeof clearTimeout=="function"?clearTimeout:null,E=typeof setImmediate<"u"?setImmediate:null;function M(O){for(var H=r(h);H!==null;){if(H.callback===null)a(h);else if(H.startTime<=O)a(h),H.sortIndex=H.expirationTime,t(f,H);else break;H=r(h)}}function I(O){if(N=!1,M(O),!_)if(r(f)!==null)_=!0,R||(R=!0,P());else{var H=r(h);H!==null&&$(I,H.startTime-O)}}var R=!1,U=-1,B=5,Z=-1;function D(){return S?!0:!(e.unstable_now()-ZO&&D());){var K=p.callback;if(typeof K=="function"){p.callback=null,y=p.priorityLevel;var T=K(p.expirationTime<=O);if(O=e.unstable_now(),typeof T=="function"){p.callback=T,M(O),H=!0;break t}p===r(f)&&a(f),M(O)}else a(f);p=r(f)}if(p!==null)H=!0;else{var j=r(h);j!==null&&$(I,j.startTime-O),H=!1}}break e}finally{p=null,y=X,x=!1}H=void 0}}finally{H?P():R=!1}}}var P;if(typeof E=="function")P=function(){E(z)};else if(typeof MessageChannel<"u"){var V=new MessageChannel,A=V.port2;V.port1.onmessage=z,P=function(){A.postMessage(null)}}else P=function(){w(z,0)};function $(O,H){U=w(function(){O(e.unstable_now())},H)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(O){O.callback=null},e.unstable_forceFrameRate=function(O){0>O||125K?(O.sortIndex=X,t(h,O),r(f)===null&&O===r(h)&&(N?(k(U),U=-1):N=!0,$(I,X-K))):(O.sortIndex=T,t(f,O),_||x||(_=!0,R||(R=!0,P()))),O},e.unstable_shouldYield=D,e.unstable_wrapCallback=function(O){var H=y;return function(){var X=y;y=H;try{return O.apply(this,arguments)}finally{y=X}}}})(fh)),fh}var K0;function yk(){return K0||(K0=1,dh.exports=xk()),dh.exports}var hh={exports:{}},kn={};/** + */var X0;function xk(){return X0||(X0=1,(function(e){function t(O,H){var X=O.length;O.push(H);e:for(;0>>1,T=O[K];if(0>>1;Ks(L,X))Gs(q,L)?(O[K]=q,O[G]=X,K=G):(O[K]=L,O[Y]=X,K=Y);else if(Gs(q,X))O[K]=q,O[G]=X,K=G;else break e}}return H}function s(O,H){var X=O.sortIndex-H.sortIndex;return X!==0?X:O.id-H.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var c=Date,d=c.now();e.unstable_now=function(){return c.now()-d}}var f=[],h=[],m=1,p=null,y=3,x=!1,_=!1,N=!1,S=!1,w=typeof setTimeout=="function"?setTimeout:null,k=typeof clearTimeout=="function"?clearTimeout:null,E=typeof setImmediate<"u"?setImmediate:null;function M(O){for(var H=r(h);H!==null;){if(H.callback===null)a(h);else if(H.startTime<=O)a(h),H.sortIndex=H.expirationTime,t(f,H);else break;H=r(h)}}function I(O){if(N=!1,M(O),!_)if(r(f)!==null)_=!0,R||(R=!0,V());else{var H=r(h);H!==null&&$(I,H.startTime-O)}}var R=!1,U=-1,B=5,Z=-1;function D(){return S?!0:!(e.unstable_now()-ZO&&D());){var K=p.callback;if(typeof K=="function"){p.callback=null,y=p.priorityLevel;var T=K(p.expirationTime<=O);if(O=e.unstable_now(),typeof T=="function"){p.callback=T,M(O),H=!0;break t}p===r(f)&&a(f),M(O)}else a(f);p=r(f)}if(p!==null)H=!0;else{var j=r(h);j!==null&&$(I,j.startTime-O),H=!1}}break e}finally{p=null,y=X,x=!1}H=void 0}}finally{H?V():R=!1}}}var V;if(typeof E=="function")V=function(){E(z)};else if(typeof MessageChannel<"u"){var P=new MessageChannel,C=P.port2;P.port1.onmessage=z,V=function(){C.postMessage(null)}}else V=function(){w(z,0)};function $(O,H){U=w(function(){O(e.unstable_now())},H)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(O){O.callback=null},e.unstable_forceFrameRate=function(O){0>O||125K?(O.sortIndex=X,t(h,O),r(f)===null&&O===r(h)&&(N?(k(U),U=-1):N=!0,$(I,X-K))):(O.sortIndex=T,t(f,O),_||x||(_=!0,R||(R=!0,V()))),O},e.unstable_shouldYield=D,e.unstable_wrapCallback=function(O){var H=y;return function(){var X=y;y=H;try{return O.apply(this,arguments)}finally{y=X}}}})(fh)),fh}var K0;function yk(){return K0||(K0=1,dh.exports=xk()),dh.exports}var hh={exports:{}},Tn={};/** * @license React * react-dom.production.js * @@ -30,7 +30,7 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Z0;function vk(){if(Z0)return kn;Z0=1;var e=Co();function t(f){var h="https://react.dev/errors/"+f;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),hh.exports=vk(),hh.exports}/** + */var Z0;function vk(){if(Z0)return Tn;Z0=1;var e=Co();function t(f){var h="https://react.dev/errors/"+f;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),hh.exports=vk(),hh.exports}/** * @license React * react-dom-client.production.js * @@ -38,15 +38,15 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var W0;function _k(){if(W0)return Xl;W0=1;var e=yk(),t=Co(),r=N_();function a(n){var i="https://react.dev/errors/"+n;if(1T||(n.current=K[T],K[T]=null,T--)}function L(n,i){T++,K[T]=n.current,n.current=i}var G=j(null),q=j(null),Q=j(null),J=j(null);function W(n,i){switch(L(Q,i),L(q,n),L(G,null),i.nodeType){case 9:case 11:n=(n=i.documentElement)&&(n=n.namespaceURI)?h0(n):0;break;default:if(n=i.tagName,i=i.namespaceURI)i=h0(i),n=m0(i,n);else switch(n){case"svg":n=1;break;case"math":n=2;break;default:n=0}}Y(G),L(G,n)}function te(){Y(G),Y(q),Y(Q)}function ce(n){n.memoizedState!==null&&L(J,n);var i=G.current,l=m0(i,n.type);i!==l&&(L(q,n),L(G,l))}function fe(n){q.current===n&&(Y(G),Y(q)),J.current===n&&(Y(J),Pl._currentValue=X)}var be,we;function Ne(n){if(be===void 0)try{throw Error()}catch(l){var i=l.stack.trim().match(/\n( *(at )?)/);be=i&&i[1]||"",we=-1T||(n.current=K[T],K[T]=null,T--)}function L(n,i){T++,K[T]=n.current,n.current=i}var G=j(null),q=j(null),Q=j(null),J=j(null);function W(n,i){switch(L(Q,i),L(q,n),L(G,null),i.nodeType){case 9:case 11:n=(n=i.documentElement)&&(n=n.namespaceURI)?h0(n):0;break;default:if(n=i.tagName,i=i.namespaceURI)i=h0(i),n=m0(i,n);else switch(n){case"svg":n=1;break;case"math":n=2;break;default:n=0}}Y(G),L(G,n)}function te(){Y(G),Y(q),Y(Q)}function ce(n){n.memoizedState!==null&&L(J,n);var i=G.current,l=m0(i,n.type);i!==l&&(L(q,n),L(G,l))}function fe(n){q.current===n&&(Y(G),Y(q)),J.current===n&&(Y(J),Pl._currentValue=X)}var be,we;function Ne(n){if(be===void 0)try{throw Error()}catch(l){var i=l.stack.trim().match(/\n( *(at )?)/);be=i&&i[1]||"",we=-1)":-1b||ne[u]!==le[b]){var he=` `+ne[u].replace(" at new "," at ");return n.displayName&&he.includes("")&&(he=he.replace("",n.displayName)),he}while(1<=u&&0<=b);break}}}finally{je=!1,Error.prepareStackTrace=l}return(l=n?n.displayName||n.name:"")?Ne(l):""}function st(n,i){switch(n.tag){case 26:case 27:case 5:return Ne(n.type);case 16:return Ne("Lazy");case 13:return n.child!==i&&i!==null?Ne("Suspense Fallback"):Ne("Suspense");case 19:return Ne("SuspenseList");case 0:case 15:return $e(n.type,!1);case 11:return $e(n.type.render,!1);case 1:return $e(n.type,!0);case 31:return Ne("Activity");default:return""}}function Rt(n){try{var i="",l=null;do i+=st(n,l),l=n,n=n.return;while(n);return i}catch(u){return` Error generating stack: `+u.message+` -`+u.stack}}var Yt=Object.prototype.hasOwnProperty,Pt=e.unstable_scheduleCallback,Xt=e.unstable_cancelCallback,Yn=e.unstable_shouldYield,wn=e.unstable_requestPaint,ct=e.unstable_now,It=e.unstable_getCurrentPriorityLevel,ue=e.unstable_ImmediatePriority,xe=e.unstable_UserBlockingPriority,Oe=e.unstable_NormalPriority,Fe=e.unstable_LowPriority,Ze=e.unstable_IdlePriority,on=e.log,En=e.unstable_setDisableYieldValue,Kt=null,At=null;function Wt(n){if(typeof on=="function"&&En(n),At&&typeof At.setStrictMode=="function")try{At.setStrictMode(Kt,n)}catch{}}var ut=Math.clz32?Math.clz32:Ni,zn=Math.log,cn=Math.LN2;function Ni(n){return n>>>=0,n===0?32:31-(zn(n)/cn|0)|0}var nt=256,Xn=262144,An=4194304;function hn(n){var i=n&42;if(i!==0)return i;switch(n&-n){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return n&261888;case 262144:case 524288:case 1048576:case 2097152:return n&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return n&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return n}}function re(n,i,l){var u=n.pendingLanes;if(u===0)return 0;var b=0,v=n.suspendedLanes,C=n.pingedLanes;n=n.warmLanes;var F=u&134217727;return F!==0?(u=F&~v,u!==0?b=hn(u):(C&=F,C!==0?b=hn(C):l||(l=F&~n,l!==0&&(b=hn(l))))):(F=u&~v,F!==0?b=hn(F):C!==0?b=hn(C):l||(l=u&~n,l!==0&&(b=hn(l)))),b===0?0:i!==0&&i!==b&&(i&v)===0&&(v=b&-b,l=i&-i,v>=l||v===32&&(l&4194048)!==0)?i:b}function me(n,i){return(n.pendingLanes&~(n.suspendedLanes&~n.pingedLanes)&i)===0}function Ee(n,i){switch(n){case 1:case 2:case 4:case 8:case 64:return i+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return i+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Pe(){var n=An;return An<<=1,(An&62914560)===0&&(An=4194304),n}function St(n){for(var i=[],l=0;31>l;l++)i.push(n);return i}function gt(n,i){n.pendingLanes|=i,i!==268435456&&(n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0)}function Ae(n,i,l,u,b,v){var C=n.pendingLanes;n.pendingLanes=l,n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0,n.expiredLanes&=l,n.entangledLanes&=l,n.errorRecoveryDisabledLanes&=l,n.shellSuspendCounter=0;var F=n.entanglements,ne=n.expirationTimes,le=n.hiddenUpdates;for(l=C&~l;0"u")return null;try{return n.activeElement||n.body}catch{return n.body}}var ns=/[\n"\\]/g;function Sn(n){return n.replace(ns,function(i){return"\\"+i.charCodeAt(0).toString(16)+" "})}function ba(n,i,l,u,b,v,C,F){n.name="",C!=null&&typeof C!="function"&&typeof C!="symbol"&&typeof C!="boolean"?n.type=C:n.removeAttribute("type"),i!=null?C==="number"?(i===0&&n.value===""||n.value!=i)&&(n.value=""+_t(i)):n.value!==""+_t(i)&&(n.value=""+_t(i)):C!=="submit"&&C!=="reset"||n.removeAttribute("value"),i!=null?Oi(n,C,_t(i)):l!=null?Oi(n,C,_t(l)):u!=null&&n.removeAttribute("value"),b==null&&v!=null&&(n.defaultChecked=!!v),b!=null&&(n.checked=b&&typeof b!="function"&&typeof b!="symbol"),F!=null&&typeof F!="function"&&typeof F!="symbol"&&typeof F!="boolean"?n.name=""+_t(F):n.removeAttribute("name")}function Er(n,i,l,u,b,v,C,F){if(v!=null&&typeof v!="function"&&typeof v!="symbol"&&typeof v!="boolean"&&(n.type=v),i!=null||l!=null){if(!(v!=="submit"&&v!=="reset"||i!=null)){Ai(n);return}l=l!=null?""+_t(l):"",i=i!=null?""+_t(i):l,F||i===n.value||(n.value=i),n.defaultValue=i}u=u??b,u=typeof u!="function"&&typeof u!="symbol"&&!!u,n.checked=F?n.checked:!!u,n.defaultChecked=!!u,C!=null&&typeof C!="function"&&typeof C!="symbol"&&typeof C!="boolean"&&(n.name=C),Ai(n)}function Oi(n,i,l){i==="number"&&Mi(n.ownerDocument)===n||n.defaultValue===""+l||(n.defaultValue=""+l)}function un(n,i,l,u){if(n=n.options,i){i={};for(var b=0;b"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),ld=!1;if(ti)try{var ll={};Object.defineProperty(ll,"passive",{get:function(){ld=!0}}),window.addEventListener("test",ll,ll),window.removeEventListener("test",ll,ll)}catch{ld=!1}var ji=null,od=null,qo=null;function mg(){if(qo)return qo;var n,i=od,l=i.length,u,b="value"in ji?ji.value:ji.textContent,v=b.length;for(n=0;n=ul),vg=" ",_g=!1;function wg(n,i){switch(n){case"keyup":return IS.indexOf(i.keyCode)!==-1;case"keydown":return i.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Eg(n){return n=n.detail,typeof n=="object"&&"data"in n?n.data:null}var is=!1;function US(n,i){switch(n){case"compositionend":return Eg(i);case"keypress":return i.which!==32?null:(_g=!0,vg);case"textInput":return n=i.data,n===vg&&_g?null:n;default:return null}}function HS(n,i){if(is)return n==="compositionend"||!hd&&wg(n,i)?(n=mg(),qo=od=ji=null,is=!1,n):null;switch(n){case"paste":return null;case"keypress":if(!(i.ctrlKey||i.altKey||i.metaKey)||i.ctrlKey&&i.altKey){if(i.char&&1=i)return{node:l,offset:i-n};n=u}e:{for(;l;){if(l.nextSibling){l=l.nextSibling;break e}l=l.parentNode}l=void 0}l=Og(l)}}function Dg(n,i){return n&&i?n===i?!0:n&&n.nodeType===3?!1:i&&i.nodeType===3?Dg(n,i.parentNode):"contains"in n?n.contains(i):n.compareDocumentPosition?!!(n.compareDocumentPosition(i)&16):!1:!1}function jg(n){n=n!=null&&n.ownerDocument!=null&&n.ownerDocument.defaultView!=null?n.ownerDocument.defaultView:window;for(var i=Mi(n.document);i instanceof n.HTMLIFrameElement;){try{var l=typeof i.contentWindow.location.href=="string"}catch{l=!1}if(l)n=i.contentWindow;else break;i=Mi(n.document)}return i}function gd(n){var i=n&&n.nodeName&&n.nodeName.toLowerCase();return i&&(i==="input"&&(n.type==="text"||n.type==="search"||n.type==="tel"||n.type==="url"||n.type==="password")||i==="textarea"||n.contentEditable==="true")}var XS=ti&&"documentMode"in document&&11>=document.documentMode,as=null,bd=null,ml=null,xd=!1;function Lg(n,i,l){var u=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;xd||as==null||as!==Mi(u)||(u=as,"selectionStart"in u&&gd(u)?u={start:u.selectionStart,end:u.selectionEnd}:(u=(u.ownerDocument&&u.ownerDocument.defaultView||window).getSelection(),u={anchorNode:u.anchorNode,anchorOffset:u.anchorOffset,focusNode:u.focusNode,focusOffset:u.focusOffset}),ml&&hl(ml,u)||(ml=u,u=Lc(bd,"onSelect"),0>=C,b-=C,Hr=1<<32-ut(i)+b|l<Ke?(at=De,De=null):at=De.sibling;var mt=oe(ae,De,se[Ke],pe);if(mt===null){De===null&&(De=at);break}n&&De&&mt.alternate===null&&i(ae,De),ie=v(mt,ie,Ke),ht===null?Ie=mt:ht.sibling=mt,ht=mt,De=at}if(Ke===se.length)return l(ae,De),lt&&ri(ae,Ke),Ie;if(De===null){for(;KeKe?(at=De,De=null):at=De.sibling;var na=oe(ae,De,mt.value,pe);if(na===null){De===null&&(De=at);break}n&&De&&na.alternate===null&&i(ae,De),ie=v(na,ie,Ke),ht===null?Ie=na:ht.sibling=na,ht=na,De=at}if(mt.done)return l(ae,De),lt&&ri(ae,Ke),Ie;if(De===null){for(;!mt.done;Ke++,mt=se.next())mt=ge(ae,mt.value,pe),mt!==null&&(ie=v(mt,ie,Ke),ht===null?Ie=mt:ht.sibling=mt,ht=mt);return lt&&ri(ae,Ke),Ie}for(De=u(De);!mt.done;Ke++,mt=se.next())mt=de(De,ae,Ke,mt.value,pe),mt!==null&&(n&&mt.alternate!==null&&De.delete(mt.key===null?Ke:mt.key),ie=v(mt,ie,Ke),ht===null?Ie=mt:ht.sibling=mt,ht=mt);return n&&De.forEach(function(mk){return i(ae,mk)}),lt&&ri(ae,Ke),Ie}function Nt(ae,ie,se,pe){if(typeof se=="object"&&se!==null&&se.type===N&&se.key===null&&(se=se.props.children),typeof se=="object"&&se!==null){switch(se.$$typeof){case x:e:{for(var Ie=se.key;ie!==null;){if(ie.key===Ie){if(Ie=se.type,Ie===N){if(ie.tag===7){l(ae,ie.sibling),pe=b(ie,se.props.children),pe.return=ae,ae=pe;break e}}else if(ie.elementType===Ie||typeof Ie=="object"&&Ie!==null&&Ie.$$typeof===B&&Ca(Ie)===ie.type){l(ae,ie.sibling),pe=b(ie,se.props),vl(pe,se),pe.return=ae,ae=pe;break e}l(ae,ie);break}else i(ae,ie);ie=ie.sibling}se.type===N?(pe=Ea(se.props.children,ae.mode,pe,se.key),pe.return=ae,ae=pe):(pe=Wo(se.type,se.key,se.props,null,ae.mode,pe),vl(pe,se),pe.return=ae,ae=pe)}return C(ae);case _:e:{for(Ie=se.key;ie!==null;){if(ie.key===Ie)if(ie.tag===4&&ie.stateNode.containerInfo===se.containerInfo&&ie.stateNode.implementation===se.implementation){l(ae,ie.sibling),pe=b(ie,se.children||[]),pe.return=ae,ae=pe;break e}else{l(ae,ie);break}else i(ae,ie);ie=ie.sibling}pe=Sd(se,ae.mode,pe),pe.return=ae,ae=pe}return C(ae);case B:return se=Ca(se),Nt(ae,ie,se,pe)}if($(se))return Ce(ae,ie,se,pe);if(P(se)){if(Ie=P(se),typeof Ie!="function")throw Error(a(150));return se=Ie.call(se),He(ae,ie,se,pe)}if(typeof se.then=="function")return Nt(ae,ie,ac(se),pe);if(se.$$typeof===E)return Nt(ae,ie,tc(ae,se),pe);sc(ae,se)}return typeof se=="string"&&se!==""||typeof se=="number"||typeof se=="bigint"?(se=""+se,ie!==null&&ie.tag===6?(l(ae,ie.sibling),pe=b(ie,se),pe.return=ae,ae=pe):(l(ae,ie),pe=Nd(se,ae.mode,pe),pe.return=ae,ae=pe),C(ae)):l(ae,ie)}return function(ae,ie,se,pe){try{yl=0;var Ie=Nt(ae,ie,se,pe);return gs=null,Ie}catch(De){if(De===ps||De===rc)throw De;var ht=Zn(29,De,null,ae.mode);return ht.lanes=pe,ht.return=ae,ht}finally{}}}var Ma=ib(!0),ab=ib(!1),Ui=!1;function Id(n){n.updateQueue={baseState:n.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Bd(n,i){n=n.updateQueue,i.updateQueue===n&&(i.updateQueue={baseState:n.baseState,firstBaseUpdate:n.firstBaseUpdate,lastBaseUpdate:n.lastBaseUpdate,shared:n.shared,callbacks:null})}function Hi(n){return{lane:n,tag:0,payload:null,callback:null,next:null}}function $i(n,i,l){var u=n.updateQueue;if(u===null)return null;if(u=u.shared,(pt&2)!==0){var b=u.pending;return b===null?i.next=i:(i.next=b.next,b.next=i),u.pending=i,i=Qo(n),qg(n,null,l),i}return Zo(n,u,i,l),Qo(n)}function _l(n,i,l){if(i=i.updateQueue,i!==null&&(i=i.shared,(l&4194048)!==0)){var u=i.lanes;u&=n.pendingLanes,l|=u,i.lanes=l,Ue(n,l)}}function Ud(n,i){var l=n.updateQueue,u=n.alternate;if(u!==null&&(u=u.updateQueue,l===u)){var b=null,v=null;if(l=l.firstBaseUpdate,l!==null){do{var C={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};v===null?b=v=C:v=v.next=C,l=l.next}while(l!==null);v===null?b=v=i:v=v.next=i}else b=v=i;l={baseState:u.baseState,firstBaseUpdate:b,lastBaseUpdate:v,shared:u.shared,callbacks:u.callbacks},n.updateQueue=l;return}n=l.lastBaseUpdate,n===null?l.firstBaseUpdate=i:n.next=i,l.lastBaseUpdate=i}var Hd=!1;function wl(){if(Hd){var n=ms;if(n!==null)throw n}}function El(n,i,l,u){Hd=!1;var b=n.updateQueue;Ui=!1;var v=b.firstBaseUpdate,C=b.lastBaseUpdate,F=b.shared.pending;if(F!==null){b.shared.pending=null;var ne=F,le=ne.next;ne.next=null,C===null?v=le:C.next=le,C=ne;var he=n.alternate;he!==null&&(he=he.updateQueue,F=he.lastBaseUpdate,F!==C&&(F===null?he.firstBaseUpdate=le:F.next=le,he.lastBaseUpdate=ne))}if(v!==null){var ge=b.baseState;C=0,he=le=ne=null,F=v;do{var oe=F.lane&-536870913,de=oe!==F.lane;if(de?(it&oe)===oe:(u&oe)===oe){oe!==0&&oe===hs&&(Hd=!0),he!==null&&(he=he.next={lane:0,tag:F.tag,payload:F.payload,callback:null,next:null});e:{var Ce=n,He=F;oe=i;var Nt=l;switch(He.tag){case 1:if(Ce=He.payload,typeof Ce=="function"){ge=Ce.call(Nt,ge,oe);break e}ge=Ce;break e;case 3:Ce.flags=Ce.flags&-65537|128;case 0:if(Ce=He.payload,oe=typeof Ce=="function"?Ce.call(Nt,ge,oe):Ce,oe==null)break e;ge=p({},ge,oe);break e;case 2:Ui=!0}}oe=F.callback,oe!==null&&(n.flags|=64,de&&(n.flags|=8192),de=b.callbacks,de===null?b.callbacks=[oe]:de.push(oe))}else de={lane:oe,tag:F.tag,payload:F.payload,callback:F.callback,next:null},he===null?(le=he=de,ne=ge):he=he.next=de,C|=oe;if(F=F.next,F===null){if(F=b.shared.pending,F===null)break;de=F,F=de.next,de.next=null,b.lastBaseUpdate=de,b.shared.pending=null}}while(!0);he===null&&(ne=ge),b.baseState=ne,b.firstBaseUpdate=le,b.lastBaseUpdate=he,v===null&&(b.shared.lanes=0),Vi|=C,n.lanes=C,n.memoizedState=ge}}function sb(n,i){if(typeof n!="function")throw Error(a(191,n));n.call(i)}function lb(n,i){var l=n.callbacks;if(l!==null)for(n.callbacks=null,n=0;nv?v:8;var C=O.T,F={};O.T=F,sf(n,!1,i,l);try{var ne=b(),le=O.S;if(le!==null&&le(F,ne),ne!==null&&typeof ne=="object"&&typeof ne.then=="function"){var he=r2(ne,u);kl(n,i,he,tr(n))}else kl(n,i,u,tr(n))}catch(ge){kl(n,i,{then:function(){},status:"rejected",reason:ge},tr())}finally{H.p=v,C!==null&&F.types!==null&&(C.types=F.types),O.T=C}}function c2(){}function rf(n,i,l,u){if(n.tag!==5)throw Error(a(476));var b=Ub(n).queue;Bb(n,b,i,X,l===null?c2:function(){return Hb(n),l(u)})}function Ub(n){var i=n.memoizedState;if(i!==null)return i;i={memoizedState:X,baseState:X,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:li,lastRenderedState:X},next:null};var l={};return i.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:li,lastRenderedState:l},next:null},n.memoizedState=i,n=n.alternate,n!==null&&(n.memoizedState=i),i}function Hb(n){var i=Ub(n);i.next===null&&(i=n.alternate.memoizedState),kl(n,i.next.queue,{},tr())}function af(){return yn(Pl)}function $b(){return Qt().memoizedState}function qb(){return Qt().memoizedState}function u2(n){for(var i=n.return;i!==null;){switch(i.tag){case 24:case 3:var l=tr();n=Hi(l);var u=$i(i,n,l);u!==null&&(qn(u,i,l),_l(u,i,l)),i={cache:Dd()},n.payload=i;return}i=i.return}}function d2(n,i,l){var u=tr();l={lane:u,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},gc(n)?Fb(i,l):(l=wd(n,i,l,u),l!==null&&(qn(l,n,u),Gb(l,i,u)))}function Pb(n,i,l){var u=tr();kl(n,i,l,u)}function kl(n,i,l,u){var b={lane:u,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(gc(n))Fb(i,b);else{var v=n.alternate;if(n.lanes===0&&(v===null||v.lanes===0)&&(v=i.lastRenderedReducer,v!==null))try{var C=i.lastRenderedState,F=v(C,l);if(b.hasEagerState=!0,b.eagerState=F,Kn(F,C))return Zo(n,i,b,0),kt===null&&Ko(),!1}catch{}finally{}if(l=wd(n,i,b,u),l!==null)return qn(l,n,u),Gb(l,i,u),!0}return!1}function sf(n,i,l,u){if(u={lane:2,revertLane:Bf(),gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},gc(n)){if(i)throw Error(a(479))}else i=wd(n,l,u,2),i!==null&&qn(i,n,2)}function gc(n){var i=n.alternate;return n===Xe||i!==null&&i===Xe}function Fb(n,i){xs=cc=!0;var l=n.pending;l===null?i.next=i:(i.next=l.next,l.next=i),n.pending=i}function Gb(n,i,l){if((l&4194048)!==0){var u=i.lanes;u&=n.pendingLanes,l|=u,i.lanes=l,Ue(n,l)}}var Tl={readContext:yn,use:fc,useCallback:Gt,useContext:Gt,useEffect:Gt,useImperativeHandle:Gt,useLayoutEffect:Gt,useInsertionEffect:Gt,useMemo:Gt,useReducer:Gt,useRef:Gt,useState:Gt,useDebugValue:Gt,useDeferredValue:Gt,useTransition:Gt,useSyncExternalStore:Gt,useId:Gt,useHostTransitionStatus:Gt,useFormState:Gt,useActionState:Gt,useOptimistic:Gt,useMemoCache:Gt,useCacheRefresh:Gt};Tl.useEffectEvent=Gt;var Vb={readContext:yn,use:fc,useCallback:function(n,i){return Rn().memoizedState=[n,i===void 0?null:i],n},useContext:yn,useEffect:Ab,useImperativeHandle:function(n,i,l){l=l!=null?l.concat([n]):null,mc(4194308,4,Db.bind(null,i,n),l)},useLayoutEffect:function(n,i){return mc(4194308,4,n,i)},useInsertionEffect:function(n,i){mc(4,2,n,i)},useMemo:function(n,i){var l=Rn();i=i===void 0?null:i;var u=n();if(Oa){Wt(!0);try{n()}finally{Wt(!1)}}return l.memoizedState=[u,i],u},useReducer:function(n,i,l){var u=Rn();if(l!==void 0){var b=l(i);if(Oa){Wt(!0);try{l(i)}finally{Wt(!1)}}}else b=i;return u.memoizedState=u.baseState=b,n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:n,lastRenderedState:b},u.queue=n,n=n.dispatch=d2.bind(null,Xe,n),[u.memoizedState,n]},useRef:function(n){var i=Rn();return n={current:n},i.memoizedState=n},useState:function(n){n=Wd(n);var i=n.queue,l=Pb.bind(null,Xe,i);return i.dispatch=l,[n.memoizedState,l]},useDebugValue:tf,useDeferredValue:function(n,i){var l=Rn();return nf(l,n,i)},useTransition:function(){var n=Wd(!1);return n=Bb.bind(null,Xe,n.queue,!0,!1),Rn().memoizedState=n,[!1,n]},useSyncExternalStore:function(n,i,l){var u=Xe,b=Rn();if(lt){if(l===void 0)throw Error(a(407));l=l()}else{if(l=i(),kt===null)throw Error(a(349));(it&127)!==0||hb(u,i,l)}b.memoizedState=l;var v={value:l,getSnapshot:i};return b.queue=v,Ab(pb.bind(null,u,v,n),[n]),u.flags|=2048,vs(9,{destroy:void 0},mb.bind(null,u,v,l,i),null),l},useId:function(){var n=Rn(),i=kt.identifierPrefix;if(lt){var l=$r,u=Hr;l=(u&~(1<<32-ut(u)-1)).toString(32)+l,i="_"+i+"R_"+l,l=uc++,0<\/script>",v=v.removeChild(v.firstChild);break;case"select":v=typeof u.is=="string"?C.createElement("select",{is:u.is}):C.createElement("select"),u.multiple?v.multiple=!0:u.size&&(v.size=u.size);break;default:v=typeof u.is=="string"?C.createElement(b,{is:u.is}):C.createElement(b)}}v[Ut]=i,v[mn]=u;e:for(C=i.child;C!==null;){if(C.tag===5||C.tag===6)v.appendChild(C.stateNode);else if(C.tag!==4&&C.tag!==27&&C.child!==null){C.child.return=C,C=C.child;continue}if(C===i)break e;for(;C.sibling===null;){if(C.return===null||C.return===i)break e;C=C.return}C.sibling.return=C.return,C=C.sibling}i.stateNode=v;e:switch(_n(v,b,u),b){case"button":case"input":case"select":case"textarea":u=!!u.autoFocus;break e;case"img":u=!0;break e;default:u=!1}u&&ci(i)}}return jt(i),vf(i,i.type,n===null?null:n.memoizedProps,i.pendingProps,l),null;case 6:if(n&&i.stateNode!=null)n.memoizedProps!==u&&ci(i);else{if(typeof u!="string"&&i.stateNode===null)throw Error(a(166));if(n=Q.current,ds(i)){if(n=i.stateNode,l=i.memoizedProps,u=null,b=xn,b!==null)switch(b.tag){case 27:case 5:u=b.memoizedProps}n[Ut]=i,n=!!(n.nodeValue===l||u!==null&&u.suppressHydrationWarning===!0||d0(n.nodeValue,l)),n||Ii(i,!0)}else n=zc(n).createTextNode(u),n[Ut]=i,i.stateNode=n}return jt(i),null;case 31:if(l=i.memoizedState,n===null||n.memoizedState!==null){if(u=ds(i),l!==null){if(n===null){if(!u)throw Error(a(318));if(n=i.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(a(557));n[Ut]=i}else Na(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;jt(i),n=!1}else l=Ad(),n!==null&&n.memoizedState!==null&&(n.memoizedState.hydrationErrors=l),n=!0;if(!n)return i.flags&256?(Wn(i),i):(Wn(i),null);if((i.flags&128)!==0)throw Error(a(558))}return jt(i),null;case 13:if(u=i.memoizedState,n===null||n.memoizedState!==null&&n.memoizedState.dehydrated!==null){if(b=ds(i),u!==null&&u.dehydrated!==null){if(n===null){if(!b)throw Error(a(318));if(b=i.memoizedState,b=b!==null?b.dehydrated:null,!b)throw Error(a(317));b[Ut]=i}else Na(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;jt(i),b=!1}else b=Ad(),n!==null&&n.memoizedState!==null&&(n.memoizedState.hydrationErrors=b),b=!0;if(!b)return i.flags&256?(Wn(i),i):(Wn(i),null)}return Wn(i),(i.flags&128)!==0?(i.lanes=l,i):(l=u!==null,n=n!==null&&n.memoizedState!==null,l&&(u=i.child,b=null,u.alternate!==null&&u.alternate.memoizedState!==null&&u.alternate.memoizedState.cachePool!==null&&(b=u.alternate.memoizedState.cachePool.pool),v=null,u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(v=u.memoizedState.cachePool.pool),v!==b&&(u.flags|=2048)),l!==n&&l&&(i.child.flags|=8192),_c(i,i.updateQueue),jt(i),null);case 4:return te(),n===null&&qf(i.stateNode.containerInfo),jt(i),null;case 10:return ai(i.type),jt(i),null;case 19:if(Y(Zt),u=i.memoizedState,u===null)return jt(i),null;if(b=(i.flags&128)!==0,v=u.rendering,v===null)if(b)Al(u,!1);else{if(Vt!==0||n!==null&&(n.flags&128)!==0)for(n=i.child;n!==null;){if(v=oc(n),v!==null){for(i.flags|=128,Al(u,!1),n=v.updateQueue,i.updateQueue=n,_c(i,n),i.subtreeFlags=0,n=l,l=i.child;l!==null;)Pg(l,n),l=l.sibling;return L(Zt,Zt.current&1|2),lt&&ri(i,u.treeForkCount),i.child}n=n.sibling}u.tail!==null&&ct()>kc&&(i.flags|=128,b=!0,Al(u,!1),i.lanes=4194304)}else{if(!b)if(n=oc(v),n!==null){if(i.flags|=128,b=!0,n=n.updateQueue,i.updateQueue=n,_c(i,n),Al(u,!0),u.tail===null&&u.tailMode==="hidden"&&!v.alternate&&!lt)return jt(i),null}else 2*ct()-u.renderingStartTime>kc&&l!==536870912&&(i.flags|=128,b=!0,Al(u,!1),i.lanes=4194304);u.isBackwards?(v.sibling=i.child,i.child=v):(n=u.last,n!==null?n.sibling=v:i.child=v,u.last=v)}return u.tail!==null?(n=u.tail,u.rendering=n,u.tail=n.sibling,u.renderingStartTime=ct(),n.sibling=null,l=Zt.current,L(Zt,b?l&1|2:l&1),lt&&ri(i,u.treeForkCount),n):(jt(i),null);case 22:case 23:return Wn(i),qd(),u=i.memoizedState!==null,n!==null?n.memoizedState!==null!==u&&(i.flags|=8192):u&&(i.flags|=8192),u?(l&536870912)!==0&&(i.flags&128)===0&&(jt(i),i.subtreeFlags&6&&(i.flags|=8192)):jt(i),l=i.updateQueue,l!==null&&_c(i,l.retryQueue),l=null,n!==null&&n.memoizedState!==null&&n.memoizedState.cachePool!==null&&(l=n.memoizedState.cachePool.pool),u=null,i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(u=i.memoizedState.cachePool.pool),u!==l&&(i.flags|=2048),n!==null&&Y(Ta),null;case 24:return l=null,n!==null&&(l=n.memoizedState.cache),i.memoizedState.cache!==l&&(i.flags|=2048),ai(en),jt(i),null;case 25:return null;case 30:return null}throw Error(a(156,i.tag))}function g2(n,i){switch(Td(i),i.tag){case 1:return n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 3:return ai(en),te(),n=i.flags,(n&65536)!==0&&(n&128)===0?(i.flags=n&-65537|128,i):null;case 26:case 27:case 5:return fe(i),null;case 31:if(i.memoizedState!==null){if(Wn(i),i.alternate===null)throw Error(a(340));Na()}return n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 13:if(Wn(i),n=i.memoizedState,n!==null&&n.dehydrated!==null){if(i.alternate===null)throw Error(a(340));Na()}return n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 19:return Y(Zt),null;case 4:return te(),null;case 10:return ai(i.type),null;case 22:case 23:return Wn(i),qd(),n!==null&&Y(Ta),n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 24:return ai(en),null;case 25:return null;default:return null}}function gx(n,i){switch(Td(i),i.tag){case 3:ai(en),te();break;case 26:case 27:case 5:fe(i);break;case 4:te();break;case 31:i.memoizedState!==null&&Wn(i);break;case 13:Wn(i);break;case 19:Y(Zt);break;case 10:ai(i.type);break;case 22:case 23:Wn(i),qd(),n!==null&&Y(Ta);break;case 24:ai(en)}}function Ml(n,i){try{var l=i.updateQueue,u=l!==null?l.lastEffect:null;if(u!==null){var b=u.next;l=b;do{if((l.tag&n)===n){u=void 0;var v=l.create,C=l.inst;u=v(),C.destroy=u}l=l.next}while(l!==b)}}catch(F){yt(i,i.return,F)}}function Fi(n,i,l){try{var u=i.updateQueue,b=u!==null?u.lastEffect:null;if(b!==null){var v=b.next;u=v;do{if((u.tag&n)===n){var C=u.inst,F=C.destroy;if(F!==void 0){C.destroy=void 0,b=i;var ne=l,le=F;try{le()}catch(he){yt(b,ne,he)}}}u=u.next}while(u!==v)}}catch(he){yt(i,i.return,he)}}function bx(n){var i=n.updateQueue;if(i!==null){var l=n.stateNode;try{lb(i,l)}catch(u){yt(n,n.return,u)}}}function xx(n,i,l){l.props=Ra(n.type,n.memoizedProps),l.state=n.memoizedState;try{l.componentWillUnmount()}catch(u){yt(n,i,u)}}function Ol(n,i){try{var l=n.ref;if(l!==null){switch(n.tag){case 26:case 27:case 5:var u=n.stateNode;break;case 30:u=n.stateNode;break;default:u=n.stateNode}typeof l=="function"?n.refCleanup=l(u):l.current=u}}catch(b){yt(n,i,b)}}function qr(n,i){var l=n.ref,u=n.refCleanup;if(l!==null)if(typeof u=="function")try{u()}catch(b){yt(n,i,b)}finally{n.refCleanup=null,n=n.alternate,n!=null&&(n.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(b){yt(n,i,b)}else l.current=null}function yx(n){var i=n.type,l=n.memoizedProps,u=n.stateNode;try{e:switch(i){case"button":case"input":case"select":case"textarea":l.autoFocus&&u.focus();break e;case"img":l.src?u.src=l.src:l.srcSet&&(u.srcset=l.srcSet)}}catch(b){yt(n,n.return,b)}}function _f(n,i,l){try{var u=n.stateNode;B2(u,n.type,l,i),u[mn]=i}catch(b){yt(n,n.return,b)}}function vx(n){return n.tag===5||n.tag===3||n.tag===26||n.tag===27&&Qi(n.type)||n.tag===4}function wf(n){e:for(;;){for(;n.sibling===null;){if(n.return===null||vx(n.return))return null;n=n.return}for(n.sibling.return=n.return,n=n.sibling;n.tag!==5&&n.tag!==6&&n.tag!==18;){if(n.tag===27&&Qi(n.type)||n.flags&2||n.child===null||n.tag===4)continue e;n.child.return=n,n=n.child}if(!(n.flags&2))return n.stateNode}}function Ef(n,i,l){var u=n.tag;if(u===5||u===6)n=n.stateNode,i?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(n,i):(i=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,i.appendChild(n),l=l._reactRootContainer,l!=null||i.onclick!==null||(i.onclick=_e));else if(u!==4&&(u===27&&Qi(n.type)&&(l=n.stateNode,i=null),n=n.child,n!==null))for(Ef(n,i,l),n=n.sibling;n!==null;)Ef(n,i,l),n=n.sibling}function wc(n,i,l){var u=n.tag;if(u===5||u===6)n=n.stateNode,i?l.insertBefore(n,i):l.appendChild(n);else if(u!==4&&(u===27&&Qi(n.type)&&(l=n.stateNode),n=n.child,n!==null))for(wc(n,i,l),n=n.sibling;n!==null;)wc(n,i,l),n=n.sibling}function _x(n){var i=n.stateNode,l=n.memoizedProps;try{for(var u=n.type,b=i.attributes;b.length;)i.removeAttributeNode(b[0]);_n(i,u,l),i[Ut]=n,i[mn]=l}catch(v){yt(n,n.return,v)}}var ui=!1,rn=!1,Nf=!1,wx=typeof WeakSet=="function"?WeakSet:Set,gn=null;function b2(n,i){if(n=n.containerInfo,Gf=Pc,n=jg(n),gd(n)){if("selectionStart"in n)var l={start:n.selectionStart,end:n.selectionEnd};else e:{l=(l=n.ownerDocument)&&l.defaultView||window;var u=l.getSelection&&l.getSelection();if(u&&u.rangeCount!==0){l=u.anchorNode;var b=u.anchorOffset,v=u.focusNode;u=u.focusOffset;try{l.nodeType,v.nodeType}catch{l=null;break e}var C=0,F=-1,ne=-1,le=0,he=0,ge=n,oe=null;t:for(;;){for(var de;ge!==l||b!==0&&ge.nodeType!==3||(F=C+b),ge!==v||u!==0&&ge.nodeType!==3||(ne=C+u),ge.nodeType===3&&(C+=ge.nodeValue.length),(de=ge.firstChild)!==null;)oe=ge,ge=de;for(;;){if(ge===n)break t;if(oe===l&&++le===b&&(F=C),oe===v&&++he===u&&(ne=C),(de=ge.nextSibling)!==null)break;ge=oe,oe=ge.parentNode}ge=de}l=F===-1||ne===-1?null:{start:F,end:ne}}else l=null}l=l||{start:0,end:0}}else l=null;for(Vf={focusedElem:n,selectionRange:l},Pc=!1,gn=i;gn!==null;)if(i=gn,n=i.child,(i.subtreeFlags&1028)!==0&&n!==null)n.return=i,gn=n;else for(;gn!==null;){switch(i=gn,v=i.alternate,n=i.flags,i.tag){case 0:if((n&4)!==0&&(n=i.updateQueue,n=n!==null?n.events:null,n!==null))for(l=0;l title"))),_n(v,u,l),v[Ut]=n,Ft(v),u=v;break e;case"link":var C=C0("link","href",b).get(u+(l.href||""));if(C){for(var F=0;FNt&&(C=Nt,Nt=He,He=C);var ae=Rg(F,He),ie=Rg(F,Nt);if(ae&&ie&&(de.rangeCount!==1||de.anchorNode!==ae.node||de.anchorOffset!==ae.offset||de.focusNode!==ie.node||de.focusOffset!==ie.offset)){var se=ge.createRange();se.setStart(ae.node,ae.offset),de.removeAllRanges(),He>Nt?(de.addRange(se),de.extend(ie.node,ie.offset)):(se.setEnd(ie.node,ie.offset),de.addRange(se))}}}}for(ge=[],de=F;de=de.parentNode;)de.nodeType===1&&ge.push({element:de,left:de.scrollLeft,top:de.scrollTop});for(typeof F.focus=="function"&&F.focus(),F=0;Fl?32:l,O.T=null,l=Of,Of=null;var v=Xi,C=pi;if(dn=0,Ss=Xi=null,pi=0,(pt&6)!==0)throw Error(a(331));var F=pt;if(pt|=4,Dx(v.current),Mx(v,v.current,C,l),pt=F,Il(0,!1),At&&typeof At.onPostCommitFiberRoot=="function")try{At.onPostCommitFiberRoot(Kt,v)}catch{}return!0}finally{H.p=b,O.T=u,Qx(n,i)}}function Jx(n,i,l){i=cr(l,i),i=uf(n.stateNode,i,2),n=$i(n,i,2),n!==null&&(gt(n,2),Pr(n))}function yt(n,i,l){if(n.tag===3)Jx(n,n,l);else for(;i!==null;){if(i.tag===3){Jx(i,n,l);break}else if(i.tag===1){var u=i.stateNode;if(typeof i.type.getDerivedStateFromError=="function"||typeof u.componentDidCatch=="function"&&(Yi===null||!Yi.has(u))){n=cr(l,n),l=ex(2),u=$i(i,l,2),u!==null&&(tx(l,u,i,n),gt(u,2),Pr(u));break}}i=i.return}}function Lf(n,i,l){var u=n.pingCache;if(u===null){u=n.pingCache=new v2;var b=new Set;u.set(i,b)}else b=u.get(i),b===void 0&&(b=new Set,u.set(i,b));b.has(l)||(Tf=!0,b.add(l),n=S2.bind(null,n,i,l),i.then(n,n))}function S2(n,i,l){var u=n.pingCache;u!==null&&u.delete(i),n.pingedLanes|=n.suspendedLanes&l,n.warmLanes&=~l,kt===n&&(it&l)===l&&(Vt===4||Vt===3&&(it&62914560)===it&&300>ct()-Sc?(pt&2)===0&&ks(n,0):Cf|=l,Ns===it&&(Ns=0)),Pr(n)}function e0(n,i){i===0&&(i=Pe()),n=wa(n,i),n!==null&&(gt(n,i),Pr(n))}function k2(n){var i=n.memoizedState,l=0;i!==null&&(l=i.retryLane),e0(n,l)}function T2(n,i){var l=0;switch(n.tag){case 31:case 13:var u=n.stateNode,b=n.memoizedState;b!==null&&(l=b.retryLane);break;case 19:u=n.stateNode;break;case 22:u=n.stateNode._retryCache;break;default:throw Error(a(314))}u!==null&&u.delete(i),e0(n,l)}function C2(n,i){return Pt(n,i)}var Rc=null,Cs=null,zf=!1,Dc=!1,If=!1,Zi=0;function Pr(n){n!==Cs&&n.next===null&&(Cs===null?Rc=Cs=n:Cs=Cs.next=n),Dc=!0,zf||(zf=!0,M2())}function Il(n,i){if(!If&&Dc){If=!0;do for(var l=!1,u=Rc;u!==null;){if(n!==0){var b=u.pendingLanes;if(b===0)var v=0;else{var C=u.suspendedLanes,F=u.pingedLanes;v=(1<<31-ut(42|n)+1)-1,v&=b&~(C&~F),v=v&201326741?v&201326741|1:v?v|2:0}v!==0&&(l=!0,i0(u,v))}else v=it,v=re(u,u===kt?v:0,u.cancelPendingCommit!==null||u.timeoutHandle!==-1),(v&3)===0||me(u,v)||(l=!0,i0(u,v));u=u.next}while(l);If=!1}}function A2(){t0()}function t0(){Dc=zf=!1;var n=0;Zi!==0&&H2()&&(n=Zi);for(var i=ct(),l=null,u=Rc;u!==null;){var b=u.next,v=n0(u,i);v===0?(u.next=null,l===null?Rc=b:l.next=b,b===null&&(Cs=l)):(l=u,(n!==0||(v&3)!==0)&&(Dc=!0)),u=b}dn!==0&&dn!==5||Il(n),Zi!==0&&(Zi=0)}function n0(n,i){for(var l=n.suspendedLanes,u=n.pingedLanes,b=n.expirationTimes,v=n.pendingLanes&-62914561;0F)break;var he=ne.transferSize,ge=ne.initiatorType;he&&f0(ge)&&(ne=ne.responseEnd,C+=he*(ne"u"?null:document;function N0(n,i,l){var u=As;if(u&&typeof i=="string"&&i){var b=Sn(i);b='link[rel="'+n+'"][href="'+b+'"]',typeof l=="string"&&(b+='[crossorigin="'+l+'"]'),E0.has(b)||(E0.add(b),n={rel:n,crossOrigin:l,href:i},u.querySelector(b)===null&&(i=u.createElement("link"),_n(i,"link",n),Ft(i),u.head.appendChild(i)))}}function K2(n){gi.D(n),N0("dns-prefetch",n,null)}function Z2(n,i){gi.C(n,i),N0("preconnect",n,i)}function Q2(n,i,l){gi.L(n,i,l);var u=As;if(u&&n&&i){var b='link[rel="preload"][as="'+Sn(i)+'"]';i==="image"&&l&&l.imageSrcSet?(b+='[imagesrcset="'+Sn(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(b+='[imagesizes="'+Sn(l.imageSizes)+'"]')):b+='[href="'+Sn(n)+'"]';var v=b;switch(i){case"style":v=Ms(n);break;case"script":v=Os(n)}pr.has(v)||(n=p({rel:"preload",href:i==="image"&&l&&l.imageSrcSet?void 0:n,as:i},l),pr.set(v,n),u.querySelector(b)!==null||i==="style"&&u.querySelector($l(v))||i==="script"&&u.querySelector(ql(v))||(i=u.createElement("link"),_n(i,"link",n),Ft(i),u.head.appendChild(i)))}}function W2(n,i){gi.m(n,i);var l=As;if(l&&n){var u=i&&typeof i.as=="string"?i.as:"script",b='link[rel="modulepreload"][as="'+Sn(u)+'"][href="'+Sn(n)+'"]',v=b;switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":v=Os(n)}if(!pr.has(v)&&(n=p({rel:"modulepreload",href:n},i),pr.set(v,n),l.querySelector(b)===null)){switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(ql(v)))return}u=l.createElement("link"),_n(u,"link",n),Ft(u),l.head.appendChild(u)}}}function J2(n,i,l){gi.S(n,i,l);var u=As;if(u&&n){var b=Br(u).hoistableStyles,v=Ms(n);i=i||"default";var C=b.get(v);if(!C){var F={loading:0,preload:null};if(C=u.querySelector($l(v)))F.loading=5;else{n=p({rel:"stylesheet",href:n,"data-precedence":i},l),(l=pr.get(v))&&Jf(n,l);var ne=C=u.createElement("link");Ft(ne),_n(ne,"link",n),ne._p=new Promise(function(le,he){ne.onload=le,ne.onerror=he}),ne.addEventListener("load",function(){F.loading|=1}),ne.addEventListener("error",function(){F.loading|=2}),F.loading|=4,Bc(C,i,u)}C={type:"stylesheet",instance:C,count:1,state:F},b.set(v,C)}}}function ek(n,i){gi.X(n,i);var l=As;if(l&&n){var u=Br(l).hoistableScripts,b=Os(n),v=u.get(b);v||(v=l.querySelector(ql(b)),v||(n=p({src:n,async:!0},i),(i=pr.get(b))&&eh(n,i),v=l.createElement("script"),Ft(v),_n(v,"link",n),l.head.appendChild(v)),v={type:"script",instance:v,count:1,state:null},u.set(b,v))}}function tk(n,i){gi.M(n,i);var l=As;if(l&&n){var u=Br(l).hoistableScripts,b=Os(n),v=u.get(b);v||(v=l.querySelector(ql(b)),v||(n=p({src:n,async:!0,type:"module"},i),(i=pr.get(b))&&eh(n,i),v=l.createElement("script"),Ft(v),_n(v,"link",n),l.head.appendChild(v)),v={type:"script",instance:v,count:1,state:null},u.set(b,v))}}function S0(n,i,l,u){var b=(b=Q.current)?Ic(b):null;if(!b)throw Error(a(446));switch(n){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(i=Ms(l.href),l=Br(b).hoistableStyles,u=l.get(i),u||(u={type:"style",instance:null,count:0,state:null},l.set(i,u)),u):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){n=Ms(l.href);var v=Br(b).hoistableStyles,C=v.get(n);if(C||(b=b.ownerDocument||b,C={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},v.set(n,C),(v=b.querySelector($l(n)))&&!v._p&&(C.instance=v,C.state.loading=5),pr.has(n)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},pr.set(n,l),v||nk(b,n,l,C.state))),i&&u===null)throw Error(a(528,""));return C}if(i&&u!==null)throw Error(a(529,""));return null;case"script":return i=l.async,l=l.src,typeof l=="string"&&i&&typeof i!="function"&&typeof i!="symbol"?(i=Os(l),l=Br(b).hoistableScripts,u=l.get(i),u||(u={type:"script",instance:null,count:0,state:null},l.set(i,u)),u):{type:"void",instance:null,count:0,state:null};default:throw Error(a(444,n))}}function Ms(n){return'href="'+Sn(n)+'"'}function $l(n){return'link[rel="stylesheet"]['+n+"]"}function k0(n){return p({},n,{"data-precedence":n.precedence,precedence:null})}function nk(n,i,l,u){n.querySelector('link[rel="preload"][as="style"]['+i+"]")?u.loading=1:(i=n.createElement("link"),u.preload=i,i.addEventListener("load",function(){return u.loading|=1}),i.addEventListener("error",function(){return u.loading|=2}),_n(i,"link",l),Ft(i),n.head.appendChild(i))}function Os(n){return'[src="'+Sn(n)+'"]'}function ql(n){return"script[async]"+n}function T0(n,i,l){if(i.count++,i.instance===null)switch(i.type){case"style":var u=n.querySelector('style[data-href~="'+Sn(l.href)+'"]');if(u)return i.instance=u,Ft(u),u;var b=p({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return u=(n.ownerDocument||n).createElement("style"),Ft(u),_n(u,"style",b),Bc(u,l.precedence,n),i.instance=u;case"stylesheet":b=Ms(l.href);var v=n.querySelector($l(b));if(v)return i.state.loading|=4,i.instance=v,Ft(v),v;u=k0(l),(b=pr.get(b))&&Jf(u,b),v=(n.ownerDocument||n).createElement("link"),Ft(v);var C=v;return C._p=new Promise(function(F,ne){C.onload=F,C.onerror=ne}),_n(v,"link",u),i.state.loading|=4,Bc(v,l.precedence,n),i.instance=v;case"script":return v=Os(l.src),(b=n.querySelector(ql(v)))?(i.instance=b,Ft(b),b):(u=l,(b=pr.get(v))&&(u=p({},l),eh(u,b)),n=n.ownerDocument||n,b=n.createElement("script"),Ft(b),_n(b,"link",u),n.head.appendChild(b),i.instance=b);case"void":return null;default:throw Error(a(443,i.type))}else i.type==="stylesheet"&&(i.state.loading&4)===0&&(u=i.instance,i.state.loading|=4,Bc(u,l.precedence,n));return i.instance}function Bc(n,i,l){for(var u=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),b=u.length?u[u.length-1]:null,v=b,C=0;C title"):null)}function rk(n,i,l){if(l===1||i.itemProp!=null)return!1;switch(n){case"meta":case"title":return!0;case"style":if(typeof i.precedence!="string"||typeof i.href!="string"||i.href==="")break;return!0;case"link":if(typeof i.rel!="string"||typeof i.href!="string"||i.href===""||i.onLoad||i.onError)break;switch(i.rel){case"stylesheet":return n=i.disabled,typeof i.precedence=="string"&&n==null;default:return!0}case"script":if(i.async&&typeof i.async!="function"&&typeof i.async!="symbol"&&!i.onLoad&&!i.onError&&i.src&&typeof i.src=="string")return!0}return!1}function M0(n){return!(n.type==="stylesheet"&&(n.state.loading&3)===0)}function ik(n,i,l,u){if(l.type==="stylesheet"&&(typeof u.media!="string"||matchMedia(u.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var b=Ms(u.href),v=i.querySelector($l(b));if(v){i=v._p,i!==null&&typeof i=="object"&&typeof i.then=="function"&&(n.count++,n=Hc.bind(n),i.then(n,n)),l.state.loading|=4,l.instance=v,Ft(v);return}v=i.ownerDocument||i,u=k0(u),(b=pr.get(b))&&Jf(u,b),v=v.createElement("link"),Ft(v);var C=v;C._p=new Promise(function(F,ne){C.onload=F,C.onerror=ne}),_n(v,"link",u),l.instance=v}n.stylesheets===null&&(n.stylesheets=new Map),n.stylesheets.set(l,i),(i=l.state.preload)&&(l.state.loading&3)===0&&(n.count++,l=Hc.bind(n),i.addEventListener("load",l),i.addEventListener("error",l))}}var th=0;function ak(n,i){return n.stylesheets&&n.count===0&&qc(n,n.stylesheets),0th?50:800)+i);return n.unsuspend=l,function(){n.unsuspend=null,clearTimeout(u),clearTimeout(b)}}:null}function Hc(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)qc(this,this.stylesheets);else if(this.unsuspend){var n=this.unsuspend;this.unsuspend=null,n()}}}var $c=null;function qc(n,i){n.stylesheets=null,n.unsuspend!==null&&(n.count++,$c=new Map,i.forEach(sk,n),$c=null,Hc.call(n))}function sk(n,i){if(!(i.state.loading&4)){var l=$c.get(n);if(l)var u=l.get(null);else{l=new Map,$c.set(n,l);for(var b=n.querySelectorAll("link[data-precedence],style[data-precedence]"),v=0;v"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),uh.exports=_k(),uh.exports}var Ek=wk();/** +`+u.stack}}var Yt=Object.prototype.hasOwnProperty,Pt=e.unstable_scheduleCallback,Xt=e.unstable_cancelCallback,Yn=e.unstable_shouldYield,En=e.unstable_requestPaint,ct=e.unstable_now,It=e.unstable_getCurrentPriorityLevel,ue=e.unstable_ImmediatePriority,xe=e.unstable_UserBlockingPriority,Oe=e.unstable_NormalPriority,Fe=e.unstable_LowPriority,Ze=e.unstable_IdlePriority,on=e.log,Nn=e.unstable_setDisableYieldValue,Kt=null,At=null;function Wt(n){if(typeof on=="function"&&Nn(n),At&&typeof At.setStrictMode=="function")try{At.setStrictMode(Kt,n)}catch{}}var ut=Math.clz32?Math.clz32:Ni,zn=Math.log,cn=Math.LN2;function Ni(n){return n>>>=0,n===0?32:31-(zn(n)/cn|0)|0}var nt=256,Xn=262144,Mn=4194304;function hn(n){var i=n&42;if(i!==0)return i;switch(n&-n){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return n&261888;case 262144:case 524288:case 1048576:case 2097152:return n&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return n&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return n}}function re(n,i,l){var u=n.pendingLanes;if(u===0)return 0;var b=0,v=n.suspendedLanes,A=n.pingedLanes;n=n.warmLanes;var F=u&134217727;return F!==0?(u=F&~v,u!==0?b=hn(u):(A&=F,A!==0?b=hn(A):l||(l=F&~n,l!==0&&(b=hn(l))))):(F=u&~v,F!==0?b=hn(F):A!==0?b=hn(A):l||(l=u&~n,l!==0&&(b=hn(l)))),b===0?0:i!==0&&i!==b&&(i&v)===0&&(v=b&-b,l=i&-i,v>=l||v===32&&(l&4194048)!==0)?i:b}function me(n,i){return(n.pendingLanes&~(n.suspendedLanes&~n.pingedLanes)&i)===0}function Ee(n,i){switch(n){case 1:case 2:case 4:case 8:case 64:return i+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return i+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Pe(){var n=Mn;return Mn<<=1,(Mn&62914560)===0&&(Mn=4194304),n}function St(n){for(var i=[],l=0;31>l;l++)i.push(n);return i}function gt(n,i){n.pendingLanes|=i,i!==268435456&&(n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0)}function Ae(n,i,l,u,b,v){var A=n.pendingLanes;n.pendingLanes=l,n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0,n.expiredLanes&=l,n.entangledLanes&=l,n.errorRecoveryDisabledLanes&=l,n.shellSuspendCounter=0;var F=n.entanglements,ne=n.expirationTimes,le=n.hiddenUpdates;for(l=A&~l;0"u")return null;try{return n.activeElement||n.body}catch{return n.body}}var ns=/[\n"\\]/g;function kn(n){return n.replace(ns,function(i){return"\\"+i.charCodeAt(0).toString(16)+" "})}function ba(n,i,l,u,b,v,A,F){n.name="",A!=null&&typeof A!="function"&&typeof A!="symbol"&&typeof A!="boolean"?n.type=A:n.removeAttribute("type"),i!=null?A==="number"?(i===0&&n.value===""||n.value!=i)&&(n.value=""+_t(i)):n.value!==""+_t(i)&&(n.value=""+_t(i)):A!=="submit"&&A!=="reset"||n.removeAttribute("value"),i!=null?Oi(n,A,_t(i)):l!=null?Oi(n,A,_t(l)):u!=null&&n.removeAttribute("value"),b==null&&v!=null&&(n.defaultChecked=!!v),b!=null&&(n.checked=b&&typeof b!="function"&&typeof b!="symbol"),F!=null&&typeof F!="function"&&typeof F!="symbol"&&typeof F!="boolean"?n.name=""+_t(F):n.removeAttribute("name")}function Er(n,i,l,u,b,v,A,F){if(v!=null&&typeof v!="function"&&typeof v!="symbol"&&typeof v!="boolean"&&(n.type=v),i!=null||l!=null){if(!(v!=="submit"&&v!=="reset"||i!=null)){Ai(n);return}l=l!=null?""+_t(l):"",i=i!=null?""+_t(i):l,F||i===n.value||(n.value=i),n.defaultValue=i}u=u??b,u=typeof u!="function"&&typeof u!="symbol"&&!!u,n.checked=F?n.checked:!!u,n.defaultChecked=!!u,A!=null&&typeof A!="function"&&typeof A!="symbol"&&typeof A!="boolean"&&(n.name=A),Ai(n)}function Oi(n,i,l){i==="number"&&Mi(n.ownerDocument)===n||n.defaultValue===""+l||(n.defaultValue=""+l)}function un(n,i,l,u){if(n=n.options,i){i={};for(var b=0;b"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),ld=!1;if(ti)try{var ll={};Object.defineProperty(ll,"passive",{get:function(){ld=!0}}),window.addEventListener("test",ll,ll),window.removeEventListener("test",ll,ll)}catch{ld=!1}var ji=null,od=null,qo=null;function mg(){if(qo)return qo;var n,i=od,l=i.length,u,b="value"in ji?ji.value:ji.textContent,v=b.length;for(n=0;n=ul),vg=" ",_g=!1;function wg(n,i){switch(n){case"keyup":return IS.indexOf(i.keyCode)!==-1;case"keydown":return i.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Eg(n){return n=n.detail,typeof n=="object"&&"data"in n?n.data:null}var is=!1;function US(n,i){switch(n){case"compositionend":return Eg(i);case"keypress":return i.which!==32?null:(_g=!0,vg);case"textInput":return n=i.data,n===vg&&_g?null:n;default:return null}}function HS(n,i){if(is)return n==="compositionend"||!hd&&wg(n,i)?(n=mg(),qo=od=ji=null,is=!1,n):null;switch(n){case"paste":return null;case"keypress":if(!(i.ctrlKey||i.altKey||i.metaKey)||i.ctrlKey&&i.altKey){if(i.char&&1=i)return{node:l,offset:i-n};n=u}e:{for(;l;){if(l.nextSibling){l=l.nextSibling;break e}l=l.parentNode}l=void 0}l=Og(l)}}function Dg(n,i){return n&&i?n===i?!0:n&&n.nodeType===3?!1:i&&i.nodeType===3?Dg(n,i.parentNode):"contains"in n?n.contains(i):n.compareDocumentPosition?!!(n.compareDocumentPosition(i)&16):!1:!1}function jg(n){n=n!=null&&n.ownerDocument!=null&&n.ownerDocument.defaultView!=null?n.ownerDocument.defaultView:window;for(var i=Mi(n.document);i instanceof n.HTMLIFrameElement;){try{var l=typeof i.contentWindow.location.href=="string"}catch{l=!1}if(l)n=i.contentWindow;else break;i=Mi(n.document)}return i}function gd(n){var i=n&&n.nodeName&&n.nodeName.toLowerCase();return i&&(i==="input"&&(n.type==="text"||n.type==="search"||n.type==="tel"||n.type==="url"||n.type==="password")||i==="textarea"||n.contentEditable==="true")}var XS=ti&&"documentMode"in document&&11>=document.documentMode,as=null,bd=null,ml=null,xd=!1;function Lg(n,i,l){var u=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;xd||as==null||as!==Mi(u)||(u=as,"selectionStart"in u&&gd(u)?u={start:u.selectionStart,end:u.selectionEnd}:(u=(u.ownerDocument&&u.ownerDocument.defaultView||window).getSelection(),u={anchorNode:u.anchorNode,anchorOffset:u.anchorOffset,focusNode:u.focusNode,focusOffset:u.focusOffset}),ml&&hl(ml,u)||(ml=u,u=Lc(bd,"onSelect"),0>=A,b-=A,Hr=1<<32-ut(i)+b|l<Ke?(at=De,De=null):at=De.sibling;var mt=oe(ae,De,se[Ke],pe);if(mt===null){De===null&&(De=at);break}n&&De&&mt.alternate===null&&i(ae,De),ie=v(mt,ie,Ke),ht===null?Ie=mt:ht.sibling=mt,ht=mt,De=at}if(Ke===se.length)return l(ae,De),lt&&ri(ae,Ke),Ie;if(De===null){for(;KeKe?(at=De,De=null):at=De.sibling;var na=oe(ae,De,mt.value,pe);if(na===null){De===null&&(De=at);break}n&&De&&na.alternate===null&&i(ae,De),ie=v(na,ie,Ke),ht===null?Ie=na:ht.sibling=na,ht=na,De=at}if(mt.done)return l(ae,De),lt&&ri(ae,Ke),Ie;if(De===null){for(;!mt.done;Ke++,mt=se.next())mt=ge(ae,mt.value,pe),mt!==null&&(ie=v(mt,ie,Ke),ht===null?Ie=mt:ht.sibling=mt,ht=mt);return lt&&ri(ae,Ke),Ie}for(De=u(De);!mt.done;Ke++,mt=se.next())mt=de(De,ae,Ke,mt.value,pe),mt!==null&&(n&&mt.alternate!==null&&De.delete(mt.key===null?Ke:mt.key),ie=v(mt,ie,Ke),ht===null?Ie=mt:ht.sibling=mt,ht=mt);return n&&De.forEach(function(mk){return i(ae,mk)}),lt&&ri(ae,Ke),Ie}function Nt(ae,ie,se,pe){if(typeof se=="object"&&se!==null&&se.type===N&&se.key===null&&(se=se.props.children),typeof se=="object"&&se!==null){switch(se.$$typeof){case x:e:{for(var Ie=se.key;ie!==null;){if(ie.key===Ie){if(Ie=se.type,Ie===N){if(ie.tag===7){l(ae,ie.sibling),pe=b(ie,se.props.children),pe.return=ae,ae=pe;break e}}else if(ie.elementType===Ie||typeof Ie=="object"&&Ie!==null&&Ie.$$typeof===B&&Ca(Ie)===ie.type){l(ae,ie.sibling),pe=b(ie,se.props),vl(pe,se),pe.return=ae,ae=pe;break e}l(ae,ie);break}else i(ae,ie);ie=ie.sibling}se.type===N?(pe=Ea(se.props.children,ae.mode,pe,se.key),pe.return=ae,ae=pe):(pe=Wo(se.type,se.key,se.props,null,ae.mode,pe),vl(pe,se),pe.return=ae,ae=pe)}return A(ae);case _:e:{for(Ie=se.key;ie!==null;){if(ie.key===Ie)if(ie.tag===4&&ie.stateNode.containerInfo===se.containerInfo&&ie.stateNode.implementation===se.implementation){l(ae,ie.sibling),pe=b(ie,se.children||[]),pe.return=ae,ae=pe;break e}else{l(ae,ie);break}else i(ae,ie);ie=ie.sibling}pe=Sd(se,ae.mode,pe),pe.return=ae,ae=pe}return A(ae);case B:return se=Ca(se),Nt(ae,ie,se,pe)}if($(se))return Ce(ae,ie,se,pe);if(V(se)){if(Ie=V(se),typeof Ie!="function")throw Error(a(150));return se=Ie.call(se),He(ae,ie,se,pe)}if(typeof se.then=="function")return Nt(ae,ie,ac(se),pe);if(se.$$typeof===E)return Nt(ae,ie,tc(ae,se),pe);sc(ae,se)}return typeof se=="string"&&se!==""||typeof se=="number"||typeof se=="bigint"?(se=""+se,ie!==null&&ie.tag===6?(l(ae,ie.sibling),pe=b(ie,se),pe.return=ae,ae=pe):(l(ae,ie),pe=Nd(se,ae.mode,pe),pe.return=ae,ae=pe),A(ae)):l(ae,ie)}return function(ae,ie,se,pe){try{yl=0;var Ie=Nt(ae,ie,se,pe);return gs=null,Ie}catch(De){if(De===ps||De===rc)throw De;var ht=Zn(29,De,null,ae.mode);return ht.lanes=pe,ht.return=ae,ht}finally{}}}var Ma=ib(!0),ab=ib(!1),Ui=!1;function Id(n){n.updateQueue={baseState:n.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Bd(n,i){n=n.updateQueue,i.updateQueue===n&&(i.updateQueue={baseState:n.baseState,firstBaseUpdate:n.firstBaseUpdate,lastBaseUpdate:n.lastBaseUpdate,shared:n.shared,callbacks:null})}function Hi(n){return{lane:n,tag:0,payload:null,callback:null,next:null}}function $i(n,i,l){var u=n.updateQueue;if(u===null)return null;if(u=u.shared,(pt&2)!==0){var b=u.pending;return b===null?i.next=i:(i.next=b.next,b.next=i),u.pending=i,i=Qo(n),qg(n,null,l),i}return Zo(n,u,i,l),Qo(n)}function _l(n,i,l){if(i=i.updateQueue,i!==null&&(i=i.shared,(l&4194048)!==0)){var u=i.lanes;u&=n.pendingLanes,l|=u,i.lanes=l,Ue(n,l)}}function Ud(n,i){var l=n.updateQueue,u=n.alternate;if(u!==null&&(u=u.updateQueue,l===u)){var b=null,v=null;if(l=l.firstBaseUpdate,l!==null){do{var A={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};v===null?b=v=A:v=v.next=A,l=l.next}while(l!==null);v===null?b=v=i:v=v.next=i}else b=v=i;l={baseState:u.baseState,firstBaseUpdate:b,lastBaseUpdate:v,shared:u.shared,callbacks:u.callbacks},n.updateQueue=l;return}n=l.lastBaseUpdate,n===null?l.firstBaseUpdate=i:n.next=i,l.lastBaseUpdate=i}var Hd=!1;function wl(){if(Hd){var n=ms;if(n!==null)throw n}}function El(n,i,l,u){Hd=!1;var b=n.updateQueue;Ui=!1;var v=b.firstBaseUpdate,A=b.lastBaseUpdate,F=b.shared.pending;if(F!==null){b.shared.pending=null;var ne=F,le=ne.next;ne.next=null,A===null?v=le:A.next=le,A=ne;var he=n.alternate;he!==null&&(he=he.updateQueue,F=he.lastBaseUpdate,F!==A&&(F===null?he.firstBaseUpdate=le:F.next=le,he.lastBaseUpdate=ne))}if(v!==null){var ge=b.baseState;A=0,he=le=ne=null,F=v;do{var oe=F.lane&-536870913,de=oe!==F.lane;if(de?(it&oe)===oe:(u&oe)===oe){oe!==0&&oe===hs&&(Hd=!0),he!==null&&(he=he.next={lane:0,tag:F.tag,payload:F.payload,callback:null,next:null});e:{var Ce=n,He=F;oe=i;var Nt=l;switch(He.tag){case 1:if(Ce=He.payload,typeof Ce=="function"){ge=Ce.call(Nt,ge,oe);break e}ge=Ce;break e;case 3:Ce.flags=Ce.flags&-65537|128;case 0:if(Ce=He.payload,oe=typeof Ce=="function"?Ce.call(Nt,ge,oe):Ce,oe==null)break e;ge=p({},ge,oe);break e;case 2:Ui=!0}}oe=F.callback,oe!==null&&(n.flags|=64,de&&(n.flags|=8192),de=b.callbacks,de===null?b.callbacks=[oe]:de.push(oe))}else de={lane:oe,tag:F.tag,payload:F.payload,callback:F.callback,next:null},he===null?(le=he=de,ne=ge):he=he.next=de,A|=oe;if(F=F.next,F===null){if(F=b.shared.pending,F===null)break;de=F,F=de.next,de.next=null,b.lastBaseUpdate=de,b.shared.pending=null}}while(!0);he===null&&(ne=ge),b.baseState=ne,b.firstBaseUpdate=le,b.lastBaseUpdate=he,v===null&&(b.shared.lanes=0),Vi|=A,n.lanes=A,n.memoizedState=ge}}function sb(n,i){if(typeof n!="function")throw Error(a(191,n));n.call(i)}function lb(n,i){var l=n.callbacks;if(l!==null)for(n.callbacks=null,n=0;nv?v:8;var A=O.T,F={};O.T=F,sf(n,!1,i,l);try{var ne=b(),le=O.S;if(le!==null&&le(F,ne),ne!==null&&typeof ne=="object"&&typeof ne.then=="function"){var he=r2(ne,u);kl(n,i,he,tr(n))}else kl(n,i,u,tr(n))}catch(ge){kl(n,i,{then:function(){},status:"rejected",reason:ge},tr())}finally{H.p=v,A!==null&&F.types!==null&&(A.types=F.types),O.T=A}}function c2(){}function rf(n,i,l,u){if(n.tag!==5)throw Error(a(476));var b=Ub(n).queue;Bb(n,b,i,X,l===null?c2:function(){return Hb(n),l(u)})}function Ub(n){var i=n.memoizedState;if(i!==null)return i;i={memoizedState:X,baseState:X,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:li,lastRenderedState:X},next:null};var l={};return i.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:li,lastRenderedState:l},next:null},n.memoizedState=i,n=n.alternate,n!==null&&(n.memoizedState=i),i}function Hb(n){var i=Ub(n);i.next===null&&(i=n.alternate.memoizedState),kl(n,i.next.queue,{},tr())}function af(){return yn(Pl)}function $b(){return Qt().memoizedState}function qb(){return Qt().memoizedState}function u2(n){for(var i=n.return;i!==null;){switch(i.tag){case 24:case 3:var l=tr();n=Hi(l);var u=$i(i,n,l);u!==null&&(qn(u,i,l),_l(u,i,l)),i={cache:Dd()},n.payload=i;return}i=i.return}}function d2(n,i,l){var u=tr();l={lane:u,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},gc(n)?Fb(i,l):(l=wd(n,i,l,u),l!==null&&(qn(l,n,u),Gb(l,i,u)))}function Pb(n,i,l){var u=tr();kl(n,i,l,u)}function kl(n,i,l,u){var b={lane:u,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(gc(n))Fb(i,b);else{var v=n.alternate;if(n.lanes===0&&(v===null||v.lanes===0)&&(v=i.lastRenderedReducer,v!==null))try{var A=i.lastRenderedState,F=v(A,l);if(b.hasEagerState=!0,b.eagerState=F,Kn(F,A))return Zo(n,i,b,0),kt===null&&Ko(),!1}catch{}finally{}if(l=wd(n,i,b,u),l!==null)return qn(l,n,u),Gb(l,i,u),!0}return!1}function sf(n,i,l,u){if(u={lane:2,revertLane:Bf(),gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},gc(n)){if(i)throw Error(a(479))}else i=wd(n,l,u,2),i!==null&&qn(i,n,2)}function gc(n){var i=n.alternate;return n===Xe||i!==null&&i===Xe}function Fb(n,i){xs=cc=!0;var l=n.pending;l===null?i.next=i:(i.next=l.next,l.next=i),n.pending=i}function Gb(n,i,l){if((l&4194048)!==0){var u=i.lanes;u&=n.pendingLanes,l|=u,i.lanes=l,Ue(n,l)}}var Tl={readContext:yn,use:fc,useCallback:Gt,useContext:Gt,useEffect:Gt,useImperativeHandle:Gt,useLayoutEffect:Gt,useInsertionEffect:Gt,useMemo:Gt,useReducer:Gt,useRef:Gt,useState:Gt,useDebugValue:Gt,useDeferredValue:Gt,useTransition:Gt,useSyncExternalStore:Gt,useId:Gt,useHostTransitionStatus:Gt,useFormState:Gt,useActionState:Gt,useOptimistic:Gt,useMemoCache:Gt,useCacheRefresh:Gt};Tl.useEffectEvent=Gt;var Vb={readContext:yn,use:fc,useCallback:function(n,i){return Dn().memoizedState=[n,i===void 0?null:i],n},useContext:yn,useEffect:Ab,useImperativeHandle:function(n,i,l){l=l!=null?l.concat([n]):null,mc(4194308,4,Db.bind(null,i,n),l)},useLayoutEffect:function(n,i){return mc(4194308,4,n,i)},useInsertionEffect:function(n,i){mc(4,2,n,i)},useMemo:function(n,i){var l=Dn();i=i===void 0?null:i;var u=n();if(Oa){Wt(!0);try{n()}finally{Wt(!1)}}return l.memoizedState=[u,i],u},useReducer:function(n,i,l){var u=Dn();if(l!==void 0){var b=l(i);if(Oa){Wt(!0);try{l(i)}finally{Wt(!1)}}}else b=i;return u.memoizedState=u.baseState=b,n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:n,lastRenderedState:b},u.queue=n,n=n.dispatch=d2.bind(null,Xe,n),[u.memoizedState,n]},useRef:function(n){var i=Dn();return n={current:n},i.memoizedState=n},useState:function(n){n=Wd(n);var i=n.queue,l=Pb.bind(null,Xe,i);return i.dispatch=l,[n.memoizedState,l]},useDebugValue:tf,useDeferredValue:function(n,i){var l=Dn();return nf(l,n,i)},useTransition:function(){var n=Wd(!1);return n=Bb.bind(null,Xe,n.queue,!0,!1),Dn().memoizedState=n,[!1,n]},useSyncExternalStore:function(n,i,l){var u=Xe,b=Dn();if(lt){if(l===void 0)throw Error(a(407));l=l()}else{if(l=i(),kt===null)throw Error(a(349));(it&127)!==0||hb(u,i,l)}b.memoizedState=l;var v={value:l,getSnapshot:i};return b.queue=v,Ab(pb.bind(null,u,v,n),[n]),u.flags|=2048,vs(9,{destroy:void 0},mb.bind(null,u,v,l,i),null),l},useId:function(){var n=Dn(),i=kt.identifierPrefix;if(lt){var l=$r,u=Hr;l=(u&~(1<<32-ut(u)-1)).toString(32)+l,i="_"+i+"R_"+l,l=uc++,0<\/script>",v=v.removeChild(v.firstChild);break;case"select":v=typeof u.is=="string"?A.createElement("select",{is:u.is}):A.createElement("select"),u.multiple?v.multiple=!0:u.size&&(v.size=u.size);break;default:v=typeof u.is=="string"?A.createElement(b,{is:u.is}):A.createElement(b)}}v[Ut]=i,v[mn]=u;e:for(A=i.child;A!==null;){if(A.tag===5||A.tag===6)v.appendChild(A.stateNode);else if(A.tag!==4&&A.tag!==27&&A.child!==null){A.child.return=A,A=A.child;continue}if(A===i)break e;for(;A.sibling===null;){if(A.return===null||A.return===i)break e;A=A.return}A.sibling.return=A.return,A=A.sibling}i.stateNode=v;e:switch(_n(v,b,u),b){case"button":case"input":case"select":case"textarea":u=!!u.autoFocus;break e;case"img":u=!0;break e;default:u=!1}u&&ci(i)}}return jt(i),vf(i,i.type,n===null?null:n.memoizedProps,i.pendingProps,l),null;case 6:if(n&&i.stateNode!=null)n.memoizedProps!==u&&ci(i);else{if(typeof u!="string"&&i.stateNode===null)throw Error(a(166));if(n=Q.current,ds(i)){if(n=i.stateNode,l=i.memoizedProps,u=null,b=xn,b!==null)switch(b.tag){case 27:case 5:u=b.memoizedProps}n[Ut]=i,n=!!(n.nodeValue===l||u!==null&&u.suppressHydrationWarning===!0||d0(n.nodeValue,l)),n||Ii(i,!0)}else n=zc(n).createTextNode(u),n[Ut]=i,i.stateNode=n}return jt(i),null;case 31:if(l=i.memoizedState,n===null||n.memoizedState!==null){if(u=ds(i),l!==null){if(n===null){if(!u)throw Error(a(318));if(n=i.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(a(557));n[Ut]=i}else Na(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;jt(i),n=!1}else l=Ad(),n!==null&&n.memoizedState!==null&&(n.memoizedState.hydrationErrors=l),n=!0;if(!n)return i.flags&256?(Wn(i),i):(Wn(i),null);if((i.flags&128)!==0)throw Error(a(558))}return jt(i),null;case 13:if(u=i.memoizedState,n===null||n.memoizedState!==null&&n.memoizedState.dehydrated!==null){if(b=ds(i),u!==null&&u.dehydrated!==null){if(n===null){if(!b)throw Error(a(318));if(b=i.memoizedState,b=b!==null?b.dehydrated:null,!b)throw Error(a(317));b[Ut]=i}else Na(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;jt(i),b=!1}else b=Ad(),n!==null&&n.memoizedState!==null&&(n.memoizedState.hydrationErrors=b),b=!0;if(!b)return i.flags&256?(Wn(i),i):(Wn(i),null)}return Wn(i),(i.flags&128)!==0?(i.lanes=l,i):(l=u!==null,n=n!==null&&n.memoizedState!==null,l&&(u=i.child,b=null,u.alternate!==null&&u.alternate.memoizedState!==null&&u.alternate.memoizedState.cachePool!==null&&(b=u.alternate.memoizedState.cachePool.pool),v=null,u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(v=u.memoizedState.cachePool.pool),v!==b&&(u.flags|=2048)),l!==n&&l&&(i.child.flags|=8192),_c(i,i.updateQueue),jt(i),null);case 4:return te(),n===null&&qf(i.stateNode.containerInfo),jt(i),null;case 10:return ai(i.type),jt(i),null;case 19:if(Y(Zt),u=i.memoizedState,u===null)return jt(i),null;if(b=(i.flags&128)!==0,v=u.rendering,v===null)if(b)Al(u,!1);else{if(Vt!==0||n!==null&&(n.flags&128)!==0)for(n=i.child;n!==null;){if(v=oc(n),v!==null){for(i.flags|=128,Al(u,!1),n=v.updateQueue,i.updateQueue=n,_c(i,n),i.subtreeFlags=0,n=l,l=i.child;l!==null;)Pg(l,n),l=l.sibling;return L(Zt,Zt.current&1|2),lt&&ri(i,u.treeForkCount),i.child}n=n.sibling}u.tail!==null&&ct()>kc&&(i.flags|=128,b=!0,Al(u,!1),i.lanes=4194304)}else{if(!b)if(n=oc(v),n!==null){if(i.flags|=128,b=!0,n=n.updateQueue,i.updateQueue=n,_c(i,n),Al(u,!0),u.tail===null&&u.tailMode==="hidden"&&!v.alternate&&!lt)return jt(i),null}else 2*ct()-u.renderingStartTime>kc&&l!==536870912&&(i.flags|=128,b=!0,Al(u,!1),i.lanes=4194304);u.isBackwards?(v.sibling=i.child,i.child=v):(n=u.last,n!==null?n.sibling=v:i.child=v,u.last=v)}return u.tail!==null?(n=u.tail,u.rendering=n,u.tail=n.sibling,u.renderingStartTime=ct(),n.sibling=null,l=Zt.current,L(Zt,b?l&1|2:l&1),lt&&ri(i,u.treeForkCount),n):(jt(i),null);case 22:case 23:return Wn(i),qd(),u=i.memoizedState!==null,n!==null?n.memoizedState!==null!==u&&(i.flags|=8192):u&&(i.flags|=8192),u?(l&536870912)!==0&&(i.flags&128)===0&&(jt(i),i.subtreeFlags&6&&(i.flags|=8192)):jt(i),l=i.updateQueue,l!==null&&_c(i,l.retryQueue),l=null,n!==null&&n.memoizedState!==null&&n.memoizedState.cachePool!==null&&(l=n.memoizedState.cachePool.pool),u=null,i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(u=i.memoizedState.cachePool.pool),u!==l&&(i.flags|=2048),n!==null&&Y(Ta),null;case 24:return l=null,n!==null&&(l=n.memoizedState.cache),i.memoizedState.cache!==l&&(i.flags|=2048),ai(en),jt(i),null;case 25:return null;case 30:return null}throw Error(a(156,i.tag))}function g2(n,i){switch(Td(i),i.tag){case 1:return n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 3:return ai(en),te(),n=i.flags,(n&65536)!==0&&(n&128)===0?(i.flags=n&-65537|128,i):null;case 26:case 27:case 5:return fe(i),null;case 31:if(i.memoizedState!==null){if(Wn(i),i.alternate===null)throw Error(a(340));Na()}return n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 13:if(Wn(i),n=i.memoizedState,n!==null&&n.dehydrated!==null){if(i.alternate===null)throw Error(a(340));Na()}return n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 19:return Y(Zt),null;case 4:return te(),null;case 10:return ai(i.type),null;case 22:case 23:return Wn(i),qd(),n!==null&&Y(Ta),n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 24:return ai(en),null;case 25:return null;default:return null}}function gx(n,i){switch(Td(i),i.tag){case 3:ai(en),te();break;case 26:case 27:case 5:fe(i);break;case 4:te();break;case 31:i.memoizedState!==null&&Wn(i);break;case 13:Wn(i);break;case 19:Y(Zt);break;case 10:ai(i.type);break;case 22:case 23:Wn(i),qd(),n!==null&&Y(Ta);break;case 24:ai(en)}}function Ml(n,i){try{var l=i.updateQueue,u=l!==null?l.lastEffect:null;if(u!==null){var b=u.next;l=b;do{if((l.tag&n)===n){u=void 0;var v=l.create,A=l.inst;u=v(),A.destroy=u}l=l.next}while(l!==b)}}catch(F){yt(i,i.return,F)}}function Fi(n,i,l){try{var u=i.updateQueue,b=u!==null?u.lastEffect:null;if(b!==null){var v=b.next;u=v;do{if((u.tag&n)===n){var A=u.inst,F=A.destroy;if(F!==void 0){A.destroy=void 0,b=i;var ne=l,le=F;try{le()}catch(he){yt(b,ne,he)}}}u=u.next}while(u!==v)}}catch(he){yt(i,i.return,he)}}function bx(n){var i=n.updateQueue;if(i!==null){var l=n.stateNode;try{lb(i,l)}catch(u){yt(n,n.return,u)}}}function xx(n,i,l){l.props=Ra(n.type,n.memoizedProps),l.state=n.memoizedState;try{l.componentWillUnmount()}catch(u){yt(n,i,u)}}function Ol(n,i){try{var l=n.ref;if(l!==null){switch(n.tag){case 26:case 27:case 5:var u=n.stateNode;break;case 30:u=n.stateNode;break;default:u=n.stateNode}typeof l=="function"?n.refCleanup=l(u):l.current=u}}catch(b){yt(n,i,b)}}function qr(n,i){var l=n.ref,u=n.refCleanup;if(l!==null)if(typeof u=="function")try{u()}catch(b){yt(n,i,b)}finally{n.refCleanup=null,n=n.alternate,n!=null&&(n.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(b){yt(n,i,b)}else l.current=null}function yx(n){var i=n.type,l=n.memoizedProps,u=n.stateNode;try{e:switch(i){case"button":case"input":case"select":case"textarea":l.autoFocus&&u.focus();break e;case"img":l.src?u.src=l.src:l.srcSet&&(u.srcset=l.srcSet)}}catch(b){yt(n,n.return,b)}}function _f(n,i,l){try{var u=n.stateNode;B2(u,n.type,l,i),u[mn]=i}catch(b){yt(n,n.return,b)}}function vx(n){return n.tag===5||n.tag===3||n.tag===26||n.tag===27&&Qi(n.type)||n.tag===4}function wf(n){e:for(;;){for(;n.sibling===null;){if(n.return===null||vx(n.return))return null;n=n.return}for(n.sibling.return=n.return,n=n.sibling;n.tag!==5&&n.tag!==6&&n.tag!==18;){if(n.tag===27&&Qi(n.type)||n.flags&2||n.child===null||n.tag===4)continue e;n.child.return=n,n=n.child}if(!(n.flags&2))return n.stateNode}}function Ef(n,i,l){var u=n.tag;if(u===5||u===6)n=n.stateNode,i?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(n,i):(i=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,i.appendChild(n),l=l._reactRootContainer,l!=null||i.onclick!==null||(i.onclick=_e));else if(u!==4&&(u===27&&Qi(n.type)&&(l=n.stateNode,i=null),n=n.child,n!==null))for(Ef(n,i,l),n=n.sibling;n!==null;)Ef(n,i,l),n=n.sibling}function wc(n,i,l){var u=n.tag;if(u===5||u===6)n=n.stateNode,i?l.insertBefore(n,i):l.appendChild(n);else if(u!==4&&(u===27&&Qi(n.type)&&(l=n.stateNode),n=n.child,n!==null))for(wc(n,i,l),n=n.sibling;n!==null;)wc(n,i,l),n=n.sibling}function _x(n){var i=n.stateNode,l=n.memoizedProps;try{for(var u=n.type,b=i.attributes;b.length;)i.removeAttributeNode(b[0]);_n(i,u,l),i[Ut]=n,i[mn]=l}catch(v){yt(n,n.return,v)}}var ui=!1,rn=!1,Nf=!1,wx=typeof WeakSet=="function"?WeakSet:Set,gn=null;function b2(n,i){if(n=n.containerInfo,Gf=Pc,n=jg(n),gd(n)){if("selectionStart"in n)var l={start:n.selectionStart,end:n.selectionEnd};else e:{l=(l=n.ownerDocument)&&l.defaultView||window;var u=l.getSelection&&l.getSelection();if(u&&u.rangeCount!==0){l=u.anchorNode;var b=u.anchorOffset,v=u.focusNode;u=u.focusOffset;try{l.nodeType,v.nodeType}catch{l=null;break e}var A=0,F=-1,ne=-1,le=0,he=0,ge=n,oe=null;t:for(;;){for(var de;ge!==l||b!==0&&ge.nodeType!==3||(F=A+b),ge!==v||u!==0&&ge.nodeType!==3||(ne=A+u),ge.nodeType===3&&(A+=ge.nodeValue.length),(de=ge.firstChild)!==null;)oe=ge,ge=de;for(;;){if(ge===n)break t;if(oe===l&&++le===b&&(F=A),oe===v&&++he===u&&(ne=A),(de=ge.nextSibling)!==null)break;ge=oe,oe=ge.parentNode}ge=de}l=F===-1||ne===-1?null:{start:F,end:ne}}else l=null}l=l||{start:0,end:0}}else l=null;for(Vf={focusedElem:n,selectionRange:l},Pc=!1,gn=i;gn!==null;)if(i=gn,n=i.child,(i.subtreeFlags&1028)!==0&&n!==null)n.return=i,gn=n;else for(;gn!==null;){switch(i=gn,v=i.alternate,n=i.flags,i.tag){case 0:if((n&4)!==0&&(n=i.updateQueue,n=n!==null?n.events:null,n!==null))for(l=0;l title"))),_n(v,u,l),v[Ut]=n,Ft(v),u=v;break e;case"link":var A=C0("link","href",b).get(u+(l.href||""));if(A){for(var F=0;FNt&&(A=Nt,Nt=He,He=A);var ae=Rg(F,He),ie=Rg(F,Nt);if(ae&&ie&&(de.rangeCount!==1||de.anchorNode!==ae.node||de.anchorOffset!==ae.offset||de.focusNode!==ie.node||de.focusOffset!==ie.offset)){var se=ge.createRange();se.setStart(ae.node,ae.offset),de.removeAllRanges(),He>Nt?(de.addRange(se),de.extend(ie.node,ie.offset)):(se.setEnd(ie.node,ie.offset),de.addRange(se))}}}}for(ge=[],de=F;de=de.parentNode;)de.nodeType===1&&ge.push({element:de,left:de.scrollLeft,top:de.scrollTop});for(typeof F.focus=="function"&&F.focus(),F=0;Fl?32:l,O.T=null,l=Of,Of=null;var v=Xi,A=pi;if(dn=0,Ss=Xi=null,pi=0,(pt&6)!==0)throw Error(a(331));var F=pt;if(pt|=4,Dx(v.current),Mx(v,v.current,A,l),pt=F,Il(0,!1),At&&typeof At.onPostCommitFiberRoot=="function")try{At.onPostCommitFiberRoot(Kt,v)}catch{}return!0}finally{H.p=b,O.T=u,Qx(n,i)}}function Jx(n,i,l){i=ur(l,i),i=uf(n.stateNode,i,2),n=$i(n,i,2),n!==null&&(gt(n,2),Pr(n))}function yt(n,i,l){if(n.tag===3)Jx(n,n,l);else for(;i!==null;){if(i.tag===3){Jx(i,n,l);break}else if(i.tag===1){var u=i.stateNode;if(typeof i.type.getDerivedStateFromError=="function"||typeof u.componentDidCatch=="function"&&(Yi===null||!Yi.has(u))){n=ur(l,n),l=ex(2),u=$i(i,l,2),u!==null&&(tx(l,u,i,n),gt(u,2),Pr(u));break}}i=i.return}}function Lf(n,i,l){var u=n.pingCache;if(u===null){u=n.pingCache=new v2;var b=new Set;u.set(i,b)}else b=u.get(i),b===void 0&&(b=new Set,u.set(i,b));b.has(l)||(Tf=!0,b.add(l),n=S2.bind(null,n,i,l),i.then(n,n))}function S2(n,i,l){var u=n.pingCache;u!==null&&u.delete(i),n.pingedLanes|=n.suspendedLanes&l,n.warmLanes&=~l,kt===n&&(it&l)===l&&(Vt===4||Vt===3&&(it&62914560)===it&&300>ct()-Sc?(pt&2)===0&&ks(n,0):Cf|=l,Ns===it&&(Ns=0)),Pr(n)}function e0(n,i){i===0&&(i=Pe()),n=wa(n,i),n!==null&&(gt(n,i),Pr(n))}function k2(n){var i=n.memoizedState,l=0;i!==null&&(l=i.retryLane),e0(n,l)}function T2(n,i){var l=0;switch(n.tag){case 31:case 13:var u=n.stateNode,b=n.memoizedState;b!==null&&(l=b.retryLane);break;case 19:u=n.stateNode;break;case 22:u=n.stateNode._retryCache;break;default:throw Error(a(314))}u!==null&&u.delete(i),e0(n,l)}function C2(n,i){return Pt(n,i)}var Rc=null,Cs=null,zf=!1,Dc=!1,If=!1,Zi=0;function Pr(n){n!==Cs&&n.next===null&&(Cs===null?Rc=Cs=n:Cs=Cs.next=n),Dc=!0,zf||(zf=!0,M2())}function Il(n,i){if(!If&&Dc){If=!0;do for(var l=!1,u=Rc;u!==null;){if(n!==0){var b=u.pendingLanes;if(b===0)var v=0;else{var A=u.suspendedLanes,F=u.pingedLanes;v=(1<<31-ut(42|n)+1)-1,v&=b&~(A&~F),v=v&201326741?v&201326741|1:v?v|2:0}v!==0&&(l=!0,i0(u,v))}else v=it,v=re(u,u===kt?v:0,u.cancelPendingCommit!==null||u.timeoutHandle!==-1),(v&3)===0||me(u,v)||(l=!0,i0(u,v));u=u.next}while(l);If=!1}}function A2(){t0()}function t0(){Dc=zf=!1;var n=0;Zi!==0&&H2()&&(n=Zi);for(var i=ct(),l=null,u=Rc;u!==null;){var b=u.next,v=n0(u,i);v===0?(u.next=null,l===null?Rc=b:l.next=b,b===null&&(Cs=l)):(l=u,(n!==0||(v&3)!==0)&&(Dc=!0)),u=b}dn!==0&&dn!==5||Il(n),Zi!==0&&(Zi=0)}function n0(n,i){for(var l=n.suspendedLanes,u=n.pingedLanes,b=n.expirationTimes,v=n.pendingLanes&-62914561;0F)break;var he=ne.transferSize,ge=ne.initiatorType;he&&f0(ge)&&(ne=ne.responseEnd,A+=he*(ne"u"?null:document;function N0(n,i,l){var u=As;if(u&&typeof i=="string"&&i){var b=kn(i);b='link[rel="'+n+'"][href="'+b+'"]',typeof l=="string"&&(b+='[crossorigin="'+l+'"]'),E0.has(b)||(E0.add(b),n={rel:n,crossOrigin:l,href:i},u.querySelector(b)===null&&(i=u.createElement("link"),_n(i,"link",n),Ft(i),u.head.appendChild(i)))}}function K2(n){gi.D(n),N0("dns-prefetch",n,null)}function Z2(n,i){gi.C(n,i),N0("preconnect",n,i)}function Q2(n,i,l){gi.L(n,i,l);var u=As;if(u&&n&&i){var b='link[rel="preload"][as="'+kn(i)+'"]';i==="image"&&l&&l.imageSrcSet?(b+='[imagesrcset="'+kn(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(b+='[imagesizes="'+kn(l.imageSizes)+'"]')):b+='[href="'+kn(n)+'"]';var v=b;switch(i){case"style":v=Ms(n);break;case"script":v=Os(n)}gr.has(v)||(n=p({rel:"preload",href:i==="image"&&l&&l.imageSrcSet?void 0:n,as:i},l),gr.set(v,n),u.querySelector(b)!==null||i==="style"&&u.querySelector($l(v))||i==="script"&&u.querySelector(ql(v))||(i=u.createElement("link"),_n(i,"link",n),Ft(i),u.head.appendChild(i)))}}function W2(n,i){gi.m(n,i);var l=As;if(l&&n){var u=i&&typeof i.as=="string"?i.as:"script",b='link[rel="modulepreload"][as="'+kn(u)+'"][href="'+kn(n)+'"]',v=b;switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":v=Os(n)}if(!gr.has(v)&&(n=p({rel:"modulepreload",href:n},i),gr.set(v,n),l.querySelector(b)===null)){switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(ql(v)))return}u=l.createElement("link"),_n(u,"link",n),Ft(u),l.head.appendChild(u)}}}function J2(n,i,l){gi.S(n,i,l);var u=As;if(u&&n){var b=Br(u).hoistableStyles,v=Ms(n);i=i||"default";var A=b.get(v);if(!A){var F={loading:0,preload:null};if(A=u.querySelector($l(v)))F.loading=5;else{n=p({rel:"stylesheet",href:n,"data-precedence":i},l),(l=gr.get(v))&&Jf(n,l);var ne=A=u.createElement("link");Ft(ne),_n(ne,"link",n),ne._p=new Promise(function(le,he){ne.onload=le,ne.onerror=he}),ne.addEventListener("load",function(){F.loading|=1}),ne.addEventListener("error",function(){F.loading|=2}),F.loading|=4,Bc(A,i,u)}A={type:"stylesheet",instance:A,count:1,state:F},b.set(v,A)}}}function ek(n,i){gi.X(n,i);var l=As;if(l&&n){var u=Br(l).hoistableScripts,b=Os(n),v=u.get(b);v||(v=l.querySelector(ql(b)),v||(n=p({src:n,async:!0},i),(i=gr.get(b))&&eh(n,i),v=l.createElement("script"),Ft(v),_n(v,"link",n),l.head.appendChild(v)),v={type:"script",instance:v,count:1,state:null},u.set(b,v))}}function tk(n,i){gi.M(n,i);var l=As;if(l&&n){var u=Br(l).hoistableScripts,b=Os(n),v=u.get(b);v||(v=l.querySelector(ql(b)),v||(n=p({src:n,async:!0,type:"module"},i),(i=gr.get(b))&&eh(n,i),v=l.createElement("script"),Ft(v),_n(v,"link",n),l.head.appendChild(v)),v={type:"script",instance:v,count:1,state:null},u.set(b,v))}}function S0(n,i,l,u){var b=(b=Q.current)?Ic(b):null;if(!b)throw Error(a(446));switch(n){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(i=Ms(l.href),l=Br(b).hoistableStyles,u=l.get(i),u||(u={type:"style",instance:null,count:0,state:null},l.set(i,u)),u):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){n=Ms(l.href);var v=Br(b).hoistableStyles,A=v.get(n);if(A||(b=b.ownerDocument||b,A={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},v.set(n,A),(v=b.querySelector($l(n)))&&!v._p&&(A.instance=v,A.state.loading=5),gr.has(n)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},gr.set(n,l),v||nk(b,n,l,A.state))),i&&u===null)throw Error(a(528,""));return A}if(i&&u!==null)throw Error(a(529,""));return null;case"script":return i=l.async,l=l.src,typeof l=="string"&&i&&typeof i!="function"&&typeof i!="symbol"?(i=Os(l),l=Br(b).hoistableScripts,u=l.get(i),u||(u={type:"script",instance:null,count:0,state:null},l.set(i,u)),u):{type:"void",instance:null,count:0,state:null};default:throw Error(a(444,n))}}function Ms(n){return'href="'+kn(n)+'"'}function $l(n){return'link[rel="stylesheet"]['+n+"]"}function k0(n){return p({},n,{"data-precedence":n.precedence,precedence:null})}function nk(n,i,l,u){n.querySelector('link[rel="preload"][as="style"]['+i+"]")?u.loading=1:(i=n.createElement("link"),u.preload=i,i.addEventListener("load",function(){return u.loading|=1}),i.addEventListener("error",function(){return u.loading|=2}),_n(i,"link",l),Ft(i),n.head.appendChild(i))}function Os(n){return'[src="'+kn(n)+'"]'}function ql(n){return"script[async]"+n}function T0(n,i,l){if(i.count++,i.instance===null)switch(i.type){case"style":var u=n.querySelector('style[data-href~="'+kn(l.href)+'"]');if(u)return i.instance=u,Ft(u),u;var b=p({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return u=(n.ownerDocument||n).createElement("style"),Ft(u),_n(u,"style",b),Bc(u,l.precedence,n),i.instance=u;case"stylesheet":b=Ms(l.href);var v=n.querySelector($l(b));if(v)return i.state.loading|=4,i.instance=v,Ft(v),v;u=k0(l),(b=gr.get(b))&&Jf(u,b),v=(n.ownerDocument||n).createElement("link"),Ft(v);var A=v;return A._p=new Promise(function(F,ne){A.onload=F,A.onerror=ne}),_n(v,"link",u),i.state.loading|=4,Bc(v,l.precedence,n),i.instance=v;case"script":return v=Os(l.src),(b=n.querySelector(ql(v)))?(i.instance=b,Ft(b),b):(u=l,(b=gr.get(v))&&(u=p({},l),eh(u,b)),n=n.ownerDocument||n,b=n.createElement("script"),Ft(b),_n(b,"link",u),n.head.appendChild(b),i.instance=b);case"void":return null;default:throw Error(a(443,i.type))}else i.type==="stylesheet"&&(i.state.loading&4)===0&&(u=i.instance,i.state.loading|=4,Bc(u,l.precedence,n));return i.instance}function Bc(n,i,l){for(var u=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),b=u.length?u[u.length-1]:null,v=b,A=0;A title"):null)}function rk(n,i,l){if(l===1||i.itemProp!=null)return!1;switch(n){case"meta":case"title":return!0;case"style":if(typeof i.precedence!="string"||typeof i.href!="string"||i.href==="")break;return!0;case"link":if(typeof i.rel!="string"||typeof i.href!="string"||i.href===""||i.onLoad||i.onError)break;switch(i.rel){case"stylesheet":return n=i.disabled,typeof i.precedence=="string"&&n==null;default:return!0}case"script":if(i.async&&typeof i.async!="function"&&typeof i.async!="symbol"&&!i.onLoad&&!i.onError&&i.src&&typeof i.src=="string")return!0}return!1}function M0(n){return!(n.type==="stylesheet"&&(n.state.loading&3)===0)}function ik(n,i,l,u){if(l.type==="stylesheet"&&(typeof u.media!="string"||matchMedia(u.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var b=Ms(u.href),v=i.querySelector($l(b));if(v){i=v._p,i!==null&&typeof i=="object"&&typeof i.then=="function"&&(n.count++,n=Hc.bind(n),i.then(n,n)),l.state.loading|=4,l.instance=v,Ft(v);return}v=i.ownerDocument||i,u=k0(u),(b=gr.get(b))&&Jf(u,b),v=v.createElement("link"),Ft(v);var A=v;A._p=new Promise(function(F,ne){A.onload=F,A.onerror=ne}),_n(v,"link",u),l.instance=v}n.stylesheets===null&&(n.stylesheets=new Map),n.stylesheets.set(l,i),(i=l.state.preload)&&(l.state.loading&3)===0&&(n.count++,l=Hc.bind(n),i.addEventListener("load",l),i.addEventListener("error",l))}}var th=0;function ak(n,i){return n.stylesheets&&n.count===0&&qc(n,n.stylesheets),0th?50:800)+i);return n.unsuspend=l,function(){n.unsuspend=null,clearTimeout(u),clearTimeout(b)}}:null}function Hc(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)qc(this,this.stylesheets);else if(this.unsuspend){var n=this.unsuspend;this.unsuspend=null,n()}}}var $c=null;function qc(n,i){n.stylesheets=null,n.unsuspend!==null&&(n.count++,$c=new Map,i.forEach(sk,n),$c=null,Hc.call(n))}function sk(n,i){if(!(i.state.loading&4)){var l=$c.get(n);if(l)var u=l.get(null);else{l=new Map,$c.set(n,l);for(var b=n.querySelectorAll("link[data-precedence],style[data-precedence]"),v=0;v"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),uh.exports=_k(),uh.exports}var Ek=wk();/** * @license lucide-react v0.563.0 - ISC * * This source code is licensed under the ISC license. @@ -396,10 +396,10 @@ Error generating stack: `+u.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const xC=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],yC=Me("zap",xC),vC={open:{label:"Open",color:"bg-red-500/10 text-red-400 border-red-500/20",dotColor:"bg-red-500",description:"Newly discovered, awaiting triage"},in_progress:{label:"In Progress",color:"bg-blue-500/10 text-blue-400 border-blue-500/20",dotColor:"bg-blue-500",description:"Someone is working on this"},snoozed:{label:"Snoozed",color:"bg-purple-500/10 text-purple-400 border-purple-500/20",dotColor:"bg-purple-500",description:"Temporarily hidden until a follow-up date"},fixed:{label:"Fixed",color:"bg-emerald-500/10 text-emerald-400 border-emerald-500/20",dotColor:"bg-emerald-500",description:"This vulnerability has been fixed"},ignored:{label:"Ignored",color:"bg-gray-500/10 text-gray-400 border-gray-500/20",dotColor:"bg-gray-500",description:"Acknowledged but accepted"}},_C={trivial:{label:"Trivial",color:"bg-emerald-500/10 text-emerald-400 border-emerald-500/20"},low:{label:"Low",color:"bg-blue-500/10 text-blue-400 border-blue-500/20"},medium:{label:"Medium",color:"bg-yellow-500/10 text-yellow-400 border-yellow-500/20"},high:{label:"High",color:"bg-orange-500/10 text-orange-400 border-orange-500/20"}},I_={critical:"bg-red-500/20 text-red-500 border-red-500/30",high:"bg-orange-500/20 text-orange-500 border-orange-500/30",medium:"bg-yellow-500/20 text-yellow-500 border-yellow-500/30",low:"bg-blue-500/20 text-blue-500 border-blue-500/30"};function Zc(e){return e.original_severity!=null&&e.original_severity!==e.severity}const wC={js:"javascript",ts:"typescript",tsx:"typescript",jsx:"javascript",py:"python",rb:"ruby",go:"go",rs:"rust",java:"java",php:"php",cs:"csharp",cpp:"cpp",c:"c",sh:"bash",bash:"bash",sql:"sql",html:"html",css:"css",json:"json",yaml:"yaml",yml:"yaml",xml:"xml"};function EC(e){var r;if(!e)return null;const t=(r=e.split(".").pop())==null?void 0:r.toLowerCase();return t&&wC[t]||null}function yp(e){switch(e){case"critical":return"bg-red-500";case"high":return"bg-orange-500";case"medium":return"bg-yellow-500";default:return"bg-blue-500"}}async function vp(e){try{await navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea");t.value=e,t.style.position="absolute",t.style.left="-9999px",document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t)}}const $u="https://app.strix.ai/api/auth/signup",NC="https://strix.ai/pricing",SC="ref=oss_viewer&utm_source=oss_viewer&utm_medium=local_viewer&utm_campaign=oss_viewer";function fa(e,t){const r=e.includes("?")?"&":"?";return`${e}${r}${SC}&utm_content=${encodeURIComponent(t)}`}function Cr(e,t={}){try{const r={event:e};for(const[s,o]of Object.entries(t))o!==void 0&&(r[s]=o);const a=JSON.stringify(r);typeof navigator<"u"&&navigator.sendBeacon?navigator.sendBeacon("/api/event",a):fetch("/api/event",{method:"POST",body:a,keepalive:!0})}catch{}}function Dr(e,t){Cr("cta_clicked",{cta:e,surface:t})}function B_(e){var t,r,a="";if(typeof e=="string"||typeof e=="number")a+=e;else if(typeof e=="object")if(Array.isArray(e)){var s=e.length;for(t=0;t{const r=new Array(e.length+t.length);for(let a=0;a({classGroupId:e,validator:t}),U_=(e=new Map,t=null,r)=>({nextPart:e,validators:t,classGroupId:r}),vu="-",ry=[],AC="arbitrary..",MC=e=>{const t=RC(e),{conflictingClassGroups:r,conflictingClassGroupModifiers:a}=e;return{getClassGroupId:c=>{if(c.startsWith("[")&&c.endsWith("]"))return OC(c);const d=c.split(vu),f=d[0]===""&&d.length>1?1:0;return H_(d,f,t)},getConflictingClassGroupIds:(c,d)=>{if(d){const f=a[c],h=r[c];return f?h?TC(h,f):f:h||ry}return r[c]||ry}}},H_=(e,t,r)=>{if(e.length-t===0)return r.classGroupId;const s=e[t],o=r.nextPart.get(s);if(o){const h=H_(e,t+1,o);if(h)return h}const c=r.validators;if(c===null)return;const d=t===0?e.join(vu):e.slice(t).join(vu),f=c.length;for(let h=0;he.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const t=e.slice(1,-1),r=t.indexOf(":"),a=t.slice(0,r);return a?AC+a:void 0})(),RC=e=>{const{theme:t,classGroups:r}=e;return DC(r,t)},DC=(e,t)=>{const r=U_();for(const a in e){const s=e[a];_p(s,r,a,t)}return r},_p=(e,t,r,a)=>{const s=e.length;for(let o=0;o{if(typeof e=="string"){LC(e,t,r);return}if(typeof e=="function"){zC(e,t,r,a);return}IC(e,t,r,a)},LC=(e,t,r)=>{const a=e===""?t:$_(t,e);a.classGroupId=r},zC=(e,t,r,a)=>{if(BC(e)){_p(e(a),t,r,a);return}t.validators===null&&(t.validators=[]),t.validators.push(CC(r,e))},IC=(e,t,r,a)=>{const s=Object.entries(e),o=s.length;for(let c=0;c{let r=e;const a=t.split(vu),s=a.length;for(let o=0;o"isThemeGetter"in e&&e.isThemeGetter===!0,UC=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,r=Object.create(null),a=Object.create(null);const s=(o,c)=>{r[o]=c,t++,t>e&&(t=0,a=r,r=Object.create(null))};return{get(o){let c=r[o];if(c!==void 0)return c;if((c=a[o])!==void 0)return s(o,c),c},set(o,c){o in r?r[o]=c:s(o,c)}}},Um="!",iy=":",HC=[],ay=(e,t,r,a,s)=>({modifiers:e,hasImportantModifier:t,baseClassName:r,maybePostfixModifierPosition:a,isExternal:s}),$C=e=>{const{prefix:t,experimentalParseClassName:r}=e;let a=s=>{const o=[];let c=0,d=0,f=0,h;const m=s.length;for(let N=0;Nf?h-f:void 0;return ay(o,x,y,_)};if(t){const s=t+iy,o=a;a=c=>c.startsWith(s)?o(c.slice(s.length)):ay(HC,!1,c,void 0,!0)}if(r){const s=a;a=o=>r({className:o,parseClassName:s})}return a},qC=e=>{const t=new Map;return e.orderSensitiveModifiers.forEach((r,a)=>{t.set(r,1e6+a)}),r=>{const a=[];let s=[];for(let o=0;o0&&(s.sort(),a.push(...s),s=[]),a.push(c)):s.push(c)}return s.length>0&&(s.sort(),a.push(...s)),a}},PC=e=>({cache:UC(e.cacheSize),parseClassName:$C(e),sortModifiers:qC(e),postfixLookupClassGroupIds:FC(e),...MC(e)}),FC=e=>{const t=Object.create(null),r=e.postfixLookupClassGroups;if(r)for(let a=0;a{const{parseClassName:r,getClassGroupId:a,getConflictingClassGroupIds:s,sortModifiers:o,postfixLookupClassGroupIds:c}=t,d=[],f=e.trim().split(GC);let h="";for(let m=f.length-1;m>=0;m-=1){const p=f[m],{isExternal:y,modifiers:x,hasImportantModifier:_,baseClassName:N,maybePostfixModifierPosition:S}=r(p);if(y){h=p+(h.length>0?" "+h:h);continue}let w=!!S,k;if(w){const U=N.substring(0,S);k=a(U);const B=k&&c[k]?a(N):void 0;B&&B!==k&&(k=B,w=!1)}else k=a(N);if(!k){if(!w){h=p+(h.length>0?" "+h:h);continue}if(k=a(N),!k){h=p+(h.length>0?" "+h:h);continue}w=!1}const E=x.length===0?"":x.length===1?x[0]:o(x).join(":"),M=_?E+Um:E,I=M+k;if(d.indexOf(I)>-1)continue;d.push(I);const R=s(k,w);for(let U=0;U0?" "+h:h)}return h},YC=(...e)=>{let t=0,r,a,s="";for(;t{if(typeof e=="string")return e;let t,r="";for(let a=0;a{let r,a,s,o;const c=f=>{const h=t.reduce((m,p)=>p(m),e());return r=PC(h),a=r.cache.get,s=r.cache.set,o=d,d(f)},d=f=>{const h=a(f);if(h)return h;const m=VC(f,r);return s(f,m),m};return o=c,(...f)=>o(YC(...f))},KC=[],fn=e=>{const t=r=>r[e]||KC;return t.isThemeGetter=!0,t},P_=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,F_=/^\((?:(\w[\w-]*):)?(.+)\)$/i,ZC=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,QC=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,WC=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,JC=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,eA=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,tA=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,ra=e=>ZC.test(e),We=e=>!!e&&!Number.isNaN(Number(e)),Fr=e=>!!e&&Number.isInteger(Number(e)),mh=e=>e.endsWith("%")&&We(e.slice(0,-1)),bi=e=>QC.test(e),G_=()=>!0,nA=e=>WC.test(e)&&!JC.test(e),wp=()=>!1,rA=e=>eA.test(e),iA=e=>tA.test(e),aA=e=>!ke(e)&&!Te(e),sA=e=>e.startsWith("@container")&&(e[10]==="/"&&e[11]!==void 0||e[11]==="s"&&e[16]!==void 0&&e.startsWith("-size/",10)||e[11]==="n"&&e[18]!==void 0&&e.startsWith("-normal/",10)),lA=e=>ha(e,X_,wp),ke=e=>P_.test(e),La=e=>ha(e,K_,nA),sy=e=>ha(e,pA,We),oA=e=>ha(e,Q_,G_),cA=e=>ha(e,Z_,wp),ly=e=>ha(e,V_,wp),uA=e=>ha(e,Y_,iA),Qc=e=>ha(e,W_,rA),Te=e=>F_.test(e),Kl=e=>Za(e,K_),dA=e=>Za(e,Z_),oy=e=>Za(e,V_),fA=e=>Za(e,X_),hA=e=>Za(e,Y_),Wc=e=>Za(e,W_,!0),mA=e=>Za(e,Q_,!0),ha=(e,t,r)=>{const a=P_.exec(e);return a?a[1]?t(a[1]):r(a[2]):!1},Za=(e,t,r=!1)=>{const a=F_.exec(e);return a?a[1]?t(a[1]):r:!1},V_=e=>e==="position"||e==="percentage",Y_=e=>e==="image"||e==="url",X_=e=>e==="length"||e==="size"||e==="bg-size",K_=e=>e==="length",pA=e=>e==="number",Z_=e=>e==="family-name",Q_=e=>e==="number"||e==="weight",W_=e=>e==="shadow",gA=()=>{const e=fn("color"),t=fn("font"),r=fn("text"),a=fn("font-weight"),s=fn("tracking"),o=fn("leading"),c=fn("breakpoint"),d=fn("container"),f=fn("spacing"),h=fn("radius"),m=fn("shadow"),p=fn("inset-shadow"),y=fn("text-shadow"),x=fn("drop-shadow"),_=fn("blur"),N=fn("perspective"),S=fn("aspect"),w=fn("ease"),k=fn("animate"),E=()=>["auto","avoid","all","avoid-page","page","left","right","column"],M=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],I=()=>[...M(),Te,ke],R=()=>["auto","hidden","clip","visible","scroll"],U=()=>["auto","contain","none"],B=()=>[Te,ke,f],Z=()=>[ra,"full","auto",...B()],D=()=>[Fr,"none","subgrid",Te,ke],z=()=>["auto",{span:["full",Fr,Te,ke]},Fr,Te,ke],P=()=>[Fr,"auto",Te,ke],V=()=>["auto","min","max","fr",Te,ke],A=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],$=()=>["start","end","center","stretch","center-safe","end-safe"],O=()=>["auto",...B()],H=()=>[ra,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...B()],X=()=>[ra,"screen","full","dvw","lvw","svw","min","max","fit",...B()],K=()=>[ra,"screen","full","lh","dvh","lvh","svh","min","max","fit",...B()],T=()=>[e,Te,ke],j=()=>[...M(),oy,ly,{position:[Te,ke]}],Y=()=>["no-repeat",{repeat:["","x","y","space","round"]}],L=()=>["auto","cover","contain",fA,lA,{size:[Te,ke]}],G=()=>[mh,Kl,La],q=()=>["","none","full",h,Te,ke],Q=()=>["",We,Kl,La],J=()=>["solid","dashed","dotted","double"],W=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],te=()=>[We,mh,oy,ly],ce=()=>["","none",_,Te,ke],fe=()=>["none",We,Te,ke],be=()=>["none",We,Te,ke],we=()=>[We,Te,ke],Ne=()=>[ra,"full",...B()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[bi],breakpoint:[bi],color:[G_],container:[bi],"drop-shadow":[bi],ease:["in","out","in-out"],font:[aA],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[bi],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[bi],shadow:[bi],spacing:["px",We],text:[bi],"text-shadow":[bi],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",ra,ke,Te,S]}],container:["container"],"container-type":[{"@container":["","normal","size",Te,ke]}],"container-named":[sA],columns:[{columns:[We,ke,Te,d]}],"break-after":[{"break-after":E()}],"break-before":[{"break-before":E()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:I()}],overflow:[{overflow:R()}],"overflow-x":[{"overflow-x":R()}],"overflow-y":[{"overflow-y":R()}],overscroll:[{overscroll:U()}],"overscroll-x":[{"overscroll-x":U()}],"overscroll-y":[{"overscroll-y":U()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:Z()}],"inset-x":[{"inset-x":Z()}],"inset-y":[{"inset-y":Z()}],start:[{"inset-s":Z(),start:Z()}],end:[{"inset-e":Z(),end:Z()}],"inset-bs":[{"inset-bs":Z()}],"inset-be":[{"inset-be":Z()}],top:[{top:Z()}],right:[{right:Z()}],bottom:[{bottom:Z()}],left:[{left:Z()}],visibility:["visible","invisible","collapse"],z:[{z:[Fr,"auto",Te,ke]}],basis:[{basis:[ra,"full","auto",d,...B()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[We,ra,"auto","initial","none",ke]}],grow:[{grow:["",We,Te,ke]}],shrink:[{shrink:["",We,Te,ke]}],order:[{order:[Fr,"first","last","none",Te,ke]}],"grid-cols":[{"grid-cols":D()}],"col-start-end":[{col:z()}],"col-start":[{"col-start":P()}],"col-end":[{"col-end":P()}],"grid-rows":[{"grid-rows":D()}],"row-start-end":[{row:z()}],"row-start":[{"row-start":P()}],"row-end":[{"row-end":P()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":V()}],"auto-rows":[{"auto-rows":V()}],gap:[{gap:B()}],"gap-x":[{"gap-x":B()}],"gap-y":[{"gap-y":B()}],"justify-content":[{justify:[...A(),"normal"]}],"justify-items":[{"justify-items":[...$(),"normal"]}],"justify-self":[{"justify-self":["auto",...$()]}],"align-content":[{content:["normal",...A()]}],"align-items":[{items:[...$(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...$(),{baseline:["","last"]}]}],"place-content":[{"place-content":A()}],"place-items":[{"place-items":[...$(),"baseline"]}],"place-self":[{"place-self":["auto",...$()]}],p:[{p:B()}],px:[{px:B()}],py:[{py:B()}],ps:[{ps:B()}],pe:[{pe:B()}],pbs:[{pbs:B()}],pbe:[{pbe:B()}],pt:[{pt:B()}],pr:[{pr:B()}],pb:[{pb:B()}],pl:[{pl:B()}],m:[{m:O()}],mx:[{mx:O()}],my:[{my:O()}],ms:[{ms:O()}],me:[{me:O()}],mbs:[{mbs:O()}],mbe:[{mbe:O()}],mt:[{mt:O()}],mr:[{mr:O()}],mb:[{mb:O()}],ml:[{ml:O()}],"space-x":[{"space-x":B()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":B()}],"space-y-reverse":["space-y-reverse"],size:[{size:H()}],"inline-size":[{inline:["auto",...X()]}],"min-inline-size":[{"min-inline":["auto",...X()]}],"max-inline-size":[{"max-inline":["none",...X()]}],"block-size":[{block:["auto",...K()]}],"min-block-size":[{"min-block":["auto",...K()]}],"max-block-size":[{"max-block":["none",...K()]}],w:[{w:[d,"screen",...H()]}],"min-w":[{"min-w":[d,"screen","none",...H()]}],"max-w":[{"max-w":[d,"screen","none","prose",{screen:[c]},...H()]}],h:[{h:["screen","lh",...H()]}],"min-h":[{"min-h":["screen","lh","none",...H()]}],"max-h":[{"max-h":["screen","lh",...H()]}],"font-size":[{text:["base",r,Kl,La]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[a,mA,oA]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",mh,ke]}],"font-family":[{font:[dA,cA,t]}],"font-features":[{"font-features":[ke]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[s,Te,ke]}],"line-clamp":[{"line-clamp":[We,"none",Te,sy]}],leading:[{leading:[o,...B()]}],"list-image":[{"list-image":["none",Te,ke]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",Te,ke]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:T()}],"text-color":[{text:T()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...J(),"wavy"]}],"text-decoration-thickness":[{decoration:[We,"from-font","auto",Te,La]}],"text-decoration-color":[{decoration:T()}],"underline-offset":[{"underline-offset":[We,"auto",Te,ke]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:B()}],"tab-size":[{tab:[Fr,Te,ke]}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",Te,ke]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",Te,ke]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:j()}],"bg-repeat":[{bg:Y()}],"bg-size":[{bg:L()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},Fr,Te,ke],radial:["",Te,ke],conic:[Fr,Te,ke]},hA,uA]}],"bg-color":[{bg:T()}],"gradient-from-pos":[{from:G()}],"gradient-via-pos":[{via:G()}],"gradient-to-pos":[{to:G()}],"gradient-from":[{from:T()}],"gradient-via":[{via:T()}],"gradient-to":[{to:T()}],rounded:[{rounded:q()}],"rounded-s":[{"rounded-s":q()}],"rounded-e":[{"rounded-e":q()}],"rounded-t":[{"rounded-t":q()}],"rounded-r":[{"rounded-r":q()}],"rounded-b":[{"rounded-b":q()}],"rounded-l":[{"rounded-l":q()}],"rounded-ss":[{"rounded-ss":q()}],"rounded-se":[{"rounded-se":q()}],"rounded-ee":[{"rounded-ee":q()}],"rounded-es":[{"rounded-es":q()}],"rounded-tl":[{"rounded-tl":q()}],"rounded-tr":[{"rounded-tr":q()}],"rounded-br":[{"rounded-br":q()}],"rounded-bl":[{"rounded-bl":q()}],"border-w":[{border:Q()}],"border-w-x":[{"border-x":Q()}],"border-w-y":[{"border-y":Q()}],"border-w-s":[{"border-s":Q()}],"border-w-e":[{"border-e":Q()}],"border-w-bs":[{"border-bs":Q()}],"border-w-be":[{"border-be":Q()}],"border-w-t":[{"border-t":Q()}],"border-w-r":[{"border-r":Q()}],"border-w-b":[{"border-b":Q()}],"border-w-l":[{"border-l":Q()}],"divide-x":[{"divide-x":Q()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":Q()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...J(),"hidden","none"]}],"divide-style":[{divide:[...J(),"hidden","none"]}],"border-color":[{border:T()}],"border-color-x":[{"border-x":T()}],"border-color-y":[{"border-y":T()}],"border-color-s":[{"border-s":T()}],"border-color-e":[{"border-e":T()}],"border-color-bs":[{"border-bs":T()}],"border-color-be":[{"border-be":T()}],"border-color-t":[{"border-t":T()}],"border-color-r":[{"border-r":T()}],"border-color-b":[{"border-b":T()}],"border-color-l":[{"border-l":T()}],"divide-color":[{divide:T()}],"outline-style":[{outline:[...J(),"none","hidden"]}],"outline-offset":[{"outline-offset":[We,Te,ke]}],"outline-w":[{outline:["",We,Kl,La]}],"outline-color":[{outline:T()}],shadow:[{shadow:["","none",m,Wc,Qc]}],"shadow-color":[{shadow:T()}],"inset-shadow":[{"inset-shadow":["none",p,Wc,Qc]}],"inset-shadow-color":[{"inset-shadow":T()}],"ring-w":[{ring:Q()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:T()}],"ring-offset-w":[{"ring-offset":[We,La]}],"ring-offset-color":[{"ring-offset":T()}],"inset-ring-w":[{"inset-ring":Q()}],"inset-ring-color":[{"inset-ring":T()}],"text-shadow":[{"text-shadow":["none",y,Wc,Qc]}],"text-shadow-color":[{"text-shadow":T()}],opacity:[{opacity:[We,Te,ke]}],"mix-blend":[{"mix-blend":[...W(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":W()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[We]}],"mask-image-linear-from-pos":[{"mask-linear-from":te()}],"mask-image-linear-to-pos":[{"mask-linear-to":te()}],"mask-image-linear-from-color":[{"mask-linear-from":T()}],"mask-image-linear-to-color":[{"mask-linear-to":T()}],"mask-image-t-from-pos":[{"mask-t-from":te()}],"mask-image-t-to-pos":[{"mask-t-to":te()}],"mask-image-t-from-color":[{"mask-t-from":T()}],"mask-image-t-to-color":[{"mask-t-to":T()}],"mask-image-r-from-pos":[{"mask-r-from":te()}],"mask-image-r-to-pos":[{"mask-r-to":te()}],"mask-image-r-from-color":[{"mask-r-from":T()}],"mask-image-r-to-color":[{"mask-r-to":T()}],"mask-image-b-from-pos":[{"mask-b-from":te()}],"mask-image-b-to-pos":[{"mask-b-to":te()}],"mask-image-b-from-color":[{"mask-b-from":T()}],"mask-image-b-to-color":[{"mask-b-to":T()}],"mask-image-l-from-pos":[{"mask-l-from":te()}],"mask-image-l-to-pos":[{"mask-l-to":te()}],"mask-image-l-from-color":[{"mask-l-from":T()}],"mask-image-l-to-color":[{"mask-l-to":T()}],"mask-image-x-from-pos":[{"mask-x-from":te()}],"mask-image-x-to-pos":[{"mask-x-to":te()}],"mask-image-x-from-color":[{"mask-x-from":T()}],"mask-image-x-to-color":[{"mask-x-to":T()}],"mask-image-y-from-pos":[{"mask-y-from":te()}],"mask-image-y-to-pos":[{"mask-y-to":te()}],"mask-image-y-from-color":[{"mask-y-from":T()}],"mask-image-y-to-color":[{"mask-y-to":T()}],"mask-image-radial":[{"mask-radial":[Te,ke]}],"mask-image-radial-from-pos":[{"mask-radial-from":te()}],"mask-image-radial-to-pos":[{"mask-radial-to":te()}],"mask-image-radial-from-color":[{"mask-radial-from":T()}],"mask-image-radial-to-color":[{"mask-radial-to":T()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":M()}],"mask-image-conic-pos":[{"mask-conic":[We]}],"mask-image-conic-from-pos":[{"mask-conic-from":te()}],"mask-image-conic-to-pos":[{"mask-conic-to":te()}],"mask-image-conic-from-color":[{"mask-conic-from":T()}],"mask-image-conic-to-color":[{"mask-conic-to":T()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:j()}],"mask-repeat":[{mask:Y()}],"mask-size":[{mask:L()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",Te,ke]}],filter:[{filter:["","none",Te,ke]}],blur:[{blur:ce()}],brightness:[{brightness:[We,Te,ke]}],contrast:[{contrast:[We,Te,ke]}],"drop-shadow":[{"drop-shadow":["","none",x,Wc,Qc]}],"drop-shadow-color":[{"drop-shadow":T()}],grayscale:[{grayscale:["",We,Te,ke]}],"hue-rotate":[{"hue-rotate":[We,Te,ke]}],invert:[{invert:["",We,Te,ke]}],saturate:[{saturate:[We,Te,ke]}],sepia:[{sepia:["",We,Te,ke]}],"backdrop-filter":[{"backdrop-filter":["","none",Te,ke]}],"backdrop-blur":[{"backdrop-blur":ce()}],"backdrop-brightness":[{"backdrop-brightness":[We,Te,ke]}],"backdrop-contrast":[{"backdrop-contrast":[We,Te,ke]}],"backdrop-grayscale":[{"backdrop-grayscale":["",We,Te,ke]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[We,Te,ke]}],"backdrop-invert":[{"backdrop-invert":["",We,Te,ke]}],"backdrop-opacity":[{"backdrop-opacity":[We,Te,ke]}],"backdrop-saturate":[{"backdrop-saturate":[We,Te,ke]}],"backdrop-sepia":[{"backdrop-sepia":["",We,Te,ke]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":B()}],"border-spacing-x":[{"border-spacing-x":B()}],"border-spacing-y":[{"border-spacing-y":B()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",Te,ke]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[We,"initial",Te,ke]}],ease:[{ease:["linear","initial",w,Te,ke]}],delay:[{delay:[We,Te,ke]}],animate:[{animate:["none",k,Te,ke]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[N,Te,ke]}],"perspective-origin":[{"perspective-origin":I()}],rotate:[{rotate:fe()}],"rotate-x":[{"rotate-x":fe()}],"rotate-y":[{"rotate-y":fe()}],"rotate-z":[{"rotate-z":fe()}],scale:[{scale:be()}],"scale-x":[{"scale-x":be()}],"scale-y":[{"scale-y":be()}],"scale-z":[{"scale-z":be()}],"scale-3d":["scale-3d"],skew:[{skew:we()}],"skew-x":[{"skew-x":we()}],"skew-y":[{"skew-y":we()}],transform:[{transform:[Te,ke,"","none","gpu","cpu"]}],"transform-origin":[{origin:I()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:Ne()}],"translate-x":[{"translate-x":Ne()}],"translate-y":[{"translate-y":Ne()}],"translate-z":[{"translate-z":Ne()}],"translate-none":["translate-none"],zoom:[{zoom:[Fr,Te,ke]}],accent:[{accent:T()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:T()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",Te,ke]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scrollbar-thumb-color":[{"scrollbar-thumb":T()}],"scrollbar-track-color":[{"scrollbar-track":T()}],"scrollbar-gutter":[{"scrollbar-gutter":["auto","stable","both"]}],"scrollbar-w":[{scrollbar:["auto","thin","none"]}],"scroll-m":[{"scroll-m":B()}],"scroll-mx":[{"scroll-mx":B()}],"scroll-my":[{"scroll-my":B()}],"scroll-ms":[{"scroll-ms":B()}],"scroll-me":[{"scroll-me":B()}],"scroll-mbs":[{"scroll-mbs":B()}],"scroll-mbe":[{"scroll-mbe":B()}],"scroll-mt":[{"scroll-mt":B()}],"scroll-mr":[{"scroll-mr":B()}],"scroll-mb":[{"scroll-mb":B()}],"scroll-ml":[{"scroll-ml":B()}],"scroll-p":[{"scroll-p":B()}],"scroll-px":[{"scroll-px":B()}],"scroll-py":[{"scroll-py":B()}],"scroll-ps":[{"scroll-ps":B()}],"scroll-pe":[{"scroll-pe":B()}],"scroll-pbs":[{"scroll-pbs":B()}],"scroll-pbe":[{"scroll-pbe":B()}],"scroll-pt":[{"scroll-pt":B()}],"scroll-pr":[{"scroll-pr":B()}],"scroll-pb":[{"scroll-pb":B()}],"scroll-pl":[{"scroll-pl":B()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",Te,ke]}],fill:[{fill:["none",...T()]}],"stroke-w":[{stroke:[We,Kl,La,sy]}],stroke:[{stroke:["none",...T()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{"container-named":["container-type"],overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","inset-bs","inset-be","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pbs","pbe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mbs","mbe","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-bs","border-w-be","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-bs","border-color-be","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mbs","scroll-mbe","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pbs","scroll-pbe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},postfixLookupClassGroups:["container-type"],orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},bA=XC(gA);function Mr(...e){return bA(kC(e))}function xA(e){return new Date(e).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"})}function Hm(e){const t=new Date(e),a=Math.floor((new Date().getTime()-t.getTime())/1e3);return a<60?"just now":a<3600?`${Math.floor(a/60)}m ago`:a<86400?`${Math.floor(a/3600)}h ago`:a<604800?`${Math.floor(a/86400)}d ago`:xA(e)}function yA(e){return`STRIX-${e}`}function Ds(e){return new Intl.NumberFormat("en-US").format(e)}function vA(e,t){const r={};return(e[e.length-1]===""?[...e,""]:e).join((r.padRight?" ":"")+","+(r.padLeft===!1?"":" ")).trim()}const _A=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,wA=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,EA={};function cy(e,t){return(EA.jsx?wA:_A).test(e)}const NA=/[ \t\n\f\r]/g;function SA(e){return typeof e=="object"?e.type==="text"?uy(e.value):!1:uy(e)}function uy(e){return e.replace(NA,"")===""}class Mo{constructor(t,r,a){this.normal=r,this.property=t,a&&(this.space=a)}}Mo.prototype.normal={};Mo.prototype.property={};Mo.prototype.space=void 0;function J_(e,t){const r={},a={};for(const s of e)Object.assign(r,s.property),Object.assign(a,s.normal);return new Mo(r,a,t)}function $m(e){return e.toLowerCase()}class Vn{constructor(t,r){this.attribute=r,this.property=t}}Vn.prototype.attribute="";Vn.prototype.booleanish=!1;Vn.prototype.boolean=!1;Vn.prototype.commaOrSpaceSeparated=!1;Vn.prototype.commaSeparated=!1;Vn.prototype.defined=!1;Vn.prototype.mustUseProperty=!1;Vn.prototype.number=!1;Vn.prototype.overloadedBoolean=!1;Vn.prototype.property="";Vn.prototype.spaceSeparated=!1;Vn.prototype.space=void 0;let kA=0;const Ge=Qa(),an=Qa(),qm=Qa(),ve=Qa(),Tt=Qa(),$a=Qa(),nr=Qa();function Qa(){return 2**++kA}const Pm=Object.freeze(Object.defineProperty({__proto__:null,boolean:Ge,booleanish:an,commaOrSpaceSeparated:nr,commaSeparated:$a,number:ve,overloadedBoolean:qm,spaceSeparated:Tt},Symbol.toStringTag,{value:"Module"})),ph=Object.keys(Pm);class Ep extends Vn{constructor(t,r,a,s){let o=-1;if(super(t,r),dy(this,"space",s),typeof a=="number")for(;++o4&&r.slice(0,4)==="data"&&OA.test(t)){if(t.charAt(4)==="-"){const o=t.slice(5).replace(fy,jA);a="data"+o.charAt(0).toUpperCase()+o.slice(1)}else{const o=t.slice(4);if(!fy.test(o)){let c=o.replace(MA,DA);c.charAt(0)!=="-"&&(c="-"+c),t="data"+c}}s=Ep}return new s(a,t)}function DA(e){return"-"+e.toLowerCase()}function jA(e){return e.charAt(1).toUpperCase()}const LA=J_([ew,TA,rw,iw,aw],"html"),Np=J_([ew,CA,rw,iw,aw],"svg");function zA(e){return e.join(" ").trim()}var js={},gh,hy;function IA(){if(hy)return gh;hy=1;var e=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,t=/\n/g,r=/^\s*/,a=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,s=/^:\s*/,o=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,c=/^[;\s]*/,d=/^\s+|\s+$/g,f=` -`,h="/",m="*",p="",y="comment",x="declaration";function _(S,w){if(typeof S!="string")throw new TypeError("First argument must be a string");if(!S)return[];w=w||{};var k=1,E=1;function M(A){var $=A.match(t);$&&(k+=$.length);var O=A.lastIndexOf(f);E=~O?A.length-O:E+A.length}function I(){var A={line:k,column:E};return function($){return $.position=new R(A),Z(),$}}function R(A){this.start=A,this.end={line:k,column:E},this.source=w.source}R.prototype.content=S;function U(A){var $=new Error(w.source+":"+k+":"+E+": "+A);if($.reason=A,$.filename=w.source,$.line=k,$.column=E,$.source=S,!w.silent)throw $}function B(A){var $=A.exec(S);if($){var O=$[0];return M(O),S=S.slice(O.length),$}}function Z(){B(r)}function D(A){var $;for(A=A||[];$=z();)$!==!1&&A.push($);return A}function z(){var A=I();if(!(h!=S.charAt(0)||m!=S.charAt(1))){for(var $=2;p!=S.charAt($)&&(m!=S.charAt($)||h!=S.charAt($+1));)++$;if($+=2,p===S.charAt($-1))return U("End of comment missing");var O=S.slice(2,$-2);return E+=2,M(O),S=S.slice($),E+=2,A({type:y,comment:O})}}function P(){var A=I(),$=B(a);if($){if(z(),!B(s))return U("property missing ':'");var O=B(o),H=A({type:x,property:N($[0].replace(e,p)),value:O?N(O[0].replace(e,p)):p});return B(c),H}}function V(){var A=[];D(A);for(var $;$=P();)$!==!1&&(A.push($),D(A));return A}return Z(),V()}function N(S){return S?S.replace(d,p):p}return gh=_,gh}var my;function BA(){if(my)return js;my=1;var e=js&&js.__importDefault||function(a){return a&&a.__esModule?a:{default:a}};Object.defineProperty(js,"__esModule",{value:!0}),js.default=r;const t=e(IA());function r(a,s){let o=null;if(!a||typeof a!="string")return o;const c=(0,t.default)(a),d=typeof s=="function";return c.forEach(f=>{if(f.type!=="declaration")return;const{property:h,value:m}=f;d?s(h,m,f):m&&(o=o||{},o[h]=m)}),o}return js}var Zl={},py;function UA(){if(py)return Zl;py=1,Object.defineProperty(Zl,"__esModule",{value:!0}),Zl.camelCase=void 0;var e=/^--[a-zA-Z0-9_-]+$/,t=/-([a-z])/g,r=/^[^-]+$/,a=/^-(webkit|moz|ms|o|khtml)-/,s=/^-(ms)-/,o=function(h){return!h||r.test(h)||e.test(h)},c=function(h,m){return m.toUpperCase()},d=function(h,m){return"".concat(m,"-")},f=function(h,m){return m===void 0&&(m={}),o(h)?h:(h=h.toLowerCase(),m.reactCompat?h=h.replace(s,d):h=h.replace(a,d),h.replace(t,c))};return Zl.camelCase=f,Zl}var Ql,gy;function HA(){if(gy)return Ql;gy=1;var e=Ql&&Ql.__importDefault||function(s){return s&&s.__esModule?s:{default:s}},t=e(BA()),r=UA();function a(s,o){var c={};return!s||typeof s!="string"||(0,t.default)(s,function(d,f){d&&f&&(c[(0,r.camelCase)(d,o)]=f)}),c}return a.default=a,Ql=a,Ql}var $A=HA();const qA=To($A),sw=lw("end"),Sp=lw("start");function lw(e){return t;function t(r){const a=r&&r.position&&r.position[e]||{};if(typeof a.line=="number"&&a.line>0&&typeof a.column=="number"&&a.column>0)return{line:a.line,column:a.column,offset:typeof a.offset=="number"&&a.offset>-1?a.offset:void 0}}}function PA(e){const t=Sp(e),r=sw(e);if(t&&r)return{start:t,end:r}}function lo(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?by(e.position):"start"in e||"end"in e?by(e):"line"in e||"column"in e?Fm(e):""}function Fm(e){return xy(e&&e.line)+":"+xy(e&&e.column)}function by(e){return Fm(e&&e.start)+"-"+Fm(e&&e.end)}function xy(e){return e&&typeof e=="number"?e:1}class Cn extends Error{constructor(t,r,a){super(),typeof r=="string"&&(a=r,r=void 0);let s="",o={},c=!1;if(r&&("line"in r&&"column"in r?o={place:r}:"start"in r&&"end"in r?o={place:r}:"type"in r?o={ancestors:[r],place:r.position}:o={...r}),typeof t=="string"?s=t:!o.cause&&t&&(c=!0,s=t.message,o.cause=t),!o.ruleId&&!o.source&&typeof a=="string"){const f=a.indexOf(":");f===-1?o.ruleId=a:(o.source=a.slice(0,f),o.ruleId=a.slice(f+1))}if(!o.place&&o.ancestors&&o.ancestors){const f=o.ancestors[o.ancestors.length-1];f&&(o.place=f.position)}const d=o.place&&"start"in o.place?o.place.start:o.place;this.ancestors=o.ancestors||void 0,this.cause=o.cause||void 0,this.column=d?d.column:void 0,this.fatal=void 0,this.file="",this.message=s,this.line=d?d.line:void 0,this.name=lo(o.place)||"1:1",this.place=o.place||void 0,this.reason=this.message,this.ruleId=o.ruleId||void 0,this.source=o.source||void 0,this.stack=c&&o.cause&&typeof o.cause.stack=="string"?o.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}Cn.prototype.file="";Cn.prototype.name="";Cn.prototype.reason="";Cn.prototype.message="";Cn.prototype.stack="";Cn.prototype.column=void 0;Cn.prototype.line=void 0;Cn.prototype.ancestors=void 0;Cn.prototype.cause=void 0;Cn.prototype.fatal=void 0;Cn.prototype.place=void 0;Cn.prototype.ruleId=void 0;Cn.prototype.source=void 0;const kp={}.hasOwnProperty,FA=new Map,GA=/[A-Z]/g,VA=new Set(["table","tbody","thead","tfoot","tr"]),YA=new Set(["td","th"]),ow="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function XA(e,t){if(!t||t.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const r=t.filePath||void 0;let a;if(t.development){if(typeof t.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");a=nM(r,t.jsxDEV)}else{if(typeof t.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof t.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");a=tM(r,t.jsx,t.jsxs)}const s={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:a,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:r,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:t.passKeys!==!1,passNode:t.passNode||!1,schema:t.space==="svg"?Np:LA,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},o=cw(s,e,void 0);return o&&typeof o!="string"?o:s.create(e,s.Fragment,{children:o||void 0},void 0)}function cw(e,t,r){if(t.type==="element")return KA(e,t,r);if(t.type==="mdxFlowExpression"||t.type==="mdxTextExpression")return ZA(e,t);if(t.type==="mdxJsxFlowElement"||t.type==="mdxJsxTextElement")return WA(e,t,r);if(t.type==="mdxjsEsm")return QA(e,t);if(t.type==="root")return JA(e,t,r);if(t.type==="text")return eM(e,t)}function KA(e,t,r){const a=e.schema;let s=a;t.tagName.toLowerCase()==="svg"&&a.space==="html"&&(s=Np,e.schema=s),e.ancestors.push(t);const o=dw(e,t.tagName,!1),c=rM(e,t);let d=Cp(e,t);return VA.has(t.tagName)&&(d=d.filter(function(f){return typeof f=="string"?!SA(f):!0})),uw(e,c,o,t),Tp(c,d),e.ancestors.pop(),e.schema=a,e.create(t,o,c,r)}function ZA(e,t){if(t.data&&t.data.estree&&e.evaluater){const a=t.data.estree.body[0];return a.type,e.evaluater.evaluateExpression(a.expression)}po(e,t.position)}function QA(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);po(e,t.position)}function WA(e,t,r){const a=e.schema;let s=a;t.name==="svg"&&a.space==="html"&&(s=Np,e.schema=s),e.ancestors.push(t);const o=t.name===null?e.Fragment:dw(e,t.name,!0),c=iM(e,t),d=Cp(e,t);return uw(e,c,o,t),Tp(c,d),e.ancestors.pop(),e.schema=a,e.create(t,o,c,r)}function JA(e,t,r){const a={};return Tp(a,Cp(e,t)),e.create(t,e.Fragment,a,r)}function eM(e,t){return t.value}function uw(e,t,r,a){typeof r!="string"&&r!==e.Fragment&&e.passNode&&(t.node=a)}function Tp(e,t){if(t.length>0){const r=t.length>1?t:t[0];r&&(e.children=r)}}function tM(e,t,r){return a;function a(s,o,c,d){const h=Array.isArray(c.children)?r:t;return d?h(o,c,d):h(o,c)}}function nM(e,t){return r;function r(a,s,o,c){const d=Array.isArray(o.children),f=Sp(a);return t(s,o,c,d,{columnNumber:f?f.column-1:void 0,fileName:e,lineNumber:f?f.line:void 0},void 0)}}function rM(e,t){const r={};let a,s;for(s in t.properties)if(s!=="children"&&kp.call(t.properties,s)){const o=aM(e,s,t.properties[s]);if(o){const[c,d]=o;e.tableCellAlignToStyle&&c==="align"&&typeof d=="string"&&YA.has(t.tagName)?a=d:r[c]=d}}if(a){const o=r.style||(r.style={});o[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=a}return r}function iM(e,t){const r={};for(const a of t.attributes)if(a.type==="mdxJsxExpressionAttribute")if(a.data&&a.data.estree&&e.evaluater){const o=a.data.estree.body[0];o.type;const c=o.expression;c.type;const d=c.properties[0];d.type,Object.assign(r,e.evaluater.evaluateExpression(d.argument))}else po(e,t.position);else{const s=a.name;let o;if(a.value&&typeof a.value=="object")if(a.value.data&&a.value.data.estree&&e.evaluater){const d=a.value.data.estree.body[0];d.type,o=e.evaluater.evaluateExpression(d.expression)}else po(e,t.position);else o=a.value===null?!0:a.value;r[s]=o}return r}function Cp(e,t){const r=[];let a=-1;const s=e.passKeys?new Map:FA;for(;++as?0:s+t:t=t>s?s:t,r=r>0?r:0,a.length<1e4)c=Array.from(a),c.unshift(t,r),e.splice(...c);else for(r&&e.splice(t,r);o0?(ir(e,e.length,0,t),e):t}const _y={}.hasOwnProperty;function hw(e){const t={};let r=-1;for(;++r13&&r<32||r>126&&r<160||r>55295&&r<57344||r>64975&&r<65008||(r&65535)===65535||(r&65535)===65534||r>1114111?"�":String.fromCodePoint(r)}function jr(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const jn=ma(/[A-Za-z]/),Tn=ma(/[\dA-Za-z]/),mM=ma(/[#-'*+\--9=?A-Z^-~]/);function _u(e){return e!==null&&(e<32||e===127)}const Gm=ma(/\d/),pM=ma(/[\dA-Fa-f]/),gM=ma(/[!-/:-@[-`{-~]/);function Be(e){return e!==null&&e<-2}function Ct(e){return e!==null&&(e<0||e===32)}function tt(e){return e===-2||e===-1||e===32}const qu=ma(new RegExp("\\p{P}|\\p{S}","u")),Fa=ma(/\s/);function ma(e){return t;function t(r){return r!==null&&r>-1&&e.test(String.fromCharCode(r))}}function nl(e){const t=[];let r=-1,a=0,s=0;for(;++r55295&&o<57344){const d=e.charCodeAt(r+1);o<56320&&d>56319&&d<57344?(c=String.fromCharCode(o,d),s=1):c="�"}else c=String.fromCharCode(o);c&&(t.push(e.slice(a,r),encodeURIComponent(c)),a=r+s+1,c=""),s&&(r+=s,s=0)}return t.join("")+e.slice(a)}function ot(e,t,r,a){const s=a?a-1:Number.POSITIVE_INFINITY;let o=0;return c;function c(f){return tt(f)?(e.enter(r),d(f)):t(f)}function d(f){return tt(f)&&o++c))return;const U=t.events.length;let B=U,Z,D;for(;B--;)if(t.events[B][0]==="exit"&&t.events[B][1].type==="chunkFlow"){if(Z){D=t.events[B][1].end;break}Z=!0}for(w(a),R=U;RE;){const I=r[M];t.containerState=I[1],I[0].exit.call(t,e)}r.length=E}function k(){s.write([null]),o=void 0,s=void 0,t.containerState._closeFlow=void 0}}function _M(e,t,r){return ot(e,e.attempt(this.parser.constructs.document,t,r),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Ys(e){if(e===null||Ct(e)||Fa(e))return 1;if(qu(e))return 2}function Pu(e,t,r){const a=[];let s=-1;for(;++s1&&e[r][1].end.offset-e[r][1].start.offset>1?2:1;const p={...e[a][1].end},y={...e[r][1].start};Ey(p,-f),Ey(y,f),c={type:f>1?"strongSequence":"emphasisSequence",start:p,end:{...e[a][1].end}},d={type:f>1?"strongSequence":"emphasisSequence",start:{...e[r][1].start},end:y},o={type:f>1?"strongText":"emphasisText",start:{...e[a][1].end},end:{...e[r][1].start}},s={type:f>1?"strong":"emphasis",start:{...c.start},end:{...d.end}},e[a][1].end={...c.start},e[r][1].start={...d.end},h=[],e[a][1].end.offset-e[a][1].start.offset&&(h=br(h,[["enter",e[a][1],t],["exit",e[a][1],t]])),h=br(h,[["enter",s,t],["enter",c,t],["exit",c,t],["enter",o,t]]),h=br(h,Pu(t.parser.constructs.insideSpan.null,e.slice(a+1,r),t)),h=br(h,[["exit",o,t],["enter",d,t],["exit",d,t],["exit",s,t]]),e[r][1].end.offset-e[r][1].start.offset?(m=2,h=br(h,[["enter",e[r][1],t],["exit",e[r][1],t]])):m=0,ir(e,a-1,r-a+3,h),r=a+h.length-m-2;break}}for(r=-1;++r0&&tt(R)?ot(e,k,"linePrefix",o+1)(R):k(R)}function k(R){return R===null||Be(R)?e.check(Ny,N,M)(R):(e.enter("codeFlowValue"),E(R))}function E(R){return R===null||Be(R)?(e.exit("codeFlowValue"),k(R)):(e.consume(R),E)}function M(R){return e.exit("codeFenced"),t(R)}function I(R,U,B){let Z=0;return D;function D($){return R.enter("lineEnding"),R.consume($),R.exit("lineEnding"),z}function z($){return R.enter("codeFencedFence"),tt($)?ot(R,P,"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)($):P($)}function P($){return $===d?(R.enter("codeFencedFenceSequence"),V($)):B($)}function V($){return $===d?(Z++,R.consume($),V):Z>=c?(R.exit("codeFencedFenceSequence"),tt($)?ot(R,A,"whitespace")($):A($)):B($)}function A($){return $===null||Be($)?(R.exit("codeFencedFence"),U($)):B($)}}}function DM(e,t,r){const a=this;return s;function s(c){return c===null?r(c):(e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),o)}function o(c){return a.parser.lazy[a.now().line]?r(c):t(c)}}const xh={name:"codeIndented",tokenize:LM},jM={partial:!0,tokenize:zM};function LM(e,t,r){const a=this;return s;function s(h){return e.enter("codeIndented"),ot(e,o,"linePrefix",5)(h)}function o(h){const m=a.events[a.events.length-1];return m&&m[1].type==="linePrefix"&&m[2].sliceSerialize(m[1],!0).length>=4?c(h):r(h)}function c(h){return h===null?f(h):Be(h)?e.attempt(jM,c,f)(h):(e.enter("codeFlowValue"),d(h))}function d(h){return h===null||Be(h)?(e.exit("codeFlowValue"),c(h)):(e.consume(h),d)}function f(h){return e.exit("codeIndented"),t(h)}}function zM(e,t,r){const a=this;return s;function s(c){return a.parser.lazy[a.now().line]?r(c):Be(c)?(e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),s):ot(e,o,"linePrefix",5)(c)}function o(c){const d=a.events[a.events.length-1];return d&&d[1].type==="linePrefix"&&d[2].sliceSerialize(d[1],!0).length>=4?t(c):Be(c)?s(c):r(c)}}const IM={name:"codeText",previous:UM,resolve:BM,tokenize:HM};function BM(e){let t=e.length-4,r=3,a,s;if((e[r][1].type==="lineEnding"||e[r][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(a=r;++a=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+t+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return tthis.left.length?this.right.slice(this.right.length-a+this.left.length,this.right.length-t+this.left.length).reverse():this.left.slice(t).concat(this.right.slice(this.right.length-a+this.left.length).reverse())}splice(t,r,a){const s=r||0;this.setCursor(Math.trunc(t));const o=this.right.splice(this.right.length-s,Number.POSITIVE_INFINITY);return a&&Wl(this.left,a),o.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(t){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(t)}pushMany(t){this.setCursor(Number.POSITIVE_INFINITY),Wl(this.left,t)}unshift(t){this.setCursor(0),this.right.push(t)}unshiftMany(t){this.setCursor(0),Wl(this.right,t.reverse())}setCursor(t){if(!(t===this.left.length||t>this.left.length&&this.right.length===0||t<0&&this.left.length===0))if(t=4?t(c):e.interrupt(a.parser.constructs.flow,r,t)(c)}}function yw(e,t,r,a,s,o,c,d,f){const h=f||Number.POSITIVE_INFINITY;let m=0;return p;function p(w){return w===60?(e.enter(a),e.enter(s),e.enter(o),e.consume(w),e.exit(o),y):w===null||w===32||w===41||_u(w)?r(w):(e.enter(a),e.enter(c),e.enter(d),e.enter("chunkString",{contentType:"string"}),N(w))}function y(w){return w===62?(e.enter(o),e.consume(w),e.exit(o),e.exit(s),e.exit(a),t):(e.enter(d),e.enter("chunkString",{contentType:"string"}),x(w))}function x(w){return w===62?(e.exit("chunkString"),e.exit(d),y(w)):w===null||w===60||Be(w)?r(w):(e.consume(w),w===92?_:x)}function _(w){return w===60||w===62||w===92?(e.consume(w),x):x(w)}function N(w){return!m&&(w===null||w===41||Ct(w))?(e.exit("chunkString"),e.exit(d),e.exit(c),e.exit(a),t(w)):m999||x===null||x===91||x===93&&!f||x===94&&!d&&"_hiddenFootnoteSupport"in c.parser.constructs?r(x):x===93?(e.exit(o),e.enter(s),e.consume(x),e.exit(s),e.exit(a),t):Be(x)?(e.enter("lineEnding"),e.consume(x),e.exit("lineEnding"),m):(e.enter("chunkString",{contentType:"string"}),p(x))}function p(x){return x===null||x===91||x===93||Be(x)||d++>999?(e.exit("chunkString"),m(x)):(e.consume(x),f||(f=!tt(x)),x===92?y:p)}function y(x){return x===91||x===92||x===93?(e.consume(x),d++,p):p(x)}}function _w(e,t,r,a,s,o){let c;return d;function d(y){return y===34||y===39||y===40?(e.enter(a),e.enter(s),e.consume(y),e.exit(s),c=y===40?41:y,f):r(y)}function f(y){return y===c?(e.enter(s),e.consume(y),e.exit(s),e.exit(a),t):(e.enter(o),h(y))}function h(y){return y===c?(e.exit(o),f(c)):y===null?r(y):Be(y)?(e.enter("lineEnding"),e.consume(y),e.exit("lineEnding"),ot(e,h,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),m(y))}function m(y){return y===c||y===null||Be(y)?(e.exit("chunkString"),h(y)):(e.consume(y),y===92?p:m)}function p(y){return y===c||y===92?(e.consume(y),m):m(y)}}function oo(e,t){let r;return a;function a(s){return Be(s)?(e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),r=!0,a):tt(s)?ot(e,a,r?"linePrefix":"lineSuffix")(s):t(s)}}const XM={name:"definition",tokenize:ZM},KM={partial:!0,tokenize:QM};function ZM(e,t,r){const a=this;let s;return o;function o(x){return e.enter("definition"),c(x)}function c(x){return vw.call(a,e,d,r,"definitionLabel","definitionLabelMarker","definitionLabelString")(x)}function d(x){return s=jr(a.sliceSerialize(a.events[a.events.length-1][1]).slice(1,-1)),x===58?(e.enter("definitionMarker"),e.consume(x),e.exit("definitionMarker"),f):r(x)}function f(x){return Ct(x)?oo(e,h)(x):h(x)}function h(x){return yw(e,m,r,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(x)}function m(x){return e.attempt(KM,p,p)(x)}function p(x){return tt(x)?ot(e,y,"whitespace")(x):y(x)}function y(x){return x===null||Be(x)?(e.exit("definition"),a.parser.defined.push(s),t(x)):r(x)}}function QM(e,t,r){return a;function a(d){return Ct(d)?oo(e,s)(d):r(d)}function s(d){return _w(e,o,r,"definitionTitle","definitionTitleMarker","definitionTitleString")(d)}function o(d){return tt(d)?ot(e,c,"whitespace")(d):c(d)}function c(d){return d===null||Be(d)?t(d):r(d)}}const WM={name:"hardBreakEscape",tokenize:JM};function JM(e,t,r){return a;function a(o){return e.enter("hardBreakEscape"),e.consume(o),s}function s(o){return Be(o)?(e.exit("hardBreakEscape"),t(o)):r(o)}}const e5={name:"headingAtx",resolve:t5,tokenize:n5};function t5(e,t){let r=e.length-2,a=3,s,o;return e[a][1].type==="whitespace"&&(a+=2),r-2>a&&e[r][1].type==="whitespace"&&(r-=2),e[r][1].type==="atxHeadingSequence"&&(a===r-1||r-4>a&&e[r-2][1].type==="whitespace")&&(r-=a+1===r?2:4),r>a&&(s={type:"atxHeadingText",start:e[a][1].start,end:e[r][1].end},o={type:"chunkText",start:e[a][1].start,end:e[r][1].end,contentType:"text"},ir(e,a,r-a+1,[["enter",s,t],["enter",o,t],["exit",o,t],["exit",s,t]])),e}function n5(e,t,r){let a=0;return s;function s(m){return e.enter("atxHeading"),o(m)}function o(m){return e.enter("atxHeadingSequence"),c(m)}function c(m){return m===35&&a++<6?(e.consume(m),c):m===null||Ct(m)?(e.exit("atxHeadingSequence"),d(m)):r(m)}function d(m){return m===35?(e.enter("atxHeadingSequence"),f(m)):m===null||Be(m)?(e.exit("atxHeading"),t(m)):tt(m)?ot(e,d,"whitespace")(m):(e.enter("atxHeadingText"),h(m))}function f(m){return m===35?(e.consume(m),f):(e.exit("atxHeadingSequence"),d(m))}function h(m){return m===null||m===35||Ct(m)?(e.exit("atxHeadingText"),d(m)):(e.consume(m),h)}}const r5=["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","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],ky=["pre","script","style","textarea"],i5={concrete:!0,name:"htmlFlow",resolveTo:l5,tokenize:o5},a5={partial:!0,tokenize:u5},s5={partial:!0,tokenize:c5};function l5(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function o5(e,t,r){const a=this;let s,o,c,d,f;return h;function h(L){return m(L)}function m(L){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(L),p}function p(L){return L===33?(e.consume(L),y):L===47?(e.consume(L),o=!0,N):L===63?(e.consume(L),s=3,a.interrupt?t:T):jn(L)?(e.consume(L),c=String.fromCharCode(L),S):r(L)}function y(L){return L===45?(e.consume(L),s=2,x):L===91?(e.consume(L),s=5,d=0,_):jn(L)?(e.consume(L),s=4,a.interrupt?t:T):r(L)}function x(L){return L===45?(e.consume(L),a.interrupt?t:T):r(L)}function _(L){const G="CDATA[";return L===G.charCodeAt(d++)?(e.consume(L),d===G.length?a.interrupt?t:P:_):r(L)}function N(L){return jn(L)?(e.consume(L),c=String.fromCharCode(L),S):r(L)}function S(L){if(L===null||L===47||L===62||Ct(L)){const G=L===47,q=c.toLowerCase();return!G&&!o&&ky.includes(q)?(s=1,a.interrupt?t(L):P(L)):r5.includes(c.toLowerCase())?(s=6,G?(e.consume(L),w):a.interrupt?t(L):P(L)):(s=7,a.interrupt&&!a.parser.lazy[a.now().line]?r(L):o?k(L):E(L))}return L===45||Tn(L)?(e.consume(L),c+=String.fromCharCode(L),S):r(L)}function w(L){return L===62?(e.consume(L),a.interrupt?t:P):r(L)}function k(L){return tt(L)?(e.consume(L),k):D(L)}function E(L){return L===47?(e.consume(L),D):L===58||L===95||jn(L)?(e.consume(L),M):tt(L)?(e.consume(L),E):D(L)}function M(L){return L===45||L===46||L===58||L===95||Tn(L)?(e.consume(L),M):I(L)}function I(L){return L===61?(e.consume(L),R):tt(L)?(e.consume(L),I):E(L)}function R(L){return L===null||L===60||L===61||L===62||L===96?r(L):L===34||L===39?(e.consume(L),f=L,U):tt(L)?(e.consume(L),R):B(L)}function U(L){return L===f?(e.consume(L),f=null,Z):L===null||Be(L)?r(L):(e.consume(L),U)}function B(L){return L===null||L===34||L===39||L===47||L===60||L===61||L===62||L===96||Ct(L)?I(L):(e.consume(L),B)}function Z(L){return L===47||L===62||tt(L)?E(L):r(L)}function D(L){return L===62?(e.consume(L),z):r(L)}function z(L){return L===null||Be(L)?P(L):tt(L)?(e.consume(L),z):r(L)}function P(L){return L===45&&s===2?(e.consume(L),O):L===60&&s===1?(e.consume(L),H):L===62&&s===4?(e.consume(L),j):L===63&&s===3?(e.consume(L),T):L===93&&s===5?(e.consume(L),K):Be(L)&&(s===6||s===7)?(e.exit("htmlFlowData"),e.check(a5,Y,V)(L)):L===null||Be(L)?(e.exit("htmlFlowData"),V(L)):(e.consume(L),P)}function V(L){return e.check(s5,A,Y)(L)}function A(L){return e.enter("lineEnding"),e.consume(L),e.exit("lineEnding"),$}function $(L){return L===null||Be(L)?V(L):(e.enter("htmlFlowData"),P(L))}function O(L){return L===45?(e.consume(L),T):P(L)}function H(L){return L===47?(e.consume(L),c="",X):P(L)}function X(L){if(L===62){const G=c.toLowerCase();return ky.includes(G)?(e.consume(L),j):P(L)}return jn(L)&&c.length<8?(e.consume(L),c+=String.fromCharCode(L),X):P(L)}function K(L){return L===93?(e.consume(L),T):P(L)}function T(L){return L===62?(e.consume(L),j):L===45&&s===2?(e.consume(L),T):P(L)}function j(L){return L===null||Be(L)?(e.exit("htmlFlowData"),Y(L)):(e.consume(L),j)}function Y(L){return e.exit("htmlFlow"),t(L)}}function c5(e,t,r){const a=this;return s;function s(c){return Be(c)?(e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),o):r(c)}function o(c){return a.parser.lazy[a.now().line]?r(c):t(c)}}function u5(e,t,r){return a;function a(s){return e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),e.attempt(Oo,t,r)}}const d5={name:"htmlText",tokenize:f5};function f5(e,t,r){const a=this;let s,o,c;return d;function d(T){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(T),f}function f(T){return T===33?(e.consume(T),h):T===47?(e.consume(T),I):T===63?(e.consume(T),E):jn(T)?(e.consume(T),B):r(T)}function h(T){return T===45?(e.consume(T),m):T===91?(e.consume(T),o=0,_):jn(T)?(e.consume(T),k):r(T)}function m(T){return T===45?(e.consume(T),x):r(T)}function p(T){return T===null?r(T):T===45?(e.consume(T),y):Be(T)?(c=p,H(T)):(e.consume(T),p)}function y(T){return T===45?(e.consume(T),x):p(T)}function x(T){return T===62?O(T):T===45?y(T):p(T)}function _(T){const j="CDATA[";return T===j.charCodeAt(o++)?(e.consume(T),o===j.length?N:_):r(T)}function N(T){return T===null?r(T):T===93?(e.consume(T),S):Be(T)?(c=N,H(T)):(e.consume(T),N)}function S(T){return T===93?(e.consume(T),w):N(T)}function w(T){return T===62?O(T):T===93?(e.consume(T),w):N(T)}function k(T){return T===null||T===62?O(T):Be(T)?(c=k,H(T)):(e.consume(T),k)}function E(T){return T===null?r(T):T===63?(e.consume(T),M):Be(T)?(c=E,H(T)):(e.consume(T),E)}function M(T){return T===62?O(T):E(T)}function I(T){return jn(T)?(e.consume(T),R):r(T)}function R(T){return T===45||Tn(T)?(e.consume(T),R):U(T)}function U(T){return Be(T)?(c=U,H(T)):tt(T)?(e.consume(T),U):O(T)}function B(T){return T===45||Tn(T)?(e.consume(T),B):T===47||T===62||Ct(T)?Z(T):r(T)}function Z(T){return T===47?(e.consume(T),O):T===58||T===95||jn(T)?(e.consume(T),D):Be(T)?(c=Z,H(T)):tt(T)?(e.consume(T),Z):O(T)}function D(T){return T===45||T===46||T===58||T===95||Tn(T)?(e.consume(T),D):z(T)}function z(T){return T===61?(e.consume(T),P):Be(T)?(c=z,H(T)):tt(T)?(e.consume(T),z):Z(T)}function P(T){return T===null||T===60||T===61||T===62||T===96?r(T):T===34||T===39?(e.consume(T),s=T,V):Be(T)?(c=P,H(T)):tt(T)?(e.consume(T),P):(e.consume(T),A)}function V(T){return T===s?(e.consume(T),s=void 0,$):T===null?r(T):Be(T)?(c=V,H(T)):(e.consume(T),V)}function A(T){return T===null||T===34||T===39||T===60||T===61||T===96?r(T):T===47||T===62||Ct(T)?Z(T):(e.consume(T),A)}function $(T){return T===47||T===62||Ct(T)?Z(T):r(T)}function O(T){return T===62?(e.consume(T),e.exit("htmlTextData"),e.exit("htmlText"),t):r(T)}function H(T){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(T),e.exit("lineEnding"),X}function X(T){return tt(T)?ot(e,K,"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(T):K(T)}function K(T){return e.enter("htmlTextData"),c(T)}}const Op={name:"labelEnd",resolveAll:g5,resolveTo:b5,tokenize:x5},h5={tokenize:y5},m5={tokenize:v5},p5={tokenize:_5};function g5(e){let t=-1;const r=[];for(;++t=3&&(h===null||Be(h))?(e.exit("thematicBreak"),t(h)):r(h)}function f(h){return h===s?(e.consume(h),a++,f):(e.exit("thematicBreakSequence"),tt(h)?ot(e,d,"whitespace")(h):d(h))}}const Pn={continuation:{tokenize:O5},exit:D5,name:"list",tokenize:M5},C5={partial:!0,tokenize:j5},A5={partial:!0,tokenize:R5};function M5(e,t,r){const a=this,s=a.events[a.events.length-1];let o=s&&s[1].type==="linePrefix"?s[2].sliceSerialize(s[1],!0).length:0,c=0;return d;function d(x){const _=a.containerState.type||(x===42||x===43||x===45?"listUnordered":"listOrdered");if(_==="listUnordered"?!a.containerState.marker||x===a.containerState.marker:Gm(x)){if(a.containerState.type||(a.containerState.type=_,e.enter(_,{_container:!0})),_==="listUnordered")return e.enter("listItemPrefix"),x===42||x===45?e.check(mu,r,h)(x):h(x);if(!a.interrupt||x===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),f(x)}return r(x)}function f(x){return Gm(x)&&++c<10?(e.consume(x),f):(!a.interrupt||c<2)&&(a.containerState.marker?x===a.containerState.marker:x===41||x===46)?(e.exit("listItemValue"),h(x)):r(x)}function h(x){return e.enter("listItemMarker"),e.consume(x),e.exit("listItemMarker"),a.containerState.marker=a.containerState.marker||x,e.check(Oo,a.interrupt?r:m,e.attempt(C5,y,p))}function m(x){return a.containerState.initialBlankLine=!0,o++,y(x)}function p(x){return tt(x)?(e.enter("listItemPrefixWhitespace"),e.consume(x),e.exit("listItemPrefixWhitespace"),y):r(x)}function y(x){return a.containerState.size=o+a.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(x)}}function O5(e,t,r){const a=this;return a.containerState._closeFlow=void 0,e.check(Oo,s,o);function s(d){return a.containerState.furtherBlankLines=a.containerState.furtherBlankLines||a.containerState.initialBlankLine,ot(e,t,"listItemIndent",a.containerState.size+1)(d)}function o(d){return a.containerState.furtherBlankLines||!tt(d)?(a.containerState.furtherBlankLines=void 0,a.containerState.initialBlankLine=void 0,c(d)):(a.containerState.furtherBlankLines=void 0,a.containerState.initialBlankLine=void 0,e.attempt(A5,t,c)(d))}function c(d){return a.containerState._closeFlow=!0,a.interrupt=void 0,ot(e,e.attempt(Pn,t,r),"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(d)}}function R5(e,t,r){const a=this;return ot(e,s,"listItemIndent",a.containerState.size+1);function s(o){const c=a.events[a.events.length-1];return c&&c[1].type==="listItemIndent"&&c[2].sliceSerialize(c[1],!0).length===a.containerState.size?t(o):r(o)}}function D5(e){e.exit(this.containerState.type)}function j5(e,t,r){const a=this;return ot(e,s,"listItemPrefixWhitespace",a.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function s(o){const c=a.events[a.events.length-1];return!tt(o)&&c&&c[1].type==="listItemPrefixWhitespace"?t(o):r(o)}}const Ty={name:"setextUnderline",resolveTo:L5,tokenize:z5};function L5(e,t){let r=e.length,a,s,o;for(;r--;)if(e[r][0]==="enter"){if(e[r][1].type==="content"){a=r;break}e[r][1].type==="paragraph"&&(s=r)}else e[r][1].type==="content"&&e.splice(r,1),!o&&e[r][1].type==="definition"&&(o=r);const c={type:"setextHeading",start:{...e[a][1].start},end:{...e[e.length-1][1].end}};return e[s][1].type="setextHeadingText",o?(e.splice(s,0,["enter",c,t]),e.splice(o+1,0,["exit",e[a][1],t]),e[a][1].end={...e[o][1].end}):e[a][1]=c,e.push(["exit",c,t]),e}function z5(e,t,r){const a=this;let s;return o;function o(h){let m=a.events.length,p;for(;m--;)if(a.events[m][1].type!=="lineEnding"&&a.events[m][1].type!=="linePrefix"&&a.events[m][1].type!=="content"){p=a.events[m][1].type==="paragraph";break}return!a.parser.lazy[a.now().line]&&(a.interrupt||p)?(e.enter("setextHeadingLine"),s=h,c(h)):r(h)}function c(h){return e.enter("setextHeadingLineSequence"),d(h)}function d(h){return h===s?(e.consume(h),d):(e.exit("setextHeadingLineSequence"),tt(h)?ot(e,f,"lineSuffix")(h):f(h))}function f(h){return h===null||Be(h)?(e.exit("setextHeadingLine"),t(h)):r(h)}}const I5={tokenize:B5};function B5(e){const t=this,r=e.attempt(Oo,a,e.attempt(this.parser.constructs.flowInitial,s,ot(e,e.attempt(this.parser.constructs.flow,s,e.attempt(PM,s)),"linePrefix")));return r;function a(o){if(o===null){e.consume(o);return}return e.enter("lineEndingBlank"),e.consume(o),e.exit("lineEndingBlank"),t.currentConstruct=void 0,r}function s(o){if(o===null){e.consume(o);return}return e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),t.currentConstruct=void 0,r}}const U5={resolveAll:Ew()},H5=ww("string"),$5=ww("text");function ww(e){return{resolveAll:Ew(e==="text"?q5:void 0),tokenize:t};function t(r){const a=this,s=this.parser.constructs[e],o=r.attempt(s,c,d);return c;function c(m){return h(m)?o(m):d(m)}function d(m){if(m===null){r.consume(m);return}return r.enter("data"),r.consume(m),f}function f(m){return h(m)?(r.exit("data"),o(m)):(r.consume(m),f)}function h(m){if(m===null)return!0;const p=s[m];let y=-1;if(p)for(;++y-1){const d=c[0];typeof d=="string"?c[0]=d.slice(a):c.shift()}o>0&&c.push(e[s].slice(0,o))}return c}function tO(e,t){let r=-1;const a=[];let s;for(;++r