diff --git a/plugins/embyfin-stream-cleanup/__init__.py b/plugins/embyfin-stream-cleanup/__init__.py index 8f4f370..8304660 100644 --- a/plugins/embyfin-stream-cleanup/__init__.py +++ b/plugins/embyfin-stream-cleanup/__init__.py @@ -10,14 +10,13 @@ from .config import ( PLUGIN_CONFIG, PLUGIN_FIELDS, build_plugin_fields, PLUGIN_DB_KEY, - REDIS_KEY_RUNNING, REDIS_KEY_HOST, REDIS_KEY_PORT, REDIS_KEY_STOP, - REDIS_KEY_MONITOR, ALL_PLUGIN_REDIS_KEYS, + REDIS_KEY_STOP, REDIS_KEY_MONITOR, ALL_PLUGIN_REDIS_KEYS, DEFAULT_PORT, DEFAULT_HOST, ) from .handler import StreamMonitor from .server import DebugServer, get_current_server from .autostart import attempt_autostart -from .utils import get_redis_client, read_redis_flag, normalize_host, redis_decode, prune_stale_server_keys +from .utils import get_redis_client, read_redis_flag, normalize_host, prune_stale_server_keys logger = logging.getLogger(__name__) @@ -35,14 +34,14 @@ class Plugin: @property def fields(self): - """Build fields dynamically based on saved media_server_count.""" + """Regenerate fields from current DB settings on every request.""" try: from apps.plugins.models import PluginConfig cfg = PluginConfig.objects.get(key=PLUGIN_DB_KEY) - count = int(cfg.settings.get("media_server_count", 1)) + settings = cfg.settings except Exception: - count = 1 - return build_plugin_fields(count) + settings = {} + return build_plugin_fields(settings) actions = [ { @@ -53,14 +52,6 @@ def fields(self): "button_variant": "filled", "button_color": "orange", }, - { - "id": "status", - "label": "Status", - "description": "Check monitor and debug server status", - "button_label": "Check Status", - "button_variant": "filled", - "button_color": "blue", - }, { "id": "reset_settings", "label": "Reset Settings", @@ -79,20 +70,16 @@ def __init__(self): # -- Action dispatcher ----------------------------------------------------- def _stop_debug_server(self): - """Stop the debug server if running (local or remote worker).""" + """Stop the debug server if running in this process. + + Local-only, matching force-fallback's pattern: if a different worker + is running the server, this doesn't reach it (no cross-worker Redis + signaling) — that worker keeps its own server until it happens to + handle a restart/stop action itself. + """ server = get_current_server() if server and server.is_running(): server.stop() - return - - redis_client = get_redis_client() - if redis_client and read_redis_flag(redis_client, REDIS_KEY_RUNNING): - redis_client.set(REDIS_KEY_STOP, "1") - for _ in range(50): - if not read_redis_flag(redis_client, REDIS_KEY_RUNNING): - return - time.sleep(0.1) - redis_client.delete(REDIS_KEY_RUNNING, REDIS_KEY_HOST, REDIS_KEY_PORT, REDIS_KEY_STOP) def _prune_media_server_settings(self, settings): """Remove media server URL/key settings for servers beyond the current count.""" @@ -117,15 +104,9 @@ def run(self, action: str, params: dict, context: dict): # Clean up stale media server keys when count decreases self._prune_media_server_settings(settings) - # Check if debug server was running before we stop it - debug_was_running = False + # Check if the dashboard server was running (in this process) before we stop it server = get_current_server() - if server and server.is_running(): - debug_was_running = True - else: - redis_client = get_redis_client() - if redis_client and read_redis_flag(redis_client, REDIS_KEY_RUNNING): - debug_was_running = True + dash_was_running = bool(server and server.is_running()) self._stop_debug_server() @@ -138,63 +119,24 @@ def run(self, action: str, params: dict, context: dict): msg = "Stream monitor restarted with current settings" - # Start debug server if enabled - if settings.get("enable_debug_server", False): - port = int(settings.get("port", DEFAULT_PORT)) - host = normalize_host(settings.get("host", DEFAULT_HOST), DEFAULT_HOST) + # Start dashboard server if enabled + if settings.get("dash_enabled") == "enabled": + port = int(settings.get("dash_port", DEFAULT_PORT)) + host = normalize_host(settings.get("dash_host", DEFAULT_HOST), DEFAULT_HOST) + path = settings.get("dash_path") or "/dash" server = DebugServer(_monitor, port=port, host=host) - if server.start(settings=settings): - msg += f" | Debug server on http://{host}:{port}/debug" + if server.start(): + msg += f" | Dashboard on http://{host}:{port}{path}/" else: - msg += " | Debug server failed to start (port may be in use)" - elif debug_was_running: - msg += " | Debug server stopped (disabled in settings)" + msg += " | Dashboard failed to start (port may be in use)" + elif dash_was_running: + msg += " | Dashboard stopped (disabled in settings)" return {"status": "success", "message": msg} except Exception as e: logger_ctx.error(f"Error restarting monitor: {e}", exc_info=True) return {"status": "error", "message": f"Failed to restart monitor: {str(e)}"} - # -- status ------------------------------------------------------------ - elif action == "status": - monitor_running = _monitor.is_running() - server = get_current_server() - server_running = server and server.is_running() - - redis_client = get_redis_client() - remote_monitor = False - remote_server = False - if redis_client: - try: - remote_monitor = read_redis_flag(redis_client, REDIS_KEY_MONITOR) - except Exception: - pass - try: - remote_server = read_redis_flag(redis_client, REDIS_KEY_RUNNING) - except Exception: - pass - - parts = [] - if monitor_running or remote_monitor: - parts.append("Monitor: running") - else: - parts.append("Monitor: stopped") - - if server_running: - parts.append(f"Debug server: http://{server.host}:{server.port}/debug") - elif remote_server: - rhost = redis_decode(redis_client.get(REDIS_KEY_HOST)) or DEFAULT_HOST - rport = redis_decode(redis_client.get(REDIS_KEY_PORT)) or str(DEFAULT_PORT) - parts.append(f"Debug server: http://{rhost}:{rport}/debug (another worker)") - else: - parts.append("Debug server: stopped") - - return { - "status": "success", - "message": " | ".join(parts), - "running": monitor_running or remote_monitor, - } - # -- reset_settings ---------------------------------------------------- elif action == "reset_settings": try: @@ -248,11 +190,14 @@ def _reset_all_settings(self): def stop(self, context: dict): """Called when the plugin is disabled or Dispatcharr is shutting down. - After a ``force_reload`` the module-level ``_monitor`` and - ``get_current_server()`` references point to *new* (idle) instances - because the module was re-imported. The *old* running daemon threads - are still alive but unreachable by direct reference. We fall back to - Redis signaling so the old poll loops detect the stop flag and exit. + After a ``force_reload`` the module-level ``_monitor`` reference + points to a *new* (idle) instance because the module was re-imported. + The *old* running monitor thread is still alive but unreachable by + direct reference. We fall back to Redis signaling so it detects the + stop flag and exits. The dashboard server has no such fallback (see + ``server.py``/``_stop_debug_server``) — an orphaned dashboard server + thread from a previous load only stops if the worker that owns it + happens to handle a subsequent restart/stop action itself. """ stopped_monitor = False if _monitor.is_running(): @@ -261,22 +206,16 @@ def stop(self, context: dict): stopped_monitor = True server = get_current_server() - stopped_server = False if server and server.is_running(): - logger.info("Plugin stopping, shutting down debug server") + logger.info("Plugin stopping, shutting down dashboard server") server.stop() - stopped_server = True - # Redis fallback: signal orphaned threads from a previous module load - if not stopped_monitor or not stopped_server: + # Redis fallback: signal an orphaned monitor thread from a previous module load + if not stopped_monitor: redis_client = get_redis_client() - if redis_client: - if not stopped_monitor and read_redis_flag(redis_client, REDIS_KEY_MONITOR): - logger.info("Plugin stopping, sending Redis stop signal to orphaned monitor") - redis_client.set(REDIS_KEY_STOP, "1") - if not stopped_server and read_redis_flag(redis_client, REDIS_KEY_RUNNING): - logger.info("Plugin stopping, sending Redis stop signal to orphaned debug server") - redis_client.set(REDIS_KEY_STOP, "1") + if redis_client and read_redis_flag(redis_client, REDIS_KEY_MONITOR): + logger.info("Plugin stopping, sending Redis stop signal to orphaned monitor") + redis_client.set(REDIS_KEY_STOP, "1") # Clear leader election and dedup keys so the next discovery can re-autostart try: diff --git a/plugins/embyfin-stream-cleanup/autostart.py b/plugins/embyfin-stream-cleanup/autostart.py index 0a02c14..3f23707 100644 --- a/plugins/embyfin-stream-cleanup/autostart.py +++ b/plugins/embyfin-stream-cleanup/autostart.py @@ -1,54 +1,85 @@ -"""Auto-start logic for the Emby Stream Cleanup monitor. - -Uses Redis leader election (SET NX EX) so only one uWSGI worker starts the -monitor, even across multiple processes. - - 1. Each worker calls ``attempt_autostart()`` from ``Plugin.__init__``. - 2. Background thread waits for Django ORM, reads plugin config. - 3. Races all workers with SET NX EX on a leader key. - 4. Winner clears stale state and starts the StreamMonitor (and optionally - the debug server). - -The per-process guard ``_autostart_launched`` prevents spawning duplicate -threads *within a single import cycle*, but ``force_reload=True`` in -Dispatcharr's plugin loader re-imports all modules, resetting module-level -state. To handle that, the autostart thread also checks Redis for an -already-running monitor/server before doing anything destructive. +"""Auto-start logic for the Emby Stream Cleanup monitor and dashboard server. + +Mirrors force-fallback/multiview's autostart pattern: cheap, safe to call +every time ``Plugin()`` is constructed (which Dispatcharr does repeatedly +over the plugin's lifecycle -- e.g. on settings-page loads -- not just once +at boot), so a single missed window (DB or Redis not ready yet) just means +the *next* construction tries again shortly, rather than giving up forever. + +The monitor and the dashboard server must always end up in the **same** +worker process: the dashboard reads live state via ``dash/api.py``'s +``_find_plugin_module()``, which only scans ``sys.modules`` in its own +process to find the module-level ``_monitor`` singleton. If the dashboard +binds its port in a different worker than the one actually running the +monitor's poll loop, it finds an idle ``_monitor`` that was never +``.start()``-ed and reports empty/stopped state forever. + +- Monitor autostart uses Redis leader election (SET NX EX): the monitor is a + bare background thread with no OS-level exclusivity guarantee, so an + explicit single-owner election across Dispatcharr's worker processes is + needed to avoid duplicate polling loops. It must run continuously + regardless of whether the dashboard is even enabled, so it stays the + primary election. +- Dashboard server autostart is now a **dependent** of the monitor, not an + independent race: ``ensure_dashboard`` only ever does anything when + ``monitor.is_running()`` is ``True`` for *this* process, i.e. only in the + worker that already won the monitor's leader election. This guarantees + dashboard and monitor always share a process. It's called both here (fast + path, on the ``Plugin()`` construction that wins leader election) and from + the monitor's own poll loop (``handler.py:_poll_loop``) on every cycle, so + the dashboard no longer depends on ``Plugin()`` being reconstructed again + to retry a failed bind -- the poll loop is proven alive for as long as the + monitor runs. + +This repo has one earlier regression to avoid repeating here: dashboard-start +used to run only after a *successful* monitor leader-election win, physically +inside the same function. That meant once the monitor was running from any +earlier attempt on any worker, every later ``attempt_autostart()`` call -- +including the leader's own subsequent calls -- returned early at a **Redis** +check ("is the monitor running anywhere?") before ever reaching the +dashboard-start code, so only the one attempt that originally won leader +election ever got a shot at binding the dashboard port. The gate here is +different in the way that matters: ``monitor.is_running()`` is a **local, +in-process** attribute read on the actual ``StreamMonitor`` object, true only +in the one process that called ``.start()`` successfully. It never blocks +that process's own repeated ``Plugin()`` constructions from retrying the +dashboard bind -- it only ever prevents *other* workers (which aren't running +the monitor at all) from attempting it. """ import logging import os import threading -import time logger = logging.getLogger(__name__) -# Per-process guard: only one autostart thread may be spawned per process. -_autostart_launched = False -_autostart_lock = threading.Lock() +# Debounces a burst of near-simultaneous Plugin() constructions (e.g. several +# requests landing at once) from spawning a pile of redundant autostart +# threads. Transient, not a permanent lock: always cleared when an attempt +# finishes (success, failure, or exception), so the *next* Plugin() +# construction gets a fresh, un-gated try. +_attempt_in_progress = False +_attempt_lock = threading.Lock() -_STARTUP_WAIT = 5 # seconds before the first config-read attempt -_RETRY_DELAY = 3 # seconds between subsequent attempts -_MAX_ATTEMPTS = 8 # total attempts to read PluginConfig from the DB +# Dedupes repeated identical autostart-worker exceptions so they log at +# `warning` once (visible without debug logging) rather than spamming on +# every retry -- see _autostart_worker. +_last_autostart_error = None def attempt_autostart(monitor) -> None: """Entry point from ``Plugin.__init__``. - Spawns a daemon thread (at most once per OS process) that races via Redis - NX to become the autostart leader and start the monitor. + Safe, and intended, to call on every ``Plugin()`` construction -- cheap + early-outs below mean a monitor/dashboard that's already running (locally + or, for the monitor, on another worker) costs almost nothing to check. """ - global _autostart_launched - with _autostart_lock: - if _autostart_launched: - logger.debug("Emby stream cleanup: auto-start already launched in this process, skipping") + global _attempt_in_progress + with _attempt_lock: + if _attempt_in_progress: + logger.debug("Emby stream cleanup: an auto-start attempt is already in flight, skipping") return - _autostart_launched = True - - # Redis-level dedup is handled later inside the background thread - # (leader election). We avoid touching Redis here because Plugin.__init__ - # runs at import time, potentially before Dispatcharr's Redis is ready. - # Blocking here would stall the entire uWSGI worker boot. + _attempt_in_progress = True threading.Thread( target=_autostart_worker, @@ -72,77 +103,67 @@ def cleanup_stale_state(redis_client) -> None: logger.warning(f"Startup cleanup failed: {e}") -def _autostart_worker(monitor) -> None: - """Background thread body.""" - from .config import ( - REDIS_KEY_LEADER, LEADER_TTL, - DEFAULT_PORT, DEFAULT_HOST, PLUGIN_DB_KEY, - ) - from .utils import get_redis_client, normalize_host - - # ── Step 0: Redis dedup (prevents redundant threads after force_reload) ── - # This runs inside the thread (after the daemon is spawned) so it never - # blocks uWSGI worker boot. The initial sleep gives Redis time to be ready. - time.sleep(_STARTUP_WAIT) +def _read_plugin_settings(): + """Read current PluginConfig settings. + + Returns (settings_dict, enabled), or (None, None) if the DB/ORM isn't + ready yet or the row doesn't exist -- callers should just bail and let + the next Plugin() construction retry, not treat this as fatal. + """ + from .config import PLUGIN_DB_KEY try: - from .config import REDIS_KEY_MONITOR - _rc = get_redis_client() - if _rc: - _dedup_key = REDIS_KEY_LEADER + ":autostart_dedup" - if not _rc.set(_dedup_key, "1", nx=True, ex=(_RETRY_DELAY * _MAX_ATTEMPTS) + 30): - # Key exists, but if nothing is actually running or leading, - # it's stale from a previous lifecycle. Clear and proceed. - if not _rc.get(REDIS_KEY_MONITOR) and not _rc.get(REDIS_KEY_LEADER): - logger.debug("Emby stream cleanup: stale autostart_dedup key, clearing") - _rc.delete(_dedup_key) - _rc.set(_dedup_key, "1", nx=True, ex=(_RETRY_DELAY * _MAX_ATTEMPTS) + 30) - else: - logger.debug("Emby stream cleanup: auto-start already in progress (Redis dedup), skipping") - return + from apps.plugins.models import PluginConfig + config = None + for _key in (PLUGIN_DB_KEY, PLUGIN_DB_KEY.replace('_', '-')): + config = PluginConfig.objects.filter(key=_key).first() + if config is not None: + break + if config is None: + return None, None + return (config.settings or {}), config.enabled except Exception: - pass # Redis not available yet, leader election will gate us + return None, None - # Try both key forms (underscore and hyphen) - _plugin_keys = [PLUGIN_DB_KEY, PLUGIN_DB_KEY.replace('_', '-')] - settings_dict: dict = {} +def _autostart_worker(monitor) -> None: + global _attempt_in_progress, _last_autostart_error + try: + settings_dict, enabled = _read_plugin_settings() + if settings_dict is None: + logger.debug("Emby stream cleanup: PluginConfig not found yet, will retry on next Plugin() construction") + return + if not enabled: + logger.debug("Emby stream cleanup: plugin is disabled, skipping auto-start") + return - for attempt in range(_MAX_ATTEMPTS): - # First iteration has no sleep since _STARTUP_WAIT already elapsed above. - if attempt > 0: - time.sleep(_RETRY_DELAY) - try: - from apps.plugins.models import PluginConfig - config = None - for _key in _plugin_keys: - config = PluginConfig.objects.filter(key=_key).first() - if config is not None: - break - if config is None: - logger.debug( - f"Emby stream cleanup: PluginConfig not found yet " - f"(attempt {attempt + 1}/{_MAX_ATTEMPTS}, tried keys: {_plugin_keys})" - ) - continue - settings_dict = config.settings or {} - if not config.enabled: - logger.debug("Emby stream cleanup: plugin is disabled, skipping auto-start") - return - logger.debug( - f"Emby stream cleanup: config read on attempt {attempt + 1}, plugin enabled" - ) - break - except Exception as e: - logger.debug( - f"Emby stream cleanup: auto-start attempt {attempt + 1} could not read config: {e}" - ) - else: - logger.warning( - "Emby stream cleanup: could not read plugin config after all attempts, aborting auto-start" - ) - return + _try_autostart_monitor(monitor, settings_dict) + if monitor.is_running(): + # Dashboard only ever starts in the same process that's running + # the monitor -- see module docstring for why. The monitor's own + # poll loop (handler.py:_poll_loop) also calls ensure_dashboard + # every cycle as a self-healing backstop, so this call here is + # just the fast path on the construction that won leader election. + ensure_dashboard(monitor, settings_dict) + _last_autostart_error = None + except Exception as e: # noqa: BLE001 + err = str(e) + if err != _last_autostart_error: + logger.warning(f"Emby stream cleanup: auto-start attempt raised, will retry on next Plugin() construction: {e}") + _last_autostart_error = err + else: + logger.debug(f"Emby stream cleanup: auto-start attempt raised again (already warned): {e}") + finally: + _attempt_in_progress = False + + +def _try_autostart_monitor(monitor, settings_dict: dict) -> None: + from .config import REDIS_KEY_LEADER, REDIS_KEY_MONITOR, REDIS_KEY_MANUAL_STOP, LEADER_TTL + from .utils import get_redis_client - # Check that at least one media server has URL + API key + identifier + if monitor.is_running(): + return # already running in this process + + # -- Require at least one fully configured media server ------------------- has_configured_server = False ms_count = max(1, int(settings_dict.get("media_server_count", 1))) for n in range(1, ms_count + 1): @@ -154,47 +175,40 @@ def _autostart_worker(monitor) -> None: has_configured_server = True break if not has_configured_server: - logger.warning( - "Emby stream cleanup: auto-start skipped because no media server " - "is fully configured (URL + API key + identifier)" + logger.debug( + "Emby stream cleanup: monitor auto-start skipped, no media server is fully " + "configured yet (URL + API key + identifier) -- will retry on next Plugin() construction" ) return - # -- Respect manual stop --------------------------------------------------- - # If the user manually stopped the monitor during this Dispatcharr runtime, - # a Redis flag is set. It's cleared on fresh boot (CLEANUP_REDIS_KEYS). - try: - from .config import REDIS_KEY_MANUAL_STOP - _rc = get_redis_client() - if _rc and _rc.get(REDIS_KEY_MANUAL_STOP): - logger.debug("Emby stream cleanup: auto-start skipped (manually stopped)") - return - except Exception: - pass - - # -- Leader election via Redis SET NX -------------------------------------- redis_client = get_redis_client() if redis_client is None: - logger.warning("Emby stream cleanup: cannot connect to Redis, aborting auto-start") + logger.debug("Emby stream cleanup: cannot connect to Redis yet, will retry on next Plugin() construction") + return + + # -- Respect a manual stop from earlier in this Dispatcharr runtime ------- + # Cleared on fresh container boot (CLEANUP_REDIS_KEYS). + if redis_client.get(REDIS_KEY_MANUAL_STOP): + logger.debug("Emby stream cleanup: monitor auto-start skipped (manually stopped)") return - # Guard: if the monitor is already running (e.g. we were force-reloaded - # and the old daemon thread is still alive), skip everything. This - # prevents cleanup_stale_state from nuking keys for a live server. - from .config import REDIS_KEY_MONITOR as _RMON - if redis_client.get(_RMON): - logger.debug("Emby stream cleanup: monitor already running (Redis), skipping auto-start") + # Guard: if the monitor is already running (e.g. on another worker, or + # this worker was force-reloaded and the old daemon thread is still + # alive), skip everything -- this also prevents cleanup_stale_state from + # nuking keys for a live server. + if redis_client.get(REDIS_KEY_MONITOR): + logger.debug("Emby stream cleanup: monitor already running (Redis), skipping monitor auto-start") return + # -- Leader election via Redis SET NX -------------------------------------- worker_id = f"{os.getpid()}-{threading.get_ident()}" won = redis_client.set(REDIS_KEY_LEADER, worker_id, nx=True, ex=LEADER_TTL) if not won: - logger.debug("Emby stream cleanup: another worker won leader election, skipping auto-start") + logger.debug("Emby stream cleanup: another worker won leader election, skipping monitor auto-start") return logger.debug(f"Emby stream cleanup: won leader election (worker {worker_id})") - # -- Clean stale state then start monitor ---------------------------------- cleanup_stale_state(redis_client) if monitor.start(settings=settings_dict): @@ -206,28 +220,43 @@ def _autostart_worker(monitor) -> None: pass logger.warning( "Emby stream cleanup: auto-start failed to start monitor. " - "Use 'Start Monitor' button to start manually." + "Use 'Restart Monitor' to start manually." ) + + +def ensure_dashboard(monitor, settings_dict: dict) -> None: + """Local-only, no Redis -- matches force-fallback/multiview's dashboard + server autostart. Only ever meaningful (see callers) when + ``monitor.is_running()`` is already ``True`` for this process, i.e. this + worker just won -- or previously won -- the monitor's Redis leader + election. That keeps the dashboard and the monitor's poll loop pinned to + the same process, which is what lets ``dash/api.py``'s in-process + ``sys.modules`` lookup find a live ``_monitor`` instead of an idle one. + + Cheap and idempotent: short-circuits immediately once + ``get_current_server().is_running()`` is true, so it's safe to call + repeatedly (both from ``_autostart_worker`` on each ``Plugin()`` + construction, and from the monitor's own poll loop as a self-healing + backstop that doesn't depend on ``Plugin()`` being reconstructed again). + """ + from .config import DEFAULT_PORT, DEFAULT_HOST + from .utils import normalize_host + + if settings_dict.get("dash_enabled") != "enabled": return - # Optionally start the debug server - if settings_dict.get("enable_debug_server", False): - # Skip if debug server is already running (e.g. after force_reload) - from .config import REDIS_KEY_RUNNING as _RRUN - if redis_client.get(_RRUN): - logger.debug("Emby stream cleanup: debug server already running (Redis), skipping") - else: - port = int(settings_dict.get('port', DEFAULT_PORT)) - host = normalize_host( - settings_dict.get('host', DEFAULT_HOST), - DEFAULT_HOST, - ) - - from .server import DebugServer - server = DebugServer(monitor, port=port, host=host) - if server.start(settings=settings_dict): - logger.info( - f"Emby stream cleanup: auto-start debug server on http://{host}:{port}/debug" - ) - else: - logger.warning("Emby stream cleanup: auto-start debug server failed") + from .server import get_current_server, DebugServer + existing = get_current_server() + if existing and existing.is_running(): + logger.debug("Emby stream cleanup: dashboard server already running in this process, skipping") + return + + port = int(settings_dict.get('dash_port', DEFAULT_PORT)) + host = normalize_host(settings_dict.get('dash_host', DEFAULT_HOST), DEFAULT_HOST) + + server = DebugServer(monitor, port=port, host=host) + if server.start(): + path = settings_dict.get('dash_path') or '/dash' + logger.info(f"Emby stream cleanup: auto-start dashboard on http://{host}:{port}{path}/") + else: + logger.debug("Emby stream cleanup: dashboard auto-start bind failed (port likely taken by another worker)") diff --git a/plugins/embyfin-stream-cleanup/config.py b/plugins/embyfin-stream-cleanup/config.py index 89420a8..99e5881 100644 --- a/plugins/embyfin-stream-cleanup/config.py +++ b/plugins/embyfin-stream-cleanup/config.py @@ -1,10 +1,4 @@ -"""Plugin configuration, Redis key constants, and field definitions. - -Single source of truth for: - - PLUGIN_CONFIG: loaded from plugin.json - - Redis key names used by every module - - PLUGIN_FIELDS: the settings schema shared by the Plugin class and the monitor -""" +"""Plugin configuration, Redis key constants, and field definitions.""" import json import os @@ -13,6 +7,7 @@ # ── Hard-coded defaults ───────────────────────────────────────────────────── DEFAULT_PORT: int = 9193 DEFAULT_HOST: str = "0.0.0.0" +DEFAULT_DASH_PATH: str = "/dash" DEFAULT_CLEANUP_TIMEOUT: int = 30 # seconds DEFAULT_POLL_INTERVAL: int = 10 # seconds @@ -32,9 +27,10 @@ def _load_plugin_config() -> dict: PLUGIN_CONFIG = _load_plugin_config() # ── Redis key names ────────────────────────────────────────────────────────── -REDIS_KEY_RUNNING = "emby_cleanup:server_running" -REDIS_KEY_HOST = "emby_cleanup:server_host" -REDIS_KEY_PORT = "emby_cleanup:server_port" +# REDIS_KEY_RUNNING/HOST/PORT (debug-server singleton coordination) were +# dropped when the dashboard server moved to force-fallback's simpler +# local-only lifecycle. REDIS_KEY_STOP stays: it's shared with the monitor's +# own orphaned-thread signaling (handler.py), not debug-server-specific. REDIS_KEY_STOP = "emby_cleanup:stop_requested" REDIS_KEY_LEADER = "emby_cleanup:leader" REDIS_KEY_MONITOR = "emby_cleanup:monitor_running" @@ -43,9 +39,6 @@ def _load_plugin_config() -> dict: # Keys to wipe on startup (leader key intentionally excluded so the winning # worker keeps its claim after cleanup). CLEANUP_REDIS_KEYS = [ - REDIS_KEY_RUNNING, - REDIS_KEY_HOST, - REDIS_KEY_PORT, REDIS_KEY_STOP, REDIS_KEY_MONITOR, REDIS_KEY_MANUAL_STOP, @@ -57,25 +50,32 @@ def _load_plugin_config() -> dict: # Leader election TTL. The winner holds this key for up to LEADER_TTL seconds. LEADER_TTL = 60 # seconds -# Heartbeat TTL for "running" Redis keys. The monitor and server refresh -# their keys on every loop iteration. If the process dies, the keys expire -# and autostart can proceed on the next startup. +# Heartbeat TTL for the monitor's "running" Redis key. The monitor refreshes +# it on every loop iteration; if the process dies, the key expires and +# autostart can proceed on the next startup. HEARTBEAT_TTL = 30 # seconds # ── Plugin field definitions ───────────────────────────────────────────────── -# Fields that appear before the media server section -_FIELDS_BEFORE_SERVERS = [ +_GLOBAL_SETTINGS_HEADER = { + "id": "_global_settings_header", + "label": "── Global Settings ──────────────────────", + "type": "info", + "description": "", +} + +_GLOBAL_SETTINGS_FIELDS = [ { "id": "cleanup_timeout", "label": "Timeout (seconds)", "type": "number", "default": DEFAULT_CLEANUP_TIMEOUT, + "min": 1, "description": ( - "Seconds before a matching client's Dispatcharr connection is terminated. " - "Applies to idle connections (no data flowing) and connections whose " - "channel is no longer in the media server's active session pool. " - "Paused automatically during stream failover or buffering" + "Seconds a matching client's Dispatcharr connection is allowed to sit idle, or " + "absent from its media server's active session pool, before it's terminated. " + "Automatically paused during stream failover or buffering so those don't trigger " + "a false termination. Takes effect on the next poll cycle, no restart needed." ), "placeholder": "30", }, @@ -84,65 +84,119 @@ def _load_plugin_config() -> dict: "label": "Poll Interval (seconds)", "type": "number", "default": DEFAULT_POLL_INTERVAL, - "description": "How often to check client activity", + "min": 1, + "description": ( + "How often to check Dispatcharr client activity and media server session pools. " + "Lower values react to idle/orphaned clients faster at the cost of more frequent " + "API calls. Requires the 'Restart Monitor' action (or a Dispatcharr restart) to " + "take effect." + ), "placeholder": "10", }, ] -_MEDIA_SERVER_COUNT_FIELD = { - "id": "media_server_count", - "label": "Number of Media Servers", - "type": "number", - "default": 1, - "min": 1, - "description": ( - "Number of Emby/Jellyfin servers to monitor for orphan detection. " - "After changing this value, save settings and click the blue refresh " - "button in the top-right of the My Plugins page to see the new fields" - ), - "placeholder": "1", +_DASHBOARD_SETTINGS_HEADER = { + "id": "_dashboard_settings_header", + "label": "── Dashboard Settings ──────────────────────", + "type": "info", + "description": "", } -# Fields that appear after the media server section -_FIELDS_AFTER_SERVERS = [ +_DASHBOARD_SETTINGS_FIELDS = [ { - "id": "enable_debug_server", - "label": "Enable Debug Server", - "type": "boolean", - "default": False, - "description": "Start an HTTP server for the debug dashboard (optional)", + "id": "dash_enabled", + "label": "Web Dashboard", + "type": "select", + "default": "disabled", + "options": [ + {"value": "disabled", "label": "Disabled"}, + {"value": "enabled", "label": "Enabled"}, + ], + "description": ( + "Serves a mobile-friendly PWA dashboard for viewing live channel/client status " + "and editing settings, gated behind your Dispatcharr login. Off by default. You " + "may need to expose the configured port in your docker-compose.yml to reach it " + "from outside the container. After changing this, the port, or the path, use the " + "'Restart Monitor' action below (or restart Dispatcharr) to apply it." + ), }, { "id": "mask_sensitive_data", - "label": "Mask Sensitive Data in Debug Page", - "type": "boolean", - "default": False, - "description": "Hide usernames, IPs, and URLs in the debug dashboard", + "label": "Mask Sensitive Data on Dashboard", + "type": "select", + "default": "disabled", + "options": [ + {"value": "disabled", "label": "Disabled"}, + {"value": "enabled", "label": "Enabled"}, + ], + "description": ( + "Hides usernames, IPs, and media server URLs on the dashboard's status view. " + "Takes effect immediately, no restart needed." + ), }, { - "id": "port", - "label": "Debug Server Port", + "id": "dash_port", + "label": "Dashboard Port", "type": "number", "default": DEFAULT_PORT, - "description": "Port for the debug HTTP server", - "placeholder": "9193", + "min": 1024, + "max": 65535, + "placeholder": str(DEFAULT_PORT), + "description": ( + "TCP port the embedded dashboard server listens on. Requires the 'Restart " + "Monitor' action (or a Dispatcharr restart) to take effect." + ), }, { - "id": "host", - "label": "Debug Server Host", + "id": "dash_path", + "label": "Dashboard Mount Path", + "type": "string", + "default": DEFAULT_DASH_PATH, + "placeholder": DEFAULT_DASH_PATH, + "description": ( + "URL path the dashboard is served under, e.g. '/dash' gives " + "http://:/dash/. Takes effect immediately, no restart needed." + ), + }, + { + "id": "dash_host", + "label": "Dashboard Bind Host", "type": "string", "default": DEFAULT_HOST, - "description": "Host address to bind the debug server to (0.0.0.0 for all interfaces)", - "placeholder": "0.0.0.0", + "placeholder": DEFAULT_HOST, + "description": ( + "Host address the dashboard server binds to (0.0.0.0 for all interfaces). " + "Requires the 'Restart Monitor' action (or a Dispatcharr restart) to take effect." + ), }, ] +_MEDIA_SERVER_COUNT_FIELD = { + "id": "media_server_count", + "label": "Number of Media Servers", + "type": "number", + "default": 1, + "min": 1, + "description": ( + "Number of Emby/Jellyfin servers to monitor for orphan detection. " + "After changing this value, save settings and click the blue refresh " + "button in the top-right of the My Plugins page to see the new fields." + ), + "placeholder": "1", +} + def _build_server_fields(n): - """Generate URL + API key fields for media server *n* (1-based).""" + """Generate the header + URL/key/identifier fields for media server *n* (1-based).""" suffix = f"_{n}" if n > 1 else "" label_num = f" {n}" if n > 1 else "" return [ + { + "id": f"_media_server_{n}_header", + "label": f"── Media Server {n} ──────────────────────", + "type": "info", + "description": "", + }, { "id": f"media_server_url{suffix}", "label": f"Media Server{label_num} URL", @@ -151,7 +205,7 @@ def _build_server_fields(n): "description": ( f"Base URL of media server{label_num} (e.g. http://192.168.1.100:8096). " "Polls the Sessions API to detect orphaned connections. " - "Leave blank to disable" + "Leave blank to disable." ), "placeholder": "http://192.168.1.100:8096", }, @@ -163,7 +217,7 @@ def _build_server_fields(n): "default": "", "description": ( f"API key for media server{label_num}. " - "Generate one under Settings > API Keys" + "Generate one under Settings > API Keys." ), "placeholder": "your-api-key", }, @@ -177,23 +231,29 @@ def _build_server_fields(n): "connecting to Dispatcharr (as shown in the Client Identifier column). " "Comma-separated for multiple values. " "CIDR notation (e.g. 10.0.0.0/24) matches any IP in the range. " - "This links the server's session pool to its connections for accurate cleanup" + "This links the server's session pool to its connections for accurate cleanup. " + "URL, API key, and identifier must all be set for a server to be considered " + "configured. Changes here are picked up automatically within one poll cycle; " + "use the 'Restart Monitor' action for it to take effect immediately." ), "placeholder": "emby-prod, 192.168.1.0/24", }, ] -def build_plugin_fields(server_count=1): - """Build the complete field list for *server_count* media servers.""" - count = max(1, int(server_count)) - fields = list(_FIELDS_BEFORE_SERVERS) +def build_plugin_fields(settings: dict) -> list: + """Build the full field list based on current settings.""" + count = max(1, int(settings.get("media_server_count", 1))) + + fields = [_GLOBAL_SETTINGS_HEADER] + fields.extend(_GLOBAL_SETTINGS_FIELDS) + fields.append(_DASHBOARD_SETTINGS_HEADER) + fields.extend(_DASHBOARD_SETTINGS_FIELDS) fields.append(_MEDIA_SERVER_COUNT_FIELD) for n in range(1, count + 1): fields.extend(_build_server_fields(n)) - fields.extend(_FIELDS_AFTER_SERVERS) return fields # Default field list (1 server) - used by plugin.json and as fallback -PLUGIN_FIELDS = build_plugin_fields(1) +PLUGIN_FIELDS = build_plugin_fields({}) diff --git a/plugins/embyfin-stream-cleanup/dash/__init__.py b/plugins/embyfin-stream-cleanup/dash/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/plugins/embyfin-stream-cleanup/dash/api.py b/plugins/embyfin-stream-cleanup/dash/api.py new file mode 100644 index 0000000..a44722f --- /dev/null +++ b/plugins/embyfin-stream-cleanup/dash/api.py @@ -0,0 +1,441 @@ +"""JSON API handlers (/api/*) and static file serving for the dashboard SPA.""" + +import json +import logging +import mimetypes +import os +import re + +logger = logging.getLogger(__name__) + +_STATIC_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "static") +_PLUGIN_KEY = "embyfin_stream_cleanup" + +_CORS_HEADERS = [ + ("Access-Control-Allow-Origin", "*"), + ("Access-Control-Allow-Methods", "GET, POST, PATCH, OPTIONS"), + ("Access-Control-Allow-Headers", "Authorization, Content-Type"), +] + + +def _json_ok(start_response, data, status="200 OK"): + body = json.dumps(data).encode() + start_response(status, [ + ("Content-Type", "application/json"), + ("Content-Length", str(len(body))), + ] + _CORS_HEADERS) + return [body] + + +def _json_error(start_response, status, message): + body = json.dumps({"error": message}).encode() + start_response(status, [ + ("Content-Type", "application/json"), + ("Content-Length", str(len(body))), + ] + _CORS_HEADERS) + return [body] + + +def cors_preflight(start_response): + start_response("204 No Content", _CORS_HEADERS) + return [b""] + + +def _read_body(environ) -> bytes: + try: + length = int(environ.get("CONTENT_LENGTH") or 0) + return environ["wsgi.input"].read(length) if length > 0 else b"" + except Exception: + return b"" + + +def _verify_token(environ) -> bool: + auth = environ.get("HTTP_AUTHORIZATION", "") + if not auth.startswith("Bearer "): + return False + token = auth[7:] + try: + from rest_framework_simplejwt.tokens import AccessToken + AccessToken(token) + return True + except Exception: + return False + + +def _get_settings() -> dict: + try: + from apps.plugins.models import PluginConfig + return PluginConfig.objects.get(key=_PLUGIN_KEY).settings + except Exception: + return {} + + +def _save_settings(updates: dict): + from apps.plugins.models import PluginConfig + cfg = PluginConfig.objects.get(key=_PLUGIN_KEY) + for k, v in updates.items(): + if v is None: + cfg.settings.pop(k, None) + else: + cfg.settings[k] = v + cfg.save() + + +def _get_config_mod(): + """Return the already-loaded config module (embyfin's config.py has no + relative imports of its own, so the fast path always hits in practice — + the fallback loader is kept for parity with force-fallback/multiview's + identical helper, and as a safety net if that ever changes). + """ + import importlib.util + import sys + + for mod in sys.modules.values(): + if hasattr(mod, 'build_plugin_fields') and hasattr(mod, 'PLUGIN_DB_KEY'): + return mod + + parent_pkg = None + for name, mod in sys.modules.items(): + if getattr(mod, 'PLUGIN_DB_KEY', None) == _PLUGIN_KEY and hasattr(mod, 'Plugin'): + parent_pkg = name + break + + config_path = os.path.normpath( + os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "config.py") + ) + mod_name = f"{parent_pkg}.config" if parent_pkg else f"esc_config_{_PLUGIN_KEY}" + + if mod_name in sys.modules: + return sys.modules[mod_name] + + spec = importlib.util.spec_from_file_location(mod_name, config_path) + mod = importlib.util.module_from_spec(spec) + if parent_pkg: + mod.__package__ = parent_pkg + sys.modules[mod_name] = mod + spec.loader.exec_module(mod) + return mod + + +def _find_plugin_module(): + """Return the loaded plugin package module (src/__init__.py) — it owns + the shared module-level ``_monitor`` instance.""" + import sys + for mod in sys.modules.values(): + if getattr(mod, "PLUGIN_DB_KEY", None) == _PLUGIN_KEY and hasattr(mod, "_monitor"): + return mod + return None + + +# ------------------------------------------------------------------ +# Masking helpers (ported from the old dashboard.py debug page) +# ------------------------------------------------------------------ + +_IP_RE = re.compile(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}') + + +def _mask_ip(ip): + """Mask an IP address, keeping the first octet: 192.168.1.50 → 192.*.*.*""" + parts = (ip or "").split(".") + if len(parts) == 4: + return f"{parts[0]}.*.*.*" + return "***" + + +def _mask_url(url): + """Mask the host portion of a URL: http://192.168.1.50:8096 → http://192.*.*.*:8096""" + if not url or url == "?": + return url + m = re.match(r'(https?://)(.+?)(:\d+)?(/.*)?\s*$', url, re.IGNORECASE) + if m: + scheme, host, port, path = m.group(1), m.group(2), m.group(3) or "", m.group(4) or "" + host = _mask_ip(host) if _IP_RE.fullmatch(host) else "***" + return f"{scheme}{host}{port}{path}" + return "***" + + +def _mask_username(username): + """Mask a username: alice → a***e, ab → a*""" + if not username: + return username + if len(username) <= 2: + return username[0] + "*" + return username[0] + "***" + username[-1] + + +def _mask_identifier(value): + return _mask_ip(value) if _IP_RE.fullmatch(value) else _mask_username(value) + + +def _mask_match_reason(reason): + """Mask any IP/username embedded in parens, e.g. 'IP match (192.168.1.50)'.""" + if not reason: + return reason + return re.sub(r'\(([^)]+)\)', lambda m: f"({_mask_identifier(m.group(1))})", reason) + + +def _apply_masking(state: dict) -> dict: + """Mask usernames/IPs/URLs throughout a status payload in place.""" + for ch in (state.get("scan") or {}).values(): + for c in ch.get("clients", []): + if c.get("ip"): + c["ip"] = _mask_ip(c["ip"]) + if c.get("username"): + c["username"] = _mask_username(c["username"]) + if c.get("match_reason"): + c["match_reason"] = _mask_match_reason(c["match_reason"]) + + for srv in state.get("media_servers") or []: + if srv.get("url"): + srv["url"] = _mask_url(srv["url"]) + if srv.get("error"): + srv["error"] = _mask_url(srv["error"]) + + state["server_identifiers"] = { + n: [_mask_identifier(i) for i in idents] + for n, idents in (state.get("server_identifiers") or {}).items() + } + state["identifiers"] = [_mask_identifier(i) for i in (state.get("identifiers") or [])] + state["resolved_ips"] = [_mask_ip(i) for i in (state.get("resolved_ips") or [])] + + for entry in state.get("stopped_log") or []: + if entry.get("ip"): + entry["ip"] = _mask_ip(entry["ip"]) + if entry.get("username"): + entry["username"] = _mask_username(entry["username"]) + + if state.get("emby_error"): + state["emby_error"] = _mask_url(state["emby_error"]) + + return state + + +# ------------------------------------------------------------------ +# Route handlers +# ------------------------------------------------------------------ + +def handle_auth_token(environ, start_response): + if environ.get("REQUEST_METHOD") == "OPTIONS": + return cors_preflight(start_response) + if environ.get("REQUEST_METHOD") != "POST": + return _json_error(start_response, "405 Method Not Allowed", "POST only") + + try: + data = json.loads(_read_body(environ)) + except Exception: + return _json_error(start_response, "400 Bad Request", "Invalid JSON") + + username = data.get("username", "") + password = data.get("password", "") + if not username or not password: + return _json_error(start_response, "400 Bad Request", "username and password required") + + from django.contrib.auth import authenticate + user = authenticate(username=username, password=password) + if user is None: + return _json_error(start_response, "401 Unauthorized", "Invalid credentials") + + try: + from rest_framework_simplejwt.tokens import RefreshToken + refresh = RefreshToken.for_user(user) + return _json_ok(start_response, { + "access": str(refresh.access_token), + "refresh": str(refresh), + }) + except Exception as e: + logger.error(f"Token generation failed: {e}", exc_info=True) + return _json_error(start_response, "500 Internal Server Error", f"Token error: {e}") + + +def handle_auth_refresh(environ, start_response): + if environ.get("REQUEST_METHOD") == "OPTIONS": + return cors_preflight(start_response) + if environ.get("REQUEST_METHOD") != "POST": + return _json_error(start_response, "405 Method Not Allowed", "POST only") + + try: + data = json.loads(_read_body(environ)) + except Exception: + return _json_error(start_response, "400 Bad Request", "Invalid JSON") + + refresh_str = data.get("refresh", "") + if not refresh_str: + return _json_error(start_response, "400 Bad Request", "refresh required") + + try: + from rest_framework_simplejwt.tokens import RefreshToken + from rest_framework_simplejwt.exceptions import TokenError + token = RefreshToken(refresh_str) + return _json_ok(start_response, {"access": str(token.access_token)}) + except TokenError: + return _json_error(start_response, "401 Unauthorized", "Refresh token invalid or expired") + + +def handle_status(environ, start_response): + if environ.get("REQUEST_METHOD") == "OPTIONS": + return cors_preflight(start_response) + if not _verify_token(environ): + return _json_error(start_response, "401 Unauthorized", "Authentication required") + if environ.get("REQUEST_METHOD") != "GET": + return _json_error(start_response, "405 Method Not Allowed", "GET only") + + try: + plugin_mod = _find_plugin_module() + if plugin_mod is None: + return _json_error(start_response, "503 Service Unavailable", "Plugin module not found") + + state = plugin_mod._monitor.get_debug_state() + # sets aren't JSON-serializable + state["recording_channels"] = sorted(state.get("recording_channels") or []) + + if _get_settings().get("mask_sensitive_data") == "enabled": + state = _apply_masking(state) + + return _json_ok(start_response, state) + except Exception as e: + logger.error(f"Status load failed: {e}", exc_info=True) + return _json_error(start_response, "500 Internal Server Error", str(e)) + + +def handle_config(environ, start_response): + if environ.get("REQUEST_METHOD") == "OPTIONS": + return cors_preflight(start_response) + if not _verify_token(environ): + return _json_error(start_response, "401 Unauthorized", "Authentication required") + + method = environ.get("REQUEST_METHOD", "GET") + + if method == "GET": + settings = _get_settings() + ms_count = max(1, int(settings.get("media_server_count", 1))) + return _json_ok(start_response, {"settings": settings, "media_server_count": ms_count}) + + if method in ("PATCH", "POST"): + try: + updates = json.loads(_read_body(environ)) + except Exception: + return _json_error(start_response, "400 Bad Request", "Invalid JSON") + if not isinstance(updates, dict): + return _json_error(start_response, "400 Bad Request", "Expected JSON object") + try: + _save_settings(updates) + return _json_ok(start_response, {"status": "ok"}) + except Exception as e: + logger.error(f"Config save failed: {e}", exc_info=True) + return _json_error(start_response, "500 Internal Server Error", str(e)) + + return _json_error(start_response, "405 Method Not Allowed", "GET or PATCH only") + + +def handle_fields(environ, start_response): + if environ.get("REQUEST_METHOD") == "OPTIONS": + return cors_preflight(start_response) + if not _verify_token(environ): + return _json_error(start_response, "401 Unauthorized", "Authentication required") + if environ.get("REQUEST_METHOD") != "GET": + return _json_error(start_response, "405 Method Not Allowed", "GET only") + + try: + settings = _get_settings() + config_mod = _get_config_mod() + all_fields = config_mod.build_plugin_fields(settings) + + server_re = re.compile(r"^media_server_(?:url|api_key|identifier)_(\d+)$") + global_fields = [] + server_fields = {} + + for f in all_fields: + fid = f.get("id", "") + if fid.startswith("_") or fid == "media_server_count": + continue # skip section headers and the implicit count field + m = server_re.match(fid) + if m: + n = int(m.group(1)) + server_fields.setdefault(n, []).append(f) + elif fid in ("media_server_url", "media_server_api_key", "media_server_identifier"): + # server 1 has no numeric suffix + server_fields.setdefault(1, []).append(f) + else: + global_fields.append(f) + + ms_count = max(1, int(settings.get("media_server_count", 1))) + return _json_ok(start_response, { + "global": global_fields, + "media_servers": [{"n": n, "fields": fs} for n, fs in sorted(server_fields.items())], + "media_server_count": ms_count, + }) + + except Exception as e: + logger.error(f"Fields load failed: {e}", exc_info=True) + return _json_error(start_response, "500 Internal Server Error", str(e)) + + +def handle_restart(environ, start_response): + if environ.get("REQUEST_METHOD") == "OPTIONS": + return cors_preflight(start_response) + if not _verify_token(environ): + return _json_error(start_response, "401 Unauthorized", "Authentication required") + if environ.get("REQUEST_METHOD") != "POST": + return _json_error(start_response, "405 Method Not Allowed", "POST only") + + try: + plugin_mod = _find_plugin_module() + if plugin_mod is None: + return _json_error(start_response, "503 Service Unavailable", "Plugin module not found") + + settings = _get_settings() + # __new__ skips __init__ (which would re-trigger attempt_autostart) — + # `run()` doesn't touch instance state, it's fine to call unbound. + result = plugin_mod.Plugin.__new__(plugin_mod.Plugin).run( + "restart_monitor", {}, {"settings": settings, "logger": logger}, + ) + return _json_ok(start_response, result) + except Exception as e: + logger.error(f"Restart failed: {e}", exc_info=True) + return _json_error(start_response, "500 Internal Server Error", str(e)) + + +# ------------------------------------------------------------------ +# Static file serving (configurable mount path) +# ------------------------------------------------------------------ + +def serve_static(mount_path: str, sub_path: str, start_response): + """Serve files from dash/static/, under a runtime-configurable mount path. + + mount_path: normalized prefix the server routed on, e.g. "/dash" (or ""). + sub_path: request path relative to mount_path, e.g. "/", "/assets/index-x.js". + """ + rel = sub_path.lstrip("/") or "index.html" + + safe = os.path.normpath(rel) + if safe.startswith("..") or os.path.isabs(safe): + start_response("403 Forbidden", [("Content-Type", "text/plain")]) + return [b"Forbidden\n"] + + file_path = os.path.join(_STATIC_DIR, safe) + if not os.path.isfile(file_path): + file_path = os.path.join(_STATIC_DIR, "index.html") + if not os.path.isfile(file_path): + start_response("404 Not Found", [("Content-Type", "text/plain")]) + return [b"Not Found\n"] + + mime, _ = mimetypes.guess_type(file_path) + mime = mime or "application/octet-stream" + + with open(file_path, "rb") as f: + data = f.read() + + if mime == "text/html": + base = (mount_path or "") + "/" + snippet = f''.encode() + data = data.replace(b"", b"" + snippet, 1) + cache_control = "no-cache" + else: + cache_control = "public, max-age=3600" + + start_response("200 OK", [ + ("Content-Type", mime), + ("Content-Length", str(len(data))), + ("Cache-Control", cache_control), + ]) + return [data] diff --git a/plugins/embyfin-stream-cleanup/dash/static/assets/index-BHGMNXvw.css b/plugins/embyfin-stream-cleanup/dash/static/assets/index-BHGMNXvw.css new file mode 100644 index 0000000..22ad9e7 --- /dev/null +++ b/plugins/embyfin-stream-cleanup/dash/static/assets/index-BHGMNXvw.css @@ -0,0 +1 @@ +:root{color-scheme:var(--mantine-color-scheme)}*,*:before,*:after{box-sizing:border-box}input,button,textarea,select{font:inherit}button,select{text-transform:none}body{margin:0;font-family:var(--mantine-font-family);font-size:var(--mantine-font-size-md);line-height:var(--mantine-line-height);background-color:var(--mantine-color-body);color:var(--mantine-color-text);-webkit-font-smoothing:var(--mantine-webkit-font-smoothing);-moz-osx-font-smoothing:var(--mantine-moz-font-smoothing)}@media screen and (max-device-width:31.25em){body{-webkit-text-size-adjust:100%}}@media(prefers-reduced-motion:reduce){[data-respect-reduced-motion] [data-reduce-motion]{transition:none;animation:none}}[data-mantine-color-scheme=light] .mantine-light-hidden,[data-mantine-color-scheme=dark] .mantine-dark-hidden{display:none}.mantine-focus-auto:focus-visible{outline:2px solid var(--mantine-primary-color-filled);outline-offset:calc(.125rem * var(--mantine-scale))}.mantine-focus-always:focus{outline:2px solid var(--mantine-primary-color-filled);outline-offset:calc(.125rem * var(--mantine-scale))}.mantine-focus-never:focus{outline:none}.mantine-active:active{transform:translateY(calc(.0625rem * var(--mantine-scale)))}fieldset:disabled .mantine-active:active{transform:none}:where([dir=rtl]) .mantine-rotate-rtl{transform:rotate(180deg)}:root{--mantine-z-index-app: 100;--mantine-z-index-modal: 200;--mantine-z-index-popover: 300;--mantine-z-index-overlay: 400;--mantine-z-index-max: 9999;--mantine-scale: 1;--mantine-cursor-type: default;--mantine-webkit-font-smoothing: antialiased;--mantine-moz-font-smoothing: grayscale;--mantine-color-white: #fff;--mantine-color-black: #000;--mantine-line-height: 1.55;--mantine-font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji;--mantine-font-family-monospace: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace;--mantine-font-family-headings: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji;--mantine-heading-font-weight: 700;--mantine-heading-text-wrap: wrap;--mantine-radius-default: calc(.25rem * var(--mantine-scale));--mantine-primary-color-filled: var(--mantine-color-blue-filled);--mantine-primary-color-filled-hover: var(--mantine-color-blue-filled-hover);--mantine-primary-color-light: var(--mantine-color-blue-light);--mantine-primary-color-light-hover: var(--mantine-color-blue-light-hover);--mantine-primary-color-light-color: var(--mantine-color-blue-light-color);--mantine-breakpoint-xs: 36em;--mantine-breakpoint-sm: 48em;--mantine-breakpoint-md: 62em;--mantine-breakpoint-lg: 75em;--mantine-breakpoint-xl: 88em;--mantine-spacing-xs: calc(.625rem * var(--mantine-scale));--mantine-spacing-sm: calc(.75rem * var(--mantine-scale));--mantine-spacing-md: calc(1rem * var(--mantine-scale));--mantine-spacing-lg: calc(1.25rem * var(--mantine-scale));--mantine-spacing-xl: calc(2rem * var(--mantine-scale));--mantine-font-size-xs: calc(.75rem * var(--mantine-scale));--mantine-font-size-sm: calc(.875rem * var(--mantine-scale));--mantine-font-size-md: calc(1rem * var(--mantine-scale));--mantine-font-size-lg: calc(1.125rem * var(--mantine-scale));--mantine-font-size-xl: calc(1.25rem * var(--mantine-scale));--mantine-line-height-xs: 1.4;--mantine-line-height-sm: 1.45;--mantine-line-height-md: 1.55;--mantine-line-height-lg: 1.6;--mantine-line-height-xl: 1.65;--mantine-shadow-xs: 0 calc(.0625rem * var(--mantine-scale)) calc(.1875rem * var(--mantine-scale)) rgba(0, 0, 0, .05), 0 calc(.0625rem * var(--mantine-scale)) calc(.125rem * var(--mantine-scale)) rgba(0, 0, 0, .1);--mantine-shadow-sm: 0 calc(.0625rem * var(--mantine-scale)) calc(.1875rem * var(--mantine-scale)) rgba(0, 0, 0, .05), rgba(0, 0, 0, .05) 0 calc(.625rem * var(--mantine-scale)) calc(.9375rem * var(--mantine-scale)) calc(-.3125rem * var(--mantine-scale)), rgba(0, 0, 0, .04) 0 calc(.4375rem * var(--mantine-scale)) calc(.4375rem * var(--mantine-scale)) calc(-.3125rem * var(--mantine-scale));--mantine-shadow-md: 0 calc(.0625rem * var(--mantine-scale)) calc(.1875rem * var(--mantine-scale)) rgba(0, 0, 0, .05), rgba(0, 0, 0, .05) 0 calc(1.25rem * var(--mantine-scale)) calc(1.5625rem * var(--mantine-scale)) calc(-.3125rem * var(--mantine-scale)), rgba(0, 0, 0, .04) 0 calc(.625rem * var(--mantine-scale)) calc(.625rem * var(--mantine-scale)) calc(-.3125rem * var(--mantine-scale));--mantine-shadow-lg: 0 calc(.0625rem * var(--mantine-scale)) calc(.1875rem * var(--mantine-scale)) rgba(0, 0, 0, .05), rgba(0, 0, 0, .05) 0 calc(1.75rem * var(--mantine-scale)) calc(1.4375rem * var(--mantine-scale)) calc(-.4375rem * var(--mantine-scale)), rgba(0, 0, 0, .04) 0 calc(.75rem * var(--mantine-scale)) calc(.75rem * var(--mantine-scale)) calc(-.4375rem * var(--mantine-scale));--mantine-shadow-xl: 0 calc(.0625rem * var(--mantine-scale)) calc(.1875rem * var(--mantine-scale)) rgba(0, 0, 0, .05), rgba(0, 0, 0, .05) 0 calc(2.25rem * var(--mantine-scale)) calc(1.75rem * var(--mantine-scale)) calc(-.4375rem * var(--mantine-scale)), rgba(0, 0, 0, .04) 0 calc(1.0625rem * var(--mantine-scale)) calc(1.0625rem * var(--mantine-scale)) calc(-.4375rem * var(--mantine-scale));--mantine-radius-xs: calc(.125rem * var(--mantine-scale));--mantine-radius-sm: calc(.25rem * var(--mantine-scale));--mantine-radius-md: calc(.5rem * var(--mantine-scale));--mantine-radius-lg: calc(1rem * var(--mantine-scale));--mantine-radius-xl: calc(2rem * var(--mantine-scale));--mantine-primary-color-0: var(--mantine-color-blue-0);--mantine-primary-color-1: var(--mantine-color-blue-1);--mantine-primary-color-2: var(--mantine-color-blue-2);--mantine-primary-color-3: var(--mantine-color-blue-3);--mantine-primary-color-4: var(--mantine-color-blue-4);--mantine-primary-color-5: var(--mantine-color-blue-5);--mantine-primary-color-6: var(--mantine-color-blue-6);--mantine-primary-color-7: var(--mantine-color-blue-7);--mantine-primary-color-8: var(--mantine-color-blue-8);--mantine-primary-color-9: var(--mantine-color-blue-9);--mantine-color-dark-0: #c9c9c9;--mantine-color-dark-1: #b8b8b8;--mantine-color-dark-2: #828282;--mantine-color-dark-3: #696969;--mantine-color-dark-4: #424242;--mantine-color-dark-5: #3b3b3b;--mantine-color-dark-6: #2e2e2e;--mantine-color-dark-7: #242424;--mantine-color-dark-8: #1f1f1f;--mantine-color-dark-9: #141414;--mantine-color-gray-0: #f8f9fa;--mantine-color-gray-1: #f1f3f5;--mantine-color-gray-2: #e9ecef;--mantine-color-gray-3: #dee2e6;--mantine-color-gray-4: #ced4da;--mantine-color-gray-5: #adb5bd;--mantine-color-gray-6: #868e96;--mantine-color-gray-7: #495057;--mantine-color-gray-8: #343a40;--mantine-color-gray-9: #212529;--mantine-color-red-0: #fff5f5;--mantine-color-red-1: #ffe3e3;--mantine-color-red-2: #ffc9c9;--mantine-color-red-3: #ffa8a8;--mantine-color-red-4: #ff8787;--mantine-color-red-5: #ff6b6b;--mantine-color-red-6: #fa5252;--mantine-color-red-7: #f03e3e;--mantine-color-red-8: #e03131;--mantine-color-red-9: #c92a2a;--mantine-color-pink-0: #fff0f6;--mantine-color-pink-1: #ffdeeb;--mantine-color-pink-2: #fcc2d7;--mantine-color-pink-3: #faa2c1;--mantine-color-pink-4: #f783ac;--mantine-color-pink-5: #f06595;--mantine-color-pink-6: #e64980;--mantine-color-pink-7: #d6336c;--mantine-color-pink-8: #c2255c;--mantine-color-pink-9: #a61e4d;--mantine-color-grape-0: #f8f0fc;--mantine-color-grape-1: #f3d9fa;--mantine-color-grape-2: #eebefa;--mantine-color-grape-3: #e599f7;--mantine-color-grape-4: #da77f2;--mantine-color-grape-5: #cc5de8;--mantine-color-grape-6: #be4bdb;--mantine-color-grape-7: #ae3ec9;--mantine-color-grape-8: #9c36b5;--mantine-color-grape-9: #862e9c;--mantine-color-violet-0: #f3f0ff;--mantine-color-violet-1: #e5dbff;--mantine-color-violet-2: #d0bfff;--mantine-color-violet-3: #b197fc;--mantine-color-violet-4: #9775fa;--mantine-color-violet-5: #845ef7;--mantine-color-violet-6: #7950f2;--mantine-color-violet-7: #7048e8;--mantine-color-violet-8: #6741d9;--mantine-color-violet-9: #5f3dc4;--mantine-color-indigo-0: #edf2ff;--mantine-color-indigo-1: #dbe4ff;--mantine-color-indigo-2: #bac8ff;--mantine-color-indigo-3: #91a7ff;--mantine-color-indigo-4: #748ffc;--mantine-color-indigo-5: #5c7cfa;--mantine-color-indigo-6: #4c6ef5;--mantine-color-indigo-7: #4263eb;--mantine-color-indigo-8: #3b5bdb;--mantine-color-indigo-9: #364fc7;--mantine-color-blue-0: #e7f5ff;--mantine-color-blue-1: #d0ebff;--mantine-color-blue-2: #a5d8ff;--mantine-color-blue-3: #74c0fc;--mantine-color-blue-4: #4dabf7;--mantine-color-blue-5: #339af0;--mantine-color-blue-6: #228be6;--mantine-color-blue-7: #1c7ed6;--mantine-color-blue-8: #1971c2;--mantine-color-blue-9: #1864ab;--mantine-color-cyan-0: #e3fafc;--mantine-color-cyan-1: #c5f6fa;--mantine-color-cyan-2: #99e9f2;--mantine-color-cyan-3: #66d9e8;--mantine-color-cyan-4: #3bc9db;--mantine-color-cyan-5: #22b8cf;--mantine-color-cyan-6: #15aabf;--mantine-color-cyan-7: #1098ad;--mantine-color-cyan-8: #0c8599;--mantine-color-cyan-9: #0b7285;--mantine-color-teal-0: #e6fcf5;--mantine-color-teal-1: #c3fae8;--mantine-color-teal-2: #96f2d7;--mantine-color-teal-3: #63e6be;--mantine-color-teal-4: #38d9a9;--mantine-color-teal-5: #20c997;--mantine-color-teal-6: #12b886;--mantine-color-teal-7: #0ca678;--mantine-color-teal-8: #099268;--mantine-color-teal-9: #087f5b;--mantine-color-green-0: #ebfbee;--mantine-color-green-1: #d3f9d8;--mantine-color-green-2: #b2f2bb;--mantine-color-green-3: #8ce99a;--mantine-color-green-4: #69db7c;--mantine-color-green-5: #51cf66;--mantine-color-green-6: #40c057;--mantine-color-green-7: #37b24d;--mantine-color-green-8: #2f9e44;--mantine-color-green-9: #2b8a3e;--mantine-color-lime-0: #f4fce3;--mantine-color-lime-1: #e9fac8;--mantine-color-lime-2: #d8f5a2;--mantine-color-lime-3: #c0eb75;--mantine-color-lime-4: #a9e34b;--mantine-color-lime-5: #94d82d;--mantine-color-lime-6: #82c91e;--mantine-color-lime-7: #74b816;--mantine-color-lime-8: #66a80f;--mantine-color-lime-9: #5c940d;--mantine-color-yellow-0: #fff9db;--mantine-color-yellow-1: #fff3bf;--mantine-color-yellow-2: #ffec99;--mantine-color-yellow-3: #ffe066;--mantine-color-yellow-4: #ffd43b;--mantine-color-yellow-5: #fcc419;--mantine-color-yellow-6: #fab005;--mantine-color-yellow-7: #f59f00;--mantine-color-yellow-8: #f08c00;--mantine-color-yellow-9: #e67700;--mantine-color-orange-0: #fff4e6;--mantine-color-orange-1: #ffe8cc;--mantine-color-orange-2: #ffd8a8;--mantine-color-orange-3: #ffc078;--mantine-color-orange-4: #ffa94d;--mantine-color-orange-5: #ff922b;--mantine-color-orange-6: #fd7e14;--mantine-color-orange-7: #f76707;--mantine-color-orange-8: #e8590c;--mantine-color-orange-9: #d9480f;--mantine-h1-font-size: calc(2.125rem * var(--mantine-scale));--mantine-h1-line-height: 1.3;--mantine-h1-font-weight: 700;--mantine-h2-font-size: calc(1.625rem * var(--mantine-scale));--mantine-h2-line-height: 1.35;--mantine-h2-font-weight: 700;--mantine-h3-font-size: calc(1.375rem * var(--mantine-scale));--mantine-h3-line-height: 1.4;--mantine-h3-font-weight: 700;--mantine-h4-font-size: calc(1.125rem * var(--mantine-scale));--mantine-h4-line-height: 1.45;--mantine-h4-font-weight: 700;--mantine-h5-font-size: calc(1rem * var(--mantine-scale));--mantine-h5-line-height: 1.5;--mantine-h5-font-weight: 700;--mantine-h6-font-size: calc(.875rem * var(--mantine-scale));--mantine-h6-line-height: 1.5;--mantine-h6-font-weight: 700}:root[data-mantine-color-scheme=dark]{--mantine-color-scheme: dark;--mantine-primary-color-contrast: var(--mantine-color-white);--mantine-color-bright: var(--mantine-color-white);--mantine-color-text: var(--mantine-color-dark-0);--mantine-color-body: var(--mantine-color-dark-7);--mantine-color-error: var(--mantine-color-red-8);--mantine-color-placeholder: var(--mantine-color-dark-3);--mantine-color-anchor: var(--mantine-color-blue-4);--mantine-color-default: var(--mantine-color-dark-6);--mantine-color-default-hover: var(--mantine-color-dark-5);--mantine-color-default-color: var(--mantine-color-white);--mantine-color-default-border: var(--mantine-color-dark-4);--mantine-color-dimmed: var(--mantine-color-dark-2);--mantine-color-disabled: var(--mantine-color-dark-6);--mantine-color-disabled-color: var(--mantine-color-dark-3);--mantine-color-disabled-border: var(--mantine-color-gray-6);--mantine-color-dark-text: var(--mantine-color-dark-4);--mantine-color-dark-filled: var(--mantine-color-dark-8);--mantine-color-dark-filled-hover: var(--mantine-color-dark-9);--mantine-color-dark-light: rgba(46, 46, 46, .15);--mantine-color-dark-light-hover: rgba(46, 46, 46, .2);--mantine-color-dark-light-color: var(--mantine-color-dark-3);--mantine-color-dark-outline: var(--mantine-color-dark-4);--mantine-color-dark-outline-hover: rgba(66, 66, 66, .05);--mantine-color-gray-text: var(--mantine-color-gray-4);--mantine-color-gray-filled: var(--mantine-color-gray-8);--mantine-color-gray-filled-hover: var(--mantine-color-gray-9);--mantine-color-gray-light: rgba(134, 142, 150, .15);--mantine-color-gray-light-hover: rgba(134, 142, 150, .2);--mantine-color-gray-light-color: var(--mantine-color-gray-3);--mantine-color-gray-outline: var(--mantine-color-gray-4);--mantine-color-gray-outline-hover: rgba(206, 212, 218, .05);--mantine-color-red-text: var(--mantine-color-red-4);--mantine-color-red-filled: var(--mantine-color-red-8);--mantine-color-red-filled-hover: var(--mantine-color-red-9);--mantine-color-red-light: rgba(250, 82, 82, .15);--mantine-color-red-light-hover: rgba(250, 82, 82, .2);--mantine-color-red-light-color: var(--mantine-color-red-3);--mantine-color-red-outline: var(--mantine-color-red-4);--mantine-color-red-outline-hover: rgba(255, 135, 135, .05);--mantine-color-pink-text: var(--mantine-color-pink-4);--mantine-color-pink-filled: var(--mantine-color-pink-8);--mantine-color-pink-filled-hover: var(--mantine-color-pink-9);--mantine-color-pink-light: rgba(230, 73, 128, .15);--mantine-color-pink-light-hover: rgba(230, 73, 128, .2);--mantine-color-pink-light-color: var(--mantine-color-pink-3);--mantine-color-pink-outline: var(--mantine-color-pink-4);--mantine-color-pink-outline-hover: rgba(247, 131, 172, .05);--mantine-color-grape-text: var(--mantine-color-grape-4);--mantine-color-grape-filled: var(--mantine-color-grape-8);--mantine-color-grape-filled-hover: var(--mantine-color-grape-9);--mantine-color-grape-light: rgba(190, 75, 219, .15);--mantine-color-grape-light-hover: rgba(190, 75, 219, .2);--mantine-color-grape-light-color: var(--mantine-color-grape-3);--mantine-color-grape-outline: var(--mantine-color-grape-4);--mantine-color-grape-outline-hover: rgba(218, 119, 242, .05);--mantine-color-violet-text: var(--mantine-color-violet-4);--mantine-color-violet-filled: var(--mantine-color-violet-8);--mantine-color-violet-filled-hover: var(--mantine-color-violet-9);--mantine-color-violet-light: rgba(121, 80, 242, .15);--mantine-color-violet-light-hover: rgba(121, 80, 242, .2);--mantine-color-violet-light-color: var(--mantine-color-violet-3);--mantine-color-violet-outline: var(--mantine-color-violet-4);--mantine-color-violet-outline-hover: rgba(151, 117, 250, .05);--mantine-color-indigo-text: var(--mantine-color-indigo-4);--mantine-color-indigo-filled: var(--mantine-color-indigo-8);--mantine-color-indigo-filled-hover: var(--mantine-color-indigo-9);--mantine-color-indigo-light: rgba(76, 110, 245, .15);--mantine-color-indigo-light-hover: rgba(76, 110, 245, .2);--mantine-color-indigo-light-color: var(--mantine-color-indigo-3);--mantine-color-indigo-outline: var(--mantine-color-indigo-4);--mantine-color-indigo-outline-hover: rgba(116, 143, 252, .05);--mantine-color-blue-text: var(--mantine-color-blue-4);--mantine-color-blue-filled: var(--mantine-color-blue-8);--mantine-color-blue-filled-hover: var(--mantine-color-blue-9);--mantine-color-blue-light: rgba(34, 139, 230, .15);--mantine-color-blue-light-hover: rgba(34, 139, 230, .2);--mantine-color-blue-light-color: var(--mantine-color-blue-3);--mantine-color-blue-outline: var(--mantine-color-blue-4);--mantine-color-blue-outline-hover: rgba(77, 171, 247, .05);--mantine-color-cyan-text: var(--mantine-color-cyan-4);--mantine-color-cyan-filled: var(--mantine-color-cyan-8);--mantine-color-cyan-filled-hover: var(--mantine-color-cyan-9);--mantine-color-cyan-light: rgba(21, 170, 191, .15);--mantine-color-cyan-light-hover: rgba(21, 170, 191, .2);--mantine-color-cyan-light-color: var(--mantine-color-cyan-3);--mantine-color-cyan-outline: var(--mantine-color-cyan-4);--mantine-color-cyan-outline-hover: rgba(59, 201, 219, .05);--mantine-color-teal-text: var(--mantine-color-teal-4);--mantine-color-teal-filled: var(--mantine-color-teal-8);--mantine-color-teal-filled-hover: var(--mantine-color-teal-9);--mantine-color-teal-light: rgba(18, 184, 134, .15);--mantine-color-teal-light-hover: rgba(18, 184, 134, .2);--mantine-color-teal-light-color: var(--mantine-color-teal-3);--mantine-color-teal-outline: var(--mantine-color-teal-4);--mantine-color-teal-outline-hover: rgba(56, 217, 169, .05);--mantine-color-green-text: var(--mantine-color-green-4);--mantine-color-green-filled: var(--mantine-color-green-8);--mantine-color-green-filled-hover: var(--mantine-color-green-9);--mantine-color-green-light: rgba(64, 192, 87, .15);--mantine-color-green-light-hover: rgba(64, 192, 87, .2);--mantine-color-green-light-color: var(--mantine-color-green-3);--mantine-color-green-outline: var(--mantine-color-green-4);--mantine-color-green-outline-hover: rgba(105, 219, 124, .05);--mantine-color-lime-text: var(--mantine-color-lime-4);--mantine-color-lime-filled: var(--mantine-color-lime-8);--mantine-color-lime-filled-hover: var(--mantine-color-lime-9);--mantine-color-lime-light: rgba(130, 201, 30, .15);--mantine-color-lime-light-hover: rgba(130, 201, 30, .2);--mantine-color-lime-light-color: var(--mantine-color-lime-3);--mantine-color-lime-outline: var(--mantine-color-lime-4);--mantine-color-lime-outline-hover: rgba(169, 227, 75, .05);--mantine-color-yellow-text: var(--mantine-color-yellow-4);--mantine-color-yellow-filled: var(--mantine-color-yellow-8);--mantine-color-yellow-filled-hover: var(--mantine-color-yellow-9);--mantine-color-yellow-light: rgba(250, 176, 5, .15);--mantine-color-yellow-light-hover: rgba(250, 176, 5, .2);--mantine-color-yellow-light-color: var(--mantine-color-yellow-3);--mantine-color-yellow-outline: var(--mantine-color-yellow-4);--mantine-color-yellow-outline-hover: rgba(255, 212, 59, .05);--mantine-color-orange-text: var(--mantine-color-orange-4);--mantine-color-orange-filled: var(--mantine-color-orange-8);--mantine-color-orange-filled-hover: var(--mantine-color-orange-9);--mantine-color-orange-light: rgba(253, 126, 20, .15);--mantine-color-orange-light-hover: rgba(253, 126, 20, .2);--mantine-color-orange-light-color: var(--mantine-color-orange-3);--mantine-color-orange-outline: var(--mantine-color-orange-4);--mantine-color-orange-outline-hover: rgba(255, 169, 77, .05)}:root[data-mantine-color-scheme=light]{--mantine-color-scheme: light;--mantine-primary-color-contrast: var(--mantine-color-white);--mantine-color-bright: var(--mantine-color-black);--mantine-color-text: #000;--mantine-color-body: #fff;--mantine-color-error: var(--mantine-color-red-6);--mantine-color-placeholder: var(--mantine-color-gray-5);--mantine-color-anchor: var(--mantine-color-blue-6);--mantine-color-default: var(--mantine-color-white);--mantine-color-default-hover: var(--mantine-color-gray-0);--mantine-color-default-color: var(--mantine-color-black);--mantine-color-default-border: var(--mantine-color-gray-4);--mantine-color-dimmed: var(--mantine-color-gray-6);--mantine-color-disabled: var(--mantine-color-gray-2);--mantine-color-disabled-color: var(--mantine-color-gray-5);--mantine-color-disabled-border: var(--mantine-color-gray-3);--mantine-color-dark-text: var(--mantine-color-dark-filled);--mantine-color-dark-filled: var(--mantine-color-dark-6);--mantine-color-dark-filled-hover: var(--mantine-color-dark-7);--mantine-color-dark-light: rgba(46, 46, 46, .1);--mantine-color-dark-light-hover: rgba(46, 46, 46, .12);--mantine-color-dark-light-color: var(--mantine-color-dark-6);--mantine-color-dark-outline: var(--mantine-color-dark-6);--mantine-color-dark-outline-hover: rgba(46, 46, 46, .05);--mantine-color-gray-text: var(--mantine-color-gray-filled);--mantine-color-gray-filled: var(--mantine-color-gray-6);--mantine-color-gray-filled-hover: var(--mantine-color-gray-7);--mantine-color-gray-light: rgba(134, 142, 150, .1);--mantine-color-gray-light-hover: rgba(134, 142, 150, .12);--mantine-color-gray-light-color: var(--mantine-color-gray-6);--mantine-color-gray-outline: var(--mantine-color-gray-6);--mantine-color-gray-outline-hover: rgba(134, 142, 150, .05);--mantine-color-red-text: var(--mantine-color-red-filled);--mantine-color-red-filled: var(--mantine-color-red-6);--mantine-color-red-filled-hover: var(--mantine-color-red-7);--mantine-color-red-light: rgba(250, 82, 82, .1);--mantine-color-red-light-hover: rgba(250, 82, 82, .12);--mantine-color-red-light-color: var(--mantine-color-red-6);--mantine-color-red-outline: var(--mantine-color-red-6);--mantine-color-red-outline-hover: rgba(250, 82, 82, .05);--mantine-color-pink-text: var(--mantine-color-pink-filled);--mantine-color-pink-filled: var(--mantine-color-pink-6);--mantine-color-pink-filled-hover: var(--mantine-color-pink-7);--mantine-color-pink-light: rgba(230, 73, 128, .1);--mantine-color-pink-light-hover: rgba(230, 73, 128, .12);--mantine-color-pink-light-color: var(--mantine-color-pink-6);--mantine-color-pink-outline: var(--mantine-color-pink-6);--mantine-color-pink-outline-hover: rgba(230, 73, 128, .05);--mantine-color-grape-text: var(--mantine-color-grape-filled);--mantine-color-grape-filled: var(--mantine-color-grape-6);--mantine-color-grape-filled-hover: var(--mantine-color-grape-7);--mantine-color-grape-light: rgba(190, 75, 219, .1);--mantine-color-grape-light-hover: rgba(190, 75, 219, .12);--mantine-color-grape-light-color: var(--mantine-color-grape-6);--mantine-color-grape-outline: var(--mantine-color-grape-6);--mantine-color-grape-outline-hover: rgba(190, 75, 219, .05);--mantine-color-violet-text: var(--mantine-color-violet-filled);--mantine-color-violet-filled: var(--mantine-color-violet-6);--mantine-color-violet-filled-hover: var(--mantine-color-violet-7);--mantine-color-violet-light: rgba(121, 80, 242, .1);--mantine-color-violet-light-hover: rgba(121, 80, 242, .12);--mantine-color-violet-light-color: var(--mantine-color-violet-6);--mantine-color-violet-outline: var(--mantine-color-violet-6);--mantine-color-violet-outline-hover: rgba(121, 80, 242, .05);--mantine-color-indigo-text: var(--mantine-color-indigo-filled);--mantine-color-indigo-filled: var(--mantine-color-indigo-6);--mantine-color-indigo-filled-hover: var(--mantine-color-indigo-7);--mantine-color-indigo-light: rgba(76, 110, 245, .1);--mantine-color-indigo-light-hover: rgba(76, 110, 245, .12);--mantine-color-indigo-light-color: var(--mantine-color-indigo-6);--mantine-color-indigo-outline: var(--mantine-color-indigo-6);--mantine-color-indigo-outline-hover: rgba(76, 110, 245, .05);--mantine-color-blue-text: var(--mantine-color-blue-filled);--mantine-color-blue-filled: var(--mantine-color-blue-6);--mantine-color-blue-filled-hover: var(--mantine-color-blue-7);--mantine-color-blue-light: rgba(34, 139, 230, .1);--mantine-color-blue-light-hover: rgba(34, 139, 230, .12);--mantine-color-blue-light-color: var(--mantine-color-blue-6);--mantine-color-blue-outline: var(--mantine-color-blue-6);--mantine-color-blue-outline-hover: rgba(34, 139, 230, .05);--mantine-color-cyan-text: var(--mantine-color-cyan-filled);--mantine-color-cyan-filled: var(--mantine-color-cyan-6);--mantine-color-cyan-filled-hover: var(--mantine-color-cyan-7);--mantine-color-cyan-light: rgba(21, 170, 191, .1);--mantine-color-cyan-light-hover: rgba(21, 170, 191, .12);--mantine-color-cyan-light-color: var(--mantine-color-cyan-6);--mantine-color-cyan-outline: var(--mantine-color-cyan-6);--mantine-color-cyan-outline-hover: rgba(21, 170, 191, .05);--mantine-color-teal-text: var(--mantine-color-teal-filled);--mantine-color-teal-filled: var(--mantine-color-teal-6);--mantine-color-teal-filled-hover: var(--mantine-color-teal-7);--mantine-color-teal-light: rgba(18, 184, 134, .1);--mantine-color-teal-light-hover: rgba(18, 184, 134, .12);--mantine-color-teal-light-color: var(--mantine-color-teal-6);--mantine-color-teal-outline: var(--mantine-color-teal-6);--mantine-color-teal-outline-hover: rgba(18, 184, 134, .05);--mantine-color-green-text: var(--mantine-color-green-filled);--mantine-color-green-filled: var(--mantine-color-green-6);--mantine-color-green-filled-hover: var(--mantine-color-green-7);--mantine-color-green-light: rgba(64, 192, 87, .1);--mantine-color-green-light-hover: rgba(64, 192, 87, .12);--mantine-color-green-light-color: var(--mantine-color-green-6);--mantine-color-green-outline: var(--mantine-color-green-6);--mantine-color-green-outline-hover: rgba(64, 192, 87, .05);--mantine-color-lime-text: var(--mantine-color-lime-filled);--mantine-color-lime-filled: var(--mantine-color-lime-6);--mantine-color-lime-filled-hover: var(--mantine-color-lime-7);--mantine-color-lime-light: rgba(130, 201, 30, .1);--mantine-color-lime-light-hover: rgba(130, 201, 30, .12);--mantine-color-lime-light-color: var(--mantine-color-lime-6);--mantine-color-lime-outline: var(--mantine-color-lime-6);--mantine-color-lime-outline-hover: rgba(130, 201, 30, .05);--mantine-color-yellow-text: var(--mantine-color-yellow-filled);--mantine-color-yellow-filled: var(--mantine-color-yellow-6);--mantine-color-yellow-filled-hover: var(--mantine-color-yellow-7);--mantine-color-yellow-light: rgba(250, 176, 5, .1);--mantine-color-yellow-light-hover: rgba(250, 176, 5, .12);--mantine-color-yellow-light-color: var(--mantine-color-yellow-6);--mantine-color-yellow-outline: var(--mantine-color-yellow-6);--mantine-color-yellow-outline-hover: rgba(250, 176, 5, .05);--mantine-color-orange-text: var(--mantine-color-orange-filled);--mantine-color-orange-filled: var(--mantine-color-orange-6);--mantine-color-orange-filled-hover: var(--mantine-color-orange-7);--mantine-color-orange-light: rgba(253, 126, 20, .1);--mantine-color-orange-light-hover: rgba(253, 126, 20, .12);--mantine-color-orange-light-color: var(--mantine-color-orange-6);--mantine-color-orange-outline: var(--mantine-color-orange-6);--mantine-color-orange-outline-hover: rgba(253, 126, 20, .05)}.m_d57069b5{--scrollarea-scrollbar-size: calc(.75rem * var(--mantine-scale));position:relative;overflow:hidden}.m_c0783ff9{scrollbar-width:none;overscroll-behavior:var(--scrollarea-over-scroll-behavior);-ms-overflow-style:none;-webkit-overflow-scrolling:touch;width:100%;height:100%}.m_c0783ff9::-webkit-scrollbar{display:none}.m_c0783ff9:where([data-scrollbars=xy],[data-scrollbars=y]):where([data-offset-scrollbars=xy],[data-offset-scrollbars=y],[data-offset-scrollbars=present]):where([data-vertical-hidden]){padding-inline-end:0;padding-inline-start:0}.m_c0783ff9:where([data-scrollbars=xy],[data-scrollbars=y]):where([data-offset-scrollbars=xy],[data-offset-scrollbars=y],[data-offset-scrollbars=present]):not([data-vertical-hidden]){padding-inline-end:var(--scrollarea-scrollbar-size);padding-inline-start:unset}.m_c0783ff9:where([data-scrollbars=xy],[data-scrollbars=x]):where([data-offset-scrollbars=xy],[data-offset-scrollbars=x],[data-offset-scrollbars=present]):where([data-horizontal-hidden]){padding-bottom:0}.m_c0783ff9:where([data-scrollbars=xy],[data-scrollbars=x]):where([data-offset-scrollbars=xy],[data-offset-scrollbars=x],[data-offset-scrollbars=present]):not([data-horizontal-hidden]){padding-bottom:var(--scrollarea-scrollbar-size)}.m_f8f631dd{min-width:100%;display:table}.m_c44ba933{-webkit-user-select:none;user-select:none;touch-action:none;box-sizing:border-box;transition:background-color .15s ease,opacity .15s ease;padding:calc(var(--scrollarea-scrollbar-size) / 5);display:flex;background-color:transparent;flex-direction:row}@media(hover:hover){:where([data-mantine-color-scheme=light]) .m_c44ba933:hover{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=light]) .m_c44ba933:hover>.m_d8b5e363{background-color:#00000080}:where([data-mantine-color-scheme=dark]) .m_c44ba933:hover{background-color:var(--mantine-color-dark-8)}:where([data-mantine-color-scheme=dark]) .m_c44ba933:hover>.m_d8b5e363{background-color:#ffffff80}}@media(hover:none){:where([data-mantine-color-scheme=light]) .m_c44ba933:active{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=light]) .m_c44ba933:active>.m_d8b5e363{background-color:#00000080}:where([data-mantine-color-scheme=dark]) .m_c44ba933:active{background-color:var(--mantine-color-dark-8)}:where([data-mantine-color-scheme=dark]) .m_c44ba933:active>.m_d8b5e363{background-color:#ffffff80}}.m_c44ba933:where([data-hidden],[data-state=hidden]){display:none}.m_c44ba933:where([data-orientation=vertical]){width:var(--scrollarea-scrollbar-size);top:0;bottom:var(--sa-corner-width);inset-inline-end:0}.m_c44ba933:where([data-orientation=horizontal]){height:var(--scrollarea-scrollbar-size);flex-direction:column;bottom:0;inset-inline-start:0;inset-inline-end:var(--sa-corner-width)}.m_d8b5e363{flex:1;border-radius:var(--scrollarea-scrollbar-size);position:relative;transition:background-color .15s ease;overflow:hidden;opacity:var(--thumb-opacity)}.m_d8b5e363:before{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:100%;height:100%;min-width:calc(2.75rem * var(--mantine-scale));min-height:calc(2.75rem * var(--mantine-scale))}:where([data-mantine-color-scheme=light]) .m_d8b5e363{background-color:#0006}:where([data-mantine-color-scheme=dark]) .m_d8b5e363{background-color:#fff6}.m_21657268{position:absolute;opacity:0;transition:opacity .15s ease;display:block;inset-inline-end:0;bottom:0}:where([data-mantine-color-scheme=light]) .m_21657268{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_21657268{background-color:var(--mantine-color-dark-8)}.m_21657268:where([data-hovered]){opacity:1}.m_21657268:where([data-hidden]){display:none}.m_b1336c6{min-width:100%}.m_87cf2631{background-color:transparent;cursor:pointer;border:0;padding:0;appearance:none;font-size:var(--mantine-font-size-md);text-align:left;text-decoration:none;color:inherit;touch-action:manipulation;-webkit-tap-highlight-color:transparent}:where([dir=rtl]) .m_87cf2631{text-align:right}.m_515a97f8{border:0;clip:rect(0 0 0 0);height:calc(.0625rem * var(--mantine-scale));width:calc(.0625rem * var(--mantine-scale));margin:calc(-.0625rem * var(--mantine-scale));overflow:hidden;padding:0;position:absolute;white-space:nowrap}.m_1b7284a3{--paper-radius: var(--mantine-radius-default);outline:0;-webkit-tap-highlight-color:transparent;display:block;touch-action:manipulation;text-decoration:none;border-radius:var(--paper-radius);box-shadow:var(--paper-shadow);background-color:var(--mantine-color-body)}[data-mantine-color-scheme=light] .m_1b7284a3{--paper-border-color: var(--mantine-color-gray-3)}[data-mantine-color-scheme=dark] .m_1b7284a3{--paper-border-color: var(--mantine-color-dark-4)}.m_1b7284a3:where([data-with-border]){border:calc(.0625rem * var(--mantine-scale)) solid var(--paper-border-color)}.m_9814e45f{inset:0;position:absolute;background:var(--overlay-bg, rgba(0, 0, 0, .6));backdrop-filter:var(--overlay-filter);-webkit-backdrop-filter:var(--overlay-filter);border-radius:var(--overlay-radius, 0);z-index:var(--overlay-z-index)}.m_9814e45f:where([data-fixed]){position:fixed}.m_9814e45f:where([data-center]){display:flex;align-items:center;justify-content:center}.m_38a85659{position:absolute;border:1px solid var(--popover-border-color);padding:var(--mantine-spacing-sm) var(--mantine-spacing-md);box-shadow:var(--popover-shadow, none);border-radius:var(--popover-radius, var(--mantine-radius-default))}.m_38a85659:where([data-fixed]){position:fixed}.m_38a85659:focus{outline:none}:where([data-mantine-color-scheme=light]) .m_38a85659{--popover-border-color: var(--mantine-color-gray-2);background-color:var(--mantine-color-white)}:where([data-mantine-color-scheme=dark]) .m_38a85659{--popover-border-color: var(--mantine-color-dark-4);background-color:var(--mantine-color-dark-6)}.m_a31dc6c1{background-color:inherit;border:1px solid var(--popover-border-color);z-index:1}.m_3d7bc908{position:fixed;inset:0}.m_5ae2e3c{--loader-size-xs: calc(1.125rem * var(--mantine-scale));--loader-size-sm: calc(1.375rem * var(--mantine-scale));--loader-size-md: calc(2.25rem * var(--mantine-scale));--loader-size-lg: calc(2.75rem * var(--mantine-scale));--loader-size-xl: calc(3.625rem * var(--mantine-scale));--loader-size: var(--loader-size-md);--loader-color: var(--mantine-primary-color-filled)}@keyframes m_5d2b3b9d{0%{transform:scale(.6);opacity:0}50%,to{transform:scale(1)}}.m_7a2bd4cd{position:relative;width:var(--loader-size);height:var(--loader-size);display:flex;gap:calc(var(--loader-size) / 5)}.m_870bb79{flex:1;background:var(--loader-color);animation:m_5d2b3b9d 1.2s cubic-bezier(0,.5,.5,1) infinite;border-radius:calc(.125rem * var(--mantine-scale))}.m_870bb79:nth-of-type(1){animation-delay:-.24s}.m_870bb79:nth-of-type(2){animation-delay:-.12s}.m_870bb79:nth-of-type(3){animation-delay:0}@keyframes m_aac34a1{0%,to{transform:scale(1);opacity:1}50%{transform:scale(.6);opacity:.5}}.m_4e3f22d7{display:flex;justify-content:center;align-items:center;gap:calc(var(--loader-size) / 10);position:relative;width:var(--loader-size);height:var(--loader-size)}.m_870c4af{width:calc(var(--loader-size) / 3 - var(--loader-size) / 15);height:calc(var(--loader-size) / 3 - var(--loader-size) / 15);border-radius:50%;background:var(--loader-color);animation:m_aac34a1 .8s infinite linear}.m_870c4af:nth-child(2){animation-delay:.4s}@keyframes m_f8e89c4b{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.m_b34414df{display:inline-block;width:var(--loader-size);height:var(--loader-size)}.m_b34414df:after{content:"";display:block;width:var(--loader-size);height:var(--loader-size);border-radius:calc(625rem * var(--mantine-scale));border-width:calc(var(--loader-size) / 8);border-style:solid;border-color:var(--loader-color) var(--loader-color) var(--loader-color) transparent;animation:m_f8e89c4b 1.2s linear infinite}.m_8d3f4000{--ai-size-xs: calc(1.125rem * var(--mantine-scale));--ai-size-sm: calc(1.375rem * var(--mantine-scale));--ai-size-md: calc(1.75rem * var(--mantine-scale));--ai-size-lg: calc(2.125rem * var(--mantine-scale));--ai-size-xl: calc(2.75rem * var(--mantine-scale));--ai-size-input-xs: calc(1.875rem * var(--mantine-scale));--ai-size-input-sm: calc(2.25rem * var(--mantine-scale));--ai-size-input-md: calc(2.625rem * var(--mantine-scale));--ai-size-input-lg: calc(3.125rem * var(--mantine-scale));--ai-size-input-xl: calc(3.75rem * var(--mantine-scale));--ai-size: var(--ai-size-md);--ai-color: var(--mantine-color-white);line-height:1;display:inline-flex;align-items:center;justify-content:center;position:relative;-webkit-user-select:none;user-select:none;overflow:hidden;width:var(--ai-size);height:var(--ai-size);min-width:var(--ai-size);min-height:var(--ai-size);border-radius:var(--ai-radius, var(--mantine-radius-default));background:var(--ai-bg, var(--mantine-primary-color-filled));color:var(--ai-color, var(--mantine-color-white));border:var(--ai-bd, calc(.0625rem * var(--mantine-scale)) solid transparent);cursor:pointer}@media(hover:hover){.m_8d3f4000:hover:where(:not([data-loading],:disabled,[data-disabled])){background-color:var(--ai-hover, var(--mantine-primary-color-filled-hover));color:var(--ai-hover-color, var(--ai-color))}}@media(hover:none){.m_8d3f4000:active:where(:not([data-loading],:disabled,[data-disabled])){background-color:var(--ai-hover, var(--mantine-primary-color-filled-hover));color:var(--ai-hover-color, var(--ai-color))}}.m_8d3f4000[data-loading]{cursor:not-allowed}.m_8d3f4000[data-loading] .m_8d3afb97{opacity:0;transform:translateY(100%)}.m_8d3f4000:where(:disabled:not([data-loading]),[data-disabled]:not([data-loading])){cursor:not-allowed;border:calc(.0625rem * var(--mantine-scale)) solid transparent;color:var(--mantine-color-disabled-color);background-color:var(--mantine-color-disabled)}.m_8d3f4000:where(:disabled:not([data-loading]),[data-disabled]:not([data-loading])):active{transform:none}.m_302b9fb1{inset:calc(-.0625rem * var(--mantine-scale));position:absolute;border-radius:var(--ai-radius, var(--mantine-radius-default));display:flex;align-items:center;justify-content:center}:where([data-mantine-color-scheme=light]) .m_302b9fb1{background-color:#ffffff26}:where([data-mantine-color-scheme=dark]) .m_302b9fb1{background-color:#00000026}.m_1a0f1b21{--ai-border-width: calc(.0625rem * var(--mantine-scale));display:flex}.m_1a0f1b21 :where(*):focus{position:relative;z-index:1}.m_1a0f1b21[data-orientation=horizontal]{flex-direction:row}.m_1a0f1b21[data-orientation=horizontal] .m_8d3f4000:not(:only-child):first-child,.m_1a0f1b21[data-orientation=horizontal] .m_437b6484:not(:only-child):first-child{border-end-end-radius:0;border-start-end-radius:0;border-inline-end-width:calc(var(--ai-border-width) / 2)}.m_1a0f1b21[data-orientation=horizontal] .m_8d3f4000:not(:only-child):last-child,.m_1a0f1b21[data-orientation=horizontal] .m_437b6484:not(:only-child):last-child{border-end-start-radius:0;border-start-start-radius:0;border-inline-start-width:calc(var(--ai-border-width) / 2)}.m_1a0f1b21[data-orientation=horizontal] .m_8d3f4000:not(:only-child):not(:first-child):not(:last-child),.m_1a0f1b21[data-orientation=horizontal] .m_437b6484:not(:only-child):not(:first-child):not(:last-child){border-radius:0;border-inline-width:calc(var(--ai-border-width) / 2)}.m_1a0f1b21[data-orientation=vertical]{flex-direction:column}.m_1a0f1b21[data-orientation=vertical] .m_8d3f4000:not(:only-child):first-child,.m_1a0f1b21[data-orientation=vertical] .m_437b6484:not(:only-child):first-child{border-end-start-radius:0;border-end-end-radius:0;border-bottom-width:calc(var(--ai-border-width) / 2)}.m_1a0f1b21[data-orientation=vertical] .m_8d3f4000:not(:only-child):last-child,.m_1a0f1b21[data-orientation=vertical] .m_437b6484:not(:only-child):last-child{border-start-start-radius:0;border-start-end-radius:0;border-top-width:calc(var(--ai-border-width) / 2)}.m_1a0f1b21[data-orientation=vertical] .m_8d3f4000:not(:only-child):not(:first-child):not(:last-child),.m_1a0f1b21[data-orientation=vertical] .m_437b6484:not(:only-child):not(:first-child):not(:last-child){border-radius:0;border-bottom-width:calc(var(--ai-border-width) / 2);border-top-width:calc(var(--ai-border-width) / 2)}.m_8d3afb97{display:flex;align-items:center;justify-content:center;transition:transform .15s ease,opacity .1s ease;width:100%;height:100%}.m_437b6484{--section-height-xs: calc(1.125rem * var(--mantine-scale));--section-height-sm: calc(1.375rem * var(--mantine-scale));--section-height-md: calc(1.75rem * var(--mantine-scale));--section-height-lg: calc(2.125rem * var(--mantine-scale));--section-height-xl: calc(2.75rem * var(--mantine-scale));--section-height-input-xs: calc(1.875rem * var(--mantine-scale));--section-height-input-sm: calc(2.25rem * var(--mantine-scale));--section-height-input-md: calc(2.625rem * var(--mantine-scale));--section-height-input-lg: calc(3.125rem * var(--mantine-scale));--section-height-input-xl: calc(3.75rem * var(--mantine-scale));--section-padding-x-xs: calc(.375rem * var(--mantine-scale));--section-padding-x-sm: calc(.5rem * var(--mantine-scale));--section-padding-x-md: calc(.625rem * var(--mantine-scale));--section-padding-x-lg: calc(.75rem * var(--mantine-scale));--section-padding-x-xl: calc(1rem * var(--mantine-scale));--section-height: var(--section-height-sm);--section-padding-x: var(--section-padding-x-sm);--section-color: var(--mantine-color-white);font-weight:600;width:auto;border-radius:var(--section-radius, var(--mantine-radius-default));font-size:var(--section-fz, var(--mantine-font-size-sm));background:var(--section-bg, var(--mantine-primary-color-filled));border:var(--section-bd, calc(.0625rem * var(--mantine-scale)) solid transparent);color:var(--section-color, var(--mantine-color-white));height:var(--section-height, var(--section-height-sm));padding-inline:var(--section-padding-x, var(--section-padding-x-sm));vertical-align:middle;line-height:1;display:inline-flex;align-items:center;justify-content:center}.m_86a44da5{--cb-size-xs: calc(1.125rem * var(--mantine-scale));--cb-size-sm: calc(1.375rem * var(--mantine-scale));--cb-size-md: calc(1.75rem * var(--mantine-scale));--cb-size-lg: calc(2.125rem * var(--mantine-scale));--cb-size-xl: calc(2.75rem * var(--mantine-scale));--cb-size: var(--cb-size-md);--cb-icon-size: 70%;--cb-radius: var(--mantine-radius-default);line-height:1;display:inline-flex;align-items:center;justify-content:center;position:relative;-webkit-user-select:none;user-select:none;width:var(--cb-size);height:var(--cb-size);min-width:var(--cb-size);min-height:var(--cb-size);border-radius:var(--cb-radius)}:where([data-mantine-color-scheme=light]) .m_86a44da5{color:var(--mantine-color-gray-7)}:where([data-mantine-color-scheme=dark]) .m_86a44da5{color:var(--mantine-color-dark-1)}.m_86a44da5[data-disabled],.m_86a44da5:disabled{cursor:not-allowed;opacity:.6}@media(hover:hover){:where([data-mantine-color-scheme=light]) .m_220c80f2:where(:not([data-disabled],:disabled)):hover{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_220c80f2:where(:not([data-disabled],:disabled)):hover{background-color:var(--mantine-color-dark-6)}}@media(hover:none){:where([data-mantine-color-scheme=light]) .m_220c80f2:where(:not([data-disabled],:disabled)):active{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_220c80f2:where(:not([data-disabled],:disabled)):active{background-color:var(--mantine-color-dark-6)}}.m_4081bf90{display:flex;flex-direction:row;flex-wrap:var(--group-wrap, wrap);justify-content:var(--group-justify, flex-start);align-items:var(--group-align, center);gap:var(--group-gap, var(--mantine-spacing-md))}.m_4081bf90:where([data-grow])>*{flex-grow:1;max-width:var(--group-child-width)}.m_615af6c9{line-height:1;padding:0;margin:0;font-weight:400;font-size:var(--mantine-font-size-md)}.m_b5489c3c{display:flex;justify-content:space-between;align-items:center;padding:var(--mb-padding, var(--mantine-spacing-md));padding-inline-end:calc(var(--mb-padding, var(--mantine-spacing-md)) - calc(.3125rem * var(--mantine-scale)));position:sticky;top:0;background-color:var(--mantine-color-body);z-index:1000;min-height:calc(3.75rem * var(--mantine-scale));transition:padding-inline-end .1s}.m_60c222c7{position:fixed;width:100%;top:0;bottom:0;z-index:var(--mb-z-index);pointer-events:none}.m_fd1ab0aa{pointer-events:all;box-shadow:var(--mb-shadow, var(--mantine-shadow-xl))}.m_fd1ab0aa [data-mantine-scrollbar]{z-index:1001}[data-offset-scrollbars] .m_fd1ab0aa:has([data-mantine-scrollbar]) .m_b5489c3c{padding-inline-end:calc(var(--mb-padding, var(--mantine-spacing-md)) + calc(.3125rem * var(--mantine-scale)))}.m_606cb269{margin-inline-start:auto}.m_5df29311{padding:var(--mb-padding, var(--mantine-spacing-md));padding-top:var(--mb-padding, var(--mantine-spacing-md))}.m_5df29311:where(:not(:only-child)){padding-top:0}.m_6c018570{position:relative;margin-top:var(--input-margin-top, 0rem);margin-bottom:var(--input-margin-bottom, 0rem);--input-height-xs: calc(1.875rem * var(--mantine-scale));--input-height-sm: calc(2.25rem * var(--mantine-scale));--input-height-md: calc(2.625rem * var(--mantine-scale));--input-height-lg: calc(3.125rem * var(--mantine-scale));--input-height-xl: calc(3.75rem * var(--mantine-scale));--input-padding-y-xs: calc(.3125rem * var(--mantine-scale));--input-padding-y-sm: calc(.375rem * var(--mantine-scale));--input-padding-y-md: calc(.5rem * var(--mantine-scale));--input-padding-y-lg: calc(.625rem * var(--mantine-scale));--input-padding-y-xl: calc(.8125rem * var(--mantine-scale));--input-height: var(--input-height-sm);--input-radius: var(--mantine-radius-default);--input-cursor: text;--input-text-align: left;--input-line-height: calc(var(--input-height) - calc(.125rem * var(--mantine-scale)));--input-padding: calc(var(--input-height) / 3);--input-padding-inline-start: var(--input-padding);--input-padding-inline-end: var(--input-padding);--input-placeholder-color: var(--mantine-color-placeholder);--input-color: var(--mantine-color-text);--input-disabled-bg: var(--mantine-color-disabled);--input-disabled-color: var(--mantine-color-disabled-color);--input-left-section-size: var(--input-left-section-width, calc(var(--input-height) - calc(.125rem * var(--mantine-scale))));--input-right-section-size: var( --input-right-section-width, calc(var(--input-height) - calc(.125rem * var(--mantine-scale))) );--input-size: var(--input-height);--section-y: calc(.0625rem * var(--mantine-scale));--left-section-start: calc(.0625rem * var(--mantine-scale));--left-section-border-radius: var(--input-radius) 0 0 var(--input-radius);--right-section-end: calc(.0625rem * var(--mantine-scale));--right-section-border-radius: 0 var(--input-radius) var(--input-radius) 0}.m_6c018570[data-variant=unstyled]{--input-padding: 0;--input-padding-y: 0;--input-padding-inline-start: 0;--input-padding-inline-end: 0}.m_6c018570[data-pointer]{--input-cursor: pointer}.m_6c018570[data-multiline]{--input-padding-y-xs: calc(.28125rem * var(--mantine-scale));--input-padding-y-sm: calc(.34375rem * var(--mantine-scale));--input-padding-y-md: calc(.4375rem * var(--mantine-scale));--input-padding-y-lg: calc(.59375rem * var(--mantine-scale));--input-padding-y-xl: calc(.8125rem * var(--mantine-scale));--input-size: auto;--input-line-height: var(--mantine-line-height);--input-padding-y: var(--input-padding-y-sm)}.m_6c018570[data-with-left-section]{--input-padding-inline-start: var(--input-left-section-size)}.m_6c018570[data-with-right-section]{--input-padding-inline-end: var(--input-right-section-size)}[data-mantine-color-scheme=light] .m_6c018570[data-variant=default]{--input-bd: var(--mantine-color-gray-4);--input-bg: var(--mantine-color-white);--input-bd-focus: var(--mantine-primary-color-filled)}[data-mantine-color-scheme=light] .m_6c018570[data-variant=filled]{--input-bd: transparent;--input-bg: var(--mantine-color-gray-1);--input-bd-focus: var(--mantine-primary-color-filled)}[data-mantine-color-scheme=light] .m_6c018570[data-variant=unstyled]{--input-bd: transparent;--input-bg: transparent;--input-bd-focus: transparent}[data-mantine-color-scheme=dark] .m_6c018570[data-variant=default]{--input-bd: var(--mantine-color-dark-4);--input-bg: var(--mantine-color-dark-6);--input-bd-focus: var(--mantine-primary-color-filled)}[data-mantine-color-scheme=dark] .m_6c018570[data-variant=filled]{--input-bd: transparent;--input-bg: var(--mantine-color-dark-5);--input-bd-focus: var(--mantine-primary-color-filled)}[data-mantine-color-scheme=dark] .m_6c018570[data-variant=unstyled]{--input-bd: transparent;--input-bg: transparent;--input-bd-focus: transparent}[data-mantine-color-scheme] .m_6c018570[data-error]:not([data-variant=unstyled]){--input-bd: var(--mantine-color-error)}[data-mantine-color-scheme] .m_6c018570[data-error]{--input-color: var(--mantine-color-error);--input-placeholder-color: var(--mantine-color-error);--input-section-color: var(--mantine-color-error)}:where([dir=rtl]) .m_6c018570{--input-text-align: right;--left-section-border-radius: 0 var(--input-radius) var(--input-radius) 0;--right-section-border-radius: var(--input-radius) 0 0 var(--input-radius)}.m_8fb7ebe7{-webkit-tap-highlight-color:transparent;appearance:none;resize:var(--input-resize, none);display:block;width:100%;transition:border-color .1s ease;text-align:var(--input-text-align);color:var(--input-color);border:calc(.0625rem * var(--mantine-scale)) solid var(--input-bd);background-color:var(--input-bg);font-family:var(--input-font-family, var(--mantine-font-family));height:var(--input-size);min-height:var(--input-height);line-height:var(--input-line-height);font-size:var(--input-fz, var(--input-fz, var(--mantine-font-size-sm)));border-radius:var(--input-radius);padding-inline-start:var(--input-padding-inline-start);padding-inline-end:var(--input-padding-inline-end);padding-top:var(--input-padding-y, 0rem);padding-bottom:var(--input-padding-y, 0rem);cursor:var(--input-cursor);overflow:var(--input-overflow)}.m_8fb7ebe7[data-no-overflow]{--input-overflow: hidden}.m_8fb7ebe7[data-monospace]{--input-font-family: var(--mantine-font-family-monospace);--input-fz: calc(var(--input-fz, var(--mantine-font-size-sm)) - calc(.125rem * var(--mantine-scale)))}.m_8fb7ebe7:focus,.m_8fb7ebe7:focus-within{outline:none;--input-bd: var(--input-bd-focus)}[data-error] .m_8fb7ebe7:focus,[data-error] .m_8fb7ebe7:focus-within{--input-bd: var(--mantine-color-error)}.m_8fb7ebe7::placeholder{color:var(--input-placeholder-color);opacity:1}.m_8fb7ebe7::-webkit-inner-spin-button,.m_8fb7ebe7::-webkit-outer-spin-button,.m_8fb7ebe7::-webkit-search-decoration,.m_8fb7ebe7::-webkit-search-cancel-button,.m_8fb7ebe7::-webkit-search-results-button,.m_8fb7ebe7::-webkit-search-results-decoration{appearance:none}.m_8fb7ebe7[type=number]{-moz-appearance:textfield}.m_8fb7ebe7:disabled,.m_8fb7ebe7[data-disabled]{cursor:not-allowed;opacity:.6;background-color:var(--input-disabled-bg);color:var(--input-disabled-color)}.m_8fb7ebe7:has(input:disabled){cursor:not-allowed;opacity:.6;background-color:var(--input-disabled-bg);color:var(--input-disabled-color)}.m_82577fc2{pointer-events:var(--section-pointer-events);position:absolute;z-index:1;inset-inline-start:var(--section-start);inset-inline-end:var(--section-end);bottom:var(--section-y);top:var(--section-y);display:flex;align-items:center;justify-content:center;width:var(--section-size);border-radius:var(--section-border-radius);color:var(--input-section-color, var(--mantine-color-dimmed))}.m_82577fc2[data-position=right]{--section-pointer-events: var(--input-right-section-pointer-events);--section-end: var(--right-section-end);--section-size: var(--input-right-section-size);--section-border-radius: var(--right-section-border-radius)}.m_82577fc2[data-position=left]{--section-pointer-events: var(--input-left-section-pointer-events);--section-start: var(--left-section-start);--section-size: var(--input-left-section-size);--section-border-radius: var(--left-section-border-radius)}.m_88bacfd0{color:var(--input-placeholder-color, var(--mantine-color-placeholder))}[data-error] .m_88bacfd0{--input-placeholder-color: var(--input-color, var(--mantine-color-placeholder))}.m_46b77525{line-height:var(--mantine-line-height)}.m_8fdc1311{display:inline-block;font-weight:500;word-break:break-word;cursor:default;-webkit-tap-highlight-color:transparent;font-size:var(--input-label-size, var(--mantine-font-size-sm))}.m_78a94662{color:var(--input-asterisk-color, var(--mantine-color-error))}.m_8f816625,.m_fe47ce59{word-wrap:break-word;line-height:1.2;display:block;margin:0;padding:0}.m_8f816625{color:var(--mantine-color-error);font-size:var(--input-error-size, calc(var(--mantine-font-size-sm) - calc(.125rem * var(--mantine-scale))))}.m_fe47ce59{color:var(--mantine-color-dimmed);font-size:var(--input-description-size, calc(var(--mantine-font-size-sm) - calc(.125rem * var(--mantine-scale))))}.m_8bffd616{display:flex}.m_96b553a6{--transition-duration: .15s;top:0;left:0;position:absolute;z-index:0;transition-property:transform,width,height;transition-timing-function:ease;transition-duration:0ms}.m_96b553a6:where([data-initialized]){transition-duration:var(--transition-duration)}.m_96b553a6:where([data-hidden]){background-color:red;display:none}.m_9bdbb667{--accordion-radius: var(--mantine-radius-default)}.m_df78851f{word-break:break-word}.m_4ba554d4{padding:var(--mantine-spacing-md);padding-top:calc(var(--mantine-spacing-xs) / 2)}.m_8fa820a0{margin:0;padding:0}.m_4ba585b8{width:100%;display:flex;align-items:center;flex-direction:row-reverse;padding-inline:var(--mantine-spacing-md);opacity:1;cursor:pointer;background-color:transparent}.m_4ba585b8:where([data-chevron-position=left]){flex-direction:row;padding-inline-start:0}:where([data-mantine-color-scheme=light]) .m_4ba585b8{color:var(--mantine-color-black)}:where([data-mantine-color-scheme=dark]) .m_4ba585b8{color:var(--mantine-color-dark-0)}.m_4ba585b8:where(:disabled,[data-disabled]){opacity:.4;cursor:not-allowed}@media(hover:hover){:where([data-mantine-color-scheme=light]) .m_6939a5e9:where(:not(:disabled,[data-disabled])):hover,:where([data-mantine-color-scheme=light]) .m_4271d21b:where(:not(:disabled,[data-disabled])):hover{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_6939a5e9:where(:not(:disabled,[data-disabled])):hover,:where([data-mantine-color-scheme=dark]) .m_4271d21b:where(:not(:disabled,[data-disabled])):hover{background-color:var(--mantine-color-dark-6)}}@media(hover:none){:where([data-mantine-color-scheme=light]) .m_6939a5e9:where(:not(:disabled,[data-disabled])):active,:where([data-mantine-color-scheme=light]) .m_4271d21b:where(:not(:disabled,[data-disabled])):active{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_6939a5e9:where(:not(:disabled,[data-disabled])):active,:where([data-mantine-color-scheme=dark]) .m_4271d21b:where(:not(:disabled,[data-disabled])):active{background-color:var(--mantine-color-dark-6)}}.m_df3ffa0f{color:inherit;font-weight:400;flex:1;overflow:hidden;text-overflow:ellipsis;padding-top:var(--mantine-spacing-sm);padding-bottom:var(--mantine-spacing-sm)}.m_3f35ae96{display:flex;align-items:center;justify-content:flex-start;transition:transform var(--accordion-transition-duration, .2s) ease;width:var(--accordion-chevron-size, calc(.9375rem * var(--mantine-scale)));min-width:var(--accordion-chevron-size, calc(.9375rem * var(--mantine-scale)));transform:rotate(0)}.m_3f35ae96:where([data-rotate]){transform:rotate(180deg)}.m_3f35ae96:where([data-position=left]){margin-inline-end:var(--mantine-spacing-md);margin-inline-start:var(--mantine-spacing-md)}.m_9bd771fe{display:flex;align-items:center;justify-content:center;margin-inline-end:var(--mantine-spacing-sm)}.m_9bd771fe:where([data-chevron-position=left]){margin-inline-end:0;margin-inline-start:var(--mantine-spacing-lg)}:where([data-mantine-color-scheme=light]) .m_9bd7b098{--item-border-color: var(--mantine-color-gray-3);--item-filled-color: var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_9bd7b098{--item-border-color: var(--mantine-color-dark-4);--item-filled-color: var(--mantine-color-dark-6)}.m_fe19b709{border-bottom:1px solid var(--item-border-color)}.m_1f921b3b{border:1px solid var(--item-border-color);transition:background-color .15s ease}.m_1f921b3b:where([data-active]){background-color:var(--item-filled-color)}.m_1f921b3b:first-of-type{border-start-start-radius:var(--accordion-radius);border-start-end-radius:var(--accordion-radius)}.m_1f921b3b:first-of-type>[data-accordion-control]{border-start-start-radius:var(--accordion-radius);border-start-end-radius:var(--accordion-radius)}.m_1f921b3b:last-of-type{border-end-start-radius:var(--accordion-radius);border-end-end-radius:var(--accordion-radius)}.m_1f921b3b:last-of-type>[data-accordion-control]{border-end-start-radius:var(--accordion-radius);border-end-end-radius:var(--accordion-radius)}.m_1f921b3b+.m_1f921b3b{border-top:0}.m_2cdf939a{border-radius:var(--accordion-radius)}.m_2cdf939a:where([data-active]){background-color:var(--item-filled-color)}.m_9f59b069{background-color:var(--item-filled-color);border-radius:var(--accordion-radius);border:calc(.0625rem * var(--mantine-scale)) solid transparent;transition:background-color .15s ease}.m_9f59b069[data-active]{border-color:var(--item-border-color)}:where([data-mantine-color-scheme=light]) .m_9f59b069[data-active]{background-color:var(--mantine-color-white)}:where([data-mantine-color-scheme=dark]) .m_9f59b069[data-active]{background-color:var(--mantine-color-dark-7)}.m_9f59b069+.m_9f59b069{margin-top:var(--mantine-spacing-md)}.m_7f854edf{position:fixed;z-index:var(--affix-z-index);inset-inline-start:var(--affix-left);inset-inline-end:var(--affix-right);top:var(--affix-top);bottom:var(--affix-bottom)}.m_66836ed3{--alert-radius: var(--mantine-radius-default);--alert-bg: var(--mantine-primary-color-light);--alert-bd: calc(.0625rem * var(--mantine-scale)) solid transparent;--alert-color: var(--mantine-primary-color-light-color);padding:var(--mantine-spacing-md) var(--mantine-spacing-md);border-radius:var(--alert-radius);position:relative;overflow:hidden;background-color:var(--alert-bg);border:var(--alert-bd);color:var(--alert-color)}.m_a5d60502{display:flex}.m_667c2793{flex:1;display:flex;flex-direction:column;gap:var(--mantine-spacing-xs)}.m_6a03f287{display:flex;align-items:center;justify-content:space-between;font-size:var(--mantine-font-size-sm);font-weight:700}.m_6a03f287:where([data-with-close-button]){padding-inline-end:var(--mantine-spacing-md)}.m_698f4f23{display:block;overflow:hidden;text-overflow:ellipsis}.m_667f2a6a{line-height:1;width:calc(1.25rem * var(--mantine-scale));height:calc(1.25rem * var(--mantine-scale));display:flex;align-items:center;justify-content:flex-start;margin-inline-end:var(--mantine-spacing-md);margin-top:calc(.0625rem * var(--mantine-scale))}.m_7fa78076{text-overflow:ellipsis;overflow:hidden;font-size:var(--mantine-font-size-sm)}:where([data-mantine-color-scheme=light]) .m_7fa78076{color:var(--mantine-color-black)}:where([data-mantine-color-scheme=dark]) .m_7fa78076{color:var(--mantine-color-white)}.m_7fa78076:where([data-variant=filled]){color:var(--alert-color)}.m_7fa78076:where([data-variant=white]){color:var(--mantine-color-black)}.m_87f54839{width:calc(1.25rem * var(--mantine-scale));height:calc(1.25rem * var(--mantine-scale));color:var(--alert-color)}.m_b6d8b162{-webkit-tap-highlight-color:transparent;text-decoration:none;font-size:var(--text-fz, var(--mantine-font-size-md));line-height:var(--text-lh, var(--mantine-line-height-md));font-weight:400;margin:0;padding:0;color:var(--text-color)}.m_b6d8b162:where([data-truncate]){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.m_b6d8b162:where([data-truncate=start]){direction:rtl;text-align:right}:where([dir=rtl]) .m_b6d8b162:where([data-truncate=start]){direction:ltr;text-align:left}.m_b6d8b162:where([data-variant=gradient]){background-image:var(--text-gradient);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}.m_b6d8b162:where([data-line-clamp]){overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:var(--text-line-clamp);-webkit-box-orient:vertical}.m_b6d8b162:where([data-inherit]){line-height:inherit;font-weight:inherit;font-size:inherit}.m_b6d8b162:where([data-inline]){line-height:1}.m_849cf0da{color:var(--mantine-color-anchor);text-decoration:none;appearance:none;border:none;display:inline;padding:0;margin:0;background-color:transparent;cursor:pointer}@media(hover:hover){.m_849cf0da:where([data-underline=hover]):hover{text-decoration:underline}}@media(hover:none){.m_849cf0da:where([data-underline=hover]):active{text-decoration:underline}}.m_849cf0da:where([data-underline=not-hover]){text-decoration:underline}@media(hover:hover){.m_849cf0da:where([data-underline=not-hover]):hover{text-decoration:none}}@media(hover:none){.m_849cf0da:where([data-underline=not-hover]):active{text-decoration:none}}.m_849cf0da:where([data-underline=always]){text-decoration:underline}.m_849cf0da:where([data-variant=gradient]),.m_849cf0da:where([data-variant=gradient]):hover{text-decoration:none}.m_849cf0da:where([data-line-clamp]){display:-webkit-box}.m_48204f9b{width:var(--slider-size);height:var(--slider-size);position:relative;border-radius:100%;display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none}.m_48204f9b:focus-within{outline:2px solid var(--mantine-primary-color-filled);outline-offset:calc(.125rem * var(--mantine-scale))}.m_48204f9b{--slider-size: calc(3.75rem * var(--mantine-scale));--thumb-size: calc(var(--slider-size) / 5)}:where([data-mantine-color-scheme=light]) .m_48204f9b{background-color:var(--mantine-color-gray-1)}:where([data-mantine-color-scheme=dark]) .m_48204f9b{background-color:var(--mantine-color-dark-5)}.m_bb9cdbad{position:absolute;inset:calc(.0625rem * var(--mantine-scale));border-radius:var(--slider-size);pointer-events:none}.m_481dd586{width:calc(.125rem * var(--mantine-scale));position:absolute;top:0;bottom:0;left:calc(50% - 1px);transform:rotate(var(--angle))}.m_481dd586:before{content:"";position:absolute;top:calc(var(--thumb-size) / 3);left:calc(.03125rem * var(--mantine-scale));width:calc(.0625rem * var(--mantine-scale));height:calc(var(--thumb-size) / 1.5);transform:translate(-50%,-50%)}:where([data-mantine-color-scheme=light]) .m_481dd586:before{background-color:var(--mantine-color-gray-4)}:where([data-mantine-color-scheme=dark]) .m_481dd586:before{background-color:var(--mantine-color-dark-3)}.m_481dd586[data-label]:after{min-width:calc(1.125rem * var(--mantine-scale));text-align:center;content:attr(data-label);position:absolute;top:calc(-1.5rem * var(--mantine-scale));left:calc(-.4375rem * var(--mantine-scale));transform:rotate(calc(360deg - var(--angle)));font-size:var(--mantine-font-size-xs)}.m_bc02ba3d{position:absolute;inset-block:0;inset-inline-start:calc(50% - 1.5px);inset-inline-end:0;height:100%;width:calc(.1875rem * var(--mantine-scale));outline:none;pointer-events:none}.m_bc02ba3d:before{content:"";position:absolute;right:0;top:0;height:min(var(--thumb-size),calc(var(--slider-size) / 2));width:calc(.1875rem * var(--mantine-scale))}:where([data-mantine-color-scheme=light]) .m_bc02ba3d:before{background-color:var(--mantine-color-gray-7)}:where([data-mantine-color-scheme=dark]) .m_bc02ba3d:before{background-color:var(--mantine-color-dark-1)}.m_bb8e875b{font-size:var(--mantine-font-size-xs)}.m_89ab340[data-resizing]{--app-shell-transition-duration: 0ms !important}.m_89ab340[data-disabled]{--app-shell-header-offset: 0rem !important;--app-shell-navbar-offset: 0rem !important;--app-shell-aside-offset: 0rem !important;--app-shell-footer-offset: 0rem !important}[data-mantine-color-scheme=light] .m_89ab340{--app-shell-border-color: var(--mantine-color-gray-3)}[data-mantine-color-scheme=dark] .m_89ab340{--app-shell-border-color: var(--mantine-color-dark-4)}.m_45252eee,.m_9cdde9a,.m_3b16f56b,.m_8983817,.m_3840c879{transition-duration:var(--app-shell-transition-duration);transition-timing-function:var(--app-shell-transition-timing-function)}.m_45252eee,.m_9cdde9a{position:fixed;display:flex;flex-direction:column;top:var(--app-shell-header-offset, 0rem);height:calc(100dvh - var(--app-shell-header-offset, 0rem) - var(--app-shell-footer-offset, 0rem));background-color:var(--mantine-color-body);transition-property:transform,top,height}:where([data-layout=alt]) .m_45252eee,:where([data-layout=alt]) .m_9cdde9a{top:0rem;height:100dvh}.m_45252eee{inset-inline-start:0;width:var(--app-shell-navbar-width);transition-property:transform,top,height;transform:var(--app-shell-navbar-transform);z-index:var(--app-shell-navbar-z-index)}:where([dir=rtl]) .m_45252eee{transform:var(--app-shell-navbar-transform-rtl)}.m_45252eee:where([data-with-border]){border-inline-end:1px solid var(--app-shell-border-color)}.m_9cdde9a{inset-inline-end:0;width:var(--app-shell-aside-width);transform:var(--app-shell-aside-transform);z-index:var(--app-shell-aside-z-index)}:where([dir=rtl]) .m_9cdde9a{transform:var(--app-shell-aside-transform-rtl)}.m_9cdde9a:where([data-with-border]){border-inline-start:1px solid var(--app-shell-border-color)}.m_8983817{padding-inline-start:calc(var(--app-shell-navbar-offset, 0rem) + var(--app-shell-padding));padding-inline-end:calc(var(--app-shell-aside-offset, 0rem) + var(--app-shell-padding));padding-top:calc(var(--app-shell-header-offset, 0rem) + var(--app-shell-padding));padding-bottom:calc(var(--app-shell-footer-offset, 0rem) + var(--app-shell-padding));min-height:100dvh;transition-property:padding}.m_3b16f56b,.m_3840c879{position:fixed;inset-inline:0;transition-property:transform,left,right;background-color:var(--mantine-color-body)}:where([data-layout=alt]) .m_3b16f56b,:where([data-layout=alt]) .m_3840c879{inset-inline-start:var(--app-shell-navbar-offset, 0rem);inset-inline-end:var(--app-shell-aside-offset, 0rem)}.m_3b16f56b{top:0;height:var(--app-shell-header-height);background-color:var(--mantine-color-body);transform:var(--app-shell-header-transform);z-index:var(--app-shell-header-z-index)}.m_3b16f56b:where([data-with-border]){border-bottom:1px solid var(--app-shell-border-color)}.m_3840c879{bottom:0;height:calc(var(--app-shell-footer-height) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);transform:var(--app-shell-footer-transform);z-index:var(--app-shell-footer-z-index)}.m_3840c879:where([data-with-border]){border-top:1px solid var(--app-shell-border-color)}.m_6dcfc7c7{flex-grow:0}.m_6dcfc7c7:where([data-grow]){flex-grow:1}.m_71ac47fc{--ar-ratio: 1;max-width:100%}.m_71ac47fc>:where(*:not(style)){aspect-ratio:var(--ar-ratio);width:100%}.m_71ac47fc>:where(img,video){object-fit:cover}.m_88b62a41{--combobox-padding: calc(.25rem * var(--mantine-scale));padding:var(--combobox-padding)}.m_88b62a41:has([data-mantine-scrollbar]) .m_985517d8{max-width:calc(100% + var(--combobox-padding))}.m_88b62a41[data-composed]{padding-inline-end:0}.m_88b62a41[data-hidden]{display:none}.m_88b62a41,.m_b2821a6e{--combobox-option-padding-xs: calc(.25rem * var(--mantine-scale)) calc(.5rem * var(--mantine-scale));--combobox-option-padding-sm: calc(.375rem * var(--mantine-scale)) calc(.625rem * var(--mantine-scale));--combobox-option-padding-md: calc(.5rem * var(--mantine-scale)) calc(.75rem * var(--mantine-scale));--combobox-option-padding-lg: calc(.625rem * var(--mantine-scale)) calc(1rem * var(--mantine-scale));--combobox-option-padding-xl: calc(.875rem * var(--mantine-scale)) calc(1.25rem * var(--mantine-scale));--combobox-option-padding: var(--combobox-option-padding-sm)}.m_92253aa5{padding:var(--combobox-option-padding);font-size:var(--combobox-option-fz, var(--mantine-font-size-sm));border-radius:var(--mantine-radius-default);background-color:transparent;color:inherit;cursor:pointer;word-break:break-word}.m_92253aa5:where([data-combobox-selected]){background-color:var(--mantine-primary-color-filled);color:var(--mantine-color-white)}.m_92253aa5:where([data-combobox-disabled]){cursor:not-allowed;opacity:.35}@media(hover:hover){:where([data-mantine-color-scheme=light]) .m_92253aa5:hover:where(:not([data-combobox-selected],[data-combobox-disabled])){background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_92253aa5:hover:where(:not([data-combobox-selected],[data-combobox-disabled])){background-color:var(--mantine-color-dark-7)}}@media(hover:none){:where([data-mantine-color-scheme=light]) .m_92253aa5:active:where(:not([data-combobox-selected],[data-combobox-disabled])){background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_92253aa5:active:where(:not([data-combobox-selected],[data-combobox-disabled])){background-color:var(--mantine-color-dark-7)}}.m_985517d8{margin-inline:calc(var(--combobox-padding) * -1);margin-top:calc(var(--combobox-padding) * -1);width:calc(100% + var(--combobox-padding) * 2);border-top-width:0;border-inline-width:0;border-end-start-radius:0;border-end-end-radius:0;margin-bottom:var(--combobox-padding);position:relative}:where([data-mantine-color-scheme=light]) .m_985517d8,:where([data-mantine-color-scheme=light]) .m_985517d8:focus{border-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_985517d8,:where([data-mantine-color-scheme=dark]) .m_985517d8:focus{border-color:var(--mantine-color-dark-4)}:where([data-mantine-color-scheme=light]) .m_985517d8{background-color:var(--mantine-color-white)}:where([data-mantine-color-scheme=dark]) .m_985517d8{background-color:var(--mantine-color-dark-7)}.m_2530cd1d{font-size:var(--combobox-option-fz, var(--mantine-font-size-sm));text-align:center;padding:var(--combobox-option-padding);color:var(--mantine-color-dimmed)}.m_858f94bd,.m_82b967cb{font-size:var(--combobox-option-fz, var(--mantine-font-size-sm));border:0 solid transparent;margin-inline:calc(var(--combobox-padding) * -1);padding:var(--combobox-option-padding)}:where([data-mantine-color-scheme=light]) .m_858f94bd,:where([data-mantine-color-scheme=light]) .m_82b967cb{border-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_858f94bd,:where([data-mantine-color-scheme=dark]) .m_82b967cb{border-color:var(--mantine-color-dark-4)}.m_82b967cb{border-top-width:calc(.0625rem * var(--mantine-scale));margin-top:var(--combobox-padding);margin-bottom:calc(var(--combobox-padding) * -1)}.m_858f94bd{border-bottom-width:calc(.0625rem * var(--mantine-scale));margin-bottom:var(--combobox-padding);margin-top:calc(var(--combobox-padding) * -1)}.m_254f3e4f:has(.m_2bb2e9e5:only-child){display:none}.m_2bb2e9e5{color:var(--mantine-color-dimmed);font-size:calc(var(--combobox-option-fz, var(--mantine-font-size-sm)) * .85);padding:var(--combobox-option-padding);font-weight:500;position:relative;display:flex;align-items:center}.m_2bb2e9e5:after{content:"";flex:1;inset-inline:0;height:calc(.0625rem * var(--mantine-scale));margin-inline-start:var(--mantine-spacing-xs)}:where([data-mantine-color-scheme=light]) .m_2bb2e9e5:after{background-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_2bb2e9e5:after{background-color:var(--mantine-color-dark-4)}.m_2bb2e9e5:only-child{display:none}.m_2943220b{--combobox-chevron-size-xs: calc(.875rem * var(--mantine-scale));--combobox-chevron-size-sm: calc(1.125rem * var(--mantine-scale));--combobox-chevron-size-md: calc(1.25rem * var(--mantine-scale));--combobox-chevron-size-lg: calc(1.5rem * var(--mantine-scale));--combobox-chevron-size-xl: calc(1.75rem * var(--mantine-scale));--combobox-chevron-size: var(--combobox-chevron-size-sm)}:where([data-mantine-color-scheme=light]) .m_2943220b{--_combobox-chevron-color: var(--combobox-chevron-color, var(--mantine-color-gray-6))}:where([data-mantine-color-scheme=dark]) .m_2943220b{--_combobox-chevron-color: var(--combobox-chevron-color, var(--mantine-color-dark-3))}.m_2943220b{width:var(--combobox-chevron-size);height:var(--combobox-chevron-size);color:var(--_combobox-chevron-color)}.m_2943220b:where([data-error]){color:var(--combobox-chevron-color, var(--mantine-color-error))}.m_390b5f4{display:flex;align-items:center;gap:calc(.5rem * var(--mantine-scale))}.m_390b5f4:where([data-reverse]){justify-content:space-between}.m_8ee53fc2{opacity:.4;width:.8em;min-width:.8em;height:.8em}:where([data-combobox-selected]) .m_8ee53fc2{opacity:1}.m_5f75b09e{--label-lh-xs: calc(1rem * var(--mantine-scale));--label-lh-sm: calc(1.25rem * var(--mantine-scale));--label-lh-md: calc(1.5rem * var(--mantine-scale));--label-lh-lg: calc(1.875rem * var(--mantine-scale));--label-lh-xl: calc(2.25rem * var(--mantine-scale));--label-lh: var(--label-lh-sm)}.m_5f75b09e[data-label-position=left]{--label-order: 1;--label-offset-end: var(--mantine-spacing-sm);--label-offset-start: 0}.m_5f75b09e[data-label-position=right]{--label-order: 2;--label-offset-end: 0;--label-offset-start: var(--mantine-spacing-sm)}.m_5f6e695e{display:flex}.m_d3ea56bb{--label-cursor: var(--mantine-cursor-type);-webkit-tap-highlight-color:transparent;display:inline-flex;flex-direction:column;font-size:var(--label-fz, var(--mantine-font-size-sm));line-height:var(--label-lh);cursor:var(--label-cursor);order:var(--label-order)}fieldset:disabled .m_d3ea56bb,.m_d3ea56bb[data-disabled]{--label-cursor: not-allowed}.m_8ee546b8{cursor:var(--label-cursor);color:inherit;padding-inline-start:var(--label-offset-start);padding-inline-end:var(--label-offset-end)}fieldset:disabled .m_8ee546b8,.m_8ee546b8:where([data-disabled]){color:var(--mantine-color-disabled-color)}.m_328f68c0,.m_8e8a99cc{margin-top:calc(var(--mantine-spacing-xs) / 2);padding-inline-start:var(--label-offset-start);padding-inline-end:var(--label-offset-end)}.m_26775b0a{--card-radius: var(--mantine-radius-default);display:block;width:100%;border-radius:var(--card-radius);cursor:pointer}.m_26775b0a :where(*){cursor:inherit}.m_26775b0a:where([data-with-border]){border:calc(.0625rem * var(--mantine-scale)) solid transparent}:where([data-mantine-color-scheme=light]) .m_26775b0a:where([data-with-border]){border-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_26775b0a:where([data-with-border]){border-color:var(--mantine-color-dark-4)}.m_5e5256ee{--checkbox-size-xs: calc(1rem * var(--mantine-scale));--checkbox-size-sm: calc(1.25rem * var(--mantine-scale));--checkbox-size-md: calc(1.5rem * var(--mantine-scale));--checkbox-size-lg: calc(1.875rem * var(--mantine-scale));--checkbox-size-xl: calc(2.25rem * var(--mantine-scale));--checkbox-size: var(--checkbox-size-sm);--checkbox-color: var(--mantine-primary-color-filled);--checkbox-icon-color: var(--mantine-color-white);position:relative;border:calc(.0625rem * var(--mantine-scale)) solid transparent;width:var(--checkbox-size);min-width:var(--checkbox-size);height:var(--checkbox-size);min-height:var(--checkbox-size);border-radius:var(--checkbox-radius, var(--mantine-radius-default));transition:border-color .1s ease,background-color .1s ease;cursor:var(--mantine-cursor-type);-webkit-tap-highlight-color:transparent;display:flex;align-items:center;justify-content:center}:where([data-mantine-color-scheme=light]) .m_5e5256ee{background-color:var(--mantine-color-white);border-color:var(--mantine-color-gray-4)}:where([data-mantine-color-scheme=dark]) .m_5e5256ee{background-color:var(--mantine-color-dark-6);border-color:var(--mantine-color-dark-4)}.m_5e5256ee[data-indeterminate],.m_5e5256ee[data-checked]{background-color:var(--checkbox-color);border-color:var(--checkbox-color)}.m_5e5256ee[data-indeterminate]>.m_1b1c543a,.m_5e5256ee[data-checked]>.m_1b1c543a{opacity:1;transform:none;color:var(--checkbox-icon-color)}.m_5e5256ee[data-disabled]{cursor:not-allowed;border-color:var(--mantine-color-disabled-border);background-color:var(--mantine-color-disabled)}[data-mantine-color-scheme=light] .m_5e5256ee[data-disabled][data-checked]>.m_1b1c543a{color:var(--mantine-color-gray-5)}[data-mantine-color-scheme=dark] .m_5e5256ee[data-disabled][data-checked]>.m_1b1c543a{color:var(--mantine-color-dark-3)}.m_76e20374[data-indeterminate]:not([data-disabled]),.m_76e20374[data-checked]:not([data-disabled]){background-color:transparent;border-color:var(--checkbox-color)}.m_76e20374[data-indeterminate]:not([data-disabled])>.m_1b1c543a,.m_76e20374[data-checked]:not([data-disabled])>.m_1b1c543a{color:var(--checkbox-color);opacity:1;transform:none}.m_1b1c543a{display:block;width:60%;color:transparent;pointer-events:none;transform:translateY(calc(.3125rem * var(--mantine-scale))) scale(.5);opacity:1;transition:transform .1s ease,opacity .1s ease}.m_bf2d988c{--checkbox-size-xs: calc(1rem * var(--mantine-scale));--checkbox-size-sm: calc(1.25rem * var(--mantine-scale));--checkbox-size-md: calc(1.5rem * var(--mantine-scale));--checkbox-size-lg: calc(1.875rem * var(--mantine-scale));--checkbox-size-xl: calc(2.25rem * var(--mantine-scale));--checkbox-size: var(--checkbox-size-sm);--checkbox-color: var(--mantine-primary-color-filled);--checkbox-icon-color: var(--mantine-color-white)}.m_26062bec{position:relative;width:var(--checkbox-size);height:var(--checkbox-size);order:1}.m_26062bec:where([data-label-position=left]){order:2}.m_26063560{appearance:none;border:calc(.0625rem * var(--mantine-scale)) solid transparent;width:var(--checkbox-size);height:var(--checkbox-size);border-radius:var(--checkbox-radius, var(--mantine-radius-default));padding:0;display:block;margin:0;transition:border-color .1s ease,background-color .1s ease;cursor:var(--mantine-cursor-type);-webkit-tap-highlight-color:transparent}:where([data-mantine-color-scheme=light]) .m_26063560{background-color:var(--mantine-color-white);border-color:var(--mantine-color-gray-4)}:where([data-mantine-color-scheme=dark]) .m_26063560{background-color:var(--mantine-color-dark-6);border-color:var(--mantine-color-dark-4)}.m_26063560:where([data-error]){border-color:var(--mantine-color-error)}.m_26063560[data-indeterminate],.m_26063560:checked{background-color:var(--checkbox-color);border-color:var(--checkbox-color)}.m_26063560[data-indeterminate]+.m_bf295423,.m_26063560:checked+.m_bf295423{opacity:1;transform:none}.m_26063560:disabled{cursor:not-allowed;border-color:var(--mantine-color-disabled-border);background-color:var(--mantine-color-disabled)}.m_26063560:disabled+.m_bf295423{color:var(--mantine-color-disabled-color)}.m_215c4542+.m_bf295423{color:var(--checkbox-color)}.m_215c4542[data-indeterminate]:not(:disabled),.m_215c4542:checked:not(:disabled){background-color:transparent;border-color:var(--checkbox-color)}.m_215c4542[data-indeterminate]:not(:disabled)+.m_bf295423,.m_215c4542:checked:not(:disabled)+.m_bf295423{color:var(--checkbox-color);opacity:1;transform:none}.m_bf295423{position:absolute;inset:0;width:60%;margin:auto;color:var(--checkbox-icon-color);pointer-events:none;transform:translateY(calc(.3125rem * var(--mantine-scale))) scale(.5);opacity:0;transition:transform .1s ease,opacity .1s ease}.m_11def92b{--ag-spacing: var(--mantine-spacing-sm);--ag-offset: calc(var(--ag-spacing) * -1);display:flex;padding-inline-start:var(--ag-spacing)}.m_f85678b6{--avatar-size-xs: calc(1rem * var(--mantine-scale));--avatar-size-sm: calc(1.625rem * var(--mantine-scale));--avatar-size-md: calc(2.375rem * var(--mantine-scale));--avatar-size-lg: calc(3.5rem * var(--mantine-scale));--avatar-size-xl: calc(5.25rem * var(--mantine-scale));--avatar-size: var(--avatar-size-md);--avatar-radius: calc(62.5rem * var(--mantine-scale));--avatar-bg: var(--mantine-color-gray-light);--avatar-bd: calc(.0625rem * var(--mantine-scale)) solid transparent;--avatar-color: var(--mantine-color-gray-light-color);--avatar-placeholder-fz: calc(var(--avatar-size) / 2.5);-webkit-tap-highlight-color:transparent;position:relative;display:block;-webkit-user-select:none;user-select:none;overflow:hidden;border-radius:var(--avatar-radius);text-decoration:none;padding:0;width:var(--avatar-size);height:var(--avatar-size);min-width:var(--avatar-size)}.m_f85678b6:where([data-within-group]){margin-inline-start:var(--ag-offset);border:2px solid var(--mantine-color-body);background:var(--mantine-color-body)}.m_11f8ac07{object-fit:cover;width:100%;height:100%;display:block}.m_104cd71f{font-weight:700;display:flex;align-items:center;justify-content:center;width:100%;height:100%;-webkit-user-select:none;user-select:none;border-radius:var(--avatar-radius);font-size:var(--avatar-placeholder-fz);background:var(--avatar-bg);border:var(--avatar-bd);color:var(--avatar-color)}.m_104cd71f>[data-avatar-placeholder-icon]{width:70%;height:70%}.m_2ce0de02{background-size:cover;background-position:center;display:block;width:100%;border:0;text-decoration:none;border-radius:var(--bi-radius, 0)}.m_347db0ec{--badge-height-xs: calc(1rem * var(--mantine-scale));--badge-height-sm: calc(1.125rem * var(--mantine-scale));--badge-height-md: calc(1.25rem * var(--mantine-scale));--badge-height-lg: calc(1.625rem * var(--mantine-scale));--badge-height-xl: calc(2rem * var(--mantine-scale));--badge-fz-xs: calc(.5625rem * var(--mantine-scale));--badge-fz-sm: calc(.625rem * var(--mantine-scale));--badge-fz-md: calc(.6875rem * var(--mantine-scale));--badge-fz-lg: calc(.8125rem * var(--mantine-scale));--badge-fz-xl: calc(1rem * var(--mantine-scale));--badge-padding-x-xs: calc(.375rem * var(--mantine-scale));--badge-padding-x-sm: calc(.5rem * var(--mantine-scale));--badge-padding-x-md: calc(.625rem * var(--mantine-scale));--badge-padding-x-lg: calc(.75rem * var(--mantine-scale));--badge-padding-x-xl: calc(1rem * var(--mantine-scale));--badge-height: var(--badge-height-md);--badge-fz: var(--badge-fz-md);--badge-padding-x: var(--badge-padding-x-md);--badge-radius: calc(62.5rem * var(--mantine-scale));--badge-lh: calc(var(--badge-height) - calc(.125rem * var(--mantine-scale)));--badge-color: var(--mantine-color-white);--badge-bg: var(--mantine-primary-color-filled);--badge-border-width: calc(.0625rem * var(--mantine-scale));--badge-bd: var(--badge-border-width) solid transparent;-webkit-tap-highlight-color:transparent;font-size:var(--badge-fz);border-radius:var(--badge-radius);height:var(--badge-height);line-height:var(--badge-lh);text-decoration:none;padding:0 var(--badge-padding-x);display:inline-grid;align-items:center;justify-content:center;width:fit-content;text-transform:uppercase;font-weight:700;letter-spacing:calc(.015625rem * var(--mantine-scale));cursor:default;text-overflow:ellipsis;overflow:hidden;color:var(--badge-color);background:var(--badge-bg);border:var(--badge-bd)}.m_347db0ec:where([data-with-left-section],[data-variant=dot]){grid-template-columns:auto 1fr}.m_347db0ec:where([data-with-right-section]){grid-template-columns:1fr auto}.m_347db0ec:where([data-with-left-section][data-with-right-section],[data-variant=dot][data-with-right-section]){grid-template-columns:auto 1fr auto}.m_347db0ec:where([data-block]){display:flex;width:100%}.m_347db0ec:where([data-circle]){padding-inline:calc(.125rem * var(--mantine-scale));display:flex;width:var(--badge-height)}.m_fbd81e3d{--badge-dot-size: calc(var(--badge-height) / 3.4)}:where([data-mantine-color-scheme=light]) .m_fbd81e3d{background-color:var(--mantine-color-white);border-color:var(--mantine-color-gray-4);color:var(--mantine-color-black)}:where([data-mantine-color-scheme=dark]) .m_fbd81e3d{background-color:var(--mantine-color-dark-5);border-color:var(--mantine-color-dark-5);color:var(--mantine-color-white)}.m_fbd81e3d:before{content:"";display:block;width:var(--badge-dot-size);height:var(--badge-dot-size);border-radius:var(--badge-dot-size);background-color:var(--badge-dot-color);margin-inline-end:var(--badge-dot-size)}.m_5add502a{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:center;cursor:inherit}.m_91fdda9b{--badge-section-margin: calc(var(--mantine-spacing-xs) / 2);display:inline-flex;justify-content:center;align-items:center;max-height:calc(var(--badge-height) - var(--badge-border-width) * 2)}.m_91fdda9b:where([data-position=left]){margin-inline-end:var(--badge-section-margin)}.m_91fdda9b:where([data-position=right]){margin-inline-start:var(--badge-section-margin)}.m_ddec01c0{--blockquote-border: 3px solid var(--bq-bd);position:relative;margin:0;border-inline-start:var(--blockquote-border);border-start-end-radius:var(--bq-radius);border-end-end-radius:var(--bq-radius);padding:var(--mantine-spacing-xl) calc(2.375rem * var(--mantine-scale))}:where([data-mantine-color-scheme=light]) .m_ddec01c0{background-color:var(--bq-bg-light)}:where([data-mantine-color-scheme=dark]) .m_ddec01c0{background-color:var(--bq-bg-dark)}.m_dde7bd57{--blockquote-icon-offset: calc(var(--bq-icon-size) / -2);position:absolute;color:var(--bq-bd);background-color:var(--mantine-color-body);display:flex;align-items:center;justify-content:center;top:var(--blockquote-icon-offset);inset-inline-start:var(--blockquote-icon-offset);width:var(--bq-icon-size);height:var(--bq-icon-size);border-radius:var(--bq-icon-size)}.m_dde51a35{display:block;margin-top:var(--mantine-spacing-md);opacity:.6;font-size:85%}.m_8b3717df{display:flex;align-items:center;flex-wrap:wrap}.m_f678d540{line-height:1;white-space:nowrap;-webkit-tap-highlight-color:transparent}.m_3b8f2208{margin-inline:var(--bc-separator-margin, var(--mantine-spacing-xs));line-height:1;display:flex;align-items:center;justify-content:center}:where([data-mantine-color-scheme=light]) .m_3b8f2208{color:var(--mantine-color-gray-7)}:where([data-mantine-color-scheme=dark]) .m_3b8f2208{color:var(--mantine-color-dark-2)}.m_fea6bf1a{--burger-size-xs: calc(.75rem * var(--mantine-scale));--burger-size-sm: calc(1.125rem * var(--mantine-scale));--burger-size-md: calc(1.5rem * var(--mantine-scale));--burger-size-lg: calc(2.125rem * var(--mantine-scale));--burger-size-xl: calc(2.625rem * var(--mantine-scale));--burger-size: var(--burger-size-md);--burger-line-size: calc(var(--burger-size) / 12);width:calc(var(--burger-size) + var(--mantine-spacing-xs));height:calc(var(--burger-size) + var(--mantine-spacing-xs));padding:calc(var(--mantine-spacing-xs) / 2);cursor:pointer}:where([data-mantine-color-scheme=light]) .m_fea6bf1a{--burger-color: var(--mantine-color-black)}:where([data-mantine-color-scheme=dark]) .m_fea6bf1a{--burger-color: var(--mantine-color-white)}.m_d4fb9cad{position:relative;-webkit-user-select:none;user-select:none}.m_d4fb9cad,.m_d4fb9cad:before,.m_d4fb9cad:after{display:block;width:var(--burger-size);height:var(--burger-line-size);background-color:var(--burger-color);outline:calc(.0625rem * var(--mantine-scale)) solid transparent;transition-property:background-color,transform;transition-duration:var(--burger-transition-duration, .3s);transition-timing-function:var(--burger-transition-timing-function, ease)}.m_d4fb9cad:before,.m_d4fb9cad:after{position:absolute;content:"";inset-inline-start:0}.m_d4fb9cad:before{top:calc(var(--burger-size) / -3)}.m_d4fb9cad:after{top:calc(var(--burger-size) / 3)}.m_d4fb9cad[data-opened]{background-color:transparent}.m_d4fb9cad[data-opened]:before{transform:translateY(calc(var(--burger-size) / 3)) rotate(45deg)}.m_d4fb9cad[data-opened]:after{transform:translateY(calc(var(--burger-size) / -3)) rotate(-45deg)}.m_77c9d27d{--button-height-xs: calc(1.875rem * var(--mantine-scale));--button-height-sm: calc(2.25rem * var(--mantine-scale));--button-height-md: calc(2.625rem * var(--mantine-scale));--button-height-lg: calc(3.125rem * var(--mantine-scale));--button-height-xl: calc(3.75rem * var(--mantine-scale));--button-height-compact-xs: calc(1.375rem * var(--mantine-scale));--button-height-compact-sm: calc(1.625rem * var(--mantine-scale));--button-height-compact-md: calc(1.875rem * var(--mantine-scale));--button-height-compact-lg: calc(2.125rem * var(--mantine-scale));--button-height-compact-xl: calc(2.5rem * var(--mantine-scale));--button-padding-x-xs: calc(.875rem * var(--mantine-scale));--button-padding-x-sm: calc(1.125rem * var(--mantine-scale));--button-padding-x-md: calc(1.375rem * var(--mantine-scale));--button-padding-x-lg: calc(1.625rem * var(--mantine-scale));--button-padding-x-xl: calc(2rem * var(--mantine-scale));--button-padding-x-compact-xs: calc(.4375rem * var(--mantine-scale));--button-padding-x-compact-sm: calc(.5rem * var(--mantine-scale));--button-padding-x-compact-md: calc(.625rem * var(--mantine-scale));--button-padding-x-compact-lg: calc(.75rem * var(--mantine-scale));--button-padding-x-compact-xl: calc(.875rem * var(--mantine-scale));--button-height: var(--button-height-sm);--button-padding-x: var(--button-padding-x-sm);--button-color: var(--mantine-color-white);-webkit-user-select:none;user-select:none;font-weight:600;position:relative;line-height:1;text-align:center;overflow:hidden;width:auto;cursor:pointer;display:inline-block;border-radius:var(--button-radius, var(--mantine-radius-default));font-size:var(--button-fz, var(--mantine-font-size-sm));background:var(--button-bg, var(--mantine-primary-color-filled));border:var(--button-bd, calc(.0625rem * var(--mantine-scale)) solid transparent);color:var(--button-color, var(--mantine-color-white));height:var(--button-height, var(--button-height-sm));padding-inline:var(--button-padding-x, var(--button-padding-x-sm));vertical-align:middle}.m_77c9d27d:where([data-block]){display:block;width:100%}.m_77c9d27d:where([data-with-left-section]){padding-inline-start:calc(var(--button-padding-x) / 1.5)}.m_77c9d27d:where([data-with-right-section]){padding-inline-end:calc(var(--button-padding-x) / 1.5)}.m_77c9d27d:where(:disabled:not([data-loading]),[data-disabled]:not([data-loading])){cursor:not-allowed;border:calc(.0625rem * var(--mantine-scale)) solid transparent;transform:none;color:var(--mantine-color-disabled-color);background:var(--mantine-color-disabled)}.m_77c9d27d:before{content:"";pointer-events:none;position:absolute;inset:calc(-.0625rem * var(--mantine-scale));border-radius:var(--button-radius, var(--mantine-radius-default));transform:translateY(-100%);opacity:0;filter:blur(12px);transition:transform .15s ease,opacity .1s ease}:where([data-mantine-color-scheme=light]) .m_77c9d27d:before{background-color:#ffffff26}:where([data-mantine-color-scheme=dark]) .m_77c9d27d:before{background-color:#00000026}.m_77c9d27d:where([data-loading]){cursor:not-allowed;transform:none}.m_77c9d27d:where([data-loading]):before{transform:translateY(0);opacity:1}.m_77c9d27d:where([data-loading]) .m_80f1301b{opacity:0;transform:translateY(100%)}@media(hover:hover){.m_77c9d27d:hover:where(:not([data-loading],:disabled,[data-disabled])){background-color:var(--button-hover, var(--mantine-primary-color-filled-hover));color:var(--button-hover-color, var(--button-color))}}@media(hover:none){.m_77c9d27d:active:where(:not([data-loading],:disabled,[data-disabled])){background-color:var(--button-hover, var(--mantine-primary-color-filled-hover));color:var(--button-hover-color, var(--button-color))}}.m_80f1301b{display:flex;align-items:center;justify-content:var(--button-justify, center);height:100%;overflow:visible;transition:transform .15s ease,opacity .1s ease}.m_811560b9{white-space:nowrap;height:100%;overflow:hidden;display:flex;align-items:center;opacity:1}.m_811560b9:where([data-loading]){opacity:.2}.m_a74036a{display:flex;align-items:center}.m_a74036a:where([data-position=left]){margin-inline-end:var(--mantine-spacing-xs)}.m_a74036a:where([data-position=right]){margin-inline-start:var(--mantine-spacing-xs)}.m_a25b86ee{position:absolute;left:50%;top:50%}.m_80d6d844{--button-border-width: calc(.0625rem * var(--mantine-scale));display:flex}.m_80d6d844 :where(.m_77c9d27d):focus{position:relative;z-index:1}.m_80d6d844[data-orientation=horizontal]{flex-direction:row}.m_80d6d844[data-orientation=horizontal] .m_77c9d27d:not(:only-child):first-child,.m_80d6d844[data-orientation=horizontal] .m_70be2a01:not(:only-child):first-child{border-end-end-radius:0;border-start-end-radius:0;border-inline-end-width:calc(var(--button-border-width) / 2)}.m_80d6d844[data-orientation=horizontal] .m_77c9d27d:not(:only-child):last-child,.m_80d6d844[data-orientation=horizontal] .m_70be2a01:not(:only-child):last-child{border-end-start-radius:0;border-start-start-radius:0;border-inline-start-width:calc(var(--button-border-width) / 2)}.m_80d6d844[data-orientation=horizontal] .m_77c9d27d:not(:only-child):not(:first-child):not(:last-child),.m_80d6d844[data-orientation=horizontal] .m_70be2a01:not(:only-child):not(:first-child):not(:last-child){border-radius:0;border-inline-width:calc(var(--button-border-width) / 2)}.m_80d6d844[data-orientation=vertical]{flex-direction:column}.m_80d6d844[data-orientation=vertical] .m_77c9d27d:not(:only-child):first-child,.m_80d6d844[data-orientation=vertical] .m_70be2a01:not(:only-child):first-child{border-end-start-radius:0;border-end-end-radius:0;border-bottom-width:calc(var(--button-border-width) / 2)}.m_80d6d844[data-orientation=vertical] .m_77c9d27d:not(:only-child):last-child,.m_80d6d844[data-orientation=vertical] .m_70be2a01:not(:only-child):last-child{border-start-start-radius:0;border-start-end-radius:0;border-top-width:calc(var(--button-border-width) / 2)}.m_80d6d844[data-orientation=vertical] .m_77c9d27d:not(:only-child):not(:first-child):not(:last-child),.m_80d6d844[data-orientation=vertical] .m_70be2a01:not(:only-child):not(:first-child):not(:last-child){border-radius:0;border-bottom-width:calc(var(--button-border-width) / 2);border-top-width:calc(var(--button-border-width) / 2)}.m_70be2a01{--section-height-xs: calc(1.875rem * var(--mantine-scale));--section-height-sm: calc(2.25rem * var(--mantine-scale));--section-height-md: calc(2.625rem * var(--mantine-scale));--section-height-lg: calc(3.125rem * var(--mantine-scale));--section-height-xl: calc(3.75rem * var(--mantine-scale));--section-height-compact-xs: calc(1.375rem * var(--mantine-scale));--section-height-compact-sm: calc(1.625rem * var(--mantine-scale));--section-height-compact-md: calc(1.875rem * var(--mantine-scale));--section-height-compact-lg: calc(2.125rem * var(--mantine-scale));--section-height-compact-xl: calc(2.5rem * var(--mantine-scale));--section-padding-x-xs: calc(.875rem * var(--mantine-scale));--section-padding-x-sm: calc(1.125rem * var(--mantine-scale));--section-padding-x-md: calc(1.375rem * var(--mantine-scale));--section-padding-x-lg: calc(1.625rem * var(--mantine-scale));--section-padding-x-xl: calc(2rem * var(--mantine-scale));--section-padding-x-compact-xs: calc(.4375rem * var(--mantine-scale));--section-padding-x-compact-sm: calc(.5rem * var(--mantine-scale));--section-padding-x-compact-md: calc(.625rem * var(--mantine-scale));--section-padding-x-compact-lg: calc(.75rem * var(--mantine-scale));--section-padding-x-compact-xl: calc(.875rem * var(--mantine-scale));--section-height: var(--section-height-sm);--section-padding-x: var(--section-padding-x-sm);--section-color: var(--mantine-color-white);font-weight:600;width:auto;border-radius:var(--section-radius, var(--mantine-radius-default));font-size:var(--section-fz, var(--mantine-font-size-sm));background:var(--section-bg, var(--mantine-primary-color-filled));border:var(--section-bd, calc(.0625rem * var(--mantine-scale)) solid transparent);color:var(--section-color, var(--mantine-color-white));height:var(--section-height, var(--section-height-sm));padding-inline:var(--section-padding-x, var(--section-padding-x-sm));vertical-align:middle;line-height:1;display:inline-flex;align-items:center;justify-content:center}.m_e615b15f{--card-padding: var(--mantine-spacing-md);position:relative;overflow:hidden;display:flex;flex-direction:column;padding:var(--card-padding);color:var(--mantine-color-text)}:where([data-mantine-color-scheme=light]) .m_e615b15f{background-color:var(--mantine-color-white)}:where([data-mantine-color-scheme=dark]) .m_e615b15f{background-color:var(--mantine-color-dark-6)}.m_599a2148{display:block;margin-inline:calc(var(--card-padding) * -1)}.m_599a2148:where(:first-child){margin-top:calc(var(--card-padding) * -1);border-top:none!important}.m_599a2148:where(:last-child){margin-bottom:calc(var(--card-padding) * -1);border-bottom:none!important}.m_599a2148:where([data-inherit-padding]){padding-inline:var(--card-padding)}.m_599a2148:where([data-with-border]){border-top:calc(.0625rem * var(--mantine-scale)) solid;border-bottom:calc(.0625rem * var(--mantine-scale)) solid}:where([data-mantine-color-scheme=light]) .m_599a2148{border-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_599a2148{border-color:var(--mantine-color-dark-4)}.m_599a2148+.m_599a2148{border-top:none!important}.m_4451eb3a{display:flex;align-items:center;justify-content:center}.m_4451eb3a:where([data-inline]){display:inline-flex}.m_f59ffda3{--chip-size-xs: calc(1.4375rem * var(--mantine-scale));--chip-size-sm: calc(1.75rem * var(--mantine-scale));--chip-size-md: calc(2rem * var(--mantine-scale));--chip-size-lg: calc(2.25rem * var(--mantine-scale));--chip-size-xl: calc(2.5rem * var(--mantine-scale));--chip-icon-size-xs: calc(.625rem * var(--mantine-scale));--chip-icon-size-sm: calc(.75rem * var(--mantine-scale));--chip-icon-size-md: calc(.875rem * var(--mantine-scale));--chip-icon-size-lg: calc(1rem * var(--mantine-scale));--chip-icon-size-xl: calc(1.125rem * var(--mantine-scale));--chip-padding-xs: calc(1rem * var(--mantine-scale));--chip-padding-sm: calc(1.25rem * var(--mantine-scale));--chip-padding-md: calc(1.5rem * var(--mantine-scale));--chip-padding-lg: calc(1.75rem * var(--mantine-scale));--chip-padding-xl: calc(2rem * var(--mantine-scale));--chip-checked-padding-xs: calc(.46875rem * var(--mantine-scale));--chip-checked-padding-sm: calc(.625rem * var(--mantine-scale));--chip-checked-padding-md: calc(.73125rem * var(--mantine-scale));--chip-checked-padding-lg: calc(.84375rem * var(--mantine-scale));--chip-checked-padding-xl: calc(.98125rem * var(--mantine-scale));--chip-spacing-xs: calc(.625rem * var(--mantine-scale));--chip-spacing-sm: calc(.75rem * var(--mantine-scale));--chip-spacing-md: calc(1rem * var(--mantine-scale));--chip-spacing-lg: calc(1.25rem * var(--mantine-scale));--chip-spacing-xl: calc(1.375rem * var(--mantine-scale));--chip-size: var(--chip-size-sm);--chip-icon-size: var(--chip-icon-size-sm);--chip-padding: var(--chip-padding-sm);--chip-spacing: var(--chip-spacing-sm);--chip-checked-padding: var(--chip-checked-padding-sm);--chip-bg: var(--mantine-primary-color-filled);--chip-hover: var(--mantine-primary-color-filled-hover);--chip-color: var(--mantine-color-white);--chip-bd: calc(.0625rem * var(--mantine-scale)) solid transparent}.m_be049a53{display:inline-flex;align-items:center;-webkit-user-select:none;user-select:none;border-radius:var(--chip-radius, 1000rem);height:var(--chip-size);font-size:var(--chip-fz, var(--mantine-font-size-sm));line-height:calc(var(--chip-size) - calc(.125rem * var(--mantine-scale)));padding-inline:var(--chip-padding);cursor:pointer;white-space:nowrap;-webkit-tap-highlight-color:transparent;border:calc(.0625rem * var(--mantine-scale)) solid transparent;color:var(--mantine-color-text)}.m_be049a53:where([data-checked]){padding:var(--chip-checked-padding)}.m_be049a53:where([data-disabled]){cursor:not-allowed;background-color:var(--mantine-color-disabled);color:var(--mantine-color-disabled-color)}:where([data-mantine-color-scheme=light]) .m_3904c1af:not([data-disabled]){background-color:var(--mantine-color-white);border:1px solid var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_3904c1af:not([data-disabled]){background-color:var(--mantine-color-dark-6);border:1px solid var(--mantine-color-dark-4)}@media(hover:hover){:where([data-mantine-color-scheme=light]) .m_3904c1af:not([data-disabled]):hover{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_3904c1af:not([data-disabled]):hover{background-color:var(--mantine-color-dark-5)}}@media(hover:none){:where([data-mantine-color-scheme=light]) .m_3904c1af:not([data-disabled]):active{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_3904c1af:not([data-disabled]):active{background-color:var(--mantine-color-dark-5)}}.m_3904c1af:not([data-disabled]):where([data-checked]){--chip-icon-color: var(--chip-color);border:var(--chip-bd)}@media(hover:hover){.m_3904c1af:not([data-disabled]):where([data-checked]):hover{background-color:var(--chip-hover)}}@media(hover:none){.m_3904c1af:not([data-disabled]):where([data-checked]):active{background-color:var(--chip-hover)}}.m_fa109255:not([data-disabled]),.m_f7e165c3:not([data-disabled]){border:calc(.0625rem * var(--mantine-scale)) solid transparent;color:var(--mantine-color-text)}:where([data-mantine-color-scheme=light]) .m_fa109255:not([data-disabled]),:where([data-mantine-color-scheme=light]) .m_f7e165c3:not([data-disabled]){background-color:var(--mantine-color-gray-1)}:where([data-mantine-color-scheme=dark]) .m_fa109255:not([data-disabled]),:where([data-mantine-color-scheme=dark]) .m_f7e165c3:not([data-disabled]){background-color:var(--mantine-color-dark-5)}@media(hover:hover){:where([data-mantine-color-scheme=light]) .m_fa109255:not([data-disabled]):hover,:where([data-mantine-color-scheme=light]) .m_f7e165c3:not([data-disabled]):hover{background-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_fa109255:not([data-disabled]):hover,:where([data-mantine-color-scheme=dark]) .m_f7e165c3:not([data-disabled]):hover{background-color:var(--mantine-color-dark-4)}}@media(hover:none){:where([data-mantine-color-scheme=light]) .m_fa109255:not([data-disabled]):active,:where([data-mantine-color-scheme=light]) .m_f7e165c3:not([data-disabled]):active{background-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_fa109255:not([data-disabled]):active,:where([data-mantine-color-scheme=dark]) .m_f7e165c3:not([data-disabled]):active{background-color:var(--mantine-color-dark-4)}}.m_fa109255:not([data-disabled]):where([data-checked]),.m_f7e165c3:not([data-disabled]):where([data-checked]){--chip-icon-color: var(--chip-color);color:var(--chip-color);background-color:var(--chip-bg)}@media(hover:hover){.m_fa109255:not([data-disabled]):where([data-checked]):hover,.m_f7e165c3:not([data-disabled]):where([data-checked]):hover{background-color:var(--chip-hover)}}@media(hover:none){.m_fa109255:not([data-disabled]):where([data-checked]):active,.m_f7e165c3:not([data-disabled]):where([data-checked]):active{background-color:var(--chip-hover)}}.m_9ac86df9{width:calc(var(--chip-icon-size) + (var(--chip-spacing) / 1.5));max-width:calc(var(--chip-icon-size) + (var(--chip-spacing) / 1.5));height:var(--chip-icon-size);display:flex;align-items:center;overflow:hidden}.m_d6d72580{width:var(--chip-icon-size);height:var(--chip-icon-size);display:block;color:var(--chip-icon-color, inherit)}.m_bde07329{width:0;height:0;padding:0;opacity:0;margin:0}.m_bde07329:focus-visible+.m_be049a53{outline:2px solid var(--mantine-primary-color-filled);outline-offset:calc(.125rem * var(--mantine-scale))}.m_b183c0a2{font-family:var(--mantine-font-family-monospace);line-height:var(--mantine-line-height);padding:2px calc(var(--mantine-spacing-xs) / 2);border-radius:var(--mantine-radius-sm);font-size:var(--mantine-font-size-xs);margin:0;overflow:auto}:where([data-mantine-color-scheme=light]) .m_b183c0a2{background-color:var(--code-bg, var(--mantine-color-gray-0))}:where([data-mantine-color-scheme=dark]) .m_b183c0a2{background-color:var(--code-bg, var(--mantine-color-dark-6))}.m_b183c0a2[data-block]{padding:var(--mantine-spacing-xs)}.m_de3d2490{--cs-size: calc(1.75rem * var(--mantine-scale));--cs-radius: calc(62.5rem * var(--mantine-scale));-webkit-tap-highlight-color:transparent;border:none;appearance:none;display:block;line-height:1;position:relative;width:var(--cs-size);height:var(--cs-size);min-width:var(--cs-size);min-height:var(--cs-size);border-radius:var(--cs-radius);color:inherit;text-decoration:none}[data-mantine-color-scheme=light] .m_de3d2490{--alpha-overlay-color: var(--mantine-color-gray-3);--alpha-overlay-bg: var(--mantine-color-white)}[data-mantine-color-scheme=dark] .m_de3d2490{--alpha-overlay-color: var(--mantine-color-dark-4);--alpha-overlay-bg: var(--mantine-color-dark-7)}.m_862f3d1b{position:absolute;inset:0;border-radius:var(--cs-radius)}.m_98ae7f22{position:absolute;inset:0;border-radius:var(--cs-radius);z-index:1;box-shadow:#0000001a 0 0 0 calc(.0625rem * var(--mantine-scale)) inset,#00000026 0 0 calc(.25rem * var(--mantine-scale)) inset}.m_95709ac0{position:absolute;inset:0;border-radius:var(--cs-radius);background-size:calc(.5rem * var(--mantine-scale)) calc(.5rem * var(--mantine-scale));background-position:0 0,0 calc(.25rem * var(--mantine-scale)),calc(.25rem * var(--mantine-scale)) calc(-.25rem * var(--mantine-scale)),calc(-.25rem * var(--mantine-scale)) 0;background-image:linear-gradient(45deg,var(--alpha-overlay-color) 25%,transparent 25%),linear-gradient(-45deg,var(--alpha-overlay-color) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--alpha-overlay-color) 75%),linear-gradient(-45deg,var(--alpha-overlay-bg) 75%,var(--alpha-overlay-color) 75%)}.m_93e74e3{position:absolute;inset:0;border-radius:var(--cs-radius);z-index:2;display:flex;align-items:center;justify-content:center}.m_fee9c77{--cp-width-xs: calc(11.25rem * var(--mantine-scale));--cp-width-sm: calc(12.5rem * var(--mantine-scale));--cp-width-md: calc(15rem * var(--mantine-scale));--cp-width-lg: calc(17.5rem * var(--mantine-scale));--cp-width-xl: calc(20rem * var(--mantine-scale));--cp-preview-size-xs: calc(1.625rem * var(--mantine-scale));--cp-preview-size-sm: calc(2.125rem * var(--mantine-scale));--cp-preview-size-md: calc(2.625rem * var(--mantine-scale));--cp-preview-size-lg: calc(3.125rem * var(--mantine-scale));--cp-preview-size-xl: calc(3.375rem * var(--mantine-scale));--cp-thumb-size-xs: calc(.5rem * var(--mantine-scale));--cp-thumb-size-sm: calc(.75rem * var(--mantine-scale));--cp-thumb-size-md: calc(1rem * var(--mantine-scale));--cp-thumb-size-lg: calc(1.25rem * var(--mantine-scale));--cp-thumb-size-xl: calc(1.375rem * var(--mantine-scale));--cp-saturation-height-xs: calc(6.25rem * var(--mantine-scale));--cp-saturation-height-sm: calc(6.875rem * var(--mantine-scale));--cp-saturation-height-md: calc(7.5rem * var(--mantine-scale));--cp-saturation-height-lg: calc(8.75rem * var(--mantine-scale));--cp-saturation-height-xl: calc(10rem * var(--mantine-scale));--cp-preview-size: var(--cp-preview-size-sm);--cp-thumb-size: var(--cp-thumb-size-sm);--cp-saturation-height: var(--cp-saturation-height-sm);--cp-width: var(--cp-width-sm);--cp-body-spacing: var(--mantine-spacing-sm);width:var(--cp-width);padding:calc(.0625rem * var(--mantine-scale))}.m_fee9c77:where([data-full-width]){width:100%}.m_9dddfbac{width:var(--cp-preview-size);height:var(--cp-preview-size)}.m_bffecc3e{display:flex;padding-top:calc(var(--cp-body-spacing) / 2)}.m_3283bb96{flex:1}.m_3283bb96:not(:only-child){margin-inline-end:var(--mantine-spacing-xs)}.m_40d572ba{overflow:hidden;position:absolute;box-shadow:0 0 1px #0009;border:2px solid var(--mantine-color-white);width:var(--cp-thumb-size);height:var(--cp-thumb-size);border-radius:var(--cp-thumb-size);left:calc(var(--thumb-x-offset) - var(--cp-thumb-size) / 2);top:calc(var(--thumb-y-offset) - var(--cp-thumb-size) / 2)}.m_d8ee6fd8{height:unset!important;width:unset!important;min-width:0!important;min-height:0!important;margin:calc(.125rem * var(--mantine-scale));cursor:pointer;padding-bottom:calc(var(--cp-swatch-size) - calc(.25rem * var(--mantine-scale)));flex:0 0 calc(var(--cp-swatch-size) - calc(.25rem * var(--mantine-scale)))}.m_5711e686{margin-top:calc(.3125rem * var(--mantine-scale));margin-inline:calc(-.125rem * var(--mantine-scale));display:flex;flex-wrap:wrap}.m_202a296e{--cp-thumb-size-xs: calc(.5rem * var(--mantine-scale));--cp-thumb-size-sm: calc(.75rem * var(--mantine-scale));--cp-thumb-size-md: calc(1rem * var(--mantine-scale));--cp-thumb-size-lg: calc(1.25rem * var(--mantine-scale));--cp-thumb-size-xl: calc(1.375rem * var(--mantine-scale));-webkit-tap-highlight-color:transparent;position:relative;height:var(--cp-saturation-height);border-radius:var(--mantine-radius-sm);margin:calc(var(--cp-thumb-size) / 2)}.m_202a296e:where([data-focus-ring=auto]):focus:focus-visible .m_40d572ba{outline:2px solid var(--mantine-color-blue-filled)}.m_202a296e:where([data-focus-ring=always]):focus .m_40d572ba{outline:2px solid var(--mantine-color-blue-filled)}.m_11b3db02{position:absolute;border-radius:var(--mantine-radius-sm);inset:calc(var(--cp-thumb-size) * -1 / 2 - calc(.0625rem * var(--mantine-scale)))}.m_d856d47d{--cp-thumb-size-xs: calc(.5rem * var(--mantine-scale));--cp-thumb-size-sm: calc(.75rem * var(--mantine-scale));--cp-thumb-size-md: calc(1rem * var(--mantine-scale));--cp-thumb-size-lg: calc(1.25rem * var(--mantine-scale));--cp-thumb-size-xl: calc(1.375rem * var(--mantine-scale));--cp-thumb-size: var(--cp-thumb-size, calc(.75rem * var(--mantine-scale)));position:relative;height:calc(var(--cp-thumb-size) + calc(.125rem * var(--mantine-scale)));margin-inline:calc(var(--cp-thumb-size) / 2);outline:none}.m_d856d47d+.m_d856d47d{margin-top:calc(.375rem * var(--mantine-scale))}.m_d856d47d:where([data-focus-ring=auto]):focus:focus-visible .m_40d572ba{outline:2px solid var(--mantine-color-blue-filled)}.m_d856d47d:where([data-focus-ring=always]):focus .m_40d572ba{outline:2px solid var(--mantine-color-blue-filled)}:where([data-mantine-color-scheme=light]) .m_d856d47d{--slider-checkers: var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_d856d47d{--slider-checkers: var(--mantine-color-dark-4)}.m_8f327113{position:absolute;top:0;bottom:0;inset-inline:calc(var(--cp-thumb-size) * -1 / 2 - calc(.0625rem * var(--mantine-scale)));border-radius:10000rem}.m_b077c2bc{--ci-eye-dropper-icon-size-xs: calc(.875rem * var(--mantine-scale));--ci-eye-dropper-icon-size-sm: calc(1rem * var(--mantine-scale));--ci-eye-dropper-icon-size-md: calc(1.125rem * var(--mantine-scale));--ci-eye-dropper-icon-size-lg: calc(1.25rem * var(--mantine-scale));--ci-eye-dropper-icon-size-xl: calc(1.375rem * var(--mantine-scale));--ci-eye-dropper-icon-size: var(--ci-eye-dropper-icon-size-sm)}.m_c5ccdcab{--ci-preview-size-xs: calc(1rem * var(--mantine-scale));--ci-preview-size-sm: calc(1.125rem * var(--mantine-scale));--ci-preview-size-md: calc(1.375rem * var(--mantine-scale));--ci-preview-size-lg: calc(1.75rem * var(--mantine-scale));--ci-preview-size-xl: calc(2.25rem * var(--mantine-scale));--ci-preview-size: var(--ci-preview-size-sm)}.m_5ece2cd7{padding:calc(.5rem * var(--mantine-scale))}.m_7485cace{--container-size-xs: calc(33.75rem * var(--mantine-scale));--container-size-sm: calc(45rem * var(--mantine-scale));--container-size-md: calc(60rem * var(--mantine-scale));--container-size-lg: calc(71.25rem * var(--mantine-scale));--container-size-xl: calc(82.5rem * var(--mantine-scale));--container-size: var(--container-size-md);max-width:var(--container-size);padding-inline:var(--mantine-spacing-md);margin-inline:auto}.m_7485cace:where([data-fluid]){max-width:100%}.m_e2125a27{--dialog-size-xs: calc(10rem * var(--mantine-scale));--dialog-size-sm: calc(12.5rem * var(--mantine-scale));--dialog-size-md: calc(21.25rem * var(--mantine-scale));--dialog-size-lg: calc(25rem * var(--mantine-scale));--dialog-size-xl: calc(31.25rem * var(--mantine-scale));--dialog-size: var(--dialog-size-md);position:relative;width:var(--dialog-size);max-width:calc(100vw - var(--mantine-spacing-xl) * 2);min-height:calc(3.125rem * var(--mantine-scale))}.m_5abab665{position:absolute;top:calc(var(--mantine-spacing-md) / 2);inset-inline-end:calc(var(--mantine-spacing-md) / 2)}.m_3eebeb36{--divider-size-xs: calc(.0625rem * var(--mantine-scale));--divider-size-sm: calc(.125rem * var(--mantine-scale));--divider-size-md: calc(.1875rem * var(--mantine-scale));--divider-size-lg: calc(.25rem * var(--mantine-scale));--divider-size-xl: calc(.3125rem * var(--mantine-scale));--divider-size: var(--divider-size-xs)}:where([data-mantine-color-scheme=light]) .m_3eebeb36{--divider-color: var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_3eebeb36{--divider-color: var(--mantine-color-dark-4)}.m_3eebeb36:where([data-orientation=horizontal]){border-top:var(--divider-size) var(--divider-border-style, solid) var(--divider-color)}.m_3eebeb36:where([data-orientation=vertical]){border-inline-start:var(--divider-size) var(--divider-border-style, solid) var(--divider-color);height:auto;align-self:stretch}.m_3eebeb36:where([data-with-label]){border:0}.m_9e365f20{display:flex;align-items:center;font-size:var(--mantine-font-size-xs);color:var(--mantine-color-dimmed);white-space:nowrap}.m_9e365f20:where([data-position=left]):before{display:none}.m_9e365f20:where([data-position=right]):after{display:none}.m_9e365f20:before{content:"";flex:1;height:calc(.0625rem * var(--mantine-scale));border-top:var(--divider-size) var(--divider-border-style, solid) var(--divider-color);margin-inline-end:var(--mantine-spacing-xs)}.m_9e365f20:after{content:"";flex:1;height:calc(.0625rem * var(--mantine-scale));border-top:var(--divider-size) var(--divider-border-style, solid) var(--divider-color);margin-inline-start:var(--mantine-spacing-xs)}.m_f11b401e{--drawer-size-xs: calc(20rem * var(--mantine-scale));--drawer-size-sm: calc(23.75rem * var(--mantine-scale));--drawer-size-md: calc(27.5rem * var(--mantine-scale));--drawer-size-lg: calc(38.75rem * var(--mantine-scale));--drawer-size-xl: calc(48.75rem * var(--mantine-scale));--drawer-size: var(--drawer-size-md);--drawer-offset: 0rem}.m_5a7c2c9{z-index:1000}.m_b8a05bbd{flex:var(--drawer-flex, 0 0 var(--drawer-size));height:var(--drawer-height, calc(100% - var(--drawer-offset) * 2));margin:var(--drawer-offset);max-width:calc(100% - var(--drawer-offset) * 2);max-height:calc(100% - var(--drawer-offset) * 2);overflow-y:auto}.m_b8a05bbd[data-hidden]{opacity:0!important;pointer-events:none}.m_31cd769a{display:flex;justify-content:var(--drawer-justify, flex-start);align-items:var(--drawer-align, flex-start)}.m_e9408a47{padding:var(--mantine-spacing-lg);padding-top:var(--mantine-spacing-xs);border-radius:var(--fieldset-radius, var(--mantine-radius-default));min-inline-size:auto}.m_84c9523a{border:calc(.0625rem * var(--mantine-scale)) solid}:where([data-mantine-color-scheme=light]) .m_84c9523a{border-color:var(--mantine-color-gray-3);background-color:var(--mantine-color-white)}:where([data-mantine-color-scheme=dark]) .m_84c9523a{border-color:var(--mantine-color-dark-4);background-color:var(--mantine-color-dark-7)}.m_ef274e49{border:calc(.0625rem * var(--mantine-scale)) solid}:where([data-mantine-color-scheme=light]) .m_ef274e49{border-color:var(--mantine-color-gray-3);background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_ef274e49{border-color:var(--mantine-color-dark-4);background-color:var(--mantine-color-dark-6)}.m_eda993d3{padding:0;border:0;border-radius:0}.m_90794832{font-size:var(--mantine-font-size-sm)}.m_74ca27fe{padding:0;margin-bottom:var(--mantine-spacing-sm)}.m_8478a6da{container:mantine-grid / inline-size}.m_410352e9{--grid-overflow: visible;--grid-margin: calc(var(--grid-gutter) / -2);--grid-col-padding: calc(var(--grid-gutter) / 2);overflow:var(--grid-overflow)}.m_dee7bd2f{width:calc(100% + var(--grid-gutter));display:flex;flex-wrap:wrap;justify-content:var(--grid-justify);align-items:var(--grid-align);margin:var(--grid-margin)}.m_96bdd299{--col-flex-grow: 0;--col-offset: 0rem;flex-shrink:0;order:var(--col-order);flex-basis:var(--col-flex-basis);width:var(--col-width);max-width:var(--col-max-width);flex-grow:var(--col-flex-grow);margin-inline-start:var(--col-offset);padding:var(--grid-col-padding)}.m_bcb3f3c2{color:var(--mantine-color-black)}:where([data-mantine-color-scheme=light]) .m_bcb3f3c2{background-color:var(--mark-bg-light)}:where([data-mantine-color-scheme=dark]) .m_bcb3f3c2{background-color:var(--mark-bg-dark)}.m_9e117634{display:block;object-fit:var(--image-object-fit, cover);width:100%;border-radius:var(--image-radius, 0)}@keyframes m_885901b1{0%{opacity:.6;transform:scale(0)}to{opacity:0;transform:scale(2.8)}}.m_e5262200{--indicator-size: calc(.625rem * var(--mantine-scale));--indicator-color: var(--mantine-primary-color-filled);position:relative;display:block}.m_e5262200:where([data-inline]){display:inline-block}.m_760d1fb1{position:absolute;top:var(--indicator-top);left:var(--indicator-left);right:var(--indicator-right);bottom:var(--indicator-bottom);transform:translate(var(--indicator-translate-x),var(--indicator-translate-y));min-width:var(--indicator-size);height:var(--indicator-size);border-radius:var(--indicator-radius, 1000rem);z-index:var(--indicator-z-index, 200);display:flex;align-items:center;justify-content:center;font-size:var(--mantine-font-size-xs);background-color:var(--indicator-color);color:var(--indicator-text-color, var(--mantine-color-white));white-space:nowrap}.m_760d1fb1:before{content:"";position:absolute;inset:0;background-color:var(--indicator-color);border-radius:var(--indicator-radius, 1000rem);z-index:-1}.m_760d1fb1:where([data-with-label]){padding-inline:calc(var(--mantine-spacing-xs) / 2)}.m_760d1fb1:where([data-with-border]){border:2px solid var(--mantine-color-body)}.m_760d1fb1[data-processing]:before{animation:m_885901b1 1s linear infinite}.m_dc6f14e2{--kbd-fz-xs: calc(.625rem * var(--mantine-scale));--kbd-fz-sm: calc(.75rem * var(--mantine-scale));--kbd-fz-md: calc(.875rem * var(--mantine-scale));--kbd-fz-lg: calc(1rem * var(--mantine-scale));--kbd-fz-xl: calc(1.25rem * var(--mantine-scale));--kbd-fz: var(--kbd-fz-sm);font-family:var(--mantine-font-family-monospace);line-height:var(--mantine-line-height);font-weight:700;font-size:var(--kbd-fz);border-radius:var(--mantine-radius-sm);border:calc(.0625rem * var(--mantine-scale)) solid;border-bottom-width:calc(.1875rem * var(--mantine-scale));unicode-bidi:embed;text-align:center;padding:.12em .45em}:where([data-mantine-color-scheme=light]) .m_dc6f14e2{border-color:var(--mantine-color-gray-3);color:var(--mantine-color-gray-7);background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_dc6f14e2{border-color:var(--mantine-color-dark-4);color:var(--mantine-color-dark-0);background-color:var(--mantine-color-dark-6)}.m_abbac491{--list-fz: var(--mantine-font-size-md);--list-lh: var(--mantine-line-height-md);list-style-position:inside;font-size:var(--list-fz);line-height:var(--list-lh);margin:0;padding:0}.m_abbac491:where([data-with-padding]){padding-inline-start:var(--mantine-spacing-md)}.m_abb6bec2{white-space:nowrap;line-height:var(--list-lh)}.m_abb6bec2:where([data-with-icon]){list-style:none}.m_abb6bec2:where([data-with-icon]) .m_75cd9f71{--li-direction: row;--li-align: center}.m_abb6bec2:where(:not(:first-of-type)){margin-top:var(--list-spacing, 0)}.m_abb6bec2:where([data-centered]){line-height:1}.m_75cd9f71{display:inline-flex;flex-direction:var(--li-direction, column);align-items:var(--li-align, flex-start);white-space:normal}.m_60f83e5b{display:inline-block;vertical-align:middle;margin-inline-end:var(--mantine-spacing-sm)}.m_6e45937b{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;overflow:hidden;z-index:var(--lo-z-index)}.m_e8eb006c{position:relative;z-index:calc(var(--lo-z-index) + 1)}.m_df587f17{z-index:var(--lo-z-index)}.m_dc9b7c9f{padding:calc(.25rem * var(--mantine-scale))}.m_9bfac126{color:var(--mantine-color-dimmed);font-weight:500;font-size:var(--mantine-font-size-xs);padding:calc(var(--mantine-spacing-xs) / 2) var(--mantine-spacing-sm);cursor:default}.m_efdf90cb{margin-top:calc(.25rem * var(--mantine-scale));margin-bottom:calc(.25rem * var(--mantine-scale));border-top:calc(.0625rem * var(--mantine-scale)) solid}:where([data-mantine-color-scheme=light]) .m_efdf90cb{border-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_efdf90cb{border-color:var(--mantine-color-dark-4)}.m_99ac2aa1{font-size:var(--mantine-font-size-sm);width:100%;padding:calc(var(--mantine-spacing-xs) / 1.5) var(--mantine-spacing-sm);border-radius:var(--popover-radius, var(--mantine-radius-default));color:var(--menu-item-color, var(--mantine-color-text));display:flex;align-items:center;-webkit-user-select:none;user-select:none}.m_99ac2aa1:where([data-disabled],:disabled){color:var(--mantine-color-disabled-color);opacity:.6;cursor:not-allowed}:where([data-mantine-color-scheme=light]) .m_99ac2aa1:where(:hover,:focus):where(:not(:disabled,[data-disabled])){background-color:var(--menu-item-hover, var(--mantine-color-gray-1))}:where([data-mantine-color-scheme=dark]) .m_99ac2aa1:where(:hover,:focus):where(:not(:disabled,[data-disabled])){background-color:var(--menu-item-hover, var(--mantine-color-dark-4))}.m_99ac2aa1:where([data-sub-menu-item]){padding-inline-end:calc(.3125rem * var(--mantine-scale))}.m_5476e0d3{flex:1}.m_8b75e504{display:flex;justify-content:center;align-items:center}.m_8b75e504:where([data-position=left]){margin-inline-end:var(--mantine-spacing-xs)}.m_8b75e504:where([data-position=right]){margin-inline-start:var(--mantine-spacing-xs)}.m_b85b0bed{transform:rotate(-90deg)}:where([dir=rtl]) .m_b85b0bed{transform:rotate(90deg)}.m_9df02822{--modal-size-xs: calc(20rem * var(--mantine-scale));--modal-size-sm: calc(23.75rem * var(--mantine-scale));--modal-size-md: calc(27.5rem * var(--mantine-scale));--modal-size-lg: calc(38.75rem * var(--mantine-scale));--modal-size-xl: calc(48.75rem * var(--mantine-scale));--modal-size: var(--modal-size-md);--modal-y-offset: 5dvh;--modal-x-offset: 5vw}.m_9df02822[data-full-screen]{--modal-border-radius: 0 !important}.m_9df02822[data-full-screen] .m_54c44539{--modal-content-flex: 0 0 100%;--modal-content-max-height: auto;--modal-content-height: 100dvh}.m_9df02822[data-full-screen] .m_1f958f16{--modal-inner-y-offset: 0;--modal-inner-x-offset: 0}.m_9df02822[data-centered] .m_1f958f16{--modal-inner-align: center}.m_d0e2b9cd{border-start-start-radius:var(--modal-radius, var(--mantine-radius-default));border-start-end-radius:var(--modal-radius, var(--mantine-radius-default))}.m_54c44539{flex:var(--modal-content-flex, 0 0 var(--modal-size));max-width:100%;max-height:var(--modal-content-max-height, calc(100dvh - var(--modal-y-offset) * 2));height:var(--modal-content-height, auto);overflow-y:auto}.m_54c44539[data-full-screen]{border-radius:0}.m_54c44539[data-hidden]{opacity:0!important;pointer-events:none}.m_1f958f16{display:flex;justify-content:center;align-items:var(--modal-inner-align, flex-start);padding-top:var(--modal-inner-y-offset, var(--modal-y-offset));padding-bottom:var(--modal-inner-y-offset, var(--modal-y-offset));padding-inline:var(--modal-inner-x-offset, var(--modal-x-offset))}.m_7cda1cd6{--pill-fz-xs: calc(.625rem * var(--mantine-scale));--pill-fz-sm: calc(.75rem * var(--mantine-scale));--pill-fz-md: calc(.875rem * var(--mantine-scale));--pill-fz-lg: calc(1rem * var(--mantine-scale));--pill-fz-xl: calc(1.125rem * var(--mantine-scale));--pill-height-xs: calc(1.125rem * var(--mantine-scale));--pill-height-sm: calc(1.375rem * var(--mantine-scale));--pill-height-md: calc(1.5625rem * var(--mantine-scale));--pill-height-lg: calc(1.75rem * var(--mantine-scale));--pill-height-xl: calc(2rem * var(--mantine-scale));--pill-fz: var(--pill-fz-sm);--pill-height: var(--pill-height-sm);font-size:var(--pill-fz);flex:0;height:var(--pill-height);padding-inline:.8em;display:inline-flex;align-items:center;border-radius:var(--pill-radius, 1000rem);line-height:1;white-space:nowrap;user-select:none;-webkit-user-select:none;max-width:100%}:where([data-mantine-color-scheme=dark]) .m_7cda1cd6{background-color:var(--mantine-color-dark-7);color:var(--mantine-color-dark-0)}:where([data-mantine-color-scheme=light]) .m_7cda1cd6{color:var(--mantine-color-black)}.m_7cda1cd6:where([data-with-remove]:not(:has(button:disabled))){padding-inline-end:0}.m_7cda1cd6:where([data-disabled],:has(button:disabled)){cursor:not-allowed}:where([data-mantine-color-scheme=light]) .m_44da308b{background-color:var(--mantine-color-gray-1)}:where([data-mantine-color-scheme=light]) .m_44da308b:where([data-disabled],:has(button:disabled)){background-color:var(--mantine-color-disabled)}:where([data-mantine-color-scheme=light]) .m_e3a01f8{background-color:var(--mantine-color-white)}:where([data-mantine-color-scheme=light]) .m_e3a01f8:where([data-disabled],:has(button:disabled)){background-color:var(--mantine-color-disabled)}.m_1e0e6180{cursor:inherit;overflow:hidden;height:100%;line-height:var(--pill-height);text-overflow:ellipsis}.m_ae386778{color:inherit;font-size:inherit;height:100%;min-height:unset;min-width:2em;width:unset;border-radius:0;padding-inline-start:.1em;padding-inline-end:.3em;flex:0;border-end-end-radius:var(--pill-radius, 50%);border-start-end-radius:var(--pill-radius, 50%)}.m_7cda1cd6[data-disabled]>.m_ae386778,.m_ae386778:disabled{display:none;background-color:transparent;width:.8em;min-width:.8em;padding:0;cursor:not-allowed}.m_7cda1cd6[data-disabled]>.m_ae386778>svg,.m_ae386778:disabled>svg{display:none}.m_ae386778>svg{pointer-events:none}.m_1dcfd90b{--pg-gap-xs: calc(.375rem * var(--mantine-scale));--pg-gap-sm: calc(.5rem * var(--mantine-scale));--pg-gap-md: calc(.625rem * var(--mantine-scale));--pg-gap-lg: calc(.75rem * var(--mantine-scale));--pg-gap-xl: calc(.75rem * var(--mantine-scale));--pg-gap: var(--pg-gap-sm);display:flex;align-items:center;gap:var(--pg-gap);flex-wrap:wrap}.m_45c4369d{background-color:transparent;appearance:none;min-width:calc(6.25rem * var(--mantine-scale));flex:1;border:0;font-size:inherit;height:1.6em;color:inherit;padding:0}.m_45c4369d::placeholder{color:var(--input-placeholder-color);opacity:1}.m_45c4369d:where([data-type=hidden],[data-type=auto]){height:calc(.0625rem * var(--mantine-scale));width:calc(.0625rem * var(--mantine-scale));top:0;left:0;pointer-events:none;position:absolute;opacity:0}.m_45c4369d:focus{outline:none}.m_45c4369d:where([data-type=auto]:focus){height:1.6em;visibility:visible;opacity:1;position:static}.m_45c4369d:where([data-pointer]:not([data-disabled],:disabled)){cursor:pointer}.m_45c4369d:where([data-disabled],:disabled){cursor:not-allowed}.m_f0824112{--nl-bg: var(--mantine-primary-color-light);--nl-hover: var(--mantine-primary-color-light-hover);--nl-color: var(--mantine-primary-color-light-color);display:flex;align-items:center;width:100%;padding:8px var(--mantine-spacing-sm);-webkit-user-select:none;user-select:none}@media(hover:hover){:where([data-mantine-color-scheme=light]) .m_f0824112:hover{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_f0824112:hover{background-color:var(--mantine-color-dark-6)}}@media(hover:none){:where([data-mantine-color-scheme=light]) .m_f0824112:active{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_f0824112:active{background-color:var(--mantine-color-dark-6)}}.m_f0824112:where([data-disabled]){opacity:.4;pointer-events:none}.m_f0824112:where([data-active],[aria-current=page]){background-color:var(--nl-bg);color:var(--nl-color)}@media(hover:hover){.m_f0824112:where([data-active],[aria-current=page]):hover{background-color:var(--nl-hover)}}@media(hover:none){.m_f0824112:where([data-active],[aria-current=page]):active{background-color:var(--nl-hover)}}.m_f0824112:where([data-active],[aria-current=page]) .m_57492dcc{--description-opacity: .9;--description-color: var(--nl-color)}.m_690090b5{display:flex;align-items:center;justify-content:center;transition:transform .15s ease}.m_690090b5>svg{display:block}.m_690090b5:where([data-position=left]){margin-inline-end:var(--mantine-spacing-sm)}.m_690090b5:where([data-position=right]){margin-inline-start:var(--mantine-spacing-sm)}.m_690090b5:where([data-rotate]){transform:rotate(90deg)}.m_1f6ac4c4{font-size:var(--mantine-font-size-sm)}.m_f07af9d2{flex:1;overflow:hidden;text-overflow:ellipsis}.m_f07af9d2:where([data-no-wrap]){white-space:nowrap}.m_57492dcc{display:block;font-size:var(--mantine-font-size-xs);opacity:var(--description-opacity, 1);color:var(--description-color, var(--mantine-color-dimmed));overflow:hidden;text-overflow:ellipsis}:where([data-no-wrap]) .m_57492dcc{white-space:nowrap}.m_e17b862f{padding-inline-start:var(--nl-offset, var(--mantine-spacing-lg))}.m_1fd8a00b{transform:rotate(-90deg)}.m_a513464{--notification-radius: var(--mantine-radius-default);--notification-color: var(--mantine-primary-color-filled);overflow:hidden;box-sizing:border-box;position:relative;display:flex;align-items:center;padding-inline-start:calc(1.375rem * var(--mantine-scale));padding-inline-end:var(--mantine-spacing-xs);padding-top:var(--mantine-spacing-xs);padding-bottom:var(--mantine-spacing-xs);border-radius:var(--notification-radius);box-shadow:var(--mantine-shadow-lg)}.m_a513464:before{content:"";display:block;position:absolute;width:calc(.375rem * var(--mantine-scale));top:var(--notification-radius);bottom:var(--notification-radius);inset-inline-start:calc(.25rem * var(--mantine-scale));border-radius:var(--notification-radius);background-color:var(--notification-color)}:where([data-mantine-color-scheme=light]) .m_a513464{background-color:var(--mantine-color-white)}:where([data-mantine-color-scheme=dark]) .m_a513464{background-color:var(--mantine-color-dark-6)}.m_a513464:where([data-with-icon]):before{display:none}:where([data-mantine-color-scheme=light]) .m_a513464:where([data-with-border]){border:1px solid var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_a513464:where([data-with-border]){border:1px solid var(--mantine-color-dark-4)}.m_a4ceffb{box-sizing:border-box;margin-inline-end:var(--mantine-spacing-md);width:calc(1.75rem * var(--mantine-scale));height:calc(1.75rem * var(--mantine-scale));border-radius:calc(1.75rem * var(--mantine-scale));display:flex;align-items:center;justify-content:center;background-color:var(--notification-color);color:var(--mantine-color-white)}.m_b0920b15{margin-inline-end:var(--mantine-spacing-md)}.m_a49ed24{flex:1;overflow:hidden;margin-inline-end:var(--mantine-spacing-xs)}.m_3feedf16{margin-bottom:calc(.125rem * var(--mantine-scale));overflow:hidden;text-overflow:ellipsis;font-size:var(--mantine-font-size-sm);line-height:var(--mantine-line-height-sm);font-weight:500}:where([data-mantine-color-scheme=light]) .m_3feedf16{color:var(--mantine-color-gray-9)}:where([data-mantine-color-scheme=dark]) .m_3feedf16{color:var(--mantine-color-white)}.m_3d733a3a{font-size:var(--mantine-font-size-sm);line-height:var(--mantine-line-height-sm);overflow:hidden;text-overflow:ellipsis}:where([data-mantine-color-scheme=light]) .m_3d733a3a{color:var(--mantine-color-black)}:where([data-mantine-color-scheme=dark]) .m_3d733a3a{color:var(--mantine-color-dark-0)}:where([data-mantine-color-scheme=light]) .m_3d733a3a:where([data-with-title]){color:var(--mantine-color-gray-6)}:where([data-mantine-color-scheme=dark]) .m_3d733a3a:where([data-with-title]){color:var(--mantine-color-dark-2)}@media(hover:hover){:where([data-mantine-color-scheme=light]) .m_919a4d88:hover{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_919a4d88:hover{background-color:var(--mantine-color-dark-8)}}@media(hover:none){:where([data-mantine-color-scheme=light]) .m_919a4d88:active{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_919a4d88:active{background-color:var(--mantine-color-dark-8)}}.m_e2f5cd4e{--ni-right-section-width-xs: calc(1.0625rem * var(--mantine-scale));--ni-right-section-width-sm: calc(1.5rem * var(--mantine-scale));--ni-right-section-width-md: calc(1.6875rem * var(--mantine-scale));--ni-right-section-width-lg: calc(1.9375rem * var(--mantine-scale));--ni-right-section-width-xl: calc(2.125rem * var(--mantine-scale))}.m_95e17d22{--ni-chevron-size-xs: calc(.625rem * var(--mantine-scale));--ni-chevron-size-sm: calc(.875rem * var(--mantine-scale));--ni-chevron-size-md: calc(1rem * var(--mantine-scale));--ni-chevron-size-lg: calc(1.125rem * var(--mantine-scale));--ni-chevron-size-xl: calc(1.25rem * var(--mantine-scale));--ni-chevron-size: var(--ni-chevron-size-sm);display:flex;flex-direction:column;width:100%;height:calc(var(--input-height) - calc(.125rem * var(--mantine-scale)));max-width:calc(var(--ni-chevron-size) * 1.7);margin-inline-start:auto}.m_80b4b171{--control-border: 1px solid var(--input-bd);--control-radius: calc(var(--input-radius) - calc(.0625rem * var(--mantine-scale)));flex:0 0 50%;width:100%;padding:0;height:calc(var(--input-height) / 2 - calc(.0625rem * var(--mantine-scale)));border-inline-start:var(--control-border);display:flex;align-items:center;justify-content:center;color:var(--mantine-color-text);background-color:transparent;cursor:pointer}.m_80b4b171:where(:disabled){background-color:transparent;cursor:not-allowed;opacity:.6;color:var(--mantine-color-disabled-color)}.m_e2f5cd4e[data-error] :where(.m_80b4b171){color:var(--mantine-color-error)}@media(hover:hover){:where([data-mantine-color-scheme=light]) .m_80b4b171:hover{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_80b4b171:hover{background-color:var(--mantine-color-dark-4)}}@media(hover:none){:where([data-mantine-color-scheme=light]) .m_80b4b171:active{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_80b4b171:active{background-color:var(--mantine-color-dark-4)}}.m_80b4b171:where(:first-of-type){border-radius:0;border-start-end-radius:var(--control-radius)}.m_80b4b171:last-of-type{border-radius:0;border-end-end-radius:var(--control-radius)}.m_4addd315{--pagination-control-size-xs: calc(1.375rem * var(--mantine-scale));--pagination-control-size-sm: calc(1.625rem * var(--mantine-scale));--pagination-control-size-md: calc(2rem * var(--mantine-scale));--pagination-control-size-lg: calc(2.375rem * var(--mantine-scale));--pagination-control-size-xl: calc(2.75rem * var(--mantine-scale));--pagination-control-size: var(--pagination-control-size-md);--pagination-control-fz: var(--mantine-font-size-md);--pagination-active-bg: var(--mantine-primary-color-filled)}.m_326d024a{display:flex;align-items:center;justify-content:center;border:calc(.0625rem * var(--mantine-scale)) solid;cursor:pointer;color:var(--mantine-color-text);height:var(--pagination-control-size);min-width:var(--pagination-control-size);font-size:var(--pagination-control-fz);line-height:1;border-radius:var(--pagination-control-radius, var(--mantine-radius-default))}.m_326d024a:where([data-with-padding]){padding:calc(var(--pagination-control-size) / 4)}.m_326d024a:where(:disabled,[data-disabled]){cursor:not-allowed;opacity:.4}:where([data-mantine-color-scheme=light]) .m_326d024a{border-color:var(--mantine-color-gray-4);background-color:var(--mantine-color-white)}@media(hover:hover){:where([data-mantine-color-scheme=light]) .m_326d024a:hover:where(:not(:disabled,[data-disabled])){background-color:var(--mantine-color-gray-0)}}@media(hover:none){:where([data-mantine-color-scheme=light]) .m_326d024a:active:where(:not(:disabled,[data-disabled])){background-color:var(--mantine-color-gray-0)}}:where([data-mantine-color-scheme=dark]) .m_326d024a{border-color:var(--mantine-color-dark-4);background-color:var(--mantine-color-dark-6)}@media(hover:hover){:where([data-mantine-color-scheme=dark]) .m_326d024a:hover:where(:not(:disabled,[data-disabled])){background-color:var(--mantine-color-dark-5)}}@media(hover:none){:where([data-mantine-color-scheme=dark]) .m_326d024a:active:where(:not(:disabled,[data-disabled])){background-color:var(--mantine-color-dark-5)}}.m_326d024a:where([data-active]){background-color:var(--pagination-active-bg);border-color:var(--pagination-active-bg);color:var(--pagination-active-color, var(--mantine-color-white))}@media(hover:hover){.m_326d024a:where([data-active]):hover{background-color:var(--pagination-active-bg)}}@media(hover:none){.m_326d024a:where([data-active]):active{background-color:var(--pagination-active-bg)}}.m_4ad7767d{height:var(--pagination-control-size);min-width:var(--pagination-control-size);display:flex;align-items:center;justify-content:center;pointer-events:none}.m_f61ca620{--psi-button-size-xs: calc(1.375rem * var(--mantine-scale));--psi-button-size-sm: calc(1.625rem * var(--mantine-scale));--psi-button-size-md: calc(1.75rem * var(--mantine-scale));--psi-button-size-lg: calc(2rem * var(--mantine-scale));--psi-button-size-xl: calc(2.5rem * var(--mantine-scale));--psi-icon-size-xs: calc(.75rem * var(--mantine-scale));--psi-icon-size-sm: calc(.9375rem * var(--mantine-scale));--psi-icon-size-md: calc(1.0625rem * var(--mantine-scale));--psi-icon-size-lg: calc(1.1875rem * var(--mantine-scale));--psi-icon-size-xl: calc(1.3125rem * var(--mantine-scale));--psi-button-size: var(--psi-button-size-sm);--psi-icon-size: var(--psi-icon-size-sm)}.m_ccf8da4c{position:relative;overflow:hidden}.m_f2d85dd2{font-family:var(--mantine-font-family);background-color:transparent;border:0;padding-inline-end:var(--input-padding-inline-end);padding-inline-start:var(--input-padding-inline-start);position:absolute;inset:0;outline:0;font-size:inherit;line-height:var(--mantine-line-height);height:100%;width:100%;color:inherit}.m_ccf8da4c[data-disabled] .m_f2d85dd2,.m_f2d85dd2:disabled{cursor:not-allowed}.m_f2d85dd2::placeholder{color:var(--input-placeholder-color);opacity:1}.m_f2d85dd2::-ms-reveal{display:none}.m_b1072d44{width:var(--psi-button-size);height:var(--psi-button-size);min-width:var(--psi-button-size);min-height:var(--psi-button-size)}.m_b1072d44:disabled{display:none}.m_f1cb205a{--pin-input-size-xs: calc(1.875rem * var(--mantine-scale));--pin-input-size-sm: calc(2.25rem * var(--mantine-scale));--pin-input-size-md: calc(2.625rem * var(--mantine-scale));--pin-input-size-lg: calc(3.125rem * var(--mantine-scale));--pin-input-size-xl: calc(3.75rem * var(--mantine-scale));--pin-input-size: var(--pin-input-size-sm)}.m_cb288ead{width:var(--pin-input-size);height:var(--pin-input-size)}@keyframes m_81a374bd{0%{background-position:0 0}to{background-position:calc(2.5rem * var(--mantine-scale)) 0}}.m_db6d6462{--progress-radius: var(--mantine-radius-default);--progress-size: var(--progress-size-md);--progress-size-xs: calc(.1875rem * var(--mantine-scale));--progress-size-sm: calc(.3125rem * var(--mantine-scale));--progress-size-md: calc(.5rem * var(--mantine-scale));--progress-size-lg: calc(.75rem * var(--mantine-scale));--progress-size-xl: calc(1rem * var(--mantine-scale));position:relative;height:var(--progress-size);border-radius:var(--progress-radius);overflow:hidden;display:flex}:where([data-mantine-color-scheme=light]) .m_db6d6462{background-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_db6d6462{background-color:var(--mantine-color-dark-4)}.m_2242eb65{background-color:var(--progress-section-color);height:100%;width:var(--progress-section-width);display:flex;align-items:center;justify-content:center;overflow:hidden;background-size:calc(1.25rem * var(--mantine-scale)) calc(1.25rem * var(--mantine-scale));transition:width var(--progress-transition-duration, .1s) ease}.m_2242eb65:where([data-striped]){background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.m_2242eb65:where([data-animated]){animation:m_81a374bd 1s linear infinite}.m_2242eb65:where(:last-of-type){border-radius:0;border-start-end-radius:var(--progress-radius);border-end-end-radius:var(--progress-radius)}.m_2242eb65:where(:first-of-type){border-radius:0;border-start-start-radius:var(--progress-radius);border-end-start-radius:var(--progress-radius)}.m_91e40b74{color:var(--progress-label-color, var(--mantine-color-white));font-weight:700;-webkit-user-select:none;user-select:none;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:min(calc(var(--progress-size) * .65),calc(1.125rem * var(--mantine-scale)));line-height:1;padding-inline:calc(.25rem * var(--mantine-scale))}.m_9dc8ae12{--card-radius: var(--mantine-radius-default);display:block;width:100%;border-radius:var(--card-radius);cursor:pointer}.m_9dc8ae12 :where(*){cursor:inherit}.m_9dc8ae12:where([data-with-border]){border:calc(.0625rem * var(--mantine-scale)) solid transparent}:where([data-mantine-color-scheme=light]) .m_9dc8ae12:where([data-with-border]){border-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_9dc8ae12:where([data-with-border]){border-color:var(--mantine-color-dark-4)}.m_717d7ff6{--radio-size-xs: calc(1rem * var(--mantine-scale));--radio-size-sm: calc(1.25rem * var(--mantine-scale));--radio-size-md: calc(1.5rem * var(--mantine-scale));--radio-size-lg: calc(1.875rem * var(--mantine-scale));--radio-size-xl: calc(2.25rem * var(--mantine-scale));--radio-icon-size-xs: calc(.375rem * var(--mantine-scale));--radio-icon-size-sm: calc(.5rem * var(--mantine-scale));--radio-icon-size-md: calc(.625rem * var(--mantine-scale));--radio-icon-size-lg: calc(.875rem * var(--mantine-scale));--radio-icon-size-xl: calc(1rem * var(--mantine-scale));--radio-icon-size: var(--radio-icon-size-sm);--radio-size: var(--radio-size-sm);--radio-color: var(--mantine-primary-color-filled);--radio-icon-color: var(--mantine-color-white);position:relative;border:calc(.0625rem * var(--mantine-scale)) solid transparent;width:var(--radio-size);min-width:var(--radio-size);height:var(--radio-size);min-height:var(--radio-size);border-radius:var(--radio-radius, 10000px);transition:border-color .1s ease,background-color .1s ease;cursor:var(--mantine-cursor-type);-webkit-tap-highlight-color:transparent;display:flex;align-items:center;justify-content:center}:where([data-mantine-color-scheme=light]) .m_717d7ff6{background-color:var(--mantine-color-white);border-color:var(--mantine-color-gray-4)}:where([data-mantine-color-scheme=dark]) .m_717d7ff6{background-color:var(--mantine-color-dark-6);border-color:var(--mantine-color-dark-4)}.m_717d7ff6[data-indeterminate],.m_717d7ff6[data-checked]{background-color:var(--radio-color);border-color:var(--radio-color)}.m_717d7ff6[data-indeterminate]>.m_3e4da632,.m_717d7ff6[data-checked]>.m_3e4da632{opacity:1;transform:none;color:var(--radio-icon-color)}.m_717d7ff6[data-disabled]{cursor:not-allowed;background-color:var(--mantine-color-disabled);border-color:var(--mantine-color-disabled-border)}.m_717d7ff6[data-disabled][data-checked]>.m_3e4da632{color:var(--mantine-color-disabled-color)}.m_2980836c[data-indeterminate]:not([data-disabled]),.m_2980836c[data-checked]:not([data-disabled]){background-color:transparent;border-color:var(--radio-color)}.m_2980836c[data-indeterminate]:not([data-disabled])>.m_3e4da632,.m_2980836c[data-checked]:not([data-disabled])>.m_3e4da632{color:var(--radio-color);opacity:1;transform:none}.m_3e4da632{display:block;width:var(--radio-icon-size);height:var(--radio-icon-size);color:transparent;pointer-events:none;transform:translateY(calc(.3125rem * var(--mantine-scale))) scale(.5);opacity:1;transition:transform .1s ease,opacity .1s ease}.m_f3f1af94{--radio-size-xs: calc(1rem * var(--mantine-scale));--radio-size-sm: calc(1.25rem * var(--mantine-scale));--radio-size-md: calc(1.5rem * var(--mantine-scale));--radio-size-lg: calc(1.875rem * var(--mantine-scale));--radio-size-xl: calc(2.25rem * var(--mantine-scale));--radio-size: var(--radio-size-sm);--radio-icon-size-xs: calc(.375rem * var(--mantine-scale));--radio-icon-size-sm: calc(.5rem * var(--mantine-scale));--radio-icon-size-md: calc(.625rem * var(--mantine-scale));--radio-icon-size-lg: calc(.875rem * var(--mantine-scale));--radio-icon-size-xl: calc(1rem * var(--mantine-scale));--radio-icon-size: var(--radio-icon-size-sm);--radio-icon-color: var(--mantine-color-white)}.m_89c4f5e4{position:relative;width:var(--radio-size);height:var(--radio-size);order:1}.m_89c4f5e4:where([data-label-position=left]){order:2}.m_f3ed6b2b{color:var(--radio-icon-color);opacity:var(--radio-icon-opacity, 0);transform:var(--radio-icon-transform, scale(.2) translateY(calc(.625rem * var(--mantine-scale))));transition:opacity .1s ease,transform .2s ease;pointer-events:none;width:var(--radio-icon-size);height:var(--radio-icon-size);position:absolute;top:calc(50% - var(--radio-icon-size) / 2);left:calc(50% - var(--radio-icon-size) / 2)}.m_8a3dbb89{border:calc(.0625rem * var(--mantine-scale)) solid;position:relative;appearance:none;width:var(--radio-size);height:var(--radio-size);border-radius:var(--radio-radius, var(--radio-size));margin:0;display:flex;align-items:center;justify-content:center;transition-property:background-color,border-color;transition-timing-function:ease;transition-duration:.1s;cursor:var(--mantine-cursor-type);-webkit-tap-highlight-color:transparent}:where([data-mantine-color-scheme=light]) .m_8a3dbb89{background-color:var(--mantine-color-white);border-color:var(--mantine-color-gray-4)}:where([data-mantine-color-scheme=dark]) .m_8a3dbb89{background-color:var(--mantine-color-dark-6);border-color:var(--mantine-color-dark-4)}.m_8a3dbb89:checked{background-color:var(--radio-color, var(--mantine-primary-color-filled));border-color:var(--radio-color, var(--mantine-primary-color-filled))}.m_8a3dbb89:checked+.m_f3ed6b2b{--radio-icon-opacity: 1;--radio-icon-transform: scale(1)}.m_8a3dbb89:disabled{cursor:not-allowed;background-color:var(--mantine-color-disabled);border-color:var(--mantine-color-disabled-border)}.m_8a3dbb89:disabled+.m_f3ed6b2b{--radio-icon-color: var(--mantine-color-disabled-color)}.m_8a3dbb89:where([data-error]){border-color:var(--mantine-color-error)}.m_1bfe9d39+.m_f3ed6b2b{--radio-icon-color: var(--radio-color)}.m_1bfe9d39:checked:not(:disabled){background-color:transparent;border-color:var(--radio-color)}.m_1bfe9d39:checked:not(:disabled)+.m_f3ed6b2b{--radio-icon-color: var(--radio-color);--radio-icon-opacity: 1;--radio-icon-transform: none}.m_f8d312f2{--rating-size-xs: calc(.875rem * var(--mantine-scale));--rating-size-sm: calc(1.125rem * var(--mantine-scale));--rating-size-md: calc(1.25rem * var(--mantine-scale));--rating-size-lg: calc(1.75rem * var(--mantine-scale));--rating-size-xl: calc(2rem * var(--mantine-scale));display:flex;width:max-content}.m_f8d312f2:where(:has(input:disabled)){pointer-events:none}.m_61734bb7{position:relative;transition:transform .1s ease}.m_61734bb7:where([data-active]){z-index:1;transform:scale(1.1)}.m_5662a89a{width:var(--rating-size);height:var(--rating-size);display:block}:where([data-mantine-color-scheme=light]) .m_5662a89a{fill:var(--mantine-color-gray-3);stroke:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_5662a89a{fill:var(--mantine-color-dark-3);stroke:var(--mantine-color-dark-3)}.m_5662a89a:where([data-filled]){fill:var(--rating-color);stroke:var(--rating-color)}.m_211007ba{height:0;width:0;position:absolute;overflow:hidden;white-space:nowrap;opacity:0;-webkit-tap-highlight-color:transparent}.m_211007ba:focus-visible+label{outline:2px solid var(--mantine-primary-color-filled);outline-offset:calc(.125rem * var(--mantine-scale))}.m_21342ee4{display:block;cursor:pointer;position:absolute;top:0;left:0;z-index:var(--rating-item-z-index, 0);-webkit-tap-highlight-color:transparent}.m_21342ee4:where([data-read-only]){cursor:default}.m_21342ee4:where(:last-of-type){position:relative}.m_fae05d6a{clip-path:var(--rating-symbol-clip-path)}.m_1b3c8819{--tooltip-radius: var(--mantine-radius-default);position:absolute;padding:calc(var(--mantine-spacing-xs) / 2) var(--mantine-spacing-xs);pointer-events:none;font-size:var(--mantine-font-size-sm);white-space:nowrap;border-radius:var(--tooltip-radius)}:where([data-mantine-color-scheme=light]) .m_1b3c8819{background-color:var(--tooltip-bg, var(--mantine-color-gray-9));color:var(--tooltip-color, var(--mantine-color-white))}:where([data-mantine-color-scheme=dark]) .m_1b3c8819{background-color:var(--tooltip-bg, var(--mantine-color-gray-2));color:var(--tooltip-color, var(--mantine-color-black))}.m_1b3c8819:where([data-multiline]){white-space:normal}.m_1b3c8819:where([data-fixed]){position:fixed}.m_f898399f{background-color:inherit;border:0;z-index:1}.m_b32e4812{position:relative;width:var(--rp-size);height:var(--rp-size);min-width:var(--rp-size);min-height:var(--rp-size);--rp-transition-duration: 0ms}.m_d43b5134{width:var(--rp-size);height:var(--rp-size);min-width:var(--rp-size);min-height:var(--rp-size);transform:rotate(-90deg)}.m_b1ca1fbf{stroke:var(--curve-color, var(--rp-curve-root-color));transition:stroke-dashoffset var(--rp-transition-duration) ease,stroke-dasharray var(--rp-transition-duration) ease,stroke var(--rp-transition-duration)}[data-mantine-color-scheme=light] .m_b1ca1fbf{--rp-curve-root-color: var(--mantine-color-gray-2)}[data-mantine-color-scheme=dark] .m_b1ca1fbf{--rp-curve-root-color: var(--mantine-color-dark-4)}.m_b23f9dc4{position:absolute;top:50%;transform:translateY(-50%);inset-inline:var(--rp-label-offset)}.m_cf365364{--sc-padding-xs: calc(.125rem * var(--mantine-scale)) calc(.375rem * var(--mantine-scale));--sc-padding-sm: calc(.1875rem * var(--mantine-scale)) calc(.625rem * var(--mantine-scale));--sc-padding-md: calc(.25rem * var(--mantine-scale)) calc(.875rem * var(--mantine-scale));--sc-padding-lg: calc(.4375rem * var(--mantine-scale)) calc(1rem * var(--mantine-scale));--sc-padding-xl: calc(.625rem * var(--mantine-scale)) calc(1.25rem * var(--mantine-scale));--sc-transition-duration: .2s;--sc-padding: var(--sc-padding-sm);--sc-transition-timing-function: ease;--sc-font-size: var(--mantine-font-size-sm);position:relative;display:inline-flex;flex-direction:row;width:auto;border-radius:var(--sc-radius, var(--mantine-radius-default));overflow:hidden;padding:calc(.25rem * var(--mantine-scale))}.m_cf365364:where([data-full-width]){display:flex}.m_cf365364:where([data-orientation=vertical]){display:flex;flex-direction:column;width:max-content}.m_cf365364:where([data-orientation=vertical]):where([data-full-width]){width:auto}:where([data-mantine-color-scheme=light]) .m_cf365364{background-color:var(--mantine-color-gray-1)}:where([data-mantine-color-scheme=dark]) .m_cf365364{background-color:var(--mantine-color-dark-8)}.m_9e182ccd{position:absolute;display:block;z-index:1;border-radius:var(--sc-radius, var(--mantine-radius-default))}:where([data-mantine-color-scheme=light]) .m_9e182ccd{box-shadow:var(--sc-shadow, none);background-color:var(--sc-color, var(--mantine-color-white))}:where([data-mantine-color-scheme=dark]) .m_9e182ccd{box-shadow:none;background-color:var(--sc-color, var(--mantine-color-dark-5))}.m_1738fcb2{-webkit-tap-highlight-color:transparent;font-weight:500;display:block;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;user-select:none;border-radius:var(--sc-radius, var(--mantine-radius-default));font-size:var(--sc-font-size);padding:var(--sc-padding);transition:color var(--sc-transition-duration) var(--sc-transition-timing-function);cursor:pointer;outline:var(--segmented-control-outline, none)}:where([data-mantine-color-scheme=light]) .m_1738fcb2{color:var(--mantine-color-gray-7)}:where([data-mantine-color-scheme=dark]) .m_1738fcb2{color:var(--mantine-color-dark-1)}.m_1738fcb2:where([data-read-only]){cursor:default}fieldset:disabled .m_1738fcb2,.m_1738fcb2:where([data-disabled]){cursor:not-allowed;color:var(--mantine-color-disabled-color)}:where([data-mantine-color-scheme=light]) .m_1738fcb2:where([data-active]){color:var(--sc-label-color, var(--mantine-color-black))}:where([data-mantine-color-scheme=dark]) .m_1738fcb2:where([data-active]){color:var(--sc-label-color, var(--mantine-color-white))}.m_cf365364:where([data-initialized]) .m_1738fcb2:where([data-active]):before{display:none}.m_1738fcb2:where([data-active]):before{content:"";inset:0;z-index:0;position:absolute;border-radius:var(--sc-radius, var(--mantine-radius-default))}:where([data-mantine-color-scheme=light]) .m_1738fcb2:where([data-active]):before{box-shadow:var(--sc-shadow, none);background-color:var(--sc-color, var(--mantine-color-white))}:where([data-mantine-color-scheme=dark]) .m_1738fcb2:where([data-active]):before{box-shadow:none;background-color:var(--sc-color, var(--mantine-color-dark-5))}@media(hover:hover){:where([data-mantine-color-scheme=light]) .m_1738fcb2:where(:not([data-disabled],[data-active],[data-read-only])):hover{color:var(--mantine-color-black)}:where([data-mantine-color-scheme=dark]) .m_1738fcb2:where(:not([data-disabled],[data-active],[data-read-only])):hover{color:var(--mantine-color-white)}}@media(hover:none){:where([data-mantine-color-scheme=light]) .m_1738fcb2:where(:not([data-disabled],[data-active],[data-read-only])):active{color:var(--mantine-color-black)}:where([data-mantine-color-scheme=dark]) .m_1738fcb2:where(:not([data-disabled],[data-active],[data-read-only])):active{color:var(--mantine-color-white)}}@media(hover:hover){fieldset:disabled .m_1738fcb2:hover{color:var(--mantine-color-disabled-color)!important}}@media(hover:none){fieldset:disabled .m_1738fcb2:active{color:var(--mantine-color-disabled-color)!important}}.m_1714d588{height:0;width:0;position:absolute;overflow:hidden;white-space:nowrap;opacity:0}.m_1714d588[data-focus-ring=auto]:focus:focus-visible+.m_1738fcb2{--segmented-control-outline: 2px solid var(--mantine-primary-color-filled)}.m_1714d588[data-focus-ring=always]:focus+.m_1738fcb2{--segmented-control-outline: 2px solid var(--mantine-primary-color-filled)}.m_69686b9b{position:relative;flex:1;z-index:2;transition:border-color var(--sc-transition-duration) var(--sc-transition-timing-function)}.m_cf365364[data-with-items-borders] :where(.m_69686b9b):before{content:"";position:absolute;top:0;bottom:0;inset-inline-start:0;background-color:var(--separator-color);width:calc(.0625rem * var(--mantine-scale));transition:background-color var(--sc-transition-duration) var(--sc-transition-timing-function)}.m_69686b9b[data-orientation=vertical]:before{top:0;inset-inline:0;bottom:auto;height:calc(.0625rem * var(--mantine-scale));width:auto}:where([data-mantine-color-scheme=light]) .m_69686b9b{--separator-color: var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_69686b9b{--separator-color: var(--mantine-color-dark-4)}.m_69686b9b:first-of-type:before{--separator-color: transparent}[data-mantine-color-scheme] .m_69686b9b[data-active]:before,[data-mantine-color-scheme] .m_69686b9b[data-active]+.m_69686b9b:before{--separator-color: transparent}.m_78882f40{position:relative;z-index:2}.m_fa528724{--scp-filled-segment-color: var(--mantine-primary-color-filled);--scp-transition-duration: 0ms;--scp-thickness: calc(.625rem * var(--mantine-scale))}:where([data-mantine-color-scheme=light]) .m_fa528724{--scp-empty-segment-color: var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_fa528724{--scp-empty-segment-color: var(--mantine-color-dark-4)}.m_fa528724{position:relative;width:fit-content}.m_62e9e7e2{display:block;transform:var(--scp-rotation);overflow:hidden}.m_c573fb6f{transition:stroke-dashoffset var(--scp-transition-duration) ease,stroke-dasharray var(--scp-transition-duration) ease,stroke var(--scp-transition-duration)}.m_4fa340f2{position:absolute;margin:0;padding:0;inset-inline:0;text-align:center;z-index:1}.m_4fa340f2:where([data-position=bottom]){bottom:0;padding-inline:calc(var(--scp-thickness) * 2)}.m_4fa340f2:where([data-position=bottom]):where([data-orientation=down]){bottom:auto;top:0}.m_4fa340f2:where([data-position=center]){top:50%;padding-inline:calc(var(--scp-thickness) * 3)}.m_925c2d2c{container:simple-grid / inline-size}.m_2415a157{display:grid;grid-template-columns:repeat(var(--sg-cols),minmax(0,1fr));gap:var(--sg-spacing-y) var(--sg-spacing-x)}@keyframes m_299c329c{0%,to{opacity:.4}50%{opacity:1}}.m_18320242{height:var(--skeleton-height, auto);width:var(--skeleton-width, 100%);border-radius:var(--skeleton-radius, var(--mantine-radius-default));position:relative;transform:translateZ(0);-webkit-transform:translateZ(0)}.m_18320242:where([data-animate]):after{animation:m_299c329c 1.5s linear infinite}.m_18320242:where([data-visible]){overflow:hidden}.m_18320242:where([data-visible]):before{position:absolute;content:"";inset:0;z-index:10;background-color:var(--mantine-color-body)}.m_18320242:where([data-visible]):after{position:absolute;content:"";inset:0;z-index:11}:where([data-mantine-color-scheme=light]) .m_18320242:where([data-visible]):after{background-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_18320242:where([data-visible]):after{background-color:var(--mantine-color-dark-4)}.m_dd36362e{--slider-size-xs: calc(.25rem * var(--mantine-scale));--slider-size-sm: calc(.375rem * var(--mantine-scale));--slider-size-md: calc(.5rem * var(--mantine-scale));--slider-size-lg: calc(.625rem * var(--mantine-scale));--slider-size-xl: calc(.75rem * var(--mantine-scale));--slider-size: var(--slider-size-md);--slider-radius: calc(62.5rem * var(--mantine-scale));--slider-color: var(--mantine-primary-color-filled);--slider-track-disabled-bg: var(--mantine-color-disabled);-webkit-tap-highlight-color:transparent;outline:none;height:calc(var(--slider-size) * 2);padding-inline:var(--slider-size);display:flex;flex-direction:column;align-items:center;touch-action:none;position:relative}[data-mantine-color-scheme=light] .m_dd36362e{--slider-track-bg: var(--mantine-color-gray-2)}[data-mantine-color-scheme=dark] .m_dd36362e{--slider-track-bg: var(--mantine-color-dark-4)}.m_c9357328{position:absolute;top:calc(-2.25rem * var(--mantine-scale));font-size:var(--mantine-font-size-xs);color:var(--mantine-color-white);padding:calc(var(--mantine-spacing-xs) / 2);border-radius:var(--mantine-radius-sm);white-space:nowrap;pointer-events:none;-webkit-user-select:none;user-select:none;touch-action:none}:where([data-mantine-color-scheme=light]) .m_c9357328{background-color:var(--mantine-color-gray-9)}:where([data-mantine-color-scheme=dark]) .m_c9357328{background-color:var(--mantine-color-dark-4)}.m_c9a9a60a{position:absolute;display:flex;height:var(--slider-thumb-size);width:var(--slider-thumb-size);border:calc(.25rem * var(--mantine-scale)) solid;transform:translate(-50%,-50%);top:50%;cursor:pointer;border-radius:var(--slider-radius);align-items:center;justify-content:center;transition:box-shadow .1s ease,transform .1s ease;z-index:3;-webkit-user-select:none;user-select:none;touch-action:none;outline-offset:calc(.125rem * var(--mantine-scale));left:var(--slider-thumb-offset)}:where([dir=rtl]) .m_c9a9a60a{left:auto;right:calc(var(--slider-thumb-offset) - var(--slider-thumb-size))}fieldset:disabled .m_c9a9a60a,.m_c9a9a60a:where([data-disabled]){display:none}.m_c9a9a60a:where([data-dragging]){transform:translate(-50%,-50%) scale(1.05);box-shadow:var(--mantine-shadow-sm)}:where([data-mantine-color-scheme=light]) .m_c9a9a60a{color:var(--slider-color);border-color:var(--slider-color);background-color:var(--mantine-color-white)}:where([data-mantine-color-scheme=dark]) .m_c9a9a60a{color:var(--mantine-color-white);border-color:var(--mantine-color-white);background-color:var(--slider-color)}.m_a8645c2{display:flex;align-items:center;width:100%;height:calc(var(--slider-size) * 2);cursor:pointer}fieldset:disabled .m_a8645c2,.m_a8645c2:where([data-disabled]){cursor:not-allowed}.m_c9ade57f{position:relative;width:100%;height:var(--slider-size)}.m_c9ade57f:where([data-inverted]:not([data-disabled])){--track-bg: var(--slider-color)}fieldset:disabled .m_c9ade57f:where([data-inverted]),.m_c9ade57f:where([data-inverted][data-disabled]){--track-bg: var(--slider-track-disabled-bg)}.m_c9ade57f:before{content:"";position:absolute;top:0;bottom:0;border-radius:var(--slider-radius);inset-inline:calc(var(--slider-size) * -1);background-color:var(--track-bg, var(--slider-track-bg));z-index:0}.m_38aeed47{position:absolute;z-index:1;top:0;bottom:0;background-color:var(--slider-color);border-radius:var(--slider-radius);width:var(--slider-bar-width);inset-inline-start:var(--slider-bar-offset)}.m_38aeed47:where([data-inverted]){background-color:var(--slider-track-bg)}fieldset:disabled .m_38aeed47:where(:not([data-inverted])),.m_38aeed47:where([data-disabled]:not([data-inverted])){background-color:var(--mantine-color-disabled-color)}.m_b7b0423a{position:absolute;inset-inline-start:calc(var(--mark-offset) - var(--slider-size) / 2);top:0;z-index:2;height:0;pointer-events:none}.m_dd33bc19{border:calc(.125rem * var(--mantine-scale)) solid;height:var(--slider-size);width:var(--slider-size);border-radius:calc(62.5rem * var(--mantine-scale));background-color:var(--mantine-color-white);pointer-events:none}:where([data-mantine-color-scheme=light]) .m_dd33bc19{border-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_dd33bc19{border-color:var(--mantine-color-dark-4)}.m_dd33bc19:where([data-filled]){border-color:var(--slider-color)}.m_dd33bc19:where([data-filled]):where([data-disabled]){border-color:var(--mantine-color-disabled-border)}.m_68c77a5b{transform:translate(calc(-50% + var(--slider-size) / 2),calc(var(--mantine-spacing-xs) / 2));font-size:var(--mantine-font-size-sm);white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none}:where([data-mantine-color-scheme=light]) .m_68c77a5b{color:var(--mantine-color-gray-6)}:where([data-mantine-color-scheme=dark]) .m_68c77a5b{color:var(--mantine-color-dark-2)}.m_559cce2d{position:relative}.m_559cce2d:where([data-has-spoiler]){margin-bottom:calc(1.5rem * var(--mantine-scale))}.m_b912df4e{display:flex;flex-direction:column;overflow:hidden;transition:max-height var(--spoiler-transition-duration, .2s) ease}.m_b9131032{position:absolute;inset-inline-start:0;top:100%;height:calc(1.5rem * var(--mantine-scale))}.m_6d731127{display:flex;flex-direction:column;align-items:var(--stack-align, stretch);justify-content:var(--stack-justify, flex-start);gap:var(--stack-gap, var(--mantine-spacing-md))}.m_cbb4ea7e{--stepper-icon-size-xs: calc(2.125rem * var(--mantine-scale));--stepper-icon-size-sm: calc(2.25rem * var(--mantine-scale));--stepper-icon-size-md: calc(2.625rem * var(--mantine-scale));--stepper-icon-size-lg: calc(3rem * var(--mantine-scale));--stepper-icon-size-xl: calc(3.25rem * var(--mantine-scale));--stepper-icon-size: var(--stepper-icon-size-md);--stepper-color: var(--mantine-primary-color-filled);--stepper-content-padding: var(--mantine-spacing-md);--stepper-spacing: var(--mantine-spacing-md);--stepper-radius: calc(62.5rem * var(--mantine-scale));--stepper-fz: var(--mantine-font-size-md);--stepper-outline-thickness: calc(.125rem * var(--mantine-scale))}[data-mantine-color-scheme=light] .m_cbb4ea7e{--stepper-outline-color: var(--mantine-color-gray-2)}[data-mantine-color-scheme=dark] .m_cbb4ea7e{--stepper-outline-color: var(--mantine-color-dark-5)}.m_aaf89d0b{display:flex;flex-wrap:nowrap;align-items:center}.m_aaf89d0b:where([data-wrap]){flex-wrap:wrap;gap:var(--mantine-spacing-md) 0}.m_aaf89d0b:where([data-orientation=vertical]){flex-direction:column}.m_aaf89d0b:where([data-orientation=vertical]):where([data-icon-position=left]){align-items:flex-start}.m_aaf89d0b:where([data-orientation=vertical]):where([data-icon-position=right]){align-items:flex-end}.m_aaf89d0b:where([data-orientation=horizontal]){flex-direction:row}.m_2a371ac9{transition:background-color .15s ease;flex:1;height:var(--stepper-outline-thickness);margin-inline:var(--mantine-spacing-md);background-color:var(--stepper-outline-color)}.m_2a371ac9:where([data-active]){background-color:var(--stepper-color)}.m_78da155d{padding-top:var(--stepper-content-padding)}.m_cbb57068{--step-color: var(--stepper-color);display:flex;cursor:default}.m_cbb57068:where([data-allow-click]){cursor:pointer}.m_cbb57068:where([data-icon-position=left]){flex-direction:row}.m_cbb57068:where([data-icon-position=right]){flex-direction:row-reverse}.m_f56b1e2c{align-items:center}.m_833edb7e{--separator-spacing: calc(var(--mantine-spacing-xs) / 2);justify-content:flex-start;min-height:calc(var(--stepper-icon-size) + var(--mantine-spacing-xl) + var(--separator-spacing));margin-top:var(--separator-spacing);overflow:hidden}.m_833edb7e:where(:first-of-type){margin-top:0}.m_833edb7e:where(:last-of-type){min-height:auto}.m_833edb7e:where(:last-of-type) .m_6496b3f3{display:none}.m_818e70b{position:relative}.m_6496b3f3{top:calc(var(--stepper-icon-size) + var(--separator-spacing));inset-inline-start:calc(var(--stepper-icon-size) / 2);height:100vh;position:absolute;border-inline-start:var(--stepper-outline-thickness) solid var(--stepper-outline-color)}.m_6496b3f3:where([data-active]){border-color:var(--stepper-color)}.m_1959ad01{height:var(--stepper-icon-size);width:var(--stepper-icon-size);min-height:var(--stepper-icon-size);min-width:var(--stepper-icon-size);border-radius:var(--stepper-radius);font-size:var(--stepper-fz);display:flex;align-items:center;justify-content:center;position:relative;font-weight:700;transition:background-color .15s ease,border-color .15s ease;border:var(--stepper-outline-thickness) solid var(--stepper-outline-color);background-color:var(--stepper-outline-color)}:where([data-mantine-color-scheme=light]) .m_1959ad01{color:var(--mantine-color-gray-7)}:where([data-mantine-color-scheme=dark]) .m_1959ad01{color:var(--mantine-color-dark-1)}.m_1959ad01:where([data-progress]){border-color:var(--step-color)}.m_1959ad01:where([data-completed]){color:var(--stepper-icon-color, var(--mantine-color-white));background-color:var(--step-color);border-color:var(--step-color)}.m_a79331dc{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--stepper-icon-color, var(--mantine-color-white))}.m_1956aa2a{display:flex;flex-direction:column}.m_1956aa2a:where([data-icon-position=left]){margin-inline-start:var(--mantine-spacing-sm)}.m_1956aa2a:where([data-icon-position=right]){text-align:right;margin-inline-end:var(--mantine-spacing-sm)}:where([dir=rtl]) .m_1956aa2a:where([data-icon-position=right]){text-align:left}.m_12051f6c{font-weight:500;font-size:var(--stepper-fz);line-height:1}.m_164eea74{margin-top:calc(var(--stepper-spacing) / 3);margin-bottom:calc(var(--stepper-spacing) / 3);font-size:calc(var(--stepper-fz) - calc(.125rem * var(--mantine-scale)));line-height:1;color:var(--mantine-color-dimmed)}.m_5f93f3bb{--switch-height-xs: calc(1rem * var(--mantine-scale));--switch-height-sm: calc(1.25rem * var(--mantine-scale));--switch-height-md: calc(1.5rem * var(--mantine-scale));--switch-height-lg: calc(1.875rem * var(--mantine-scale));--switch-height-xl: calc(2.25rem * var(--mantine-scale));--switch-width-xs: calc(2rem * var(--mantine-scale));--switch-width-sm: calc(2.375rem * var(--mantine-scale));--switch-width-md: calc(2.875rem * var(--mantine-scale));--switch-width-lg: calc(3.5rem * var(--mantine-scale));--switch-width-xl: calc(4.5rem * var(--mantine-scale));--switch-thumb-size-xs: calc(.75rem * var(--mantine-scale));--switch-thumb-size-sm: calc(.875rem * var(--mantine-scale));--switch-thumb-size-md: calc(1.125rem * var(--mantine-scale));--switch-thumb-size-lg: calc(1.375rem * var(--mantine-scale));--switch-thumb-size-xl: calc(1.75rem * var(--mantine-scale));--switch-label-font-size-xs: calc(.3125rem * var(--mantine-scale));--switch-label-font-size-sm: calc(.375rem * var(--mantine-scale));--switch-label-font-size-md: calc(.4375rem * var(--mantine-scale));--switch-label-font-size-lg: calc(.5625rem * var(--mantine-scale));--switch-label-font-size-xl: calc(.6875rem * var(--mantine-scale));--switch-track-label-padding-xs: calc(.125rem * var(--mantine-scale));--switch-track-label-padding-sm: calc(.15625rem * var(--mantine-scale));--switch-track-label-padding-md: calc(.1875rem * var(--mantine-scale));--switch-track-label-padding-lg: calc(.1875rem * var(--mantine-scale));--switch-track-label-padding-xl: calc(.21875rem * var(--mantine-scale));--switch-height: var(--switch-height-sm);--switch-width: var(--switch-width-sm);--switch-thumb-size: var(--switch-thumb-size-sm);--switch-label-font-size: var(--switch-label-font-size-sm);--switch-track-label-padding: var(--switch-track-label-padding-sm);--switch-radius: calc(62.5rem * var(--mantine-scale));--switch-color: var(--mantine-primary-color-filled);--switch-disabled-color: var(--mantine-color-disabled);position:relative}.m_926b4011{height:0;width:0;opacity:0;margin:0;padding:0;position:absolute;overflow:hidden;white-space:nowrap}.m_9307d992{-webkit-tap-highlight-color:transparent;cursor:var(--switch-cursor, var(--mantine-cursor-type));overflow:hidden;position:relative;border-radius:var(--switch-radius);background-color:var(--switch-bg);height:var(--switch-height);min-width:var(--switch-width);margin:0;transition:background-color .15s ease,border-color .15s ease;appearance:none;display:flex;align-items:center;font-size:var(--switch-label-font-size);font-weight:600;order:var(--switch-order, 1);-webkit-user-select:none;user-select:none;z-index:0;line-height:0;color:var(--switch-text-color)}.m_9307d992:where([data-without-labels]){width:var(--switch-width)}.m_926b4011:focus-visible+.m_9307d992{outline:2px solid var(--mantine-primary-color-filled);outline-offset:calc(.125rem * var(--mantine-scale))}.m_926b4011:checked+.m_9307d992{--switch-bg: var(--switch-color);--switch-text-color: var(--mantine-color-white)}.m_926b4011:disabled+.m_9307d992,.m_926b4011[data-disabled]+.m_9307d992{--switch-bg: var(--switch-disabled-color);--switch-cursor: not-allowed}[data-mantine-color-scheme=light] .m_9307d992{--switch-bg: var(--mantine-color-gray-3);--switch-text-color: var(--mantine-color-gray-6)}[data-mantine-color-scheme=dark] .m_9307d992{--switch-bg: var(--mantine-color-dark-5);--switch-text-color: var(--mantine-color-dark-1)}.m_9307d992[data-label-position=left]{--switch-order: 2}.m_93039a1d{position:absolute;z-index:1;border-radius:var(--switch-radius);display:flex;background-color:var(--switch-thumb-bg, var(--mantine-color-white));height:var(--switch-thumb-size);width:var(--switch-thumb-size);inset-inline-start:var(--switch-thumb-start, var(--switch-track-label-padding));transition:inset-inline-start .15s ease}.m_93039a1d:where([data-with-thumb-indicator]):before{content:"";width:40%;height:40%;background-color:var(--switch-bg);position:absolute;border-radius:var(--switch-radius);top:50%;left:50%;transform:translate(-50%,-50%)}.m_93039a1d>*{margin:auto}.m_926b4011:checked+*>.m_93039a1d{--switch-thumb-start: calc(100% - var(--switch-thumb-size) - var(--switch-track-label-padding))}.m_926b4011:disabled+*>.m_93039a1d,.m_926b4011[data-disabled]+*>.m_93039a1d{--switch-thumb-bg: var(--switch-thumb-bg-disabled)}[data-mantine-color-scheme=light] .m_93039a1d{--switch-thumb-bg-disabled: var(--mantine-color-gray-0)}[data-mantine-color-scheme=dark] .m_93039a1d{--switch-thumb-bg-disabled: var(--mantine-color-dark-3)}.m_8277e082{height:100%;display:grid;place-content:center;min-width:calc(var(--switch-width) - var(--switch-thumb-size));padding-inline:var(--switch-track-label-padding);margin-inline-start:calc(var(--switch-thumb-size) + var(--switch-track-label-padding));transition:margin .15s ease}.m_926b4011:checked+*>.m_8277e082{margin-inline-end:calc(var(--switch-thumb-size) + var(--switch-track-label-padding));margin-inline-start:0}.m_b23fa0ef{width:100%;border-collapse:collapse;border-spacing:0;line-height:var(--mantine-line-height);font-size:var(--mantine-font-size-sm);table-layout:var(--table-layout, auto);caption-side:var(--table-caption-side, bottom);border:none}:where([data-mantine-color-scheme=light]) .m_b23fa0ef{--table-hover-color: var(--mantine-color-gray-1);--table-striped-color: var(--mantine-color-gray-0);--table-border-color: var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_b23fa0ef{--table-hover-color: var(--mantine-color-dark-5);--table-striped-color: var(--mantine-color-dark-6);--table-border-color: var(--mantine-color-dark-4)}.m_b23fa0ef:where([data-with-table-border]){border:calc(.0625rem * var(--mantine-scale)) solid var(--table-border-color)}.m_b23fa0ef:where([data-tabular-nums]){font-variant-numeric:tabular-nums}.m_b23fa0ef:where([data-variant=vertical]) :where(.m_4e7aa4f3){font-weight:500}:where([data-mantine-color-scheme=light]) .m_b23fa0ef:where([data-variant=vertical]) :where(.m_4e7aa4f3){background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_b23fa0ef:where([data-variant=vertical]) :where(.m_4e7aa4f3){background-color:var(--mantine-color-dark-6)}.m_4e7aa4f3{text-align:left}:where([dir=rtl]) .m_4e7aa4f3{text-align:right}.m_4e7aa4fd{border-bottom:none;background-color:transparent}@media(hover:hover){.m_4e7aa4fd:hover:where([data-hover]){background-color:var(--tr-hover-bg)}}@media(hover:none){.m_4e7aa4fd:active:where([data-hover]){background-color:var(--tr-hover-bg)}}.m_4e7aa4fd:where([data-with-row-border]){border-bottom:calc(.0625rem * var(--mantine-scale)) solid var(--table-border-color)}.m_4e7aa4ef,.m_4e7aa4f3{padding:var(--table-vertical-spacing) var(--table-horizontal-spacing, var(--mantine-spacing-xs))}.m_4e7aa4ef:where([data-with-column-border]:not(:last-child)),.m_4e7aa4f3:where([data-with-column-border]:not(:last-child)){border-inline-end:calc(.0625rem * var(--mantine-scale)) solid var(--table-border-color)}.m_b2404537>:where(tr):where([data-with-row-border]:last-of-type){border-bottom:none}.m_b2404537>:where(tr):where([data-striped=odd]:nth-of-type(odd)){background-color:var(--table-striped-color)}.m_b2404537>:where(tr):where([data-striped=even]:nth-of-type(2n)){background-color:var(--table-striped-color)}.m_b2404537>:where(tr)[data-hover]{--tr-hover-bg: var(--table-highlight-on-hover-color, var(--table-hover-color))}.m_b242d975{top:var(--table-sticky-header-offset, 0);z-index:3}.m_b242d975:where([data-sticky]){position:sticky}.m_b242d975:where([data-sticky]) :where(.m_4e7aa4f3){position:sticky;top:var(--table-sticky-header-offset, 0);background-color:var(--mantine-color-body)}:where([data-with-table-border]) .m_b242d975[data-sticky] .m_4e7aa4f3{top:initial}.m_9e5a3ac7{color:var(--mantine-color-dimmed)}.m_9e5a3ac7:where([data-side=top]){margin-bottom:var(--mantine-spacing-xs)}.m_9e5a3ac7:where([data-side=bottom]){margin-top:var(--mantine-spacing-xs)}.m_a100c15{overflow-x:var(--table-overflow)}.m_62259741{min-width:var(--table-min-width);max-height:var(--table-max-height)}.m_bcaa9990{display:flex;flex-direction:column;--toc-depth-offset: .8em}.m_375a65ef{display:block;padding:.3em .8em;font-size:var(--toc-size, var(--mantine-font-size-md));border-radius:var(--toc-radius, var(--mantine-radius-default));padding-left:max(calc(var(--depth-offset) * var(--toc-depth-offset)),.8em)}@media(hover:hover){:where([data-mantine-color-scheme=light]) .m_375a65ef:where(:hover):where(:not([data-variant=none])){background-color:var(--mantine-color-gray-1)}:where([data-mantine-color-scheme=dark]) .m_375a65ef:where(:hover):where(:not([data-variant=none])){background-color:var(--mantine-color-dark-5)}}@media(hover:none){:where([data-mantine-color-scheme=light]) .m_375a65ef:where(:active):where(:not([data-variant=none])){background-color:var(--mantine-color-gray-1)}:where([data-mantine-color-scheme=dark]) .m_375a65ef:where(:active):where(:not([data-variant=none])){background-color:var(--mantine-color-dark-5)}}.m_375a65ef:where([data-active]){background-color:var(--toc-bg);color:var(--toc-color)}[data-mantine-color-scheme=light] .m_89d60db1{--tab-border-color: var(--mantine-color-gray-3)}[data-mantine-color-scheme=dark] .m_89d60db1{--tab-border-color: var(--mantine-color-dark-4)}.m_89d60db1{display:var(--tabs-display);flex-direction:var(--tabs-flex-direction);--tabs-list-direction: row;--tabs-panel-grow: unset;--tabs-display: block;--tabs-flex-direction: row;--tabs-list-border-width: 0;--tabs-list-border-size: 0 0 var(--tabs-list-border-width) 0;--tabs-list-gap: unset;--tabs-list-line-bottom: 0;--tabs-list-line-top: unset;--tabs-list-line-start: 0;--tabs-list-line-end: 0;--tab-radius: var(--tabs-radius) var(--tabs-radius) 0 0;--tab-border-width: 0 0 var(--tabs-list-border-width) 0}.m_89d60db1[data-inverted]{--tabs-list-line-bottom: unset;--tabs-list-line-top: 0;--tab-radius: 0 0 var(--tabs-radius) var(--tabs-radius);--tab-border-width: var(--tabs-list-border-width) 0 0 0}.m_89d60db1[data-inverted] .m_576c9d4:before{top:0;bottom:unset}.m_89d60db1[data-orientation=vertical]{--tabs-list-line-start: unset;--tabs-list-line-end: 0;--tabs-list-line-top: 0;--tabs-list-line-bottom: 0;--tabs-list-border-size: 0 var(--tabs-list-border-width) 0 0;--tab-border-width: 0 var(--tabs-list-border-width) 0 0;--tab-radius: var(--tabs-radius) 0 0 var(--tabs-radius);--tabs-list-direction: column;--tabs-panel-grow: 1;--tabs-display: flex}[dir=rtl] .m_89d60db1[data-orientation=vertical]{--tabs-list-border-size: 0 0 0 var(--tabs-list-border-width);--tab-border-width: 0 0 0 var(--tabs-list-border-width);--tab-radius: 0 var(--tabs-radius) var(--tabs-radius) 0}.m_89d60db1[data-orientation=vertical][data-placement=right]{--tabs-flex-direction: row-reverse;--tabs-list-line-start: 0;--tabs-list-line-end: unset;--tabs-list-border-size: 0 0 0 var(--tabs-list-border-width);--tab-border-width: 0 0 0 var(--tabs-list-border-width);--tab-radius: 0 var(--tabs-radius) var(--tabs-radius) 0}[dir=rtl] .m_89d60db1[data-orientation=vertical][data-placement=right]{--tabs-list-border-size: 0 var(--tabs-list-border-width) 0 0;--tab-border-width: 0 var(--tabs-list-border-width) 0 0;--tab-radius: var(--tabs-radius) 0 0 var(--tabs-radius)}.m_89d60db1[data-variant=default]{--tabs-list-border-width: calc(.125rem * var(--mantine-scale))}[data-mantine-color-scheme=light] .m_89d60db1[data-variant=default]{--tab-hover-color: var(--mantine-color-gray-0)}[data-mantine-color-scheme=dark] .m_89d60db1[data-variant=default]{--tab-hover-color: var(--mantine-color-dark-6)}.m_89d60db1[data-variant=outline]{--tabs-list-border-width: calc(.0625rem * var(--mantine-scale))}.m_89d60db1[data-variant=pills]{--tabs-list-gap: calc(var(--mantine-spacing-sm) / 2)}[data-mantine-color-scheme=light] .m_89d60db1[data-variant=pills]{--tab-hover-color: var(--mantine-color-gray-0)}[data-mantine-color-scheme=dark] .m_89d60db1[data-variant=pills]{--tab-hover-color: var(--mantine-color-dark-6)}.m_89d33d6d{display:flex;flex-wrap:wrap;justify-content:var(--tabs-justify, flex-start);flex-direction:var(--tabs-list-direction);gap:var(--tabs-list-gap)}.m_89d33d6d:where([data-grow]) .m_4ec4dce6{flex:1}.m_b0c91715{flex-grow:var(--tabs-panel-grow)}.m_4ec4dce6{position:relative;padding:var(--mantine-spacing-xs) var(--mantine-spacing-md);font-size:var(--mantine-font-size-sm);white-space:nowrap;z-index:0;display:flex;align-items:center;line-height:1;-webkit-user-select:none;user-select:none}.m_4ec4dce6:where(:disabled,[data-disabled]){opacity:.5;cursor:not-allowed}.m_4ec4dce6:focus{z-index:1}.m_fc420b1f{display:flex;align-items:center;justify-content:center}.m_fc420b1f:where([data-position=left]:not(:only-child)){margin-inline-end:var(--mantine-spacing-xs)}.m_fc420b1f:where([data-position=right]:not(:only-child)){margin-inline-start:var(--mantine-spacing-xs)}.m_42bbd1ae{flex:1;text-align:center}.m_576c9d4{position:relative}.m_576c9d4:before{content:"";position:absolute;border:1px solid var(--tab-border-color);bottom:var(--tabs-list-line-bottom);inset-inline-start:var(--tabs-list-line-start);inset-inline-end:var(--tabs-list-line-end);top:var(--tabs-list-line-top)}.m_539e827b{border-radius:var(--tab-radius);border-width:var(--tab-border-width);border-style:solid;border-color:transparent;background-color:transparent}.m_539e827b:where([data-active]){border-color:var(--tabs-color)}@media(hover:hover){.m_539e827b:hover{background-color:var(--tab-hover-color)}.m_539e827b:hover:where(:not([data-active])){border-color:var(--tab-border-color)}}@media(hover:none){.m_539e827b:active{background-color:var(--tab-hover-color)}.m_539e827b:active:where(:not([data-active])){border-color:var(--tab-border-color)}}@media(hover:hover){.m_539e827b:disabled:hover,.m_539e827b[data-disabled]:hover{background-color:transparent}}@media(hover:none){.m_539e827b:disabled:active,.m_539e827b[data-disabled]:active{background-color:transparent}}.m_6772fbd5{position:relative}.m_6772fbd5:before{content:"";position:absolute;border-color:var(--tab-border-color);border-width:var(--tabs-list-border-size);border-style:solid;bottom:var(--tabs-list-line-bottom);inset-inline-start:var(--tabs-list-line-start);inset-inline-end:var(--tabs-list-line-end);top:var(--tabs-list-line-top)}.m_b59ab47c{border-top:calc(.0625rem * var(--mantine-scale)) solid transparent;border-bottom:calc(.0625rem * var(--mantine-scale)) solid transparent;border-right:calc(.0625rem * var(--mantine-scale)) solid transparent;border-left:calc(.0625rem * var(--mantine-scale)) solid transparent;border-top-color:var(--tab-border-top-color);border-bottom-color:var(--tab-border-bottom-color);border-radius:var(--tab-radius);position:relative;--tab-border-bottom-color: transparent;--tab-border-top-color: transparent;--tab-border-inline-end-color: transparent;--tab-border-inline-start-color: transparent}.m_b59ab47c:where([data-active]):before{content:"";position:absolute;background-color:var(--tab-border-color);bottom:var(--tab-before-bottom, calc(-.0625rem * var(--mantine-scale)));left:var(--tab-before-left, calc(-.0625rem * var(--mantine-scale)));right:var(--tab-before-right, auto);top:var(--tab-before-top, auto);width:calc(.0625rem * var(--mantine-scale));height:calc(.0625rem * var(--mantine-scale))}.m_b59ab47c:where([data-active]):after{content:"";position:absolute;background-color:var(--tab-border-color);bottom:var(--tab-after-bottom, calc(-.0625rem * var(--mantine-scale)));right:var(--tab-after-right, calc(-.0625rem * var(--mantine-scale)));left:var(--tab-after-left, auto);top:var(--tab-after-top, auto);width:calc(.0625rem * var(--mantine-scale));height:calc(.0625rem * var(--mantine-scale))}.m_b59ab47c:where([data-active]){border-top-color:var(--tab-border-top-color);border-bottom-color:var(--tab-border-bottom-color);border-inline-start-color:var(--tab-border-inline-start-color);border-inline-end-color:var(--tab-border-inline-end-color);--tab-border-top-color: var(--tab-border-color);--tab-border-inline-start-color: var(--tab-border-color);--tab-border-inline-end-color: var(--tab-border-color);--tab-border-bottom-color: var(--mantine-color-body)}.m_b59ab47c:where([data-active])[data-inverted]{--tab-border-bottom-color: var(--tab-border-color);--tab-border-top-color: var(--mantine-color-body);--tab-before-bottom: auto;--tab-before-top: calc(-.0625rem * var(--mantine-scale));--tab-after-bottom: auto;--tab-after-top: calc(-.0625rem * var(--mantine-scale))}.m_b59ab47c:where([data-active])[data-orientation=vertical][data-placement=left]{--tab-border-inline-end-color: var(--mantine-color-body);--tab-border-inline-start-color: var(--tab-border-color);--tab-border-bottom-color: var(--tab-border-color);--tab-before-right: calc(-.0625rem * var(--mantine-scale));--tab-before-left: auto;--tab-before-bottom: auto;--tab-before-top: calc(-.0625rem * var(--mantine-scale));--tab-after-left: auto;--tab-after-right: calc(-.0625rem * var(--mantine-scale))}[dir=rtl] .m_b59ab47c:where([data-active])[data-orientation=vertical][data-placement=left]{--tab-before-right: auto;--tab-before-left: calc(-.0625rem * var(--mantine-scale));--tab-after-left: calc(-.0625rem * var(--mantine-scale));--tab-after-right: auto}.m_b59ab47c:where([data-active])[data-orientation=vertical][data-placement=right]{--tab-border-inline-start-color: var(--mantine-color-body);--tab-border-inline-end-color: var(--tab-border-color);--tab-border-bottom-color: var(--tab-border-color);--tab-before-left: calc(-.0625rem * var(--mantine-scale));--tab-before-right: auto;--tab-before-bottom: auto;--tab-before-top: calc(-.0625rem * var(--mantine-scale));--tab-after-right: auto;--tab-after-left: calc(-.0625rem * var(--mantine-scale))}[dir=rtl] .m_b59ab47c:where([data-active])[data-orientation=vertical][data-placement=right]{--tab-before-left: auto;--tab-before-right: calc(-.0625rem * var(--mantine-scale));--tab-after-right: calc(-.0625rem * var(--mantine-scale));--tab-after-left: auto}.m_c3381914{border-radius:var(--tabs-radius);background-color:var(--tab-bg);color:var(--tab-color);--tab-bg: transparent;--tab-color: inherit}@media(hover:hover){.m_c3381914:not([data-disabled]):hover{--tab-bg: var(--tab-hover-color)}}@media(hover:none){.m_c3381914:not([data-disabled]):active{--tab-bg: var(--tab-hover-color)}}.m_c3381914[data-active][data-active]{--tab-bg: var(--tabs-color);--tab-color: var(--tabs-text-color, var(--mantine-color-white))}@media(hover:hover){.m_c3381914[data-active][data-active]:hover{--tab-bg: var(--tabs-color)}}@media(hover:none){.m_c3381914[data-active][data-active]:active{--tab-bg: var(--tabs-color)}}.m_7341320d{--ti-size-xs: calc(1.125rem * var(--mantine-scale));--ti-size-sm: calc(1.375rem * var(--mantine-scale));--ti-size-md: calc(1.75rem * var(--mantine-scale));--ti-size-lg: calc(2.125rem * var(--mantine-scale));--ti-size-xl: calc(2.75rem * var(--mantine-scale));--ti-size: var(--ti-size-md);line-height:1;display:inline-flex;align-items:center;justify-content:center;position:relative;-webkit-user-select:none;user-select:none;width:var(--ti-size);height:var(--ti-size);min-width:var(--ti-size);min-height:var(--ti-size);border-radius:var(--ti-radius, var(--mantine-radius-default));background:var(--ti-bg, var(--mantine-primary-color-filled));color:var(--ti-color, var(--mantine-color-white));border:var(--ti-bd, 1px solid transparent)}.m_43657ece{--offset: calc(var(--tl-bullet-size) / 2 + var(--tl-line-width) / 2);--tl-bullet-size: calc(1.25rem * var(--mantine-scale));--tl-line-width: calc(.25rem * var(--mantine-scale));--tl-radius: calc(62.5rem * var(--mantine-scale));--tl-color: var(--mantine-primary-color-filled)}.m_43657ece:where([data-align=left]){padding-inline-start:var(--offset)}.m_43657ece:where([data-align=right]){padding-inline-end:var(--offset)}.m_2ebe8099{font-weight:500;line-height:1;margin-bottom:calc(var(--mantine-spacing-xs) / 2)}.m_436178ff{--item-border: var(--tl-line-width) var(--tli-border-style, solid) var(--item-border-color);position:relative;color:var(--mantine-color-text)}.m_436178ff:before{content:"";pointer-events:none;position:absolute;top:0;left:var(--timeline-line-left, 0);right:var(--timeline-line-right, 0);bottom:calc(var(--mantine-spacing-xl) * -1);border-inline-start:var(--item-border);display:var(--timeline-line-display, none)}.m_43657ece[data-align=left] .m_436178ff:before{--timeline-line-left: calc(var(--tl-line-width) * -1);--timeline-line-right: auto}[dir=rtl] .m_43657ece[data-align=left] .m_436178ff:before{--timeline-line-left: auto;--timeline-line-right: calc(var(--tl-line-width) * -1)}.m_43657ece[data-align=right] .m_436178ff:before{--timeline-line-left: auto;--timeline-line-right: calc(var(--tl-line-width) * -1)}[dir=rtl] .m_43657ece[data-align=right] .m_436178ff:before{--timeline-line-left: calc(var(--tl-line-width) * -1);--timeline-line-right: auto}.m_43657ece:where([data-align=left]) .m_436178ff{padding-inline-start:var(--offset);text-align:left}.m_43657ece:where([data-align=right]) .m_436178ff{padding-inline-end:var(--offset);text-align:right}:where([data-mantine-color-scheme=light]) .m_436178ff{--item-border-color: var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_436178ff{--item-border-color: var(--mantine-color-dark-4)}.m_436178ff:where([data-line-active]):before{border-color:var(--tli-color, var(--tl-color))}.m_436178ff:where(:not(:last-of-type)){--timeline-line-display: block}.m_436178ff:where(:not(:first-of-type)){margin-top:var(--mantine-spacing-xl)}.m_8affcee1{width:var(--tl-bullet-size);height:var(--tl-bullet-size);border-radius:var(--tli-radius, var(--tl-radius));border:var(--tl-line-width) solid;background-color:var(--mantine-color-body);position:absolute;top:0;display:flex;align-items:center;justify-content:center;color:var(--mantine-color-text)}:where([data-mantine-color-scheme=light]) .m_8affcee1{border-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_8affcee1{border-color:var(--mantine-color-dark-4)}.m_43657ece:where([data-align=left]) .m_8affcee1{left:calc((var(--tl-bullet-size) / 2 + var(--tl-line-width) / 2) * -1);right:auto}:where([dir=rtl]) .m_43657ece:where([data-align=left]) .m_8affcee1{left:auto;right:calc((var(--tl-bullet-size) / 2 + var(--tl-line-width) / 2) * -1)}.m_43657ece:where([data-align=right]) .m_8affcee1{left:auto;right:calc((var(--tl-bullet-size) / 2 + var(--tl-line-width) / 2) * -1)}:where([dir=rtl]) .m_43657ece:where([data-align=right]) .m_8affcee1{left:calc((var(--tl-bullet-size) / 2 + var(--tl-line-width) / 2) * -1);right:auto}.m_8affcee1:where([data-with-child]){border-width:var(--tl-line-width)}:where([data-mantine-color-scheme=light]) .m_8affcee1:where([data-with-child]){background-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_8affcee1:where([data-with-child]){background-color:var(--mantine-color-dark-4)}.m_8affcee1:where([data-active]){border-color:var(--tli-color, var(--tl-color));background-color:var(--mantine-color-white);color:var(--tl-icon-color, var(--mantine-color-white))}.m_8affcee1:where([data-active]):where([data-with-child]){background-color:var(--tli-color, var(--tl-color));color:var(--tl-icon-color, var(--mantine-color-white))}.m_43657ece:where([data-align=left]) .m_540e8f41{padding-inline-start:var(--offset);text-align:left}:where([dir=rtl]) .m_43657ece:where([data-align=left]) .m_540e8f41{text-align:right}.m_43657ece:where([data-align=right]) .m_540e8f41{padding-inline-end:var(--offset);text-align:right}:where([dir=rtl]) .m_43657ece:where([data-align=right]) .m_540e8f41{text-align:left}.m_8a5d1357{margin:0;font-weight:var(--title-fw);font-size:var(--title-fz);line-height:var(--title-lh);font-family:var(--mantine-font-family-headings);text-wrap:var(--title-text-wrap, var(--mantine-heading-text-wrap))}.m_8a5d1357:where([data-line-clamp]){overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:var(--title-line-clamp);-webkit-box-orient:vertical}.m_f698e191{--level-offset: var(--mantine-spacing-lg);margin:0;padding:0;-webkit-user-select:none;user-select:none}.m_75f3ecf{margin:0;padding:0}.m_f6970eb1{cursor:pointer;list-style:none;margin:0;padding:0;outline:0}.m_f6970eb1:focus-visible>.m_dc283425{outline:2px solid var(--mantine-primary-color-filled);outline-offset:calc(.125rem * var(--mantine-scale))}.m_dc283425{padding-inline-start:var(--label-offset)}:where([data-mantine-color-scheme=light]) .m_dc283425:where([data-selected]){background-color:var(--mantine-color-gray-1)}:where([data-mantine-color-scheme=dark]) .m_dc283425:where([data-selected]){background-color:var(--mantine-color-dark-5)}.m_d6493fad :first-child{margin-top:0}.m_d6493fad :last-child{margin-bottom:0}.m_d6493fad :where(h1,h2,h3,h4,h5,h6){margin-bottom:var(--mantine-spacing-xs);text-wrap:var(--mantine-heading-text-wrap);font-family:var(--mantine-font-family-headings)}.m_d6493fad :where(h1){margin-top:calc(1.5 * var(--mantine-spacing-xl));font-size:var(--mantine-h1-font-size);line-height:var(--mantine-h1-line-height);font-weight:var(--mantine-h1-font-weight)}.m_d6493fad :where(h2){margin-top:var(--mantine-spacing-xl);font-size:var(--mantine-h2-font-size);line-height:var(--mantine-h2-line-height);font-weight:var(--mantine-h2-font-weight)}.m_d6493fad :where(h3){margin-top:calc(.8 * var(--mantine-spacing-xl));font-size:var(--mantine-h3-font-size);line-height:var(--mantine-h3-line-height);font-weight:var(--mantine-h3-font-weight)}.m_d6493fad :where(h4){margin-top:calc(.8 * var(--mantine-spacing-xl));font-size:var(--mantine-h4-font-size);line-height:var(--mantine-h4-line-height);font-weight:var(--mantine-h4-font-weight)}.m_d6493fad :where(h5){margin-top:calc(.5 * var(--mantine-spacing-xl));font-size:var(--mantine-h5-font-size);line-height:var(--mantine-h5-line-height);font-weight:var(--mantine-h5-font-weight)}.m_d6493fad :where(h6){margin-top:calc(.5 * var(--mantine-spacing-xl));font-size:var(--mantine-h6-font-size);line-height:var(--mantine-h6-line-height);font-weight:var(--mantine-h6-font-weight)}.m_d6493fad :where(img){max-width:100%;margin-bottom:var(--mantine-spacing-xs)}.m_d6493fad :where(p){margin-top:0;margin-bottom:var(--mantine-spacing-lg)}:where([data-mantine-color-scheme=light]) .m_d6493fad :where(mark){background-color:var(--mantine-color-yellow-2);color:inherit}:where([data-mantine-color-scheme=dark]) .m_d6493fad :where(mark){background-color:var(--mantine-color-yellow-5);color:var(--mantine-color-black)}.m_d6493fad :where(a){color:var(--mantine-color-anchor);text-decoration:none}@media(hover:hover){.m_d6493fad :where(a):hover{text-decoration:underline}}@media(hover:none){.m_d6493fad :where(a):active{text-decoration:underline}}.m_d6493fad :where(hr){margin-top:var(--mantine-spacing-md);margin-bottom:var(--mantine-spacing-md);border:0;border-top:calc(.0625rem * var(--mantine-scale)) solid}:where([data-mantine-color-scheme=light]) .m_d6493fad :where(hr){border-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_d6493fad :where(hr){border-color:var(--mantine-color-dark-3)}.m_d6493fad :where(pre){padding:var(--mantine-spacing-xs);line-height:var(--mantine-line-height);margin:0;margin-top:var(--mantine-spacing-md);margin-bottom:var(--mantine-spacing-md);overflow-x:auto;font-family:var(--mantine-font-family-monospace);font-size:var(--mantine-font-size-xs);border-radius:var(--mantine-radius-sm)}:where([data-mantine-color-scheme=light]) .m_d6493fad :where(pre){background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_d6493fad :where(pre){background-color:var(--mantine-color-dark-8)}.m_d6493fad :where(pre) :where(code){background-color:transparent;padding:0;border-radius:0;color:inherit;border:0}.m_d6493fad :where(kbd){--kbd-fz: calc(.75rem * var(--mantine-scale));--kbd-padding: calc(.1875rem * var(--mantine-scale)) calc(.3125rem * var(--mantine-scale));font-family:var(--mantine-font-family-monospace);line-height:var(--mantine-line-height);font-weight:700;padding:var(--kbd-padding);font-size:var(--kbd-fz);border-radius:var(--mantine-radius-sm);border:calc(.0625rem * var(--mantine-scale)) solid;border-bottom-width:calc(.1875rem * var(--mantine-scale))}:where([data-mantine-color-scheme=light]) .m_d6493fad :where(kbd){border-color:var(--mantine-color-gray-3);color:var(--mantine-color-gray-7);background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_d6493fad :where(kbd){border-color:var(--mantine-color-dark-3);color:var(--mantine-color-dark-0);background-color:var(--mantine-color-dark-5)}.m_d6493fad :where(code){line-height:var(--mantine-line-height);padding:calc(.0625rem * var(--mantine-scale)) calc(.3125rem * var(--mantine-scale));border-radius:var(--mantine-radius-sm);font-family:var(--mantine-font-family-monospace);font-size:var(--mantine-font-size-xs)}:where([data-mantine-color-scheme=light]) .m_d6493fad :where(code){background-color:var(--mantine-color-gray-0);color:var(--mantine-color-black)}:where([data-mantine-color-scheme=dark]) .m_d6493fad :where(code){background-color:var(--mantine-color-dark-5);color:var(--mantine-color-white)}.m_d6493fad :where(ul,ol):not([data-type=taskList]){margin-bottom:var(--mantine-spacing-md);padding-inline-start:var(--mantine-spacing-xl);list-style-position:outside}.m_d6493fad :where(table){width:100%;border-collapse:collapse;caption-side:bottom;margin-bottom:var(--mantine-spacing-md)}:where([data-mantine-color-scheme=light]) .m_d6493fad :where(table){--table-border-color: var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_d6493fad :where(table){--table-border-color: var(--mantine-color-dark-4)}.m_d6493fad :where(table) :where(caption){margin-top:var(--mantine-spacing-xs);font-size:var(--mantine-font-size-sm);color:var(--mantine-color-dimmed)}.m_d6493fad :where(table) :where(th){text-align:left;font-weight:700;font-size:var(--mantine-font-size-sm);padding:var(--mantine-spacing-xs) var(--mantine-spacing-sm)}.m_d6493fad :where(table) :where(thead th){border-bottom:calc(.0625rem * var(--mantine-scale)) solid;border-color:var(--table-border-color)}.m_d6493fad :where(table) :where(tfoot th){border-top:calc(.0625rem * var(--mantine-scale)) solid;border-color:var(--table-border-color)}.m_d6493fad :where(table) :where(td){padding:var(--mantine-spacing-xs) var(--mantine-spacing-sm);border-bottom:calc(.0625rem * var(--mantine-scale)) solid;border-color:var(--table-border-color);font-size:var(--mantine-font-size-sm)}.m_d6493fad :where(table) :where(tr:last-of-type td){border-bottom:0}.m_d6493fad :where(blockquote){font-size:var(--mantine-font-size-lg);line-height:var(--mantine-line-height);margin:var(--mantine-spacing-md) 0;border-radius:var(--mantine-radius-sm);padding:var(--mantine-spacing-md) var(--mantine-spacing-lg)}:where([data-mantine-color-scheme=light]) .m_d6493fad :where(blockquote){background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_d6493fad :where(blockquote){background-color:var(--mantine-color-dark-8)}.m_b37d9ac7{width:calc(100% - var(--mantine-spacing-md) * 2);position:fixed;z-index:var(--notifications-z-index);max-width:var(--notifications-container-width)}.m_b37d9ac7:where([data-position=top-center]){top:var(--mantine-spacing-md);left:50%;transform:translate(-50%)}.m_b37d9ac7:where([data-position=top-left]){top:var(--mantine-spacing-md);left:var(--mantine-spacing-md)}.m_b37d9ac7:where([data-position=top-right]){top:var(--mantine-spacing-md);right:var(--mantine-spacing-md)}.m_b37d9ac7:where([data-position=bottom-center]){bottom:var(--mantine-spacing-md);left:50%;transform:translate(-50%)}.m_b37d9ac7:where([data-position=bottom-left]){bottom:var(--mantine-spacing-md);left:var(--mantine-spacing-md)}.m_b37d9ac7:where([data-position=bottom-right]){bottom:var(--mantine-spacing-md);right:var(--mantine-spacing-md)}.m_5ed0edd0+.m_5ed0edd0{margin-top:var(--mantine-spacing-md)} diff --git a/plugins/embyfin-stream-cleanup/dash/static/assets/index-CD0U4Soj.js b/plugins/embyfin-stream-cleanup/dash/static/assets/index-CD0U4Soj.js new file mode 100644 index 0000000..cc4fa2c --- /dev/null +++ b/plugins/embyfin-stream-cleanup/dash/static/assets/index-CD0U4Soj.js @@ -0,0 +1,60 @@ +function vw(n,o){for(var l=0;li[s]})}}}return Object.freeze(Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}))}(function(){const o=document.createElement("link").relList;if(o&&o.supports&&o.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))i(s);new MutationObserver(s=>{for(const c of s)if(c.type==="childList")for(const f of c.addedNodes)f.tagName==="LINK"&&f.rel==="modulepreload"&&i(f)}).observe(document,{childList:!0,subtree:!0});function l(s){const c={};return s.integrity&&(c.integrity=s.integrity),s.referrerPolicy&&(c.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?c.credentials="include":s.crossOrigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function i(s){if(s.ep)return;s.ep=!0;const c=l(s);fetch(s.href,c)}})();function x0(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var Jf={exports:{}},Jr={};var iy;function gw(){if(iy)return Jr;iy=1;var n=Symbol.for("react.transitional.element"),o=Symbol.for("react.fragment");function l(i,s,c){var f=null;if(c!==void 0&&(f=""+c),s.key!==void 0&&(f=""+s.key),"key"in s){c={};for(var m in s)m!=="key"&&(c[m]=s[m])}else c=s;return s=c.ref,{$$typeof:n,type:i,key:f,ref:s!==void 0?s:null,props:c}}return Jr.Fragment=o,Jr.jsx=l,Jr.jsxs=l,Jr}var sy;function yw(){return sy||(sy=1,Jf.exports=gw()),Jf.exports}var b=yw(),Ff={exports:{}},Re={};var cy;function bw(){if(cy)return Re;cy=1;var n=Symbol.for("react.transitional.element"),o=Symbol.for("react.portal"),l=Symbol.for("react.fragment"),i=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),c=Symbol.for("react.consumer"),f=Symbol.for("react.context"),m=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),h=Symbol.for("react.memo"),v=Symbol.for("react.lazy"),y=Symbol.for("react.activity"),S=Symbol.iterator;function x(_){return _===null||typeof _!="object"?null:(_=S&&_[S]||_["@@iterator"],typeof _=="function"?_:null)}var C={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},E=Object.assign,R={};function N(_,Y,ee){this.props=_,this.context=Y,this.refs=R,this.updater=ee||C}N.prototype.isReactComponent={},N.prototype.setState=function(_,Y){if(typeof _!="object"&&typeof _!="function"&&_!=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,_,Y,"setState")},N.prototype.forceUpdate=function(_){this.updater.enqueueForceUpdate(this,_,"forceUpdate")};function j(){}j.prototype=N.prototype;function M(_,Y,ee){this.props=_,this.context=Y,this.refs=R,this.updater=ee||C}var z=M.prototype=new j;z.constructor=M,E(z,N.prototype),z.isPureReactComponent=!0;var U=Array.isArray;function O(){}var H={H:null,A:null,T:null,S:null},k=Object.prototype.hasOwnProperty;function Z(_,Y,ee){var ue=ee.ref;return{$$typeof:n,type:_,key:Y,ref:ue!==void 0?ue:null,props:ee}}function ne(_,Y){return Z(_.type,Y,_.props)}function ae(_){return typeof _=="object"&&_!==null&&_.$$typeof===n}function te(_){var Y={"=":"=0",":":"=2"};return"$"+_.replace(/[=:]/g,function(ee){return Y[ee]})}var ie=/\/+/g;function ce(_,Y){return typeof _=="object"&&_!==null&&_.key!=null?te(""+_.key):Y.toString(36)}function oe(_){switch(_.status){case"fulfilled":return _.value;case"rejected":throw _.reason;default:switch(typeof _.status=="string"?_.then(O,O):(_.status="pending",_.then(function(Y){_.status==="pending"&&(_.status="fulfilled",_.value=Y)},function(Y){_.status==="pending"&&(_.status="rejected",_.reason=Y)})),_.status){case"fulfilled":return _.value;case"rejected":throw _.reason}}throw _}function A(_,Y,ee,ue,re){var de=typeof _;(de==="undefined"||de==="boolean")&&(_=null);var ge=!1;if(_===null)ge=!0;else switch(de){case"bigint":case"string":case"number":ge=!0;break;case"object":switch(_.$$typeof){case n:case o:ge=!0;break;case v:return ge=_._init,A(ge(_._payload),Y,ee,ue,re)}}if(ge)return re=re(_),ge=ue===""?"."+ce(_,0):ue,U(re)?(ee="",ge!=null&&(ee=ge.replace(ie,"$&/")+"/"),A(re,Y,ee,"",function(He){return He})):re!=null&&(ae(re)&&(re=ne(re,ee+(re.key==null||_&&_.key===re.key?"":(""+re.key).replace(ie,"$&/")+"/")+ge)),Y.push(re)),1;ge=0;var Ee=ue===""?".":ue+":";if(U(_))for(var Te=0;Te<_.length;Te++)ue=_[Te],de=Ee+ce(ue,Te),ge+=A(ue,Y,ee,de,re);else if(Te=x(_),typeof Te=="function")for(_=Te.call(_),Te=0;!(ue=_.next()).done;)ue=ue.value,de=Ee+ce(ue,Te++),ge+=A(ue,Y,ee,de,re);else if(de==="object"){if(typeof _.then=="function")return A(oe(_),Y,ee,ue,re);throw Y=String(_),Error("Objects are not valid as a React child (found: "+(Y==="[object Object]"?"object with keys {"+Object.keys(_).join(", ")+"}":Y)+"). If you meant to render a collection of children, use an array instead.")}return ge}function B(_,Y,ee){if(_==null)return _;var ue=[],re=0;return A(_,ue,"","",function(de){return Y.call(ee,de,re++)}),ue}function L(_){if(_._status===-1){var Y=_._result;Y=Y(),Y.then(function(ee){(_._status===0||_._status===-1)&&(_._status=1,_._result=ee)},function(ee){(_._status===0||_._status===-1)&&(_._status=2,_._result=ee)}),_._status===-1&&(_._status=0,_._result=Y)}if(_._status===1)return _._result.default;throw _._result}var X=typeof reportError=="function"?reportError:function(_){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var Y=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof _=="object"&&_!==null&&typeof _.message=="string"?String(_.message):String(_),error:_});if(!window.dispatchEvent(Y))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",_);return}console.error(_)},F={map:B,forEach:function(_,Y,ee){B(_,function(){Y.apply(this,arguments)},ee)},count:function(_){var Y=0;return B(_,function(){Y++}),Y},toArray:function(_){return B(_,function(Y){return Y})||[]},only:function(_){if(!ae(_))throw Error("React.Children.only expected to receive a single React element child.");return _}};return Re.Activity=y,Re.Children=F,Re.Component=N,Re.Fragment=l,Re.Profiler=s,Re.PureComponent=M,Re.StrictMode=i,Re.Suspense=p,Re.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=H,Re.__COMPILER_RUNTIME={__proto__:null,c:function(_){return H.H.useMemoCache(_)}},Re.cache=function(_){return function(){return _.apply(null,arguments)}},Re.cacheSignal=function(){return null},Re.cloneElement=function(_,Y,ee){if(_==null)throw Error("The argument must be a React element, but you passed "+_+".");var ue=E({},_.props),re=_.key;if(Y!=null)for(de in Y.key!==void 0&&(re=""+Y.key),Y)!k.call(Y,de)||de==="key"||de==="__self"||de==="__source"||de==="ref"&&Y.ref===void 0||(ue[de]=Y[de]);var de=arguments.length-2;if(de===1)ue.children=ee;else if(1>>1,F=A[X];if(0>>1;X<_;){var Y=2*(X+1)-1,ee=A[Y],ue=Y+1,re=A[ue];if(0>s(ee,L))ues(re,ee)?(A[X]=re,A[ue]=L,X=ue):(A[X]=ee,A[Y]=L,X=Y);else if(ues(re,L))A[X]=re,A[ue]=L,X=ue;else break e}}return B}function s(A,B){var L=A.sortIndex-B.sortIndex;return L!==0?L:A.id-B.id}if(n.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var c=performance;n.unstable_now=function(){return c.now()}}else{var f=Date,m=f.now();n.unstable_now=function(){return f.now()-m}}var p=[],h=[],v=1,y=null,S=3,x=!1,C=!1,E=!1,R=!1,N=typeof setTimeout=="function"?setTimeout:null,j=typeof clearTimeout=="function"?clearTimeout:null,M=typeof setImmediate<"u"?setImmediate:null;function z(A){for(var B=l(h);B!==null;){if(B.callback===null)i(h);else if(B.startTime<=A)i(h),B.sortIndex=B.expirationTime,o(p,B);else break;B=l(h)}}function U(A){if(E=!1,z(A),!C)if(l(p)!==null)C=!0,O||(O=!0,te());else{var B=l(h);B!==null&&oe(U,B.startTime-A)}}var O=!1,H=-1,k=5,Z=-1;function ne(){return R?!0:!(n.unstable_now()-ZA&&ne());){var X=y.callback;if(typeof X=="function"){y.callback=null,S=y.priorityLevel;var F=X(y.expirationTime<=A);if(A=n.unstable_now(),typeof F=="function"){y.callback=F,z(A),B=!0;break t}y===l(p)&&i(p),z(A)}else i(p);y=l(p)}if(y!==null)B=!0;else{var _=l(h);_!==null&&oe(U,_.startTime-A),B=!1}}break e}finally{y=null,S=L,x=!1}B=void 0}}finally{B?te():O=!1}}}var te;if(typeof M=="function")te=function(){M(ae)};else if(typeof MessageChannel<"u"){var ie=new MessageChannel,ce=ie.port2;ie.port1.onmessage=ae,te=function(){ce.postMessage(null)}}else te=function(){N(ae,0)};function oe(A,B){H=N(function(){A(n.unstable_now())},B)}n.unstable_IdlePriority=5,n.unstable_ImmediatePriority=1,n.unstable_LowPriority=4,n.unstable_NormalPriority=3,n.unstable_Profiling=null,n.unstable_UserBlockingPriority=2,n.unstable_cancelCallback=function(A){A.callback=null},n.unstable_forceFrameRate=function(A){0>A||125X?(A.sortIndex=L,o(h,A),l(p)===null&&A===l(h)&&(E?(j(H),H=-1):E=!0,oe(U,L-X))):(A.sortIndex=F,o(p,A),C||x||(C=!0,O||(O=!0,te()))),A},n.unstable_shouldYield=ne,n.unstable_wrapCallback=function(A){var B=S;return function(){var L=S;S=B;try{return A.apply(this,arguments)}finally{S=L}}}})(td)),td}var dy;function ww(){return dy||(dy=1,ed.exports=xw()),ed.exports}var nd={exports:{}},Ut={};var my;function Cw(){if(my)return Ut;my=1;var n=Pd();function o(p){var h="https://react.dev/errors/"+p;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(o){console.error(o)}}return n(),nd.exports=Cw(),nd.exports}var hy;function Ew(){if(hy)return Fr;hy=1;var n=ww(),o=Pd(),l=w0();function i(e){var t="https://react.dev/errors/"+e;if(1F||(e.current=X[F],X[F]=null,F--)}function ee(e,t){F++,X[F]=e.current,e.current=t}var ue=_(null),re=_(null),de=_(null),ge=_(null);function Ee(e,t){switch(ee(de,t),ee(re,e),ee(ue,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Mg(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Mg(t),e=Og(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}Y(ue),ee(ue,e)}function Te(){Y(ue),Y(re),Y(de)}function He(e){e.memoizedState!==null&&ee(ge,e);var t=ue.current,a=Og(t,e.type);t!==a&&(ee(re,e),ee(ue,a))}function st(e){re.current===e&&(Y(ue),Y(re)),ge.current===e&&(Y(ge),Qr._currentValue=L)}var ot,St;function Je(e){if(ot===void 0)try{throw Error()}catch(a){var t=a.stack.trim().match(/\n( *(at )?)/);ot=t&&t[1]||"",St=-1)":-1u||D[r]!==G[u]){var I=` +`+D[r].replace(" at new "," at ");return e.displayName&&I.includes("")&&(I=I.replace("",e.displayName)),I}while(1<=r&&0<=u);break}}}finally{ct=!1,Error.prepareStackTrace=a}return(a=e?e.displayName||e.name:"")?Je(a):""}function me(e,t){switch(e.tag){case 26:case 27:case 5:return Je(e.type);case 16:return Je("Lazy");case 13:return e.child!==t&&t!==null?Je("Suspense Fallback"):Je("Suspense");case 19:return Je("SuspenseList");case 0:case 15:return $t(e.type,!1);case 11:return $t(e.type.render,!1);case 1:return $t(e.type,!0);case 31:return Je("Activity");default:return""}}function pe(e){try{var t="",a=null;do t+=me(e,a),a=e,e=e.return;while(e);return t}catch(r){return` +Error generating stack: `+r.message+` +`+r.stack}}var Se=Object.prototype.hasOwnProperty,Me=n.unstable_scheduleCallback,Oe=n.unstable_cancelCallback,ye=n.unstable_shouldYield,je=n.unstable_requestPaint,se=n.unstable_now,Ce=n.unstable_getCurrentPriorityLevel,lt=n.unstable_ImmediatePriority,ut=n.unstable_UserBlockingPriority,Lt=n.unstable_NormalPriority,nt=n.unstable_LowPriority,Et=n.unstable_IdlePriority,so=n.log,Si=n.unstable_setDisableYieldValue,co=null,Ht=null;function at(e){if(typeof so=="function"&&Si(e),Ht&&typeof Ht.setStrictMode=="function")try{Ht.setStrictMode(co,e)}catch{}}var Tt=Math.clz32?Math.clz32:nS,lr=Math.log,tS=Math.LN2;function nS(e){return e>>>=0,e===0?32:31-(lr(e)/tS|0)|0}var xi=256,wi=262144,Ci=4194304;function uo(e){var t=e&42;if(t!==0)return t;switch(e&-e){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 e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function Ei(e,t,a){var r=e.pendingLanes;if(r===0)return 0;var u=0,d=e.suspendedLanes,g=e.pingedLanes;e=e.warmLanes;var T=r&134217727;return T!==0?(r=T&~d,r!==0?u=uo(r):(g&=T,g!==0?u=uo(g):a||(a=T&~e,a!==0&&(u=uo(a))))):(T=r&~d,T!==0?u=uo(T):g!==0?u=uo(g):a||(a=r&~e,a!==0&&(u=uo(a)))),u===0?0:t!==0&&t!==u&&(t&d)===0&&(d=u&-u,a=t&-t,d>=a||d===32&&(a&4194048)!==0)?t:u}function rr(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function aS(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+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 t+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 fp(){var e=Ci;return Ci<<=1,(Ci&62914560)===0&&(Ci=4194304),e}function Hc(e){for(var t=[],a=0;31>a;a++)t.push(e);return t}function ir(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function oS(e,t,a,r,u,d){var g=e.pendingLanes;e.pendingLanes=a,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=a,e.entangledLanes&=a,e.errorRecoveryDisabledLanes&=a,e.shellSuspendCounter=0;var T=e.entanglements,D=e.expirationTimes,G=e.hiddenUpdates;for(a=g&~a;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var uS=/[\n"\\]/g;function pn(e){return e.replace(uS,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function Gc(e,t,a,r,u,d,g,T){e.name="",g!=null&&typeof g!="function"&&typeof g!="symbol"&&typeof g!="boolean"?e.type=g:e.removeAttribute("type"),t!=null?g==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+mn(t)):e.value!==""+mn(t)&&(e.value=""+mn(t)):g!=="submit"&&g!=="reset"||e.removeAttribute("value"),t!=null?Xc(e,g,mn(t)):a!=null?Xc(e,g,mn(a)):r!=null&&e.removeAttribute("value"),u==null&&d!=null&&(e.defaultChecked=!!d),u!=null&&(e.checked=u&&typeof u!="function"&&typeof u!="symbol"),T!=null&&typeof T!="function"&&typeof T!="symbol"&&typeof T!="boolean"?e.name=""+mn(T):e.removeAttribute("name")}function Ep(e,t,a,r,u,d,g,T){if(d!=null&&typeof d!="function"&&typeof d!="symbol"&&typeof d!="boolean"&&(e.type=d),t!=null||a!=null){if(!(d!=="submit"&&d!=="reset"||t!=null)){qc(e);return}a=a!=null?""+mn(a):"",t=t!=null?""+mn(t):a,T||t===e.value||(e.value=t),e.defaultValue=t}r=r??u,r=typeof r!="function"&&typeof r!="symbol"&&!!r,e.checked=T?e.checked:!!r,e.defaultChecked=!!r,g!=null&&typeof g!="function"&&typeof g!="symbol"&&typeof g!="boolean"&&(e.name=g),qc(e)}function Xc(e,t,a){t==="number"&&_i(e.ownerDocument)===e||e.defaultValue===""+a||(e.defaultValue=""+a)}function Io(e,t,a,r){if(e=e.options,t){t={};for(var u=0;u"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Ic=!1;if(Fn)try{var fr={};Object.defineProperty(fr,"passive",{get:function(){Ic=!0}}),window.addEventListener("test",fr,fr),window.removeEventListener("test",fr,fr)}catch{Ic=!1}var Ma=null,Jc=null,Ai=null;function Op(){if(Ai)return Ai;var e,t=Jc,a=t.length,r,u="value"in Ma?Ma.value:Ma.textContent,d=u.length;for(e=0;e=pr),Lp=" ",Hp=!1;function Up(e,t){switch(e){case"keyup":return HS.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Vp(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var el=!1;function VS(e,t){switch(e){case"compositionend":return Vp(t);case"keypress":return t.which!==32?null:(Hp=!0,Lp);case"textInput":return e=t.data,e===Lp&&Hp?null:e;default:return null}}function kS(e,t){if(el)return e==="compositionend"||!nu&&Up(e,t)?(e=Op(),Ai=Jc=Ma=null,el=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:a,offset:t-e};e=r}e:{for(;a;){if(a.nextSibling){a=a.nextSibling;break e}a=a.parentNode}a=void 0}a=Zp(a)}}function Ip(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Ip(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Jp(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=_i(e.document);t instanceof e.HTMLIFrameElement;){try{var a=typeof t.contentWindow.location.href=="string"}catch{a=!1}if(a)e=t.contentWindow;else break;t=_i(e.document)}return t}function lu(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var KS=Fn&&"documentMode"in document&&11>=document.documentMode,tl=null,ru=null,yr=null,iu=!1;function Fp(e,t,a){var r=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;iu||tl==null||tl!==_i(r)||(r=tl,"selectionStart"in r&&lu(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),yr&&gr(yr,r)||(yr=r,r=ws(ru,"onSelect"),0>=g,u-=g,Un=1<<32-Tt(t)+u|a<Ae?($e=be,be=null):$e=be.sibling;var Ve=P(V,be,q[Ae],J);if(Ve===null){be===null&&(be=$e);break}e&&be&&Ve.alternate===null&&t(V,be),$=d(Ve,$,Ae),Ue===null?xe=Ve:Ue.sibling=Ve,Ue=Ve,be=$e}if(Ae===q.length)return a(V,be),Le&&ea(V,Ae),xe;if(be===null){for(;AeAe?($e=be,be=null):$e=be.sibling;var Fa=P(V,be,Ve.value,J);if(Fa===null){be===null&&(be=$e);break}e&&be&&Fa.alternate===null&&t(V,be),$=d(Fa,$,Ae),Ue===null?xe=Fa:Ue.sibling=Fa,Ue=Fa,be=$e}if(Ve.done)return a(V,be),Le&&ea(V,Ae),xe;if(be===null){for(;!Ve.done;Ae++,Ve=q.next())Ve=W(V,Ve.value,J),Ve!==null&&($=d(Ve,$,Ae),Ue===null?xe=Ve:Ue.sibling=Ve,Ue=Ve);return Le&&ea(V,Ae),xe}for(be=r(be);!Ve.done;Ae++,Ve=q.next())Ve=Q(be,V,Ae,Ve.value,J),Ve!==null&&(e&&Ve.alternate!==null&&be.delete(Ve.key===null?Ae:Ve.key),$=d(Ve,$,Ae),Ue===null?xe=Ve:Ue.sibling=Ve,Ue=Ve);return e&&be.forEach(function(hw){return t(V,hw)}),Le&&ea(V,Ae),xe}function Qe(V,$,q,J){if(typeof q=="object"&&q!==null&&q.type===E&&q.key===null&&(q=q.props.children),typeof q=="object"&&q!==null){switch(q.$$typeof){case x:e:{for(var xe=q.key;$!==null;){if($.key===xe){if(xe=q.type,xe===E){if($.tag===7){a(V,$.sibling),J=u($,q.props.children),J.return=V,V=J;break e}}else if($.elementType===xe||typeof xe=="object"&&xe!==null&&xe.$$typeof===k&&wo(xe)===$.type){a(V,$.sibling),J=u($,q.props),Er(J,q),J.return=V,V=J;break e}a(V,$);break}else t(V,$);$=$.sibling}q.type===E?(J=go(q.props.children,V.mode,J,q.key),J.return=V,V=J):(J=Ui(q.type,q.key,q.props,null,V.mode,J),Er(J,q),J.return=V,V=J)}return g(V);case C:e:{for(xe=q.key;$!==null;){if($.key===xe)if($.tag===4&&$.stateNode.containerInfo===q.containerInfo&&$.stateNode.implementation===q.implementation){a(V,$.sibling),J=u($,q.children||[]),J.return=V,V=J;break e}else{a(V,$);break}else t(V,$);$=$.sibling}J=pu(q,V.mode,J),J.return=V,V=J}return g(V);case k:return q=wo(q),Qe(V,$,q,J)}if(oe(q))return he(V,$,q,J);if(te(q)){if(xe=te(q),typeof xe!="function")throw Error(i(150));return q=xe.call(q),we(V,$,q,J)}if(typeof q.then=="function")return Qe(V,$,Pi(q),J);if(q.$$typeof===M)return Qe(V,$,Yi(V,q),J);Qi(V,q)}return typeof q=="string"&&q!==""||typeof q=="number"||typeof q=="bigint"?(q=""+q,$!==null&&$.tag===6?(a(V,$.sibling),J=u($,q),J.return=V,V=J):(a(V,$),J=mu(q,V.mode,J),J.return=V,V=J),g(V)):a(V,$)}return function(V,$,q,J){try{Cr=0;var xe=Qe(V,$,q,J);return dl=null,xe}catch(be){if(be===fl||be===Gi)throw be;var Ue=ln(29,be,null,V.mode);return Ue.lanes=J,Ue.return=V,Ue}}}var Eo=xh(!0),wh=xh(!1),Ba=!1;function Ru(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function _u(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function $a(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function La(e,t,a){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,(ke&2)!==0){var u=r.pending;return u===null?t.next=t:(t.next=u.next,u.next=t),r.pending=t,t=Hi(e),lh(e,null,a),t}return Li(e,r,t,a),Hi(e)}function Tr(e,t,a){if(t=t.updateQueue,t!==null&&(t=t.shared,(a&4194048)!==0)){var r=t.lanes;r&=e.pendingLanes,a|=r,t.lanes=a,mp(e,a)}}function Nu(e,t){var a=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,a===r)){var u=null,d=null;if(a=a.firstBaseUpdate,a!==null){do{var g={lane:a.lane,tag:a.tag,payload:a.payload,callback:null,next:null};d===null?u=d=g:d=d.next=g,a=a.next}while(a!==null);d===null?u=d=t:d=d.next=t}else u=d=t;a={baseState:r.baseState,firstBaseUpdate:u,lastBaseUpdate:d,shared:r.shared,callbacks:r.callbacks},e.updateQueue=a;return}e=a.lastBaseUpdate,e===null?a.firstBaseUpdate=t:e.next=t,a.lastBaseUpdate=t}var Au=!1;function Rr(){if(Au){var e=ul;if(e!==null)throw e}}function _r(e,t,a,r){Au=!1;var u=e.updateQueue;Ba=!1;var d=u.firstBaseUpdate,g=u.lastBaseUpdate,T=u.shared.pending;if(T!==null){u.shared.pending=null;var D=T,G=D.next;D.next=null,g===null?d=G:g.next=G,g=D;var I=e.alternate;I!==null&&(I=I.updateQueue,T=I.lastBaseUpdate,T!==g&&(T===null?I.firstBaseUpdate=G:T.next=G,I.lastBaseUpdate=D))}if(d!==null){var W=u.baseState;g=0,I=G=D=null,T=d;do{var P=T.lane&-536870913,Q=P!==T.lane;if(Q?(Be&P)===P:(r&P)===P){P!==0&&P===cl&&(Au=!0),I!==null&&(I=I.next={lane:0,tag:T.tag,payload:T.payload,callback:null,next:null});e:{var he=e,we=T;P=t;var Qe=a;switch(we.tag){case 1:if(he=we.payload,typeof he=="function"){W=he.call(Qe,W,P);break e}W=he;break e;case 3:he.flags=he.flags&-65537|128;case 0:if(he=we.payload,P=typeof he=="function"?he.call(Qe,W,P):he,P==null)break e;W=y({},W,P);break e;case 2:Ba=!0}}P=T.callback,P!==null&&(e.flags|=64,Q&&(e.flags|=8192),Q=u.callbacks,Q===null?u.callbacks=[P]:Q.push(P))}else Q={lane:P,tag:T.tag,payload:T.payload,callback:T.callback,next:null},I===null?(G=I=Q,D=W):I=I.next=Q,g|=P;if(T=T.next,T===null){if(T=u.shared.pending,T===null)break;Q=T,T=Q.next,Q.next=null,u.lastBaseUpdate=Q,u.shared.pending=null}}while(!0);I===null&&(D=W),u.baseState=D,u.firstBaseUpdate=G,u.lastBaseUpdate=I,d===null&&(u.shared.lanes=0),Ya|=g,e.lanes=g,e.memoizedState=W}}function Ch(e,t){if(typeof e!="function")throw Error(i(191,e));e.call(t)}function Eh(e,t){var a=e.callbacks;if(a!==null)for(e.callbacks=null,e=0;ed?d:8;var g=A.T,T={};A.T=T,Zu(e,!1,t,a);try{var D=u(),G=A.S;if(G!==null&&G(T,D),D!==null&&typeof D=="object"&&typeof D.then=="function"){var I=ox(D,r);Mr(e,t,I,fn(e))}else Mr(e,t,r,fn(e))}catch(W){Mr(e,t,{then:function(){},status:"rejected",reason:W},fn())}finally{B.p=d,g!==null&&T.types!==null&&(g.types=T.types),A.T=g}}function ux(){}function Pu(e,t,a,r){if(e.tag!==5)throw Error(i(476));var u=nv(e).queue;tv(e,u,t,L,a===null?ux:function(){return av(e),a(r)})}function nv(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:L,baseState:L,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:oa,lastRenderedState:L},next:null};var a={};return t.next={memoizedState:a,baseState:a,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:oa,lastRenderedState:a},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function av(e){var t=nv(e);t.next===null&&(t=e.alternate.memoizedState),Mr(e,t.next.queue,{},fn())}function Qu(){return Ot(Qr)}function ov(){return dt().memoizedState}function lv(){return dt().memoizedState}function fx(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var a=fn();e=$a(a);var r=La(t,e,a);r!==null&&(Jt(r,t,a),Tr(r,t,a)),t={cache:wu()},e.payload=t;return}t=t.return}}function dx(e,t,a){var r=fn();a={lane:r,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},as(e)?iv(t,a):(a=fu(e,t,a,r),a!==null&&(Jt(a,e,r),sv(a,t,r)))}function rv(e,t,a){var r=fn();Mr(e,t,a,r)}function Mr(e,t,a,r){var u={lane:r,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null};if(as(e))iv(t,u);else{var d=e.alternate;if(e.lanes===0&&(d===null||d.lanes===0)&&(d=t.lastRenderedReducer,d!==null))try{var g=t.lastRenderedState,T=d(g,a);if(u.hasEagerState=!0,u.eagerState=T,on(T,g))return Li(e,t,u,0),Ke===null&&$i(),!1}catch{}if(a=fu(e,t,u,r),a!==null)return Jt(a,e,r),sv(a,t,r),!0}return!1}function Zu(e,t,a,r){if(r={lane:2,revertLane:_f(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},as(e)){if(t)throw Error(i(479))}else t=fu(e,a,r,2),t!==null&&Jt(t,e,2)}function as(e){var t=e.alternate;return e===Ne||t!==null&&t===Ne}function iv(e,t){pl=Ii=!0;var a=e.pending;a===null?t.next=t:(t.next=a.next,a.next=t),e.pending=t}function sv(e,t,a){if((a&4194048)!==0){var r=t.lanes;r&=e.pendingLanes,a|=r,t.lanes=a,mp(e,a)}}var Or={readContext:Ot,use:Wi,useCallback:rt,useContext:rt,useEffect:rt,useImperativeHandle:rt,useLayoutEffect:rt,useInsertionEffect:rt,useMemo:rt,useReducer:rt,useRef:rt,useState:rt,useDebugValue:rt,useDeferredValue:rt,useTransition:rt,useSyncExternalStore:rt,useId:rt,useHostTransitionStatus:rt,useFormState:rt,useActionState:rt,useOptimistic:rt,useMemoCache:rt,useCacheRefresh:rt};Or.useEffectEvent=rt;var cv={readContext:Ot,use:Wi,useCallback:function(e,t){return qt().memoizedState=[e,t===void 0?null:t],e},useContext:Ot,useEffect:Ph,useImperativeHandle:function(e,t,a){a=a!=null?a.concat([e]):null,ts(4194308,4,Ih.bind(null,t,e),a)},useLayoutEffect:function(e,t){return ts(4194308,4,e,t)},useInsertionEffect:function(e,t){ts(4,2,e,t)},useMemo:function(e,t){var a=qt();t=t===void 0?null:t;var r=e();if(To){at(!0);try{e()}finally{at(!1)}}return a.memoizedState=[r,t],r},useReducer:function(e,t,a){var r=qt();if(a!==void 0){var u=a(t);if(To){at(!0);try{a(t)}finally{at(!1)}}}else u=t;return r.memoizedState=r.baseState=u,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:u},r.queue=e,e=e.dispatch=dx.bind(null,Ne,e),[r.memoizedState,e]},useRef:function(e){var t=qt();return e={current:e},t.memoizedState=e},useState:function(e){e=ku(e);var t=e.queue,a=rv.bind(null,Ne,t);return t.dispatch=a,[e.memoizedState,a]},useDebugValue:Gu,useDeferredValue:function(e,t){var a=qt();return Xu(a,e,t)},useTransition:function(){var e=ku(!1);return e=tv.bind(null,Ne,e.queue,!0,!1),qt().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,a){var r=Ne,u=qt();if(Le){if(a===void 0)throw Error(i(407));a=a()}else{if(a=t(),Ke===null)throw Error(i(349));(Be&127)!==0||Mh(r,t,a)}u.memoizedState=a;var d={value:a,getSnapshot:t};return u.queue=d,Ph(Dh.bind(null,r,d,e),[e]),r.flags|=2048,vl(9,{destroy:void 0},Oh.bind(null,r,d,a,t),null),a},useId:function(){var e=qt(),t=Ke.identifierPrefix;if(Le){var a=Vn,r=Un;a=(r&~(1<<32-Tt(r)-1)).toString(32)+a,t="_"+t+"R_"+a,a=Ji++,0<\/script>",d=d.removeChild(d.firstChild);break;case"select":d=typeof r.is=="string"?g.createElement("select",{is:r.is}):g.createElement("select"),r.multiple?d.multiple=!0:r.size&&(d.size=r.size);break;default:d=typeof r.is=="string"?g.createElement(u,{is:r.is}):g.createElement(u)}}d[At]=t,d[Xt]=r;e:for(g=t.child;g!==null;){if(g.tag===5||g.tag===6)d.appendChild(g.stateNode);else if(g.tag!==4&&g.tag!==27&&g.child!==null){g.child.return=g,g=g.child;continue}if(g===t)break e;for(;g.sibling===null;){if(g.return===null||g.return===t)break e;g=g.return}g.sibling.return=g.return,g=g.sibling}t.stateNode=d;e:switch(zt(d,u,r),u){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break e;case"img":r=!0;break e;default:r=!1}r&&ra(t)}}return We(t),cf(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,a),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&ra(t);else{if(typeof r!="string"&&t.stateNode===null)throw Error(i(166));if(e=de.current,il(t)){if(e=t.stateNode,a=t.memoizedProps,r=null,u=Mt,u!==null)switch(u.tag){case 27:case 5:r=u.memoizedProps}e[At]=t,e=!!(e.nodeValue===a||r!==null&&r.suppressHydrationWarning===!0||Ng(e.nodeValue,a)),e||za(t,!0)}else e=Cs(e).createTextNode(r),e[At]=t,t.stateNode=e}return We(t),null;case 31:if(a=t.memoizedState,e===null||e.memoizedState!==null){if(r=il(t),a!==null){if(e===null){if(!r)throw Error(i(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(i(557));e[At]=t}else yo(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;We(t),e=!1}else a=yu(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),e=!0;if(!e)return t.flags&256?(sn(t),t):(sn(t),null);if((t.flags&128)!==0)throw Error(i(558))}return We(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(u=il(t),r!==null&&r.dehydrated!==null){if(e===null){if(!u)throw Error(i(318));if(u=t.memoizedState,u=u!==null?u.dehydrated:null,!u)throw Error(i(317));u[At]=t}else yo(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;We(t),u=!1}else u=yu(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=u),u=!0;if(!u)return t.flags&256?(sn(t),t):(sn(t),null)}return sn(t),(t.flags&128)!==0?(t.lanes=a,t):(a=r!==null,e=e!==null&&e.memoizedState!==null,a&&(r=t.child,u=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(u=r.alternate.memoizedState.cachePool.pool),d=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(d=r.memoizedState.cachePool.pool),d!==u&&(r.flags|=2048)),a!==e&&a&&(t.child.flags|=8192),ss(t,t.updateQueue),We(t),null);case 4:return Te(),e===null&&Of(t.stateNode.containerInfo),We(t),null;case 10:return na(t.type),We(t),null;case 19:if(Y(ft),r=t.memoizedState,r===null)return We(t),null;if(u=(t.flags&128)!==0,d=r.rendering,d===null)if(u)zr(r,!1);else{if(it!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(d=Ki(e),d!==null){for(t.flags|=128,zr(r,!1),e=d.updateQueue,t.updateQueue=e,ss(t,e),t.subtreeFlags=0,e=a,a=t.child;a!==null;)rh(a,e),a=a.sibling;return ee(ft,ft.current&1|2),Le&&ea(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&se()>ms&&(t.flags|=128,u=!0,zr(r,!1),t.lanes=4194304)}else{if(!u)if(e=Ki(d),e!==null){if(t.flags|=128,u=!0,e=e.updateQueue,t.updateQueue=e,ss(t,e),zr(r,!0),r.tail===null&&r.tailMode==="hidden"&&!d.alternate&&!Le)return We(t),null}else 2*se()-r.renderingStartTime>ms&&a!==536870912&&(t.flags|=128,u=!0,zr(r,!1),t.lanes=4194304);r.isBackwards?(d.sibling=t.child,t.child=d):(e=r.last,e!==null?e.sibling=d:t.child=d,r.last=d)}return r.tail!==null?(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=se(),e.sibling=null,a=ft.current,ee(ft,u?a&1|2:a&1),Le&&ea(t,r.treeForkCount),e):(We(t),null);case 22:case 23:return sn(t),Ou(),r=t.memoizedState!==null,e!==null?e.memoizedState!==null!==r&&(t.flags|=8192):r&&(t.flags|=8192),r?(a&536870912)!==0&&(t.flags&128)===0&&(We(t),t.subtreeFlags&6&&(t.flags|=8192)):We(t),a=t.updateQueue,a!==null&&ss(t,a.retryQueue),a=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(a=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==a&&(t.flags|=2048),e!==null&&Y(xo),null;case 24:return a=null,e!==null&&(a=e.memoizedState.cache),t.memoizedState.cache!==a&&(t.flags|=2048),na(mt),We(t),null;case 25:return null;case 30:return null}throw Error(i(156,t.tag))}function gx(e,t){switch(vu(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return na(mt),Te(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return st(t),null;case 31:if(t.memoizedState!==null){if(sn(t),t.alternate===null)throw Error(i(340));yo()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(sn(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));yo()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Y(ft),null;case 4:return Te(),null;case 10:return na(t.type),null;case 22:case 23:return sn(t),Ou(),e!==null&&Y(xo),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return na(mt),null;case 25:return null;default:return null}}function zv(e,t){switch(vu(t),t.tag){case 3:na(mt),Te();break;case 26:case 27:case 5:st(t);break;case 4:Te();break;case 31:t.memoizedState!==null&&sn(t);break;case 13:sn(t);break;case 19:Y(ft);break;case 10:na(t.type);break;case 22:case 23:sn(t),Ou(),e!==null&&Y(xo);break;case 24:na(mt)}}function jr(e,t){try{var a=t.updateQueue,r=a!==null?a.lastEffect:null;if(r!==null){var u=r.next;a=u;do{if((a.tag&e)===e){r=void 0;var d=a.create,g=a.inst;r=d(),g.destroy=r}a=a.next}while(a!==u)}}catch(T){Ge(t,t.return,T)}}function Va(e,t,a){try{var r=t.updateQueue,u=r!==null?r.lastEffect:null;if(u!==null){var d=u.next;r=d;do{if((r.tag&e)===e){var g=r.inst,T=g.destroy;if(T!==void 0){g.destroy=void 0,u=t;var D=a,G=T;try{G()}catch(I){Ge(u,D,I)}}}r=r.next}while(r!==d)}}catch(I){Ge(t,t.return,I)}}function jv(e){var t=e.updateQueue;if(t!==null){var a=e.stateNode;try{Eh(t,a)}catch(r){Ge(e,e.return,r)}}}function Bv(e,t,a){a.props=Ro(e.type,e.memoizedProps),a.state=e.memoizedState;try{a.componentWillUnmount()}catch(r){Ge(e,t,r)}}function Br(e,t){try{var a=e.ref;if(a!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:r=e.stateNode;break;default:r=e.stateNode}typeof a=="function"?e.refCleanup=a(r):a.current=r}}catch(u){Ge(e,t,u)}}function kn(e,t){var a=e.ref,r=e.refCleanup;if(a!==null)if(typeof r=="function")try{r()}catch(u){Ge(e,t,u)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof a=="function")try{a(null)}catch(u){Ge(e,t,u)}else a.current=null}function $v(e){var t=e.type,a=e.memoizedProps,r=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":a.autoFocus&&r.focus();break e;case"img":a.src?r.src=a.src:a.srcSet&&(r.srcset=a.srcSet)}}catch(u){Ge(e,e.return,u)}}function uf(e,t,a){try{var r=e.stateNode;Ux(r,e.type,a,t),r[Xt]=t}catch(u){Ge(e,e.return,u)}}function Lv(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Qa(e.type)||e.tag===4}function ff(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Lv(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&Qa(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function df(e,t,a){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?(a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a).insertBefore(e,t):(t=a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a,t.appendChild(e),a=a._reactRootContainer,a!=null||t.onclick!==null||(t.onclick=Jn));else if(r!==4&&(r===27&&Qa(e.type)&&(a=e.stateNode,t=null),e=e.child,e!==null))for(df(e,t,a),e=e.sibling;e!==null;)df(e,t,a),e=e.sibling}function cs(e,t,a){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?a.insertBefore(e,t):a.appendChild(e);else if(r!==4&&(r===27&&Qa(e.type)&&(a=e.stateNode),e=e.child,e!==null))for(cs(e,t,a),e=e.sibling;e!==null;)cs(e,t,a),e=e.sibling}function Hv(e){var t=e.stateNode,a=e.memoizedProps;try{for(var r=e.type,u=t.attributes;u.length;)t.removeAttributeNode(u[0]);zt(t,r,a),t[At]=e,t[Xt]=a}catch(d){Ge(e,e.return,d)}}var ia=!1,vt=!1,mf=!1,Uv=typeof WeakSet=="function"?WeakSet:Set,_t=null;function yx(e,t){if(e=e.containerInfo,jf=Ms,e=Jp(e),lu(e)){if("selectionStart"in e)var a={start:e.selectionStart,end:e.selectionEnd};else e:{a=(a=e.ownerDocument)&&a.defaultView||window;var r=a.getSelection&&a.getSelection();if(r&&r.rangeCount!==0){a=r.anchorNode;var u=r.anchorOffset,d=r.focusNode;r=r.focusOffset;try{a.nodeType,d.nodeType}catch{a=null;break e}var g=0,T=-1,D=-1,G=0,I=0,W=e,P=null;t:for(;;){for(var Q;W!==a||u!==0&&W.nodeType!==3||(T=g+u),W!==d||r!==0&&W.nodeType!==3||(D=g+r),W.nodeType===3&&(g+=W.nodeValue.length),(Q=W.firstChild)!==null;)P=W,W=Q;for(;;){if(W===e)break t;if(P===a&&++G===u&&(T=g),P===d&&++I===r&&(D=g),(Q=W.nextSibling)!==null)break;W=P,P=W.parentNode}W=Q}a=T===-1||D===-1?null:{start:T,end:D}}else a=null}a=a||{start:0,end:0}}else a=null;for(Bf={focusedElem:e,selectionRange:a},Ms=!1,_t=t;_t!==null;)if(t=_t,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,_t=e;else for(;_t!==null;){switch(t=_t,d=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(a=0;a title"))),zt(d,r,a),d[At]=e,Rt(d),r=d;break e;case"link":var g=Xg("link","href",u).get(r+(a.href||""));if(g){for(var T=0;TQe&&(g=Qe,Qe=we,we=g);var V=Kp(T,we),$=Kp(T,Qe);if(V&&$&&(Q.rangeCount!==1||Q.anchorNode!==V.node||Q.anchorOffset!==V.offset||Q.focusNode!==$.node||Q.focusOffset!==$.offset)){var q=W.createRange();q.setStart(V.node,V.offset),Q.removeAllRanges(),we>Qe?(Q.addRange(q),Q.extend($.node,$.offset)):(q.setEnd($.node,$.offset),Q.addRange(q))}}}}for(W=[],Q=T;Q=Q.parentNode;)Q.nodeType===1&&W.push({element:Q,left:Q.scrollLeft,top:Q.scrollTop});for(typeof T.focus=="function"&&T.focus(),T=0;Ta?32:a,A.T=null,a=Sf,Sf=null;var d=Ga,g=da;if(xt=0,xl=Ga=null,da=0,(ke&6)!==0)throw Error(i(331));var T=ke;if(ke|=4,Iv(d.current),Qv(d,d.current,g,a),ke=T,kr(0,!1),Ht&&typeof Ht.onPostCommitFiberRoot=="function")try{Ht.onPostCommitFiberRoot(co,d)}catch{}return!0}finally{B.p=u,A.T=r,pg(e,t)}}function vg(e,t,a){t=vn(a,t),t=Fu(e.stateNode,t,2),e=La(e,t,2),e!==null&&(ir(e,2),Yn(e))}function Ge(e,t,a){if(e.tag===3)vg(e,e,a);else for(;t!==null;){if(t.tag===3){vg(t,e,a);break}else if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof r.componentDidCatch=="function"&&(qa===null||!qa.has(r))){e=vn(a,e),a=gv(2),r=La(t,a,2),r!==null&&(yv(a,r,t,e),ir(r,2),Yn(r));break}}t=t.return}}function Ef(e,t,a){var r=e.pingCache;if(r===null){r=e.pingCache=new xx;var u=new Set;r.set(t,u)}else u=r.get(t),u===void 0&&(u=new Set,r.set(t,u));u.has(a)||(vf=!0,u.add(a),e=Rx.bind(null,e,t,a),t.then(e,e))}function Rx(e,t,a){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&a,e.warmLanes&=~a,Ke===e&&(Be&a)===a&&(it===4||it===3&&(Be&62914560)===Be&&300>se()-ds?(ke&2)===0&&wl(e,0):gf|=a,Sl===Be&&(Sl=0)),Yn(e)}function gg(e,t){t===0&&(t=fp()),e=vo(e,t),e!==null&&(ir(e,t),Yn(e))}function _x(e){var t=e.memoizedState,a=0;t!==null&&(a=t.retryLane),gg(e,a)}function Nx(e,t){var a=0;switch(e.tag){case 31:case 13:var r=e.stateNode,u=e.memoizedState;u!==null&&(a=u.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}r!==null&&r.delete(t),gg(e,a)}function Ax(e,t){return Me(e,t)}var bs=null,El=null,Tf=!1,Ss=!1,Rf=!1,Pa=0;function Yn(e){e!==El&&e.next===null&&(El===null?bs=El=e:El=El.next=e),Ss=!0,Tf||(Tf=!0,Ox())}function kr(e,t){if(!Rf&&Ss){Rf=!0;do for(var a=!1,r=bs;r!==null;){if(e!==0){var u=r.pendingLanes;if(u===0)var d=0;else{var g=r.suspendedLanes,T=r.pingedLanes;d=(1<<31-Tt(42|e)+1)-1,d&=u&~(g&~T),d=d&201326741?d&201326741|1:d?d|2:0}d!==0&&(a=!0,xg(r,d))}else d=Be,d=Ei(r,r===Ke?d:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),(d&3)===0||rr(r,d)||(a=!0,xg(r,d));r=r.next}while(a);Rf=!1}}function Mx(){yg()}function yg(){Ss=Tf=!1;var e=0;Pa!==0&&kx()&&(e=Pa);for(var t=se(),a=null,r=bs;r!==null;){var u=r.next,d=bg(r,t);d===0?(r.next=null,a===null?bs=u:a.next=u,u===null&&(El=a)):(a=r,(e!==0||(d&3)!==0)&&(Ss=!0)),r=u}xt!==0&&xt!==5||kr(e),Pa!==0&&(Pa=0)}function bg(e,t){for(var a=e.suspendedLanes,r=e.pingedLanes,u=e.expirationTimes,d=e.pendingLanes&-62914561;0T)break;var I=D.transferSize,W=D.initiatorType;I&&Ag(W)&&(D=D.responseEnd,g+=I*(D"u"?null:document;function kg(e,t,a){var r=Tl;if(r&&typeof t=="string"&&t){var u=pn(t);u='link[rel="'+e+'"][href="'+u+'"]',typeof a=="string"&&(u+='[crossorigin="'+a+'"]'),Vg.has(u)||(Vg.add(u),e={rel:e,crossOrigin:a,href:t},r.querySelector(u)===null&&(t=r.createElement("link"),zt(t,"link",e),Rt(t),r.head.appendChild(t)))}}function Ix(e){ma.D(e),kg("dns-prefetch",e,null)}function Jx(e,t){ma.C(e,t),kg("preconnect",e,t)}function Fx(e,t,a){ma.L(e,t,a);var r=Tl;if(r&&e&&t){var u='link[rel="preload"][as="'+pn(t)+'"]';t==="image"&&a&&a.imageSrcSet?(u+='[imagesrcset="'+pn(a.imageSrcSet)+'"]',typeof a.imageSizes=="string"&&(u+='[imagesizes="'+pn(a.imageSizes)+'"]')):u+='[href="'+pn(e)+'"]';var d=u;switch(t){case"style":d=Rl(e);break;case"script":d=_l(e)}wn.has(d)||(e=y({rel:"preload",href:t==="image"&&a&&a.imageSrcSet?void 0:e,as:t},a),wn.set(d,e),r.querySelector(u)!==null||t==="style"&&r.querySelector(Xr(d))||t==="script"&&r.querySelector(Pr(d))||(t=r.createElement("link"),zt(t,"link",e),Rt(t),r.head.appendChild(t)))}}function Wx(e,t){ma.m(e,t);var a=Tl;if(a&&e){var r=t&&typeof t.as=="string"?t.as:"script",u='link[rel="modulepreload"][as="'+pn(r)+'"][href="'+pn(e)+'"]',d=u;switch(r){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":d=_l(e)}if(!wn.has(d)&&(e=y({rel:"modulepreload",href:e},t),wn.set(d,e),a.querySelector(u)===null)){switch(r){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(a.querySelector(Pr(d)))return}r=a.createElement("link"),zt(r,"link",e),Rt(r),a.head.appendChild(r)}}}function ew(e,t,a){ma.S(e,t,a);var r=Tl;if(r&&e){var u=Zo(r).hoistableStyles,d=Rl(e);t=t||"default";var g=u.get(d);if(!g){var T={loading:0,preload:null};if(g=r.querySelector(Xr(d)))T.loading=5;else{e=y({rel:"stylesheet",href:e,"data-precedence":t},a),(a=wn.get(d))&&Yf(e,a);var D=g=r.createElement("link");Rt(D),zt(D,"link",e),D._p=new Promise(function(G,I){D.onload=G,D.onerror=I}),D.addEventListener("load",function(){T.loading|=1}),D.addEventListener("error",function(){T.loading|=2}),T.loading|=4,Ts(g,t,r)}g={type:"stylesheet",instance:g,count:1,state:T},u.set(d,g)}}}function tw(e,t){ma.X(e,t);var a=Tl;if(a&&e){var r=Zo(a).hoistableScripts,u=_l(e),d=r.get(u);d||(d=a.querySelector(Pr(u)),d||(e=y({src:e,async:!0},t),(t=wn.get(u))&&qf(e,t),d=a.createElement("script"),Rt(d),zt(d,"link",e),a.head.appendChild(d)),d={type:"script",instance:d,count:1,state:null},r.set(u,d))}}function nw(e,t){ma.M(e,t);var a=Tl;if(a&&e){var r=Zo(a).hoistableScripts,u=_l(e),d=r.get(u);d||(d=a.querySelector(Pr(u)),d||(e=y({src:e,async:!0,type:"module"},t),(t=wn.get(u))&&qf(e,t),d=a.createElement("script"),Rt(d),zt(d,"link",e),a.head.appendChild(d)),d={type:"script",instance:d,count:1,state:null},r.set(u,d))}}function Yg(e,t,a,r){var u=(u=de.current)?Es(u):null;if(!u)throw Error(i(446));switch(e){case"meta":case"title":return null;case"style":return typeof a.precedence=="string"&&typeof a.href=="string"?(t=Rl(a.href),a=Zo(u).hoistableStyles,r=a.get(t),r||(r={type:"style",instance:null,count:0,state:null},a.set(t,r)),r):{type:"void",instance:null,count:0,state:null};case"link":if(a.rel==="stylesheet"&&typeof a.href=="string"&&typeof a.precedence=="string"){e=Rl(a.href);var d=Zo(u).hoistableStyles,g=d.get(e);if(g||(u=u.ownerDocument||u,g={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},d.set(e,g),(d=u.querySelector(Xr(e)))&&!d._p&&(g.instance=d,g.state.loading=5),wn.has(e)||(a={rel:"preload",as:"style",href:a.href,crossOrigin:a.crossOrigin,integrity:a.integrity,media:a.media,hrefLang:a.hrefLang,referrerPolicy:a.referrerPolicy},wn.set(e,a),d||aw(u,e,a,g.state))),t&&r===null)throw Error(i(528,""));return g}if(t&&r!==null)throw Error(i(529,""));return null;case"script":return t=a.async,a=a.src,typeof a=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=_l(a),a=Zo(u).hoistableScripts,r=a.get(t),r||(r={type:"script",instance:null,count:0,state:null},a.set(t,r)),r):{type:"void",instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Rl(e){return'href="'+pn(e)+'"'}function Xr(e){return'link[rel="stylesheet"]['+e+"]"}function qg(e){return y({},e,{"data-precedence":e.precedence,precedence:null})}function aw(e,t,a,r){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?r.loading=1:(t=e.createElement("link"),r.preload=t,t.addEventListener("load",function(){return r.loading|=1}),t.addEventListener("error",function(){return r.loading|=2}),zt(t,"link",a),Rt(t),e.head.appendChild(t))}function _l(e){return'[src="'+pn(e)+'"]'}function Pr(e){return"script[async]"+e}function Gg(e,t,a){if(t.count++,t.instance===null)switch(t.type){case"style":var r=e.querySelector('style[data-href~="'+pn(a.href)+'"]');if(r)return t.instance=r,Rt(r),r;var u=y({},a,{"data-href":a.href,"data-precedence":a.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement("style"),Rt(r),zt(r,"style",u),Ts(r,a.precedence,e),t.instance=r;case"stylesheet":u=Rl(a.href);var d=e.querySelector(Xr(u));if(d)return t.state.loading|=4,t.instance=d,Rt(d),d;r=qg(a),(u=wn.get(u))&&Yf(r,u),d=(e.ownerDocument||e).createElement("link"),Rt(d);var g=d;return g._p=new Promise(function(T,D){g.onload=T,g.onerror=D}),zt(d,"link",r),t.state.loading|=4,Ts(d,a.precedence,e),t.instance=d;case"script":return d=_l(a.src),(u=e.querySelector(Pr(d)))?(t.instance=u,Rt(u),u):(r=a,(u=wn.get(d))&&(r=y({},a),qf(r,u)),e=e.ownerDocument||e,u=e.createElement("script"),Rt(u),zt(u,"link",r),e.head.appendChild(u),t.instance=u);case"void":return null;default:throw Error(i(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(r=t.instance,t.state.loading|=4,Ts(r,a.precedence,e));return t.instance}function Ts(e,t,a){for(var r=a.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),u=r.length?r[r.length-1]:null,d=u,g=0;g title"):null)}function ow(e,t,a){if(a===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;return t.rel==="stylesheet"?(e=t.disabled,typeof t.precedence=="string"&&e==null):!0;case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function Qg(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function lw(e,t,a,r){if(a.type==="stylesheet"&&(typeof r.media!="string"||matchMedia(r.media).matches!==!1)&&(a.state.loading&4)===0){if(a.instance===null){var u=Rl(r.href),d=t.querySelector(Xr(u));if(d){t=d._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=_s.bind(e),t.then(e,e)),a.state.loading|=4,a.instance=d,Rt(d);return}d=t.ownerDocument||t,r=qg(r),(u=wn.get(u))&&Yf(r,u),d=d.createElement("link"),Rt(d);var g=d;g._p=new Promise(function(T,D){g.onload=T,g.onerror=D}),zt(d,"link",r),a.instance=d}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(a,t),(t=a.state.preload)&&(a.state.loading&3)===0&&(e.count++,a=_s.bind(e),t.addEventListener("load",a),t.addEventListener("error",a))}}var Gf=0;function rw(e,t){return e.stylesheets&&e.count===0&&As(e,e.stylesheets),0Gf?50:800)+t);return e.unsuspend=a,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(u)}}:null}function _s(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)As(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Ns=null;function As(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Ns=new Map,t.forEach(iw,e),Ns=null,_s.call(e))}function iw(e,t){if(!(t.state.loading&4)){var a=Ns.get(e);if(a)var r=a.get(null);else{a=new Map,Ns.set(e,a);for(var u=e.querySelectorAll("link[data-precedence],style[data-precedence]"),d=0;d"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(o){console.error(o)}}return n(),Wf.exports=Ew(),Wf.exports}var Rw=Tw(),Gn=function(){return Gn=Object.assign||function(o){for(var l,i=1,s=arguments.length;i"u")return qw;var o=Gw(n),l=document.documentElement.clientWidth,i=window.innerWidth;return{left:o[0],top:o[1],right:o[2],gap:Math.max(0,i-l+o[2]-o[0])}},Pw=R0(),Ll="data-scroll-locked",Qw=function(n,o,l,i){var s=n.left,c=n.top,f=n.right,m=n.gap;return l===void 0&&(l="margin"),` + .`.concat(Nw,` { + overflow: hidden `).concat(i,`; + padding-right: `).concat(m,"px ").concat(i,`; + } + body[`).concat(Ll,`] { + overflow: hidden `).concat(i,`; + overscroll-behavior: contain; + `).concat([o&&"position: relative ".concat(i,";"),l==="margin"&&` + padding-left: `.concat(s,`px; + padding-top: `).concat(c,`px; + padding-right: `).concat(f,`px; + margin-left:0; + margin-top:0; + margin-right: `).concat(m,"px ").concat(i,`; + `),l==="padding"&&"padding-right: ".concat(m,"px ").concat(i,";")].filter(Boolean).join(""),` + } + + .`).concat(qs,` { + right: `).concat(m,"px ").concat(i,`; + } + + .`).concat(Gs,` { + margin-right: `).concat(m,"px ").concat(i,`; + } + + .`).concat(qs," .").concat(qs,` { + right: 0 `).concat(i,`; + } + + .`).concat(Gs," .").concat(Gs,` { + margin-right: 0 `).concat(i,`; + } + + body[`).concat(Ll,`] { + `).concat(Aw,": ").concat(m,`px; + } +`)},yy=function(){var n=parseInt(document.body.getAttribute(Ll)||"0",10);return isFinite(n)?n:0},Zw=function(){w.useEffect(function(){return document.body.setAttribute(Ll,(yy()+1).toString()),function(){var n=yy()-1;n<=0?document.body.removeAttribute(Ll):document.body.setAttribute(Ll,n.toString())}},[])},Kw=function(n){var o=n.noRelative,l=n.noImportant,i=n.gapMode,s=i===void 0?"margin":i;Zw();var c=w.useMemo(function(){return Xw(s)},[s]);return w.createElement(Pw,{styles:Qw(c,!o,s,l?"":"!important")})},Rd=!1;if(typeof window<"u")try{var Ls=Object.defineProperty({},"passive",{get:function(){return Rd=!0,!0}});window.addEventListener("test",Ls,Ls),window.removeEventListener("test",Ls,Ls)}catch{Rd=!1}var Al=Rd?{passive:!1}:!1,Iw=function(n){return n.tagName==="TEXTAREA"},_0=function(n,o){if(!(n instanceof Element))return!1;var l=window.getComputedStyle(n);return l[o]!=="hidden"&&!(l.overflowY===l.overflowX&&!Iw(n)&&l[o]==="visible")},Jw=function(n){return _0(n,"overflowY")},Fw=function(n){return _0(n,"overflowX")},by=function(n,o){var l=o.ownerDocument,i=o;do{typeof ShadowRoot<"u"&&i instanceof ShadowRoot&&(i=i.host);var s=N0(n,i);if(s){var c=A0(n,i),f=c[1],m=c[2];if(f>m)return!0}i=i.parentNode}while(i&&i!==l.body);return!1},Ww=function(n){var o=n.scrollTop,l=n.scrollHeight,i=n.clientHeight;return[o,l,i]},eC=function(n){var o=n.scrollLeft,l=n.scrollWidth,i=n.clientWidth;return[o,l,i]},N0=function(n,o){return n==="v"?Jw(o):Fw(o)},A0=function(n,o){return n==="v"?Ww(o):eC(o)},tC=function(n,o){return n==="h"&&o==="rtl"?-1:1},nC=function(n,o,l,i,s){var c=tC(n,window.getComputedStyle(o).direction),f=c*i,m=l.target,p=o.contains(m),h=!1,v=f>0,y=0,S=0;do{if(!m)break;var x=A0(n,m),C=x[0],E=x[1],R=x[2],N=E-R-c*C;(C||N)&&N0(n,m)&&(y+=N,S+=C);var j=m.parentNode;m=j&&j.nodeType===Node.DOCUMENT_FRAGMENT_NODE?j.host:j}while(!p&&m!==document.body||p&&(o.contains(m)||o===m));return(v&&Math.abs(y)<1||!v&&Math.abs(S)<1)&&(h=!0),h},Hs=function(n){return"changedTouches"in n?[n.changedTouches[0].clientX,n.changedTouches[0].clientY]:[0,0]},Sy=function(n){return[n.deltaX,n.deltaY]},xy=function(n){return n&&"current"in n?n.current:n},aC=function(n,o){return n[0]===o[0]&&n[1]===o[1]},oC=function(n){return` + .block-interactivity-`.concat(n,` {pointer-events: none;} + .allow-interactivity-`).concat(n,` {pointer-events: all;} +`)},lC=0,Ml=[];function rC(n){var o=w.useRef([]),l=w.useRef([0,0]),i=w.useRef(),s=w.useState(lC++)[0],c=w.useState(R0)[0],f=w.useRef(n);w.useEffect(function(){f.current=n},[n]),w.useEffect(function(){if(n.inert){document.body.classList.add("block-interactivity-".concat(s));var E=_w([n.lockRef.current],(n.shards||[]).map(xy),!0).filter(Boolean);return E.forEach(function(R){return R.classList.add("allow-interactivity-".concat(s))}),function(){document.body.classList.remove("block-interactivity-".concat(s)),E.forEach(function(R){return R.classList.remove("allow-interactivity-".concat(s))})}}},[n.inert,n.lockRef.current,n.shards]);var m=w.useCallback(function(E,R){if("touches"in E&&E.touches.length===2||E.type==="wheel"&&E.ctrlKey)return!f.current.allowPinchZoom;var N=Hs(E),j=l.current,M="deltaX"in E?E.deltaX:j[0]-N[0],z="deltaY"in E?E.deltaY:j[1]-N[1],U,O=E.target,H=Math.abs(M)>Math.abs(z)?"h":"v";if("touches"in E&&H==="h"&&O.type==="range")return!1;var k=window.getSelection(),Z=k&&k.anchorNode,ne=Z?Z===O||Z.contains(O):!1;if(ne)return!1;var ae=by(H,O);if(!ae)return!0;if(ae?U=H:(U=H==="v"?"h":"v",ae=by(H,O)),!ae)return!1;if(!i.current&&"changedTouches"in E&&(M||z)&&(i.current=U),!U)return!0;var te=i.current||U;return nC(te,R,E,te==="h"?M:z)},[]),p=w.useCallback(function(E){var R=E;if(!(!Ml.length||Ml[Ml.length-1]!==c)){var N="deltaY"in R?Sy(R):Hs(R),j=o.current.filter(function(U){return U.name===R.type&&(U.target===R.target||R.target===U.shadowParent)&&aC(U.delta,N)})[0];if(j&&j.should){R.cancelable&&R.preventDefault();return}if(!j){var M=(f.current.shards||[]).map(xy).filter(Boolean).filter(function(U){return U.contains(R.target)}),z=M.length>0?m(R,M[0]):!f.current.noIsolation;z&&R.cancelable&&R.preventDefault()}}},[]),h=w.useCallback(function(E,R,N,j){var M={name:E,delta:R,target:N,should:j,shadowParent:iC(N)};o.current.push(M),setTimeout(function(){o.current=o.current.filter(function(z){return z!==M})},1)},[]),v=w.useCallback(function(E){l.current=Hs(E),i.current=void 0},[]),y=w.useCallback(function(E){h(E.type,Sy(E),E.target,m(E,n.lockRef.current))},[]),S=w.useCallback(function(E){h(E.type,Hs(E),E.target,m(E,n.lockRef.current))},[]);w.useEffect(function(){return Ml.push(c),n.setCallbacks({onScrollCapture:y,onWheelCapture:y,onTouchMoveCapture:S}),document.addEventListener("wheel",p,Al),document.addEventListener("touchmove",p,Al),document.addEventListener("touchstart",v,Al),function(){Ml=Ml.filter(function(E){return E!==c}),document.removeEventListener("wheel",p,Al),document.removeEventListener("touchmove",p,Al),document.removeEventListener("touchstart",v,Al)}},[]);var x=n.removeScrollBar,C=n.inert;return w.createElement(w.Fragment,null,C?w.createElement(c,{styles:oC(s)}):null,x?w.createElement(Kw,{noRelative:n.noRelative,gapMode:n.gapMode}):null)}function iC(n){for(var o=null;n!==null;)n instanceof ShadowRoot&&(o=n.host,n=n.host),n=n.parentNode;return o}const sC=$w(T0,rC);var Ul=w.forwardRef(function(n,o){return w.createElement(lc,Gn({},n,{ref:o,sideCar:sC}))});Ul.classNames=lc.classNames;function jt(n){return Object.keys(n)}function rd(n){return n&&typeof n=="object"&&!Array.isArray(n)}function Qd(n,o){const l={...n},i=o;return rd(n)&&rd(o)&&Object.keys(o).forEach(s=>{rd(i[s])&&s in n?l[s]=Qd(l[s],i[s]):l[s]=i[s]}),l}function cC(n){return n.replace(/[A-Z]/g,o=>`-${o.toLowerCase()}`)}function uC(n){return typeof n!="string"||!n.includes("var(--mantine-scale)")?n:n.match(/^calc\((.*?)\)$/)?.[1].split("*")[0].trim()}function _d(n){const o=uC(n);return typeof o=="number"?o:typeof o=="string"?o.includes("calc")||o.includes("var")?o:o.includes("px")?Number(o.replace("px","")):o.includes("rem")?Number(o.replace("rem",""))*16:o.includes("em")?Number(o.replace("em",""))*16:Number(o):NaN}function wy(n){return n==="0rem"?"0rem":`calc(${n} * var(--mantine-scale))`}function M0(n,{shouldScale:o=!1}={}){function l(i){if(i===0||i==="0")return`0${n}`;if(typeof i=="number"){const s=`${i/16}${n}`;return o?wy(s):s}if(typeof i=="string"){if(i===""||i.startsWith("calc(")||i.startsWith("clamp(")||i.includes("rgba("))return i;if(i.includes(","))return i.split(",").map(c=>l(c)).join(",");if(i.includes(" "))return i.split(" ").map(c=>l(c)).join(" ");const s=i.replace("px","");if(!Number.isNaN(Number(s))){const c=`${Number(s)/16}${n}`;return o?wy(c):c}}return i}return l}const K=M0("rem",{shouldScale:!0}),Ks=M0("em");function Zd(n){return Object.keys(n).reduce((o,l)=>(n[l]!==void 0&&(o[l]=n[l]),o),{})}function O0(n){if(typeof n=="number")return!0;if(typeof n=="string"){if(n.startsWith("calc(")||n.startsWith("var(")||n.includes(" ")&&n.trim()!=="")return!0;const o=/^[+-]?[0-9]+(\.[0-9]+)?(px|em|rem|ex|ch|lh|rlh|vw|vh|vmin|vmax|vb|vi|svw|svh|lvw|lvh|dvw|dvh|cm|mm|in|pt|pc|q|cqw|cqh|cqi|cqb|cqmin|cqmax|%)?$/;return n.trim().split(/\s+/).every(i=>o.test(i))}return!1}function ba(n){return Array.isArray(n)||n===null?!1:typeof n=="object"?n.type!==w.Fragment:!1}function Sa(n){const o=w.createContext(null);return[({children:s,value:c})=>b.jsx(o.Provider,{value:c,children:s}),()=>{const s=w.useContext(o);if(s===null)throw new Error(n);return s}]}function fi(n=null){const o=w.createContext(n);return[({children:s,value:c})=>b.jsx(o.Provider,{value:c,children:s}),()=>w.useContext(o)]}function Is(n,o){let l=n;for(;(l=l.parentElement)&&!l.matches(o););return l}function fC(n,o,l){for(let i=n-1;i>=0;i-=1)if(!o[i].disabled)return i;if(l){for(let i=o.length-1;i>-1;i-=1)if(!o[i].disabled)return i}return n}function dC(n,o,l){for(let i=n+1;i{l?.(m);const p=Array.from(Is(m.currentTarget,n)?.querySelectorAll(o)||[]).filter(S=>mC(m.currentTarget,S,n)),h=p.findIndex(S=>m.currentTarget===S),v=dC(h,p,i),y=fC(h,p,i);switch(m.key){case"ArrowRight":break;case"ArrowLeft":break;case"ArrowUp":{m.stopPropagation(),m.preventDefault(),p[y].focus(),s&&p[y].click();break}case"ArrowDown":{m.stopPropagation(),m.preventDefault(),p[v].focus(),s&&p[v].click();break}case"Home":{m.stopPropagation(),m.preventDefault(),!p[0].disabled&&p[0].focus();break}case"End":{m.stopPropagation(),m.preventDefault();const S=p.length-1;!p[S].disabled&&p[S].focus();break}}}}const pC={app:100,modal:200,popover:300,overlay:400,max:9999};function $n(n){return pC[n]}const Nd=()=>{};function hC(n,o={active:!0}){return typeof n!="function"||!o.active?o.onKeyDown||Nd:l=>{l.key==="Escape"&&(n(l),o.onTrigger?.())}}function Ye(n,o="size",l=!0){if(n!==void 0)return O0(n)?l?K(n):n:`var(--${o}-${n})`}function ql(n){return Ye(n,"mantine-spacing")}function wt(n){return n===void 0?"var(--mantine-radius-default)":Ye(n,"mantine-radius")}function Yt(n){return Ye(n,"mantine-font-size")}function vC(n){return Ye(n,"mantine-line-height",!1)}function Kd(n){if(n)return Ye(n,"mantine-shadow",!1)}function Ft(n,o){return l=>{n?.(l),o?.(l)}}function Id(n,o){return n in o?_d(o[n]):_d(n)}function Cy(n,o){const l=n.map(i=>({value:i,px:Id(i,o)}));return l.sort((i,s)=>i.px-s.px),l}function gC(n,o,l){return l?Array.from(Is(l,o)?.querySelectorAll(n)||[]).findIndex(i=>i===l):null}function Xs(n,o,l){return o===void 0&&l===void 0?n:o!==void 0&&l===void 0?Math.max(n,o):Math.min(o===void 0&&l!==void 0?n:Math.max(n,o),l)}function z0(n="mantine-"){return`${n}${Math.random().toString(36).slice(2,11)}`}function Do(n){const o=w.useRef(n);return w.useEffect(()=>{o.current=n}),w.useMemo(()=>(...l)=>o.current?.(...l),[])}function rc(n,o){const l=typeof o=="number"?o:o.delay,i=typeof o=="number"?!1:o.flushOnUnmount,s=typeof o=="number"?!1:o.leading,c=Do(n),f=w.useRef(0),m=w.useRef(()=>{}),p=w.useRef(s),h=Object.assign(w.useCallback((...v)=>{if(window.clearTimeout(f.current),s&&p.current){p.current=!1,c(...v);return}const y=()=>{f.current!==0&&(f.current=0,p.current=!0,c(...v))};m.current=y,h.flush=y,f.current=window.setTimeout(y,l),p.current=!1},[c,l,s]),{flush:m.current});return w.useEffect(()=>()=>{window.clearTimeout(f.current),i&&h.flush()},[h,i]),h}const Ey=["mousedown","touchstart"];function yC(n,o,l){const i=w.useRef(null);return w.useEffect(()=>{const s=c=>{const{target:f}=c??{};if(Array.isArray(l)){const m=f?.hasAttribute("data-ignore-outside-clicks")||!document.body.contains(f)&&f.tagName!=="HTML";l.every(h=>!!h&&!c.composedPath().includes(h))&&!m&&n()}else i.current&&!i.current.contains(f)&&n()};return(o||Ey).forEach(c=>document.addEventListener(c,s)),()=>{(o||Ey).forEach(c=>document.removeEventListener(c,s))}},[i,n,l]),i}function bC(n,o){try{return n.addEventListener("change",o),()=>n.removeEventListener("change",o)}catch{return n.addListener(o),()=>n.removeListener(o)}}function SC(n,o){return typeof window<"u"&&"matchMedia"in window?window.matchMedia(n).matches:!1}function xC(n,o,{getInitialValueInEffect:l}={getInitialValueInEffect:!0}){const[i,s]=w.useState(l?o:SC(n)),c=w.useRef(null);return w.useEffect(()=>{if("matchMedia"in window)return c.current=window.matchMedia(n),s(c.current.matches),bC(c.current,f=>s(f.matches))},[n]),i}const Gl=typeof document<"u"?w.useLayoutEffect:w.useEffect;function ga(n,o){const l=w.useRef(!1);w.useEffect(()=>()=>{l.current=!1},[]),w.useEffect(()=>{if(l.current)return n();l.current=!0},o)}function j0({opened:n,shouldReturnFocus:o=!0}){const l=w.useRef(null),i=()=>{l.current&&"focus"in l.current&&typeof l.current.focus=="function"&&l.current?.focus({preventScroll:!0})};return ga(()=>{let s=-1;const c=f=>{f.key==="Tab"&&window.clearTimeout(s)};return document.addEventListener("keydown",c),n?l.current=document.activeElement:o&&(s=window.setTimeout(i,10)),()=>{window.clearTimeout(s),document.removeEventListener("keydown",c)}},[n,o]),i}const wC=/input|select|textarea|button|object/,B0="a, input, select, textarea, button, object, [tabindex]";function CC(n){return n.style.display==="none"}function EC(n){if(n.getAttribute("aria-hidden")||n.getAttribute("hidden")||n.getAttribute("type")==="hidden")return!1;let l=n;for(;l&&!(l===document.body||l.nodeType===11);){if(CC(l))return!1;l=l.parentNode}return!0}function $0(n){let o=n.getAttribute("tabindex");return o===null&&(o=void 0),parseInt(o,10)}function Ad(n){const o=n.nodeName.toLowerCase(),l=!Number.isNaN($0(n));return(wC.test(o)&&!n.disabled||n instanceof HTMLAnchorElement&&n.href||l)&&EC(n)}function L0(n){const o=$0(n);return(Number.isNaN(o)||o>=0)&&Ad(n)}function TC(n){return Array.from(n.querySelectorAll(B0)).filter(L0)}function RC(n,o){const l=TC(n);if(!l.length){o.preventDefault();return}const i=l[o.shiftKey?0:l.length-1],s=n.getRootNode();let c=i===s.activeElement||n===s.activeElement;const f=s.activeElement;if(f.tagName==="INPUT"&&f.getAttribute("type")==="radio"&&(c=l.filter(v=>v.getAttribute("type")==="radio"&&v.getAttribute("name")===f.getAttribute("name")).includes(i)),!c)return;o.preventDefault();const p=l[o.shiftKey?l.length-1:0];p&&p.focus()}function _C(n=!0){const o=w.useRef(null),l=s=>{let c=s.querySelector("[data-autofocus]");if(!c){const f=Array.from(s.querySelectorAll(B0));c=f.find(L0)||f.find(Ad)||null,!c&&Ad(s)&&(c=s)}c&&c.focus({preventScroll:!0})},i=w.useCallback(s=>{n&&s!==null&&o.current!==s&&(s?(setTimeout(()=>{s.getRootNode()&&l(s)}),o.current=s):o.current=null)},[n]);return w.useEffect(()=>{if(!n)return;o.current&&setTimeout(()=>l(o.current));const s=c=>{c.key==="Tab"&&o.current&&RC(o.current,c)};return document.addEventListener("keydown",s),()=>document.removeEventListener("keydown",s)},[n]),i}const NC=n=>(n+1)%1e6;function AC(){const[,n]=w.useReducer(NC,0);return n}const MC=gt.useId||(()=>{});function OC(){const n=MC();return n?`mantine-${n.replace(/:/g,"")}`:""}function Kn(n){const o=OC(),[l,i]=w.useState(o);return Gl(()=>{i(z0())},[]),typeof n=="string"?n:typeof window>"u"?o:l}function H0(n,o,l){w.useEffect(()=>(window.addEventListener(n,o,l),()=>window.removeEventListener(n,o,l)),[n,o])}function Js(n,o){if(typeof n=="function")return n(o);typeof n=="object"&&n!==null&&"current"in n&&(n.current=o)}function U0(...n){const o=new Map;return l=>{if(n.forEach(i=>{const s=Js(i,l);s&&o.set(i,s)}),o.size>0)return()=>{n.forEach(i=>{const s=o.get(i);s?s():Js(i,null)}),o.clear()}}}function Ct(...n){return w.useCallback(U0(...n),n)}function ya({value:n,defaultValue:o,finalValue:l,onChange:i=()=>{}}){const[s,c]=w.useState(o!==void 0?o:l),f=(m,...p)=>{c(m),i?.(m,...p)};return n!==void 0?[n,i,!0]:[s,f,!1]}function ic(n,o){return xC("(prefers-reduced-motion: reduce)",n,o)}function DC(n=!1,o){const{onOpen:l,onClose:i}={},[s,c]=w.useState(n),f=w.useCallback(()=>{c(h=>h||(l?.(),!0))},[l]),m=w.useCallback(()=>{c(h=>h&&(i?.(),!1))},[i]),p=w.useCallback(()=>{s?m():f()},[m,f,s]);return[s,{open:f,close:m,toggle:p}]}function zC(n){const o=w.useRef(void 0);return w.useEffect(()=>{o.current=n},[n]),o.current}function sc(n){const o=gt.version;return typeof gt.version!="string"||o.startsWith("18.")?n?.ref:n?.props?.ref}function V0(n){var o,l,i="";if(typeof n=="string"||typeof n=="number")i+=n;else if(typeof n=="object")if(Array.isArray(n)){var s=n.length;for(o=0;o{Object.entries(l).forEach(([i,s])=>{o[i]?o[i]=yt(o[i],s):o[i]=s})}),o}function cc({theme:n,classNames:o,props:l,stylesCtx:i}){const c=(Array.isArray(o)?o:[o]).map(f=>typeof f=="function"?f(n,l,i):f||jC);return BC(c)}function Fs({theme:n,styles:o,props:l,stylesCtx:i}){return(Array.isArray(o)?o:[o]).reduce((c,f)=>typeof f=="function"?{...c,...f(n,l,i)}:{...c,...f},{})}const k0=w.createContext(null);function xa(){const n=w.useContext(k0);if(!n)throw new Error("[@mantine/core] MantineProvider was not found in tree");return n}function $C(){return xa().cssVariablesResolver}function LC(){return xa().classNamesPrefix}function Jd(){return xa().getStyleNonce}function HC(){return xa().withStaticClasses}function UC(){return xa().headless}function VC(){return xa().stylesTransform?.sx}function kC(){return xa().stylesTransform?.styles}function Fd(){return xa().env||"default"}function YC(n){return/^#?([0-9A-F]{3}){1,2}([0-9A-F]{2})?$/i.test(n)}function qC(n){let o=n.replace("#","");if(o.length===3){const f=o.split("");o=[f[0],f[0],f[1],f[1],f[2],f[2]].join("")}if(o.length===8){const f=parseInt(o.slice(6,8),16)/255;return{r:parseInt(o.slice(0,2),16),g:parseInt(o.slice(2,4),16),b:parseInt(o.slice(4,6),16),a:f}}const l=parseInt(o,16),i=l>>16&255,s=l>>8&255,c=l&255;return{r:i,g:s,b:c,a:1}}function GC(n){const[o,l,i,s]=n.replace(/[^0-9,./]/g,"").split(/[/,]/).map(Number);return{r:o,g:l,b:i,a:s||1}}function XC(n){const o=/^hsla?\(\s*(\d+)\s*,\s*(\d+%)\s*,\s*(\d+%)\s*(,\s*(0?\.\d+|\d+(\.\d+)?))?\s*\)$/i,l=n.match(o);if(!l)return{r:0,g:0,b:0,a:1};const i=parseInt(l[1],10),s=parseInt(l[2],10)/100,c=parseInt(l[3],10)/100,f=l[5]?parseFloat(l[5]):void 0,m=(1-Math.abs(2*c-1))*s,p=i/60,h=m*(1-Math.abs(p%2-1)),v=c-m/2;let y,S,x;return p>=0&&p<1?(y=m,S=h,x=0):p>=1&&p<2?(y=h,S=m,x=0):p>=2&&p<3?(y=0,S=m,x=h):p>=3&&p<4?(y=0,S=h,x=m):p>=4&&p<5?(y=h,S=0,x=m):(y=m,S=0,x=h),{r:Math.round((y+v)*255),g:Math.round((S+v)*255),b:Math.round((x+v)*255),a:f||1}}function Wd(n){return YC(n)?qC(n):n.startsWith("rgb")?GC(n):n.startsWith("hsl")?XC(n):{r:0,g:0,b:0,a:1}}function Us(n,o){if(n.startsWith("var("))return`color-mix(in srgb, ${n}, black ${o*100}%)`;const{r:l,g:i,b:s,a:c}=Wd(n),f=1-o,m=p=>Math.round(p*f);return`rgba(${m(l)}, ${m(i)}, ${m(s)}, ${c})`}function ri(n,o){return typeof n.primaryShade=="number"?n.primaryShade:o==="dark"?n.primaryShade.dark:n.primaryShade.light}function id(n){return n<=.03928?n/12.92:((n+.055)/1.055)**2.4}function PC(n){const o=n.match(/oklch\((.*?)%\s/);return o?parseFloat(o[1]):null}function QC(n){if(n.startsWith("oklch("))return(PC(n)||0)/100;const{r:o,g:l,b:i}=Wd(n),s=o/255,c=l/255,f=i/255,m=id(s),p=id(c),h=id(f);return .2126*m+.7152*p+.0722*h}function Wr(n,o=.179){return n.startsWith("var(")?!1:QC(n)>o}function wa({color:n,theme:o,colorScheme:l}){if(typeof n!="string")throw new Error(`[@mantine/core] Failed to parse color. Expected color to be a string, instead got ${typeof n}`);if(n==="bright")return{color:n,value:l==="dark"?o.white:o.black,shade:void 0,isThemeColor:!1,isLight:Wr(l==="dark"?o.white:o.black,o.luminanceThreshold),variable:"--mantine-color-bright"};if(n==="dimmed")return{color:n,value:l==="dark"?o.colors.dark[2]:o.colors.gray[7],shade:void 0,isThemeColor:!1,isLight:Wr(l==="dark"?o.colors.dark[2]:o.colors.gray[6],o.luminanceThreshold),variable:"--mantine-color-dimmed"};if(n==="white"||n==="black")return{color:n,value:n==="white"?o.white:o.black,shade:void 0,isThemeColor:!1,isLight:Wr(n==="white"?o.white:o.black,o.luminanceThreshold),variable:`--mantine-color-${n}`};const[i,s]=n.split("."),c=s?Number(s):void 0,f=i in o.colors;if(f){const m=c!==void 0?o.colors[i][c]:o.colors[i][ri(o,l||"light")];return{color:i,value:m,shade:c,isThemeColor:f,isLight:Wr(m,o.luminanceThreshold),variable:s?`--mantine-color-${i}-${c}`:`--mantine-color-${i}-filled`}}return{color:n,value:n,isThemeColor:f,isLight:Wr(n,o.luminanceThreshold),shade:c,variable:void 0}}function en(n,o){const l=wa({color:n||o.primaryColor,theme:o});return l.variable?`var(${l.variable})`:n}function Md(n,o){const l={from:n?.from||o.defaultGradient.from,to:n?.to||o.defaultGradient.to,deg:n?.deg??o.defaultGradient.deg??0},i=en(l.from,o),s=en(l.to,o);return`linear-gradient(${l.deg}deg, ${i} 0%, ${s} 100%)`}function qn(n,o){if(typeof n!="string"||o>1||o<0)return"rgba(0, 0, 0, 1)";if(n.startsWith("var(")){const c=(1-o)*100;return`color-mix(in srgb, ${n}, transparent ${c}%)`}if(n.startsWith("oklch"))return n.includes("/")?n.replace(/\/\s*[\d.]+\s*\)/,`/ ${o})`):n.replace(")",` / ${o})`);const{r:l,g:i,b:s}=Wd(n);return`rgba(${l}, ${i}, ${s}, ${o})`}const Ol=qn,ZC=({color:n,theme:o,variant:l,gradient:i,autoContrast:s})=>{const c=wa({color:n,theme:o}),f=typeof s=="boolean"?s:o.autoContrast;if(l==="none")return{background:"transparent",hover:"transparent",color:"inherit",border:"none"};if(l==="filled"){const m=f&&c.isLight?"var(--mantine-color-black)":"var(--mantine-color-white)";return c.isThemeColor?c.shade===void 0?{background:`var(--mantine-color-${n}-filled)`,hover:`var(--mantine-color-${n}-filled-hover)`,color:m,border:`${K(1)} solid transparent`}:{background:`var(--mantine-color-${c.color}-${c.shade})`,hover:`var(--mantine-color-${c.color}-${c.shade===9?8:c.shade+1})`,color:m,border:`${K(1)} solid transparent`}:{background:n,hover:Us(n,.1),color:m,border:`${K(1)} solid transparent`}}if(l==="light"){if(c.isThemeColor){if(c.shade===void 0)return{background:`var(--mantine-color-${n}-light)`,hover:`var(--mantine-color-${n}-light-hover)`,color:`var(--mantine-color-${n}-light-color)`,border:`${K(1)} solid transparent`};const m=o.colors[c.color][c.shade];return{background:qn(m,.1),hover:qn(m,.12),color:`var(--mantine-color-${c.color}-${Math.min(c.shade,6)})`,border:`${K(1)} solid transparent`}}return{background:qn(n,.1),hover:qn(n,.12),color:n,border:`${K(1)} solid transparent`}}if(l==="outline")return c.isThemeColor?c.shade===void 0?{background:"transparent",hover:`var(--mantine-color-${n}-outline-hover)`,color:`var(--mantine-color-${n}-outline)`,border:`${K(1)} solid var(--mantine-color-${n}-outline)`}:{background:"transparent",hover:qn(o.colors[c.color][c.shade],.05),color:`var(--mantine-color-${c.color}-${c.shade})`,border:`${K(1)} solid var(--mantine-color-${c.color}-${c.shade})`}:{background:"transparent",hover:qn(n,.05),color:n,border:`${K(1)} solid ${n}`};if(l==="subtle"){if(c.isThemeColor){if(c.shade===void 0)return{background:"transparent",hover:`var(--mantine-color-${n}-light-hover)`,color:`var(--mantine-color-${n}-light-color)`,border:`${K(1)} solid transparent`};const m=o.colors[c.color][c.shade];return{background:"transparent",hover:qn(m,.12),color:`var(--mantine-color-${c.color}-${Math.min(c.shade,6)})`,border:`${K(1)} solid transparent`}}return{background:"transparent",hover:qn(n,.12),color:n,border:`${K(1)} solid transparent`}}return l==="transparent"?c.isThemeColor?c.shade===void 0?{background:"transparent",hover:"transparent",color:`var(--mantine-color-${n}-light-color)`,border:`${K(1)} solid transparent`}:{background:"transparent",hover:"transparent",color:`var(--mantine-color-${c.color}-${Math.min(c.shade,6)})`,border:`${K(1)} solid transparent`}:{background:"transparent",hover:"transparent",color:n,border:`${K(1)} solid transparent`}:l==="white"?c.isThemeColor?c.shade===void 0?{background:"var(--mantine-color-white)",hover:Us(o.white,.01),color:`var(--mantine-color-${n}-filled)`,border:`${K(1)} solid transparent`}:{background:"var(--mantine-color-white)",hover:Us(o.white,.01),color:`var(--mantine-color-${c.color}-${c.shade})`,border:`${K(1)} solid transparent`}:{background:"var(--mantine-color-white)",hover:Us(o.white,.01),color:n,border:`${K(1)} solid transparent`}:l==="gradient"?{background:Md(i,o),hover:Md(i,o),color:"var(--mantine-color-white)",border:"none"}:l==="default"?{background:"var(--mantine-color-default)",hover:"var(--mantine-color-default-hover)",color:"var(--mantine-color-default-color)",border:`${K(1)} solid var(--mantine-color-default-border)`}:{}},KC={dark:["#C9C9C9","#b8b8b8","#828282","#696969","#424242","#3b3b3b","#2e2e2e","#242424","#1f1f1f","#141414"],gray:["#f8f9fa","#f1f3f5","#e9ecef","#dee2e6","#ced4da","#adb5bd","#868e96","#495057","#343a40","#212529"],red:["#fff5f5","#ffe3e3","#ffc9c9","#ffa8a8","#ff8787","#ff6b6b","#fa5252","#f03e3e","#e03131","#c92a2a"],pink:["#fff0f6","#ffdeeb","#fcc2d7","#faa2c1","#f783ac","#f06595","#e64980","#d6336c","#c2255c","#a61e4d"],grape:["#f8f0fc","#f3d9fa","#eebefa","#e599f7","#da77f2","#cc5de8","#be4bdb","#ae3ec9","#9c36b5","#862e9c"],violet:["#f3f0ff","#e5dbff","#d0bfff","#b197fc","#9775fa","#845ef7","#7950f2","#7048e8","#6741d9","#5f3dc4"],indigo:["#edf2ff","#dbe4ff","#bac8ff","#91a7ff","#748ffc","#5c7cfa","#4c6ef5","#4263eb","#3b5bdb","#364fc7"],blue:["#e7f5ff","#d0ebff","#a5d8ff","#74c0fc","#4dabf7","#339af0","#228be6","#1c7ed6","#1971c2","#1864ab"],cyan:["#e3fafc","#c5f6fa","#99e9f2","#66d9e8","#3bc9db","#22b8cf","#15aabf","#1098ad","#0c8599","#0b7285"],teal:["#e6fcf5","#c3fae8","#96f2d7","#63e6be","#38d9a9","#20c997","#12b886","#0ca678","#099268","#087f5b"],green:["#ebfbee","#d3f9d8","#b2f2bb","#8ce99a","#69db7c","#51cf66","#40c057","#37b24d","#2f9e44","#2b8a3e"],lime:["#f4fce3","#e9fac8","#d8f5a2","#c0eb75","#a9e34b","#94d82d","#82c91e","#74b816","#66a80f","#5c940d"],yellow:["#fff9db","#fff3bf","#ffec99","#ffe066","#ffd43b","#fcc419","#fab005","#f59f00","#f08c00","#e67700"],orange:["#fff4e6","#ffe8cc","#ffd8a8","#ffc078","#ffa94d","#ff922b","#fd7e14","#f76707","#e8590c","#d9480f"]},Ty="-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji",em={scale:1,fontSmoothing:!0,focusRing:"auto",white:"#fff",black:"#000",colors:KC,primaryShade:{light:6,dark:8},primaryColor:"blue",variantColorResolver:ZC,autoContrast:!1,luminanceThreshold:.3,fontFamily:Ty,fontFamilyMonospace:"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace",respectReducedMotion:!1,cursorType:"default",defaultGradient:{from:"blue",to:"cyan",deg:45},defaultRadius:"sm",activeClassName:"mantine-active",focusClassName:"",headings:{fontFamily:Ty,fontWeight:"700",textWrap:"wrap",sizes:{h1:{fontSize:K(34),lineHeight:"1.3"},h2:{fontSize:K(26),lineHeight:"1.35"},h3:{fontSize:K(22),lineHeight:"1.4"},h4:{fontSize:K(18),lineHeight:"1.45"},h5:{fontSize:K(16),lineHeight:"1.5"},h6:{fontSize:K(14),lineHeight:"1.5"}}},fontSizes:{xs:K(12),sm:K(14),md:K(16),lg:K(18),xl:K(20)},lineHeights:{xs:"1.4",sm:"1.45",md:"1.55",lg:"1.6",xl:"1.65"},radius:{xs:K(2),sm:K(4),md:K(8),lg:K(16),xl:K(32)},spacing:{xs:K(10),sm:K(12),md:K(16),lg:K(20),xl:K(32)},breakpoints:{xs:"36em",sm:"48em",md:"62em",lg:"75em",xl:"88em"},shadows:{xs:`0 ${K(1)} ${K(3)} rgba(0, 0, 0, 0.05), 0 ${K(1)} ${K(2)} rgba(0, 0, 0, 0.1)`,sm:`0 ${K(1)} ${K(3)} rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 ${K(10)} ${K(15)} ${K(-5)}, rgba(0, 0, 0, 0.04) 0 ${K(7)} ${K(7)} ${K(-5)}`,md:`0 ${K(1)} ${K(3)} rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 ${K(20)} ${K(25)} ${K(-5)}, rgba(0, 0, 0, 0.04) 0 ${K(10)} ${K(10)} ${K(-5)}`,lg:`0 ${K(1)} ${K(3)} rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 ${K(28)} ${K(23)} ${K(-7)}, rgba(0, 0, 0, 0.04) 0 ${K(12)} ${K(12)} ${K(-7)}`,xl:`0 ${K(1)} ${K(3)} rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 ${K(36)} ${K(28)} ${K(-7)}, rgba(0, 0, 0, 0.04) 0 ${K(17)} ${K(17)} ${K(-7)}`},other:{},components:{}};function Ry(n){return n==="auto"||n==="dark"||n==="light"}function IC({key:n="mantine-color-scheme-value"}={}){let o;return{get:l=>{if(typeof window>"u")return l;try{const i=window.localStorage.getItem(n);return Ry(i)?i:l}catch{return l}},set:l=>{try{window.localStorage.setItem(n,l)}catch(i){console.warn("[@mantine/core] Local storage color scheme manager was unable to save color scheme.",i)}},subscribe:l=>{o=i=>{i.storageArea===window.localStorage&&i.key===n&&Ry(i.newValue)&&l(i.newValue)},window.addEventListener("storage",o)},unsubscribe:()=>{window.removeEventListener("storage",o)},clear:()=>{window.localStorage.removeItem(n)}}}const JC="[@mantine/core] MantineProvider: Invalid theme.primaryColor, it accepts only key of theme.colors, learn more – https://mantine.dev/theming/colors/#primary-color",_y="[@mantine/core] MantineProvider: Invalid theme.primaryShade, it accepts only 0-9 integers or an object { light: 0-9, dark: 0-9 }";function sd(n){return n<0||n>9?!1:parseInt(n.toString(),10)===n}function Ny(n){if(!(n.primaryColor in n.colors))throw new Error(JC);if(typeof n.primaryShade=="object"&&(!sd(n.primaryShade.dark)||!sd(n.primaryShade.light)))throw new Error(_y);if(typeof n.primaryShade=="number"&&!sd(n.primaryShade))throw new Error(_y)}function FC(n,o){if(!o)return Ny(n),n;const l=Qd(n,o);return o.fontFamily&&!o.headings?.fontFamily&&(l.headings.fontFamily=o.fontFamily),Ny(l),l}const tm=w.createContext(null),WC=()=>w.useContext(tm)||em;function nn(){const n=w.useContext(tm);if(!n)throw new Error("@mantine/core: MantineProvider was not found in component tree, make sure you have it in your app");return n}function Y0({theme:n,children:o,inherit:l=!0}){const i=WC(),s=w.useMemo(()=>FC(l?i:em,n),[n,i,l]);return b.jsx(tm.Provider,{value:s,children:o})}Y0.displayName="@mantine/core/MantineThemeProvider";function e2(){const n=nn(),o=Jd(),l=jt(n.breakpoints).reduce((i,s)=>{const c=n.breakpoints[s].includes("px"),f=_d(n.breakpoints[s]),m=c?`${f-.1}px`:Ks(f-.1),p=c?`${f}px`:Ks(f);return`${i}@media (max-width: ${m}) {.mantine-visible-from-${s} {display: none !important;}}@media (min-width: ${p}) {.mantine-hidden-from-${s} {display: none !important;}}`},"");return b.jsx("style",{"data-mantine-styles":"classes",nonce:o?.(),dangerouslySetInnerHTML:{__html:l}})}function cd(n){return Object.entries(n).map(([o,l])=>`${o}: ${l};`).join("")}function ei(n,o){return(Array.isArray(n)?n:[n]).reduce((i,s)=>`${s}{${i}}`,o)}function t2(n,o){const l=cd(n.variables),i=l?ei(o,l):"",s=cd(n.dark),c=cd(n.light),f=s?ei(o===":host"?`${o}([data-mantine-color-scheme="dark"])`:`${o}[data-mantine-color-scheme="dark"]`,s):"",m=c?ei(o===":host"?`${o}([data-mantine-color-scheme="light"])`:`${o}[data-mantine-color-scheme="light"]`,c):"";return`${i}${f}${m}`}function nm({color:n,theme:o,autoContrast:l}){return(typeof l=="boolean"?l:o.autoContrast)&&wa({color:n||o.primaryColor,theme:o}).isLight?"var(--mantine-color-black)":"var(--mantine-color-white)"}function Ay(n,o){return nm({color:n.colors[n.primaryColor][ri(n,o)],theme:n,autoContrast:null})}function Vs({theme:n,color:o,colorScheme:l,name:i=o,withColorValues:s=!0}){if(!n.colors[o])return{};if(l==="light"){const m=ri(n,"light"),p={[`--mantine-color-${i}-text`]:`var(--mantine-color-${i}-filled)`,[`--mantine-color-${i}-filled`]:`var(--mantine-color-${i}-${m})`,[`--mantine-color-${i}-filled-hover`]:`var(--mantine-color-${i}-${m===9?8:m+1})`,[`--mantine-color-${i}-light`]:Ol(n.colors[o][m],.1),[`--mantine-color-${i}-light-hover`]:Ol(n.colors[o][m],.12),[`--mantine-color-${i}-light-color`]:`var(--mantine-color-${i}-${m})`,[`--mantine-color-${i}-outline`]:`var(--mantine-color-${i}-${m})`,[`--mantine-color-${i}-outline-hover`]:Ol(n.colors[o][m],.05)};return s?{[`--mantine-color-${i}-0`]:n.colors[o][0],[`--mantine-color-${i}-1`]:n.colors[o][1],[`--mantine-color-${i}-2`]:n.colors[o][2],[`--mantine-color-${i}-3`]:n.colors[o][3],[`--mantine-color-${i}-4`]:n.colors[o][4],[`--mantine-color-${i}-5`]:n.colors[o][5],[`--mantine-color-${i}-6`]:n.colors[o][6],[`--mantine-color-${i}-7`]:n.colors[o][7],[`--mantine-color-${i}-8`]:n.colors[o][8],[`--mantine-color-${i}-9`]:n.colors[o][9],...p}:p}const c=ri(n,"dark"),f={[`--mantine-color-${i}-text`]:`var(--mantine-color-${i}-4)`,[`--mantine-color-${i}-filled`]:`var(--mantine-color-${i}-${c})`,[`--mantine-color-${i}-filled-hover`]:`var(--mantine-color-${i}-${c===9?8:c+1})`,[`--mantine-color-${i}-light`]:Ol(n.colors[o][Math.max(0,c-2)],.15),[`--mantine-color-${i}-light-hover`]:Ol(n.colors[o][Math.max(0,c-2)],.2),[`--mantine-color-${i}-light-color`]:`var(--mantine-color-${i}-${Math.max(c-5,0)})`,[`--mantine-color-${i}-outline`]:`var(--mantine-color-${i}-${Math.max(c-4,0)})`,[`--mantine-color-${i}-outline-hover`]:Ol(n.colors[o][Math.max(c-4,0)],.05)};return s?{[`--mantine-color-${i}-0`]:n.colors[o][0],[`--mantine-color-${i}-1`]:n.colors[o][1],[`--mantine-color-${i}-2`]:n.colors[o][2],[`--mantine-color-${i}-3`]:n.colors[o][3],[`--mantine-color-${i}-4`]:n.colors[o][4],[`--mantine-color-${i}-5`]:n.colors[o][5],[`--mantine-color-${i}-6`]:n.colors[o][6],[`--mantine-color-${i}-7`]:n.colors[o][7],[`--mantine-color-${i}-8`]:n.colors[o][8],[`--mantine-color-${i}-9`]:n.colors[o][9],...f}:f}function n2(n){return!!n&&typeof n=="object"&&"mantine-virtual-color"in n}function Dl(n,o,l){jt(o).forEach(i=>Object.assign(n,{[`--mantine-${l}-${i}`]:o[i]}))}const q0=n=>{const o=ri(n,"light"),l=n.defaultRadius in n.radius?n.radius[n.defaultRadius]:K(n.defaultRadius),i={variables:{"--mantine-scale":n.scale.toString(),"--mantine-cursor-type":n.cursorType,"--mantine-color-scheme":"light dark","--mantine-webkit-font-smoothing":n.fontSmoothing?"antialiased":"unset","--mantine-moz-font-smoothing":n.fontSmoothing?"grayscale":"unset","--mantine-color-white":n.white,"--mantine-color-black":n.black,"--mantine-line-height":n.lineHeights.md,"--mantine-font-family":n.fontFamily,"--mantine-font-family-monospace":n.fontFamilyMonospace,"--mantine-font-family-headings":n.headings.fontFamily,"--mantine-heading-font-weight":n.headings.fontWeight,"--mantine-heading-text-wrap":n.headings.textWrap,"--mantine-radius-default":l,"--mantine-primary-color-filled":`var(--mantine-color-${n.primaryColor}-filled)`,"--mantine-primary-color-filled-hover":`var(--mantine-color-${n.primaryColor}-filled-hover)`,"--mantine-primary-color-light":`var(--mantine-color-${n.primaryColor}-light)`,"--mantine-primary-color-light-hover":`var(--mantine-color-${n.primaryColor}-light-hover)`,"--mantine-primary-color-light-color":`var(--mantine-color-${n.primaryColor}-light-color)`},light:{"--mantine-primary-color-contrast":Ay(n,"light"),"--mantine-color-bright":"var(--mantine-color-black)","--mantine-color-text":n.black,"--mantine-color-body":n.white,"--mantine-color-error":"var(--mantine-color-red-6)","--mantine-color-placeholder":"var(--mantine-color-gray-5)","--mantine-color-anchor":`var(--mantine-color-${n.primaryColor}-${o})`,"--mantine-color-default":"var(--mantine-color-white)","--mantine-color-default-hover":"var(--mantine-color-gray-0)","--mantine-color-default-color":"var(--mantine-color-black)","--mantine-color-default-border":"var(--mantine-color-gray-4)","--mantine-color-dimmed":"var(--mantine-color-gray-6)","--mantine-color-disabled":"var(--mantine-color-gray-2)","--mantine-color-disabled-color":"var(--mantine-color-gray-5)","--mantine-color-disabled-border":"var(--mantine-color-gray-3)"},dark:{"--mantine-primary-color-contrast":Ay(n,"dark"),"--mantine-color-bright":"var(--mantine-color-white)","--mantine-color-text":"var(--mantine-color-dark-0)","--mantine-color-body":"var(--mantine-color-dark-7)","--mantine-color-error":"var(--mantine-color-red-8)","--mantine-color-placeholder":"var(--mantine-color-dark-3)","--mantine-color-anchor":`var(--mantine-color-${n.primaryColor}-4)`,"--mantine-color-default":"var(--mantine-color-dark-6)","--mantine-color-default-hover":"var(--mantine-color-dark-5)","--mantine-color-default-color":"var(--mantine-color-white)","--mantine-color-default-border":"var(--mantine-color-dark-4)","--mantine-color-dimmed":"var(--mantine-color-dark-2)","--mantine-color-disabled":"var(--mantine-color-dark-6)","--mantine-color-disabled-color":"var(--mantine-color-dark-3)","--mantine-color-disabled-border":"var(--mantine-color-gray-6)"}};Dl(i.variables,n.breakpoints,"breakpoint"),Dl(i.variables,n.spacing,"spacing"),Dl(i.variables,n.fontSizes,"font-size"),Dl(i.variables,n.lineHeights,"line-height"),Dl(i.variables,n.shadows,"shadow"),Dl(i.variables,n.radius,"radius"),n.colors[n.primaryColor].forEach((c,f)=>{i.variables[`--mantine-primary-color-${f}`]=`var(--mantine-color-${n.primaryColor}-${f})`}),jt(n.colors).forEach(c=>{const f=n.colors[c];if(n2(f)){Object.assign(i.light,Vs({theme:n,name:f.name,color:f.light,colorScheme:"light",withColorValues:!0})),Object.assign(i.dark,Vs({theme:n,name:f.name,color:f.dark,colorScheme:"dark",withColorValues:!0}));return}f.forEach((m,p)=>{i.variables[`--mantine-color-${c}-${p}`]=m}),Object.assign(i.light,Vs({theme:n,color:c,colorScheme:"light",withColorValues:!1})),Object.assign(i.dark,Vs({theme:n,color:c,colorScheme:"dark",withColorValues:!1}))});const s=n.headings.sizes;return jt(s).forEach(c=>{i.variables[`--mantine-${c}-font-size`]=s[c].fontSize,i.variables[`--mantine-${c}-line-height`]=s[c].lineHeight,i.variables[`--mantine-${c}-font-weight`]=s[c].fontWeight||n.headings.fontWeight}),i};function a2({theme:n,generator:o}){const l=q0(n),i=o?.(n);return i?Qd(l,i):l}const ud=q0(em);function o2(n){const o={variables:{},light:{},dark:{}};return jt(n.variables).forEach(l=>{ud.variables[l]!==n.variables[l]&&(o.variables[l]=n.variables[l])}),jt(n.light).forEach(l=>{ud.light[l]!==n.light[l]&&(o.light[l]=n.light[l])}),jt(n.dark).forEach(l=>{ud.dark[l]!==n.dark[l]&&(o.dark[l]=n.dark[l])}),o}function l2(n){return` + ${n}[data-mantine-color-scheme="dark"] { --mantine-color-scheme: dark; } + ${n}[data-mantine-color-scheme="light"] { --mantine-color-scheme: light; } +`}function G0({cssVariablesSelector:n,deduplicateCssVariables:o}){const l=nn(),i=Jd(),s=$C(),c=a2({theme:l,generator:s}),f=n===":root"&&o,m=f?o2(c):c,p=t2(m,n);return p?b.jsx("style",{"data-mantine-styles":!0,nonce:i?.(),dangerouslySetInnerHTML:{__html:`${p}${f?"":l2(n)}`}}):null}G0.displayName="@mantine/CssVariables";function zl(n,o){const l=typeof window<"u"&&"matchMedia"in window&&window.matchMedia("(prefers-color-scheme: dark)")?.matches,i=n!=="auto"?n:l?"dark":"light";o()?.setAttribute("data-mantine-color-scheme",i)}function r2({manager:n,defaultColorScheme:o,getRootElement:l,forceColorScheme:i}){const s=w.useRef(null),[c,f]=w.useState(()=>n.get(o)),m=i||c,p=w.useCallback(v=>{i||(zl(v,l),f(v),n.set(v))},[n.set,m,i]),h=w.useCallback(()=>{f(o),zl(o,l),n.clear()},[n.clear,o]);return w.useEffect(()=>(n.subscribe(p),n.unsubscribe),[n.subscribe,n.unsubscribe]),Gl(()=>{zl(n.get(o),l)},[]),w.useEffect(()=>{if(i)return zl(i,l),()=>{};i===void 0&&zl(c,l),typeof window<"u"&&"matchMedia"in window&&(s.current=window.matchMedia("(prefers-color-scheme: dark)"));const v=y=>{c==="auto"&&zl(y.matches?"dark":"light",l)};return s.current?.addEventListener("change",v),()=>s.current?.removeEventListener("change",v)},[c,i]),{colorScheme:m,setColorScheme:p,clearColorScheme:h}}function i2({respectReducedMotion:n,getRootElement:o}){Gl(()=>{n&&o()?.setAttribute("data-respect-reduced-motion","true")},[n])}function X0({theme:n,children:o,getStyleNonce:l,withStaticClasses:i=!0,withGlobalClasses:s=!0,deduplicateCssVariables:c=!0,withCssVariables:f=!0,cssVariablesSelector:m=":root",classNamesPrefix:p="mantine",colorSchemeManager:h=IC(),defaultColorScheme:v="light",getRootElement:y=()=>document.documentElement,cssVariablesResolver:S,forceColorScheme:x,stylesTransform:C,env:E}){const{colorScheme:R,setColorScheme:N,clearColorScheme:j}=r2({defaultColorScheme:v,forceColorScheme:x,manager:h,getRootElement:y});return i2({respectReducedMotion:n?.respectReducedMotion||!1,getRootElement:y}),b.jsx(k0.Provider,{value:{colorScheme:R,setColorScheme:N,clearColorScheme:j,getRootElement:y,classNamesPrefix:p,getStyleNonce:l,cssVariablesResolver:S,cssVariablesSelector:m,withStaticClasses:i,stylesTransform:C,env:E},children:b.jsxs(Y0,{theme:n,children:[f&&b.jsx(G0,{cssVariablesSelector:m,deduplicateCssVariables:c}),s&&b.jsx(e2,{}),o]})})}X0.displayName="@mantine/core/MantineProvider";function Xl({classNames:n,styles:o,props:l,stylesCtx:i}){const s=nn();return{resolvedClassNames:cc({theme:s,classNames:n,props:l,stylesCtx:i||void 0}),resolvedStyles:Fs({theme:s,styles:o,props:l,stylesCtx:i||void 0})}}const s2={always:"mantine-focus-always",auto:"mantine-focus-auto",never:"mantine-focus-never"};function c2({theme:n,options:o,unstyled:l}){return yt(o?.focusable&&!l&&(n.focusClassName||s2[n.focusRing]),o?.active&&!l&&n.activeClassName)}function u2({selector:n,stylesCtx:o,options:l,props:i,theme:s}){return cc({theme:s,classNames:l?.classNames,props:l?.props||i,stylesCtx:o})[n]}function My({selector:n,stylesCtx:o,theme:l,classNames:i,props:s}){return cc({theme:l,classNames:i,props:s,stylesCtx:o})[n]}function f2({rootSelector:n,selector:o,className:l}){return n===o?l:void 0}function d2({selector:n,classes:o,unstyled:l}){return l?void 0:o[n]}function m2({themeName:n,classNamesPrefix:o,selector:l,withStaticClass:i}){return i===!1?[]:n.map(s=>`${o}-${s}-${l}`)}function p2({themeName:n,theme:o,selector:l,props:i,stylesCtx:s}){return n.map(c=>cc({theme:o,classNames:o.components[c]?.classNames,props:i,stylesCtx:s})?.[l])}function h2({options:n,classes:o,selector:l,unstyled:i}){return n?.variant&&!i?o[`${l}--${n.variant}`]:void 0}function v2({theme:n,options:o,themeName:l,selector:i,classNamesPrefix:s,classNames:c,classes:f,unstyled:m,className:p,rootSelector:h,props:v,stylesCtx:y,withStaticClasses:S,headless:x,transformedStyles:C}){return yt(c2({theme:n,options:o,unstyled:m||x}),p2({theme:n,themeName:l,selector:i,props:v,stylesCtx:y}),h2({options:o,classes:f,selector:i,unstyled:m}),My({selector:i,stylesCtx:y,theme:n,classNames:c,props:v}),My({selector:i,stylesCtx:y,theme:n,classNames:C,props:v}),u2({selector:i,stylesCtx:y,options:o,props:v,theme:n}),f2({rootSelector:h,selector:i,className:p}),d2({selector:i,classes:f,unstyled:m||x}),S&&!x&&m2({themeName:l,classNamesPrefix:s,selector:i,withStaticClass:o?.withStaticClass}),o?.className)}function g2({theme:n,themeName:o,props:l,stylesCtx:i,selector:s}){return o.map(c=>Fs({theme:n,styles:n.components[c]?.styles,props:l,stylesCtx:i})[s]).reduce((c,f)=>({...c,...f}),{})}function Od({style:n,theme:o}){return Array.isArray(n)?[...n].reduce((l,i)=>({...l,...Od({style:i,theme:o})}),{}):typeof n=="function"?n(o):n??{}}function y2(n){return n.reduce((o,l)=>(l&&Object.keys(l).forEach(i=>{o[i]={...o[i],...Zd(l[i])}}),o),{})}function b2({vars:n,varsResolver:o,theme:l,props:i,stylesCtx:s,selector:c,themeName:f,headless:m}){return y2([m?{}:o?.(l,i,s),...f.map(p=>l.components?.[p]?.vars?.(l,i,s)),n?.(l,i,s)])?.[c]}function S2({theme:n,themeName:o,selector:l,options:i,props:s,stylesCtx:c,rootSelector:f,styles:m,style:p,vars:h,varsResolver:v,headless:y,withStylesTransform:S}){return{...!S&&g2({theme:n,themeName:o,props:s,stylesCtx:c,selector:l}),...!S&&Fs({theme:n,styles:m,props:s,stylesCtx:c})[l],...!S&&Fs({theme:n,styles:i?.styles,props:i?.props||s,stylesCtx:c})[l],...b2({theme:n,props:s,stylesCtx:c,vars:h,varsResolver:v,selector:l,themeName:o,headless:y}),...f===l?Od({style:p,theme:n}):null,...Od({style:i?.style,theme:n})}}function x2({props:n,stylesCtx:o,themeName:l}){const i=nn(),s=kC()?.();return{getTransformedStyles:f=>s?[...f.map(p=>s(p,{props:n,theme:i,ctx:o})),...l.map(p=>s(i.components[p]?.styles,{props:n,theme:i,ctx:o}))].filter(Boolean):[],withStylesTransform:!!s}}function _e({name:n,classes:o,props:l,stylesCtx:i,className:s,style:c,rootSelector:f="root",unstyled:m,classNames:p,styles:h,vars:v,varsResolver:y}){const S=nn(),x=LC(),C=HC(),E=UC(),R=(Array.isArray(n)?n:[n]).filter(M=>M),{withStylesTransform:N,getTransformedStyles:j}=x2({props:l,stylesCtx:i,themeName:R});return(M,z)=>({className:v2({theme:S,options:z,themeName:R,selector:M,classNamesPrefix:x,classNames:p,classes:o,unstyled:m,className:s,rootSelector:f,props:l,stylesCtx:i,withStaticClasses:C,headless:E,transformedStyles:j([z?.styles,h])}),style:S2({theme:S,themeName:R,selector:M,options:z,props:l,stylesCtx:i,rootSelector:f,styles:h,style:c,vars:v,varsResolver:y,headless:E,withStylesTransform:N})})}function P0(n,o){return typeof n=="boolean"?n:o.autoContrast}function le(n,o,l){const i=nn(),s=i.components[n]?.defaultProps,c=typeof s=="function"?s(i):s;return{...o,...c,...Zd(l)}}function fd(n){return jt(n).reduce((o,l)=>n[l]!==void 0?`${o}${cC(l)}:${n[l]};`:o,"").trim()}function w2({selector:n,styles:o,media:l,container:i}){const s=o?fd(o):"",c=Array.isArray(l)?l.map(m=>`@media${m.query}{${n}{${fd(m.styles)}}}`):[],f=Array.isArray(i)?i.map(m=>`@container ${m.query}{${n}{${fd(m.styles)}}}`):[];return`${s?`${n}{${s}}`:""}${c.join("")}${f.join("")}`.trim()}function Q0(n){const o=Jd();return b.jsx("style",{"data-mantine-styles":"inline",nonce:o?.(),dangerouslySetInnerHTML:{__html:w2(n)}})}function di(n){const{m:o,mx:l,my:i,mt:s,mb:c,ml:f,mr:m,me:p,ms:h,p:v,px:y,py:S,pt:x,pb:C,pl:E,pr:R,pe:N,ps:j,bd:M,bg:z,c:U,opacity:O,ff:H,fz:k,fw:Z,lts:ne,ta:ae,lh:te,fs:ie,tt:ce,td:oe,w:A,miw:B,maw:L,h:X,mih:F,mah:_,bgsz:Y,bgp:ee,bgr:ue,bga:re,pos:de,top:ge,left:Ee,bottom:Te,right:He,inset:st,display:ot,flex:St,hiddenFrom:Je,visibleFrom:ct,lightHidden:$t,darkHidden:me,sx:pe,...Se}=n;return{styleProps:Zd({m:o,mx:l,my:i,mt:s,mb:c,ml:f,mr:m,me:p,ms:h,p:v,px:y,py:S,pt:x,pb:C,pl:E,pr:R,pe:N,ps:j,bd:M,bg:z,c:U,opacity:O,ff:H,fz:k,fw:Z,lts:ne,ta:ae,lh:te,fs:ie,tt:ce,td:oe,w:A,miw:B,maw:L,h:X,mih:F,mah:_,bgsz:Y,bgp:ee,bgr:ue,bga:re,pos:de,top:ge,left:Ee,bottom:Te,right:He,inset:st,display:ot,flex:St,hiddenFrom:Je,visibleFrom:ct,lightHidden:$t,darkHidden:me,sx:pe}),rest:Se}}const C2={m:{type:"spacing",property:"margin"},mt:{type:"spacing",property:"marginTop"},mb:{type:"spacing",property:"marginBottom"},ml:{type:"spacing",property:"marginLeft"},mr:{type:"spacing",property:"marginRight"},ms:{type:"spacing",property:"marginInlineStart"},me:{type:"spacing",property:"marginInlineEnd"},mx:{type:"spacing",property:"marginInline"},my:{type:"spacing",property:"marginBlock"},p:{type:"spacing",property:"padding"},pt:{type:"spacing",property:"paddingTop"},pb:{type:"spacing",property:"paddingBottom"},pl:{type:"spacing",property:"paddingLeft"},pr:{type:"spacing",property:"paddingRight"},ps:{type:"spacing",property:"paddingInlineStart"},pe:{type:"spacing",property:"paddingInlineEnd"},px:{type:"spacing",property:"paddingInline"},py:{type:"spacing",property:"paddingBlock"},bd:{type:"border",property:"border"},bg:{type:"color",property:"background"},c:{type:"textColor",property:"color"},opacity:{type:"identity",property:"opacity"},ff:{type:"fontFamily",property:"fontFamily"},fz:{type:"fontSize",property:"fontSize"},fw:{type:"identity",property:"fontWeight"},lts:{type:"size",property:"letterSpacing"},ta:{type:"identity",property:"textAlign"},lh:{type:"lineHeight",property:"lineHeight"},fs:{type:"identity",property:"fontStyle"},tt:{type:"identity",property:"textTransform"},td:{type:"identity",property:"textDecoration"},w:{type:"spacing",property:"width"},miw:{type:"spacing",property:"minWidth"},maw:{type:"spacing",property:"maxWidth"},h:{type:"spacing",property:"height"},mih:{type:"spacing",property:"minHeight"},mah:{type:"spacing",property:"maxHeight"},bgsz:{type:"size",property:"backgroundSize"},bgp:{type:"identity",property:"backgroundPosition"},bgr:{type:"identity",property:"backgroundRepeat"},bga:{type:"identity",property:"backgroundAttachment"},pos:{type:"identity",property:"position"},top:{type:"size",property:"top"},left:{type:"size",property:"left"},bottom:{type:"size",property:"bottom"},right:{type:"size",property:"right"},inset:{type:"size",property:"inset"},display:{type:"identity",property:"display"},flex:{type:"identity",property:"flex"}};function am(n,o){const l=wa({color:n,theme:o});return l.color==="dimmed"?"var(--mantine-color-dimmed)":l.color==="bright"?"var(--mantine-color-bright)":l.variable?`var(${l.variable})`:l.color}function E2(n,o){const l=wa({color:n,theme:o});return l.isThemeColor&&l.shade===void 0?`var(--mantine-color-${l.color}-text)`:am(n,o)}function T2(n,o){if(typeof n=="number")return K(n);if(typeof n=="string"){const[l,i,...s]=n.split(" ").filter(f=>f.trim()!=="");let c=`${K(l)}`;return i&&(c+=` ${i}`),s.length>0&&(c+=` ${am(s.join(" "),o)}`),c.trim()}return n}const Oy={text:"var(--mantine-font-family)",mono:"var(--mantine-font-family-monospace)",monospace:"var(--mantine-font-family-monospace)",heading:"var(--mantine-font-family-headings)",headings:"var(--mantine-font-family-headings)"};function R2(n){return typeof n=="string"&&n in Oy?Oy[n]:n}const _2=["h1","h2","h3","h4","h5","h6"];function N2(n,o){return typeof n=="string"&&n in o.fontSizes?`var(--mantine-font-size-${n})`:typeof n=="string"&&_2.includes(n)?`var(--mantine-${n}-font-size)`:typeof n=="number"||typeof n=="string"?K(n):n}function A2(n){return n}const M2=["h1","h2","h3","h4","h5","h6"];function O2(n,o){return typeof n=="string"&&n in o.lineHeights?`var(--mantine-line-height-${n})`:typeof n=="string"&&M2.includes(n)?`var(--mantine-${n}-line-height)`:n}function D2(n){return typeof n=="number"?K(n):n}function z2(n,o){if(typeof n=="number")return K(n);if(typeof n=="string"){const l=n.replace("-","");if(!(l in o.spacing))return K(n);const i=`--mantine-spacing-${l}`;return n.startsWith("-")?`calc(var(${i}) * -1)`:`var(${i})`}return n}const dd={color:am,textColor:E2,fontSize:N2,spacing:z2,identity:A2,size:D2,lineHeight:O2,fontFamily:R2,border:T2};function Dy(n){return n.replace("(min-width: ","").replace("em)","")}function j2({media:n,...o}){const i=Object.keys(n).sort((s,c)=>Number(Dy(s))-Number(Dy(c))).map(s=>({query:s,styles:n[s]}));return{...o,media:i}}function B2(n){if(typeof n!="object"||n===null)return!1;const o=Object.keys(n);return!(o.length===1&&o[0]==="base")}function $2(n){return typeof n=="object"&&n!==null?"base"in n?n.base:void 0:n}function L2(n){return typeof n=="object"&&n!==null?jt(n).filter(o=>o!=="base"):[]}function H2(n,o){return typeof n=="object"&&n!==null&&o in n?n[o]:n}function U2({styleProps:n,data:o,theme:l}){return j2(jt(n).reduce((i,s)=>{if(s==="hiddenFrom"||s==="visibleFrom"||s==="sx")return i;const c=o[s],f=Array.isArray(c.property)?c.property:[c.property],m=$2(n[s]);if(!B2(n[s]))return f.forEach(h=>{i.inlineStyles[h]=dd[c.type](m,l)}),i;i.hasResponsiveStyles=!0;const p=L2(n[s]);return f.forEach(h=>{m&&(i.styles[h]=dd[c.type](m,l)),p.forEach(v=>{const y=`(min-width: ${l.breakpoints[v]})`;i.media[y]={...i.media[y],[h]:dd[c.type](H2(n[s],v),l)}})}),i},{hasResponsiveStyles:!1,styles:{},inlineStyles:{},media:{}}))}function V2(){return`__m__-${w.useId().replace(/:/g,"")}`}function om(n,o){return Array.isArray(n)?[...n].reduce((l,i)=>({...l,...om(i,o)}),{}):typeof n=="function"?n(o):n??{}}function Z0(n){return n.startsWith("data-")?n:`data-${n}`}function k2(n){return Object.keys(n).reduce((o,l)=>{const i=n[l];return i===void 0||i===""||i===!1||i===null||(o[Z0(l)]=n[l]),o},{})}function K0(n){return n?typeof n=="string"?{[Z0(n)]:!0}:Array.isArray(n)?[...n].reduce((o,l)=>({...o,...K0(l)}),{}):k2(n):null}function Dd(n,o){return Array.isArray(n)?[...n].reduce((l,i)=>({...l,...Dd(i,o)}),{}):typeof n=="function"?n(o):n??{}}function Y2({theme:n,style:o,vars:l,styleProps:i}){const s=Dd(o,n),c=Dd(l,n);return{...s,...c,...i}}const I0=w.forwardRef(({component:n,style:o,__vars:l,className:i,variant:s,mod:c,size:f,hiddenFrom:m,visibleFrom:p,lightHidden:h,darkHidden:v,renderRoot:y,__size:S,...x},C)=>{const E=nn(),R=n||"div",{styleProps:N,rest:j}=di(x),z=VC()?.()?.(N.sx),U=V2(),O=U2({styleProps:N,theme:E,data:C2}),H={ref:C,style:Y2({theme:E,style:o,vars:l,styleProps:O.inlineStyles}),className:yt(i,z,{[U]:O.hasResponsiveStyles,"mantine-light-hidden":h,"mantine-dark-hidden":v,[`mantine-hidden-from-${m}`]:m,[`mantine-visible-from-${p}`]:p}),"data-variant":s,"data-size":O0(f)?void 0:f||void 0,size:S,...K0(c),...j};return b.jsxs(b.Fragment,{children:[O.hasResponsiveStyles&&b.jsx(Q0,{selector:`.${U}`,styles:O.styles,media:O.media}),typeof y=="function"?y(H):b.jsx(R,{...H})]})});I0.displayName="@mantine/core/Box";const fe=I0;function J0(n){return n}function q2(n){const o=n;return l=>{const i=w.forwardRef((s,c)=>b.jsx(o,{...l,...s,ref:c}));return i.extend=o.extend,i.displayName=`WithProps(${o.displayName})`,i}}function ve(n){const o=w.forwardRef(n);return o.extend=J0,o.withProps=l=>{const i=w.forwardRef((s,c)=>b.jsx(o,{...l,...s,ref:c}));return i.extend=o.extend,i.displayName=`WithProps(${o.displayName})`,i},o}function Bt(n){const o=w.forwardRef(n);return o.withProps=l=>{const i=w.forwardRef((s,c)=>b.jsx(o,{...l,...s,ref:c}));return i.extend=o.extend,i.displayName=`WithProps(${o.displayName})`,i},o.extend=J0,o}const G2=w.createContext({dir:"ltr",toggleDirection:()=>{},setDirection:()=>{}});function Pl(){return w.useContext(G2)}var uc=w0();const ai=x0(uc);function X2(n){if(!n||typeof n=="string")return 0;const o=n/36;return Math.round((4+15*o**.25+o/5)*10)}function md(n){return n?.current?n.current.scrollHeight:"auto"}const ti=typeof window<"u"&&window.requestAnimationFrame;function P2({transitionDuration:n,transitionTimingFunction:o="ease",onTransitionEnd:l=()=>{},opened:i}){const s=w.useRef(null),c=0,f={height:0,overflow:"hidden"},[m,p]=w.useState(i?{}:f),h=C=>{uc.flushSync(()=>p(C))},v=C=>{h(E=>({...E,...C}))};function y(C){const E=n||X2(C);return{transition:`height ${E}ms ${o}, opacity ${E}ms ${o}`}}ga(()=>{typeof ti=="function"&&ti(i?()=>{v({willChange:"height",display:"block",overflow:"hidden"}),ti(()=>{const C=md(s);v({...y(C),height:C})})}:()=>{const C=md(s);v({...y(C),willChange:"height",height:C}),ti(()=>v({height:c,overflow:"hidden"}))})},[i]);const S=C=>{if(!(C.target!==s.current||C.propertyName!=="height"))if(i){const E=md(s);E===m.height?h({}):v({height:E}),l()}else m.height===c&&(h(f),l())};function x({style:C={},refKey:E="ref",...R}={}){const N=R[E],j={"aria-hidden":!i,inert:!i,...R,[E]:U0(s,N),onTransitionEnd:S,style:{boxSizing:"border-box",...C,...m}};return gt.version.startsWith("18")||(j.inert=!i),j}return x}const Q2={transitionDuration:200,transitionTimingFunction:"ease",animateOpacity:!0},F0=ve((n,o)=>{const{children:l,in:i,transitionDuration:s,transitionTimingFunction:c,style:f,onTransitionEnd:m,animateOpacity:p,...h}=le("Collapse",Q2,n),v=nn(),y=ic(),x=(v.respectReducedMotion?y:!1)?0:s,C=P2({opened:i,transitionDuration:x,transitionTimingFunction:c,onTransitionEnd:m});return x===0?i?b.jsx(fe,{...h,children:l}):null:b.jsx(fe,{...C({style:{opacity:i||!p?1:0,transition:p?`opacity ${x}ms ${c}`:"none",...om(f,v)},ref:o,...h}),children:l})});F0.displayName="@mantine/core/Collapse";function fc(){return typeof window<"u"}function Ql(n){return W0(n)?(n.nodeName||"").toLowerCase():"#document"}function Gt(n){var o;return(n==null||(o=n.ownerDocument)==null?void 0:o.defaultView)||window}function Ca(n){var o;return(o=(W0(n)?n.ownerDocument:n.document)||window.document)==null?void 0:o.documentElement}function W0(n){return fc()?n instanceof Node||n instanceof Gt(n).Node:!1}function tt(n){return fc()?n instanceof Element||n instanceof Gt(n).Element:!1}function Ln(n){return fc()?n instanceof HTMLElement||n instanceof Gt(n).HTMLElement:!1}function zd(n){return!fc()||typeof ShadowRoot>"u"?!1:n instanceof ShadowRoot||n instanceof Gt(n).ShadowRoot}function dc(n){const{overflow:o,overflowX:l,overflowY:i,display:s}=zn(n);return/auto|scroll|overlay|hidden|clip/.test(o+i+l)&&s!=="inline"&&s!=="contents"}function Z2(n){return/^(table|td|th)$/.test(Ql(n))}function mc(n){try{if(n.matches(":popover-open"))return!0}catch{}try{return n.matches(":modal")}catch{return!1}}const K2=/transform|translate|scale|rotate|perspective|filter/,I2=/paint|layout|strict|content/,Ao=n=>!!n&&n!=="none";let pd;function lm(n){const o=tt(n)?zn(n):n;return Ao(o.transform)||Ao(o.translate)||Ao(o.scale)||Ao(o.rotate)||Ao(o.perspective)||!pc()&&(Ao(o.backdropFilter)||Ao(o.filter))||K2.test(o.willChange||"")||I2.test(o.contain||"")}function J2(n){let o=ao(n);for(;Ln(o)&&!Lo(o);){if(lm(o))return o;if(mc(o))return null;o=ao(o)}return null}function pc(){return pd==null&&(pd=typeof CSS<"u"&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),pd}function Lo(n){return/^(html|body|#document)$/.test(Ql(n))}function zn(n){return Gt(n).getComputedStyle(n)}function hc(n){return tt(n)?{scrollLeft:n.scrollLeft,scrollTop:n.scrollTop}:{scrollLeft:n.scrollX,scrollTop:n.scrollY}}function ao(n){if(Ql(n)==="html")return n;const o=n.assignedSlot||n.parentNode||zd(n)&&n.host||Ca(n);return zd(o)?o.host:o}function eb(n){const o=ao(n);return Lo(o)?(n.ownerDocument||n).body:Ln(o)&&dc(o)?o:eb(o)}function ha(n,o,l){var i;o===void 0&&(o=[]),l===void 0&&(l=!0);const s=eb(n),c=s===((i=n.ownerDocument)==null?void 0:i.body),f=Gt(s);if(c){const m=jd(f);return o.concat(f,f.visualViewport||[],dc(s)?s:[],m&&l?ha(m):[])}else return o.concat(s,ha(s,[],l))}function jd(n){return n.parent&&Object.getPrototypeOf(n.parent)?n.frameElement:null}function zy(n){let o=n.activeElement;for(;((l=o)==null||(l=l.shadowRoot)==null?void 0:l.activeElement)!=null;){var l;o=o.shadowRoot.activeElement}return o}function ii(n,o){if(!n||!o)return!1;const l=o.getRootNode==null?void 0:o.getRootNode();if(n.contains(o))return!0;if(l&&zd(l)){let i=o;for(;i;){if(n===i)return!0;i=i.parentNode||i.host}}return!1}function tb(){const n=navigator.userAgentData;return n!=null&&n.platform?n.platform:navigator.platform}function nb(){const n=navigator.userAgentData;return n&&Array.isArray(n.brands)?n.brands.map(o=>{let{brand:l,version:i}=o;return l+"/"+i}).join(" "):navigator.userAgent}function F2(n){return tE()?!1:!jy()&&n.width===0&&n.height===0||jy()&&n.width===1&&n.height===1&&n.pressure===0&&n.detail===0&&n.pointerType==="mouse"||n.width<1&&n.height<1&&n.pressure===0&&n.detail===0&&n.pointerType==="touch"}function W2(){return/apple/i.test(navigator.vendor)}function jy(){const n=/android/i;return n.test(tb())||n.test(nb())}function eE(){return tb().toLowerCase().startsWith("mac")&&!navigator.maxTouchPoints}function tE(){return nb().includes("jsdom/")}function Bd(n,o){const l=["mouse","pen"];return l.push("",void 0),l.includes(n)}function nE(n){return"nativeEvent"in n}function aE(n){return n.matches("html,body")}function jo(n){return n?.ownerDocument||document}function hd(n,o){if(o==null)return!1;if("composedPath"in n)return n.composedPath().includes(o);const l=n;return l.target!=null&&o.contains(l.target)}function Bl(n){return"composedPath"in n?n.composedPath()[0]:n.target}const oE="input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])";function lE(n){return Ln(n)&&n.matches(oE)}const rE=["top","right","bottom","left"],jn=Math.min,Cn=Math.max,Ws=Math.round,ks=Math.floor,va=n=>({x:n,y:n}),iE={left:"right",right:"left",bottom:"top",top:"bottom"};function ab(n,o,l){return Cn(n,jn(o,l))}function Pn(n,o){return typeof n=="function"?n(o):n}function Qn(n){return n.split("-")[0]}function Zl(n){return n.split("-")[1]}function rm(n){return n==="x"?"y":"x"}function im(n){return n==="y"?"height":"width"}function On(n){const o=n[0];return o==="t"||o==="b"?"y":"x"}function sm(n){return rm(On(n))}function sE(n,o,l){l===void 0&&(l=!1);const i=Zl(n),s=sm(n),c=im(s);let f=s==="x"?i===(l?"end":"start")?"right":"left":i==="start"?"bottom":"top";return o.reference[c]>o.floating[c]&&(f=ec(f)),[f,ec(f)]}function cE(n){const o=ec(n);return[$d(n),o,$d(o)]}function $d(n){return n.includes("start")?n.replace("start","end"):n.replace("end","start")}const By=["left","right"],$y=["right","left"],uE=["top","bottom"],fE=["bottom","top"];function dE(n,o,l){switch(n){case"top":case"bottom":return l?o?$y:By:o?By:$y;case"left":case"right":return o?uE:fE;default:return[]}}function mE(n,o,l,i){const s=Zl(n);let c=dE(Qn(n),l==="start",i);return s&&(c=c.map(f=>f+"-"+s),o&&(c=c.concat(c.map($d)))),c}function ec(n){const o=Qn(n);return iE[o]+n.slice(o.length)}function pE(n){var o,l,i,s;return{top:(o=n.top)!=null?o:0,right:(l=n.right)!=null?l:0,bottom:(i=n.bottom)!=null?i:0,left:(s=n.left)!=null?s:0}}function cm(n){return typeof n!="number"?pE(n):{top:n,right:n,bottom:n,left:n}}function no(n){const{x:o,y:l,width:i,height:s}=n;return{width:i,height:s,top:l,left:o,right:o+i,bottom:l+s,x:o,y:l}}function Ly(n,o,l){let{reference:i,floating:s}=n;const c=On(o),f=sm(o),m=im(f),p=Qn(o),h=c==="y",v=i.x+i.width/2-s.width/2,y=i.y+i.height/2-s.height/2,S=i[m]/2-s[m]/2;let x;switch(p){case"top":x={x:v,y:i.y-s.height};break;case"bottom":x={x:v,y:i.y+i.height};break;case"right":x={x:i.x+i.width,y};break;case"left":x={x:i.x-s.width,y};break;default:x={x:i.x,y:i.y}}const C=Zl(o);return C&&(x[f]+=S*(C==="end"?1:-1)*(l&&h?-1:1)),x}async function hE(n,o){var l;o===void 0&&(o={});const{x:i,y:s,platform:c,rects:f,elements:m,strategy:p}=n,{boundary:h="clippingAncestors",rootBoundary:v="viewport",elementContext:y="floating",altBoundary:S=!1,padding:x=0}=Pn(o,n),C=cm(x),R=m[S?y==="floating"?"reference":"floating":y],N=no(await c.getClippingRect({element:(l=await(c.isElement==null?void 0:c.isElement(R)))==null||l?R:R.contextElement||await(c.getDocumentElement==null?void 0:c.getDocumentElement(m.floating)),boundary:h,rootBoundary:v,strategy:p})),j=y==="floating"?{x:i,y:s,width:f.floating.width,height:f.floating.height}:f.reference,M=await(c.getOffsetParent==null?void 0:c.getOffsetParent(m.floating)),z=await(c.isElement==null?void 0:c.isElement(M))&&await(c.getScale==null?void 0:c.getScale(M))||{x:1,y:1},U=no(c.convertOffsetParentRelativeRectToViewportRelativeRect?await c.convertOffsetParentRelativeRectToViewportRelativeRect({elements:m,rect:j,offsetParent:M,strategy:p}):j);return{top:(N.top-U.top+C.top)/z.y,bottom:(U.bottom-N.bottom+C.bottom)/z.y,left:(N.left-U.left+C.left)/z.x,right:(U.right-N.right+C.right)/z.x}}const vE=50,gE=async(n,o,l)=>{const{placement:i="bottom",strategy:s="absolute",middleware:c=[],platform:f}=l,m=f.detectOverflow?f:{...f,detectOverflow:hE},p=await(f.isRTL==null?void 0:f.isRTL(o));let h=await f.getElementRects({reference:n,floating:o,strategy:s}),{x:v,y}=Ly(h,i,p),S=i,x=0;const C={};for(let E=0;E({name:"arrow",options:n,async fn(o){const{x:l,y:i,placement:s,rects:c,platform:f,elements:m,middlewareData:p}=o,{element:h,padding:v=0}=Pn(n,o)||{};if(h==null)return{};const y=cm(v),S={x:l,y:i},x=sm(s),C=im(x),E=await f.getDimensions(h),R=x==="y",N=R?"top":"left",j=R?"bottom":"right",M=R?"clientHeight":"clientWidth",z=c.reference[C]+c.reference[x]-S[x]-c.floating[C],U=S[x]-c.reference[x],O=await(f.getOffsetParent==null?void 0:f.getOffsetParent(h));let H=O?O[M]:0;(!H||!await(f.isElement==null?void 0:f.isElement(O)))&&(H=m.floating[M]||c.floating[C]);const k=z/2-U/2,Z=H/2-E[C]/2-1,ne=jn(y[N],Z),ae=jn(y[j],Z),te=H-E[C]-ae,ie=H/2-E[C]/2+k,ce=ab(ne,ie,te),oe=!p.arrow&&Zl(s)!=null&&ie!==ce&&c.reference[C]/2-(iece<=0)){var ae,te;const ce=(((ae=c.flip)==null?void 0:ae.index)||0)+1,oe=H[ce];if(oe&&(!(y==="alignment"?j!==On(oe):!1)||ne.every(L=>On(L.placement)===j?L.overflows[0]>0:!0)))return{data:{index:ce,overflows:ne},reset:{placement:oe}};let A=(te=ne.filter(B=>B.overflows[0]<=0).sort((B,L)=>B.overflows[1]-L.overflows[1])[0])==null?void 0:te.placement;if(!A)switch(x){case"bestFit":{var ie;const B=(ie=ne.filter(L=>{if(O){const X=On(L.placement);return X===j||X==="y"}return!0}).map(L=>[L.placement,L.overflows.filter(X=>X>0).reduce((X,F)=>X+F,0)]).sort((L,X)=>L[1]-X[1])[0])==null?void 0:ie[0];B&&(A=B);break}case"initialPlacement":A=m;break}if(s!==A)return{reset:{placement:A}}}return{}}}};function Hy(n,o){return{top:n.top-o.height,right:n.right-o.width,bottom:n.bottom-o.height,left:n.left-o.width}}function Uy(n){return rE.some(o=>n[o]>=0)}const SE=function(n){return n===void 0&&(n={}),{name:"hide",options:n,async fn(o){const{rects:l,platform:i}=o,{strategy:s="referenceHidden",...c}=Pn(n,o);switch(s){case"referenceHidden":{const f=await i.detectOverflow(o,{...c,elementContext:"reference"}),m=Hy(f,l.reference);return{data:{referenceHiddenOffsets:m,referenceHidden:Uy(m)}}}case"escaped":{const f=await i.detectOverflow(o,{...c,altBoundary:!0}),m=Hy(f,l.floating);return{data:{escapedOffsets:m,escaped:Uy(m)}}}default:return{}}}}};function ob(n){const o=jn(...n.map(c=>c.left)),l=jn(...n.map(c=>c.top)),i=Cn(...n.map(c=>c.right)),s=Cn(...n.map(c=>c.bottom));return{x:o,y:l,width:i-o,height:s-l}}function xE(n){const o=n.slice().sort((s,c)=>s.y-c.y),l=[];let i=null;for(let s=0;si.height/2?l.push([c]):l[l.length-1].push(c),i=c}return l.map(s=>no(ob(s)))}const wE=function(n){return n===void 0&&(n={}),{name:"inline",options:n,async fn(o){const{placement:l,elements:i,rects:s,platform:c,strategy:f}=o,{padding:m=2,x:p,y:h}=Pn(n,o),v=Array.from(await(c.getClientRects==null?void 0:c.getClientRects(i.reference))||[]);if(!v.length)return{};const y=xE(v),S=no(ob(v)),x=cm(m);function C(){if(y.length===2&&(y[0].left>y[1].right||y[1].left>y[0].right)&&p!=null&&h!=null)return y.find(R=>p>R.left-x.left&&pR.top-x.top&&h=2){if(On(l)==="y"){const O=y[0],H=y[y.length-1],k=Qn(l)==="top",Z=O.top,ne=H.bottom,ae=k?O.left:H.left,te=k?O.right:H.right;return no({x:ae,y:Z,width:te-ae,height:ne-Z})}const R=Qn(l)==="left",N=Cn(...y.map(O=>O.right)),j=jn(...y.map(O=>O.left)),M=y.filter(O=>R?O.left===j:O.right===N),z=M[0].top,U=M[M.length-1].bottom;return no({x:j,y:z,width:N-j,height:U-z})}return S}const E=await c.getElementRects({reference:{getBoundingClientRect:C},floating:i.floating,strategy:f});return s.reference.x!==E.reference.x||s.reference.y!==E.reference.y||s.reference.width!==E.reference.width||s.reference.height!==E.reference.height?{reset:{rects:E}}:{}}}},lb=new Set(["left","top"]);async function CE(n,o){const{placement:l,platform:i,elements:s}=n,c=await(i.isRTL==null?void 0:i.isRTL(s.floating)),f=Qn(l),m=Zl(l),p=On(l)==="y",h=lb.has(f)?-1:1,v=c&&p?-1:1,y=Pn(o,n);let{mainAxis:S,crossAxis:x,alignmentAxis:C}=typeof y=="number"?{mainAxis:y,crossAxis:0,alignmentAxis:null}:{mainAxis:y.mainAxis||0,crossAxis:y.crossAxis||0,alignmentAxis:y.alignmentAxis};return m&&typeof C=="number"&&(x=m==="end"?C*-1:C),p?{x:x*v,y:S*h}:{x:S*h,y:x*v}}const EE=function(n){return n===void 0&&(n=0),{name:"offset",options:n,async fn(o){var l,i;const{x:s,y:c,placement:f,middlewareData:m}=o,p=await CE(o,n);return f===((l=m.offset)==null?void 0:l.placement)&&(i=m.arrow)!=null&&i.alignmentOffset?{}:{x:s+p.x,y:c+p.y,data:{...p,placement:f}}}}},TE=function(n){return n===void 0&&(n={}),{name:"shift",options:n,async fn(o){const{x:l,y:i,placement:s,platform:c}=o,{mainAxis:f=!0,crossAxis:m=!1,limiter:p={fn:j=>{let{x:M,y:z}=j;return{x:M,y:z}}},...h}=Pn(n,o),v={x:l,y:i},y=await c.detectOverflow(o,h),S=On(s),x=rm(S);let C=v[x],E=v[S];const R=(j,M)=>ab(M+y[j==="y"?"top":"left"],M,M-y[j==="y"?"bottom":"right"]);f&&(C=R(x,C)),m&&(E=R(S,E));const N=p.fn({...o,[x]:C,[S]:E});return{...N,data:{x:N.x-l,y:N.y-i,enabled:{[x]:f,[S]:m}}}}}},RE=function(n){return n===void 0&&(n={}),{options:n,fn(o){var l,i;const{x:s,y:c,placement:f,rects:m,middlewareData:p}=o,{offset:h=0,mainAxis:v=!0,crossAxis:y=!0}=Pn(n,o),S={x:s,y:c},x=On(f),C=rm(x);let E=S[C],R=S[x];const N=Pn(h,o),j=typeof N=="number"?{mainAxis:N,crossAxis:0}:{mainAxis:(l=N.mainAxis)!=null?l:0,crossAxis:(i=N.crossAxis)!=null?i:0};if(v){const U=C==="y"?"height":"width",O=m.reference[C]-m.floating[U]+j.mainAxis,H=m.reference[C]+m.reference[U]-j.mainAxis;EH&&(E=H)}if(y){var M,z;const U=C==="y"?"width":"height",O=lb.has(Qn(f)),H=m.reference[x]-m.floating[U]+(O&&((M=p.offset)==null?void 0:M[x])||0)+(O?0:j.crossAxis),k=m.reference[x]+m.reference[U]+(O?0:((z=p.offset)==null?void 0:z[x])||0)-(O?j.crossAxis:0);Rk&&(R=k)}return{[C]:E,[x]:R}}}},_E=function(n){return n===void 0&&(n={}),{name:"size",options:n,async fn(o){const{placement:l,rects:i,platform:s,elements:c}=o,{apply:f=()=>{},...m}=Pn(n,o),p=await s.detectOverflow(o,m),h=Qn(l),v=Zl(l),y=On(l)==="y",{width:S,height:x}=i.floating;let C,E;h==="top"||h==="bottom"?(C=h,E=v===(await(s.isRTL==null?void 0:s.isRTL(c.floating))?"start":"end")?"left":"right"):(E=h,C=v==="end"?"top":"bottom");const R=x-p.top-p.bottom,N=S-p.left-p.right,j=jn(x-p[C],R),M=jn(S-p[E],N),z=o.middlewareData.shift,U=!z;let O=j,H=M;z!=null&&z.enabled.x&&(H=N),z!=null&&z.enabled.y&&(O=R),U&&!v&&(y?H=S-2*Cn(p.left,p.right):O=x-2*Cn(p.top,p.bottom)),await f({...o,availableWidth:H,availableHeight:O});const k=await s.getDimensions(c.floating);return S!==k.width||x!==k.height?{reset:{rects:!0}}:{}}}};function rb(n){const o=zn(n);let l=parseFloat(o.width)||0,i=parseFloat(o.height)||0;const s=Ln(n),c=s?n.offsetWidth:l,f=s?n.offsetHeight:i,m=Ws(l)!==c||Ws(i)!==f;return m&&(l=c,i=f),{width:l,height:i,$:m}}function um(n){return tt(n)?n:n.contextElement}function Hl(n){const o=um(n);if(!Ln(o))return va(1);const l=o.getBoundingClientRect(),{width:i,height:s,$:c}=rb(o);let f=(c?Ws(l.width):l.width)/i,m=(c?Ws(l.height):l.height)/s;return(!f||!Number.isFinite(f))&&(f=1),(!m||!Number.isFinite(m))&&(m=1),{x:f,y:m}}const NE=va(0);function ib(n){const o=Gt(n);return!pc()||!o.visualViewport?NE:{x:o.visualViewport.offsetLeft,y:o.visualViewport.offsetTop}}function AE(n,o,l){return o===void 0&&(o=!1),!!l&&o&&l===Gt(n)}function Ho(n,o,l,i){o===void 0&&(o=!1),l===void 0&&(l=!1);const s=n.getBoundingClientRect(),c=um(n);let f=va(1);o&&(i?tt(i)&&(f=Hl(i)):f=Hl(n));const m=AE(c,l,i)?ib(c):va(0);let p=(s.left+m.x)/f.x,h=(s.top+m.y)/f.y,v=s.width/f.x,y=s.height/f.y;if(c&&i){const S=Gt(c),x=tt(i)?Gt(i):i;let C=S,E=jd(C);for(;E&&x!==C;){const R=Hl(E),N=E.getBoundingClientRect(),j=zn(E),M=N.left+(E.clientLeft+parseFloat(j.paddingLeft))*R.x,z=N.top+(E.clientTop+parseFloat(j.paddingTop))*R.y;p*=R.x,h*=R.y,v*=R.x,y*=R.y,p+=M,h+=z,C=Gt(E),E=jd(C)}}return no({width:v,height:y,x:p,y:h})}function vc(n,o){const l=hc(n).scrollLeft;return o?o.left+l:Ho(Ca(n)).left+l}function sb(n,o){const l=n.getBoundingClientRect(),i=l.left+o.scrollLeft-vc(n,l),s=l.top+o.scrollTop;return{x:i,y:s}}function ME(n){let{elements:o,rect:l,offsetParent:i,strategy:s}=n;const c=s==="fixed",f=Ca(i),m=o?mc(o.floating):!1;if(i===f||m&&c)return l;let p={scrollLeft:0,scrollTop:0},h=va(1);const v=va(0),y=Ln(i);if((y||!c)&&((Ql(i)!=="body"||dc(f))&&(p=hc(i)),y)){const x=Ho(i);h=Hl(i),v.x=x.x+i.clientLeft,v.y=x.y+i.clientTop}const S=f&&!y&&!c?sb(f,p):va(0);return{width:l.width*h.x,height:l.height*h.y,x:l.x*h.x-p.scrollLeft*h.x+v.x+S.x,y:l.y*h.y-p.scrollTop*h.y+v.y+S.y}}function OE(n){return n.getClientRects?Array.from(n.getClientRects()):[]}function DE(n){const o=hc(n),l=n.ownerDocument.body,i=Cn(n.scrollWidth,n.clientWidth,l.scrollWidth,l.clientWidth),s=Cn(n.scrollHeight,n.clientHeight,l.scrollHeight,l.clientHeight);let c=-o.scrollLeft+vc(n);const f=-o.scrollTop;return zn(l).direction==="rtl"&&(c+=Cn(n.clientWidth,l.clientWidth)-i),{width:i,height:s,x:c,y:f}}const zE=25;function jE(n,o,l){l===void 0&&(l="viewport");const i=l==="layoutViewport",s=Gt(n),c=Ca(n),f=s.visualViewport;let m=c.clientWidth,p=c.clientHeight,h=0,v=0;if(f){const S=!pc()||o==="fixed";i?S||(h=-f.offsetLeft,v=-f.offsetTop):(m=f.width,p=f.height,S&&(h=f.offsetLeft,v=f.offsetTop))}if(vc(c)<=0){const S=c.ownerDocument,x=S.body,C=getComputedStyle(x),E=S.compatMode==="CSS1Compat"&&parseFloat(C.marginLeft)+parseFloat(C.marginRight)||0,R=Math.abs(c.clientWidth-x.clientWidth-E),N=getComputedStyle(c).scrollbarGutter==="stable both-edges"?R/2:R;N<=zE&&(m-=N)}return{width:m,height:p,x:h,y:v}}function BE(n,o){const l=Ho(n,!0,o==="fixed"),i=l.top+n.clientTop,s=l.left+n.clientLeft,c=Hl(n),f=n.clientWidth*c.x,m=n.clientHeight*c.y,p=s*c.x,h=i*c.y;return{width:f,height:m,x:p,y:h}}function Vy(n,o,l){let i;if(o==="viewport"||o==="layoutViewport")i=jE(n,l,o);else if(o==="document")i=DE(Ca(n));else if(tt(o))i=BE(o,l);else{const s=ib(n);i={x:o.x-s.x,y:o.y-s.y,width:o.width,height:o.height}}return no(i)}function $E(n,o){const l=o.get(n);if(l)return l;let i=ha(n,[],!1).filter(m=>tt(m)&&Ql(m)!=="body"),s=null;const c=zn(n).position==="fixed";let f=c?ao(n):n;for(;tt(f)&&!Lo(f);){const m=zn(f),p=lm(f),h=s?s.position:c?"fixed":"";!p&&(h==="fixed"||h==="absolute"&&m.position==="static")?i=i.filter(y=>y!==f):s=m,f=ao(f)}return o.set(n,i),i}function LE(n){let{element:o,boundary:l,rootBoundary:i,strategy:s}=n;const f=[...l==="clippingAncestors"?mc(o)?[]:$E(o,this._c):[].concat(l),i],m=Vy(o,f[0],s);let p=m.top,h=m.right,v=m.bottom,y=m.left;for(let S=1;S{m(!1,1e-7)},1e3)}H=!1}try{i=new IntersectionObserver(k,{...O,root:c.ownerDocument})}catch{i=new IntersectionObserver(k,O)}i.observe(n)}const p=Gt(n),h=()=>m(l);return p.addEventListener("resize",h),m(!0),()=>{p.removeEventListener("resize",h),f()}}function GE(n,o,l,i){i===void 0&&(i={});const{ancestorScroll:s=!0,ancestorResize:c=!0,elementResize:f=typeof ResizeObserver=="function",layoutShift:m=typeof IntersectionObserver=="function",animationFrame:p=!1}=i,h=um(n),v=s||c?[...h?ha(h):[],...o?ha(o):[]]:[];v.forEach(N=>{s&&N.addEventListener("scroll",l),c&&N.addEventListener("resize",l)});const y=h&&m?qE(h,l,c):null;let S=-1,x=null;f&&(x=new ResizeObserver(N=>{let[j]=N;j&&j.target===h&&x&&o&&(x.unobserve(o),cancelAnimationFrame(S),S=requestAnimationFrame(()=>{var M;(M=x)==null||M.observe(o)})),l()}),h&&!p&&x.observe(h),o&&x.observe(o));let C,E=p?Ho(n):null;p&&R();function R(){const N=Ho(n);E&&!ub(E,N)&&l(),E=N,C=requestAnimationFrame(R)}return l(),()=>{var N;v.forEach(j=>{s&&j.removeEventListener("scroll",l),c&&j.removeEventListener("resize",l)}),y?.(),(N=x)==null||N.disconnect(),x=null,p&&cancelAnimationFrame(C)}}const XE=EE,PE=TE,QE=bE,ZE=_E,KE=SE,Yy=yE,IE=wE,JE=RE,FE=(n,o,l)=>{const i=new Map,s=l??{},c={...YE,...s.platform,_c:i};return gE(n,o,{...s,platform:c})};var WE=typeof document<"u",e3=function(){},Ps=WE?w.useLayoutEffect:e3;function tc(n,o){if(n===o)return!0;if(typeof n!=typeof o)return!1;if(typeof n=="function"&&n.toString()===o.toString())return!0;let l,i,s;if(n&&o&&typeof n=="object"){if(Array.isArray(n)){if(l=n.length,l!==o.length)return!1;for(i=l;i--!==0;)if(!tc(n[i],o[i]))return!1;return!0}if(s=Object.keys(n),l=s.length,l!==Object.keys(o).length)return!1;for(i=l;i--!==0;)if(!{}.hasOwnProperty.call(o,s[i]))return!1;for(i=l;i--!==0;){const c=s[i];if(!(c==="_owner"&&n.$$typeof)&&!tc(n[c],o[c]))return!1}return!0}return n!==n&&o!==o}function fb(n){return typeof window>"u"?1:(n.ownerDocument.defaultView||window).devicePixelRatio||1}function qy(n,o){const l=fb(n);return Math.round(o*l)/l}function gd(n){const o=w.useRef(n);return Ps(()=>{o.current=n}),o}function t3(n){n===void 0&&(n={});const{placement:o="bottom",strategy:l="absolute",middleware:i=[],platform:s,elements:{reference:c,floating:f}={},transform:m=!0,whileElementsMounted:p,open:h}=n,[v,y]=w.useState({x:0,y:0,strategy:l,placement:o,middlewareData:{},isPositioned:!1}),[S,x]=w.useState(i);tc(S,i)||x(i);const[C,E]=w.useState(null),[R,N]=w.useState(null),j=w.useCallback(L=>{L!==O.current&&(O.current=L,E(L))},[]),M=w.useCallback(L=>{L!==H.current&&(H.current=L,N(L))},[]),z=c||C,U=f||R,O=w.useRef(null),H=w.useRef(null),k=w.useRef(v),Z=p!=null,ne=gd(p),ae=gd(s),te=gd(h),ie=w.useCallback(()=>{if(!O.current||!H.current)return;const L={placement:o,strategy:l,middleware:S};ae.current&&(L.platform=ae.current),FE(O.current,H.current,L).then(X=>{const F={...X,isPositioned:te.current!==!1};ce.current&&!tc(k.current,F)&&(k.current=F,uc.flushSync(()=>{y(F)}))})},[S,o,l,ae,te]);Ps(()=>{h===!1&&k.current.isPositioned&&(k.current.isPositioned=!1,y(L=>({...L,isPositioned:!1})))},[h]);const ce=w.useRef(!1);Ps(()=>(ce.current=!0,()=>{ce.current=!1}),[]),Ps(()=>{if(z&&(O.current=z),U&&(H.current=U),z&&U){if(ne.current)return ne.current(z,U,ie);ie()}},[z,U,ie,ne,Z]);const oe=w.useMemo(()=>({reference:O,floating:H,setReference:j,setFloating:M}),[j,M]),A=w.useMemo(()=>({reference:z,floating:U}),[z,U]),B=w.useMemo(()=>{const L={position:l,left:0,top:0};if(!A.floating)return L;const X=qy(A.floating,v.x),F=qy(A.floating,v.y);return m?{...L,transform:"translate("+X+"px, "+F+"px)",...fb(A.floating)>=1.5&&{willChange:"transform"}}:{position:l,left:X,top:F}},[l,m,A.floating,v.x,v.y]);return w.useMemo(()=>({...v,update:ie,refs:oe,elements:A,floatingStyles:B}),[v,ie,oe,A,B])}const n3=n=>{function o(l){return{}.hasOwnProperty.call(l,"current")}return{name:"arrow",options:n,fn(l){const{element:i,padding:s}=typeof n=="function"?n(l):n;return i&&o(i)?i.current!=null?Yy({element:i.current,padding:s}).fn(l):{}:i?Yy({element:i,padding:s}).fn(l):{}}}},db=(n,o)=>{const l=XE(n);return{name:l.name,fn:l.fn,options:[n,o]}},fm=(n,o)=>{const l=PE(n);return{name:l.name,fn:l.fn,options:[n,o]}},Gy=(n,o)=>({fn:JE(n).fn,options:[n,o]}),nc=(n,o)=>{const l=QE(n);return{name:l.name,fn:l.fn,options:[n,o]}},a3=(n,o)=>{const l=ZE(n);return{name:l.name,fn:l.fn,options:[n,o]}},o3=(n,o)=>{const l=KE(n);return{name:l.name,fn:l.fn,options:[n,o]}},li=(n,o)=>{const l=IE(n);return{name:l.name,fn:l.fn,options:[n,o]}},mb=(n,o)=>{const l=n3(n);return{name:l.name,fn:l.fn,options:[n,o]}};function l3(n){return w.useMemo(()=>n.every(o=>o==null)?null:o=>{n.forEach(l=>{typeof l=="function"?l(o):l!=null&&(l.current=o)})},n)}const pb={...Sw},r3=pb.useInsertionEffect,i3=r3||(n=>n());function pa(n){const o=w.useRef(()=>{});return i3(()=>{o.current=n}),w.useCallback(function(){for(var l=arguments.length,i=new Array(l),s=0;s"floating-ui-"+Math.random().toString(36).slice(2,6)+s3++;function c3(){const[n,o]=w.useState(()=>Xy?Py():void 0);return Xn(()=>{n==null&&o(Py())},[]),w.useEffect(()=>{Xy=!0},[]),n}const u3=pb.useId,hb=u3||c3;function f3(){const n=new Map;return{emit(o,l){var i;(i=n.get(o))==null||i.forEach(s=>s(l))},on(o,l){n.set(o,[...n.get(o)||[],l])},off(o,l){var i;n.set(o,((i=n.get(o))==null?void 0:i.filter(s=>s!==l))||[])}}}const d3=w.createContext(null),m3=w.createContext(null),dm=()=>{var n;return((n=w.useContext(d3))==null?void 0:n.id)||null},mm=()=>w.useContext(m3);function pm(n){return"data-floating-ui-"+n}function yd(n){const o=w.useRef(n);return Xn(()=>{o.current=n}),o}const Qy=pm("safe-polygon");function Qs(n,o,l){return l&&!Bd(l)?0:typeof n=="number"?n:n?.[o]}function p3(n,o){o===void 0&&(o={});const{open:l,onOpenChange:i,dataRef:s,events:c,elements:f}=n,{enabled:m=!0,delay:p=0,handleClose:h=null,mouseOnly:v=!1,restMs:y=0,move:S=!0}=o,x=mm(),C=dm(),E=yd(h),R=yd(p),N=yd(l),j=w.useRef(),M=w.useRef(-1),z=w.useRef(),U=w.useRef(-1),O=w.useRef(!0),H=w.useRef(!1),k=w.useRef(()=>{}),Z=w.useRef(!1),ne=w.useCallback(()=>{var B;const L=(B=s.current.openEvent)==null?void 0:B.type;return L?.includes("mouse")&&L!=="mousedown"},[s]);w.useEffect(()=>{if(!m)return;function B(L){let{open:X}=L;X||(clearTimeout(M.current),clearTimeout(U.current),O.current=!0,Z.current=!1)}return c.on("openchange",B),()=>{c.off("openchange",B)}},[m,c]),w.useEffect(()=>{if(!m||!E.current||!l)return;function B(X){ne()&&i(!1,X,"hover")}const L=jo(f.floating).documentElement;return L.addEventListener("mouseleave",B),()=>{L.removeEventListener("mouseleave",B)}},[f.floating,l,i,m,E,ne]);const ae=w.useCallback(function(B,L,X){L===void 0&&(L=!0),X===void 0&&(X="hover");const F=Qs(R.current,"close",j.current);F&&!z.current?(clearTimeout(M.current),M.current=window.setTimeout(()=>i(!1,B,X),F)):L&&(clearTimeout(M.current),i(!1,B,X))},[R,i]),te=pa(()=>{k.current(),z.current=void 0}),ie=pa(()=>{if(H.current){const B=jo(f.floating).body;B.style.pointerEvents="",B.removeAttribute(Qy),H.current=!1}}),ce=pa(()=>s.current.openEvent?["click","mousedown"].includes(s.current.openEvent.type):!1);w.useEffect(()=>{if(!m)return;function B(_){if(clearTimeout(M.current),O.current=!1,v&&!Bd(j.current)||y>0&&!Qs(R.current,"open"))return;const Y=Qs(R.current,"open",j.current);Y?M.current=window.setTimeout(()=>{N.current||i(!0,_,"hover")},Y):l||i(!0,_,"hover")}function L(_){if(ce())return;k.current();const Y=jo(f.floating);if(clearTimeout(U.current),Z.current=!1,E.current&&s.current.floatingContext){l||clearTimeout(M.current),z.current=E.current({...s.current.floatingContext,tree:x,x:_.clientX,y:_.clientY,onClose(){ie(),te(),ce()||ae(_,!0,"safe-polygon")}});const ue=z.current;Y.addEventListener("mousemove",ue),k.current=()=>{Y.removeEventListener("mousemove",ue)};return}(j.current!=="touch"||!ii(f.floating,_.relatedTarget))&&ae(_)}function X(_){ce()||s.current.floatingContext&&(E.current==null||E.current({...s.current.floatingContext,tree:x,x:_.clientX,y:_.clientY,onClose(){ie(),te(),ce()||ae(_)}})(_))}if(tt(f.domReference)){var F;const _=f.domReference;return l&&_.addEventListener("mouseleave",X),(F=f.floating)==null||F.addEventListener("mouseleave",X),S&&_.addEventListener("mousemove",B,{once:!0}),_.addEventListener("mouseenter",B),_.addEventListener("mouseleave",L),()=>{var Y;l&&_.removeEventListener("mouseleave",X),(Y=f.floating)==null||Y.removeEventListener("mouseleave",X),S&&_.removeEventListener("mousemove",B),_.removeEventListener("mouseenter",B),_.removeEventListener("mouseleave",L)}}},[f,m,n,v,y,S,ae,te,ie,i,l,N,x,R,E,s,ce]),Xn(()=>{var B;if(m&&l&&(B=E.current)!=null&&B.__options.blockPointerEvents&&ne()){H.current=!0;const X=f.floating;if(tt(f.domReference)&&X){var L;const F=jo(f.floating).body;F.setAttribute(Qy,"");const _=f.domReference,Y=x==null||(L=x.nodesRef.current.find(ee=>ee.id===C))==null||(L=L.context)==null?void 0:L.elements.floating;return Y&&(Y.style.pointerEvents=""),F.style.pointerEvents="none",_.style.pointerEvents="auto",X.style.pointerEvents="auto",()=>{F.style.pointerEvents="",_.style.pointerEvents="",X.style.pointerEvents=""}}}},[m,l,C,f,x,E,ne]),Xn(()=>{l||(j.current=void 0,Z.current=!1,te(),ie())},[l,te,ie]),w.useEffect(()=>()=>{te(),clearTimeout(M.current),clearTimeout(U.current),ie()},[m,f.domReference,te,ie]);const oe=w.useMemo(()=>{function B(L){j.current=L.pointerType}return{onPointerDown:B,onPointerEnter:B,onMouseMove(L){const{nativeEvent:X}=L;function F(){!O.current&&!N.current&&i(!0,X,"hover")}v&&!Bd(j.current)||l||y===0||Z.current&&L.movementX**2+L.movementY**2<2||(clearTimeout(U.current),j.current==="touch"?F():(Z.current=!0,U.current=window.setTimeout(F,y)))}}},[v,i,l,N,y]),A=w.useMemo(()=>({onMouseEnter(){clearTimeout(M.current)},onMouseLeave(B){ce()||ae(B.nativeEvent,!1)}}),[ae,ce]);return w.useMemo(()=>m?{reference:oe,floating:A}:{},[m,oe,A])}const Ld=()=>{},vb=w.createContext({delay:0,initialDelay:0,timeoutMs:0,currentId:null,setCurrentId:Ld,setState:Ld,isInstantPhase:!1}),h3=()=>w.useContext(vb);function v3(n){const{children:o,delay:l,timeoutMs:i=0}=n,[s,c]=w.useReducer((p,h)=>({...p,...h}),{delay:l,timeoutMs:i,initialDelay:l,currentId:null,isInstantPhase:!1}),f=w.useRef(null),m=w.useCallback(p=>{c({currentId:p})},[]);return Xn(()=>{s.currentId?f.current===null?f.current=s.currentId:s.isInstantPhase||c({isInstantPhase:!0}):(s.isInstantPhase&&c({isInstantPhase:!1}),f.current=null)},[s.currentId,s.isInstantPhase]),w.createElement(vb.Provider,{value:w.useMemo(()=>({...s,setState:c,setCurrentId:m}),[s,m])},o)}function g3(n,o){o===void 0&&(o={});const{open:l,onOpenChange:i,floatingId:s}=n,{id:c,enabled:f=!0}=o,m=c??s,p=h3(),{currentId:h,setCurrentId:v,initialDelay:y,setState:S,timeoutMs:x}=p;return Xn(()=>{f&&h&&(S({delay:{open:1,close:Qs(y,"close")}}),h!==m&&i(!1))},[f,m,i,S,h,y]),Xn(()=>{function C(){i(!1),S({delay:y,currentId:null})}if(f&&h&&!l&&h===m){if(x){const E=window.setTimeout(C,x);return()=>{clearTimeout(E)}}C()}},[f,l,S,h,m,i,y,x]),Xn(()=>{f&&(v===Ld||!l||v(m))},[f,l,v,m]),p}function bd(n,o){let l=n.filter(s=>{var c;return s.parentId===o&&((c=s.context)==null?void 0:c.open)}),i=l;for(;i.length;)i=n.filter(s=>{var c;return(c=i)==null?void 0:c.some(f=>{var m;return s.parentId===f.id&&((m=s.context)==null?void 0:m.open)})}),l=l.concat(i);return l}const y3="data-floating-ui-focusable",b3={pointerdown:"onPointerDown",mousedown:"onMouseDown",click:"onClick"},S3={pointerdown:"onPointerDownCapture",mousedown:"onMouseDownCapture",click:"onClickCapture"},Zy=n=>{var o,l;return{escapeKey:typeof n=="boolean"?n:(o=n?.escapeKey)!=null?o:!1,outsidePress:typeof n=="boolean"?n:(l=n?.outsidePress)!=null?l:!0}};function x3(n,o){o===void 0&&(o={});const{open:l,onOpenChange:i,elements:s,dataRef:c}=n,{enabled:f=!0,escapeKey:m=!0,outsidePress:p=!0,outsidePressEvent:h="pointerdown",referencePress:v=!1,referencePressEvent:y="pointerdown",ancestorScroll:S=!1,bubbles:x,capture:C}=o,E=mm(),R=pa(typeof p=="function"?p:()=>!1),N=typeof p=="function"?R:p,j=w.useRef(!1),M=w.useRef(!1),{escapeKey:z,outsidePress:U}=Zy(x),{escapeKey:O,outsidePress:H}=Zy(C),k=w.useRef(!1),Z=pa(oe=>{var A;if(!l||!f||!m||oe.key!=="Escape"||k.current)return;const B=(A=c.current.floatingContext)==null?void 0:A.nodeId,L=E?bd(E.nodesRef.current,B):[];if(!z&&(oe.stopPropagation(),L.length>0)){let X=!0;if(L.forEach(F=>{var _;if((_=F.context)!=null&&_.open&&!F.context.dataRef.current.__escapeKeyBubbles){X=!1;return}}),!X)return}i(!1,nE(oe)?oe.nativeEvent:oe,"escape-key")}),ne=pa(oe=>{var A;const B=()=>{var L;Z(oe),(L=Bl(oe))==null||L.removeEventListener("keydown",B)};(A=Bl(oe))==null||A.addEventListener("keydown",B)}),ae=pa(oe=>{var A;const B=j.current;j.current=!1;const L=M.current;if(M.current=!1,h==="click"&&L||B||typeof N=="function"&&!N(oe))return;const X=Bl(oe),F="["+pm("inert")+"]",_=jo(s.floating).querySelectorAll(F);let Y=tt(X)?X:null;for(;Y&&!Lo(Y);){const de=ao(Y);if(Lo(de)||!tt(de))break;Y=de}if(_.length&&tt(X)&&!aE(X)&&!ii(X,s.floating)&&Array.from(_).every(de=>!ii(Y,de)))return;if(Ln(X)&&ce){const de=X.clientWidth>0&&X.scrollWidth>X.clientWidth,ge=X.clientHeight>0&&X.scrollHeight>X.clientHeight;let Ee=ge&&oe.offsetX>X.clientWidth;if(ge&&zn(X).direction==="rtl"&&(Ee=oe.offsetX<=X.offsetWidth-X.clientWidth),Ee||de&&oe.offsetY>X.clientHeight)return}const ee=(A=c.current.floatingContext)==null?void 0:A.nodeId,ue=E&&bd(E.nodesRef.current,ee).some(de=>{var ge;return hd(oe,(ge=de.context)==null?void 0:ge.elements.floating)});if(hd(oe,s.floating)||hd(oe,s.domReference)||ue)return;const re=E?bd(E.nodesRef.current,ee):[];if(re.length>0){let de=!0;if(re.forEach(ge=>{var Ee;if((Ee=ge.context)!=null&&Ee.open&&!ge.context.dataRef.current.__outsidePressBubbles){de=!1;return}}),!de)return}i(!1,oe,"outside-press")}),te=pa(oe=>{var A;const B=()=>{var L;ae(oe),(L=Bl(oe))==null||L.removeEventListener(h,B)};(A=Bl(oe))==null||A.addEventListener(h,B)});w.useEffect(()=>{if(!l||!f)return;c.current.__escapeKeyBubbles=z,c.current.__outsidePressBubbles=U;let oe=-1;function A(_){i(!1,_,"ancestor-scroll")}function B(){window.clearTimeout(oe),k.current=!0}function L(){oe=window.setTimeout(()=>{k.current=!1},pc()?5:0)}const X=jo(s.floating);m&&(X.addEventListener("keydown",O?ne:Z,O),X.addEventListener("compositionstart",B),X.addEventListener("compositionend",L)),N&&X.addEventListener(h,H?te:ae,H);let F=[];return S&&(tt(s.domReference)&&(F=ha(s.domReference)),tt(s.floating)&&(F=F.concat(ha(s.floating))),!tt(s.reference)&&s.reference&&s.reference.contextElement&&(F=F.concat(ha(s.reference.contextElement)))),F=F.filter(_=>{var Y;return _!==((Y=X.defaultView)==null?void 0:Y.visualViewport)}),F.forEach(_=>{_.addEventListener("scroll",A,{passive:!0})}),()=>{m&&(X.removeEventListener("keydown",O?ne:Z,O),X.removeEventListener("compositionstart",B),X.removeEventListener("compositionend",L)),N&&X.removeEventListener(h,H?te:ae,H),F.forEach(_=>{_.removeEventListener("scroll",A)}),window.clearTimeout(oe)}},[c,s,m,N,h,l,i,S,f,z,U,Z,O,ne,ae,H,te]),w.useEffect(()=>{j.current=!1},[N,h]);const ie=w.useMemo(()=>({onKeyDown:Z,[b3[y]]:oe=>{v&&i(!1,oe.nativeEvent,"reference-press")}}),[Z,i,v,y]),ce=w.useMemo(()=>({onKeyDown:Z,onMouseDown(){M.current=!0},onMouseUp(){M.current=!0},[S3[h]]:()=>{j.current=!0}}),[Z,h]);return w.useMemo(()=>f?{reference:ie,floating:ce}:{},[f,ie,ce])}function w3(n){const{open:o=!1,onOpenChange:l,elements:i}=n,s=hb(),c=w.useRef({}),[f]=w.useState(()=>f3()),m=dm()!=null,[p,h]=w.useState(i.reference),v=pa((x,C,E)=>{c.current.openEvent=x?C:void 0,f.emit("openchange",{open:x,event:C,reason:E,nested:m}),l?.(x,C,E)}),y=w.useMemo(()=>({setPositionReference:h}),[]),S=w.useMemo(()=>({reference:p||i.reference||null,floating:i.floating||null,domReference:i.reference}),[p,i.reference,i.floating]);return w.useMemo(()=>({dataRef:c,open:o,onOpenChange:v,elements:S,events:f,floatingId:s,refs:y}),[o,v,S,f,s,y])}function hm(n){n===void 0&&(n={});const{nodeId:o}=n,l=w3({...n,elements:{reference:null,floating:null,...n.elements}}),i=n.rootContext||l,s=i.elements,[c,f]=w.useState(null),[m,p]=w.useState(null),v=s?.domReference||c,y=w.useRef(null),S=mm();Xn(()=>{v&&(y.current=v)},[v]);const x=t3({...n,elements:{...s,...m&&{reference:m}}}),C=w.useCallback(M=>{const z=tt(M)?{getBoundingClientRect:()=>M.getBoundingClientRect(),contextElement:M}:M;p(z),x.refs.setReference(z)},[x.refs]),E=w.useCallback(M=>{(tt(M)||M===null)&&(y.current=M,f(M)),(tt(x.refs.reference.current)||x.refs.reference.current===null||M!==null&&!tt(M))&&x.refs.setReference(M)},[x.refs]),R=w.useMemo(()=>({...x.refs,setReference:E,setPositionReference:C,domReference:y}),[x.refs,E,C]),N=w.useMemo(()=>({...x.elements,domReference:v}),[x.elements,v]),j=w.useMemo(()=>({...x,...i,refs:R,elements:N,nodeId:o}),[x,R,N,o,i]);return Xn(()=>{i.dataRef.current.floatingContext=j;const M=S?.nodesRef.current.find(z=>z.id===o);M&&(M.context=j)}),w.useMemo(()=>({...x,context:j,refs:R,elements:N}),[x,R,N,j])}function C3(n,o){o===void 0&&(o={});const{open:l,onOpenChange:i,events:s,dataRef:c,elements:f}=n,{enabled:m=!0,visibleOnly:p=!0}=o,h=w.useRef(!1),v=w.useRef(),y=w.useRef(!0);w.useEffect(()=>{if(!m)return;const x=Gt(f.domReference);function C(){!l&&Ln(f.domReference)&&f.domReference===zy(jo(f.domReference))&&(h.current=!0)}function E(){y.current=!0}return x.addEventListener("blur",C),x.addEventListener("keydown",E,!0),()=>{x.removeEventListener("blur",C),x.removeEventListener("keydown",E,!0)}},[f.domReference,l,m]),w.useEffect(()=>{if(!m)return;function x(C){let{reason:E}=C;(E==="reference-press"||E==="escape-key")&&(h.current=!0)}return s.on("openchange",x),()=>{s.off("openchange",x)}},[s,m]),w.useEffect(()=>()=>{clearTimeout(v.current)},[]);const S=w.useMemo(()=>({onPointerDown(x){F2(x.nativeEvent)||(y.current=!1)},onMouseLeave(){h.current=!1},onFocus(x){if(h.current)return;const C=Bl(x.nativeEvent);if(p&&tt(C))try{if(W2()&&eE())throw Error();if(!C.matches(":focus-visible"))return}catch{if(!y.current&&!lE(C))return}i(!0,x.nativeEvent,"focus")},onBlur(x){h.current=!1;const C=x.relatedTarget,E=x.nativeEvent,R=tt(C)&&C.hasAttribute(pm("focus-guard"))&&C.getAttribute("data-type")==="outside";v.current=window.setTimeout(()=>{var N;const j=zy(f.domReference?f.domReference.ownerDocument:document);!C&&j===f.domReference||ii((N=c.current.floatingContext)==null?void 0:N.refs.floating.current,j)||ii(f.domReference,j)||R||i(!1,E,"focus")})}}),[c,f.domReference,i,p]);return w.useMemo(()=>m?{reference:S}:{},[m,S])}const Ky="active",Iy="selected";function Sd(n,o,l){const i=new Map,s=l==="item";let c=n;if(s&&n){const{[Ky]:f,[Iy]:m,...p}=n;c=p}return{...l==="floating"&&{tabIndex:-1,[y3]:""},...c,...o.map(f=>{const m=f?f[l]:null;return typeof m=="function"?n?m(n):null:m}).concat(n).reduce((f,m)=>(m&&Object.entries(m).forEach(p=>{let[h,v]=p;if(!(s&&[Ky,Iy].includes(h)))if(h.indexOf("on")===0){if(i.has(h)||i.set(h,[]),typeof v=="function"){var y;(y=i.get(h))==null||y.push(v),f[h]=function(){for(var S,x=arguments.length,C=new Array(x),E=0;ER(...C)).find(R=>R!==void 0)}}}else f[h]=v}),f),{})}}function E3(n){n===void 0&&(n=[]);const o=n.map(m=>m?.reference),l=n.map(m=>m?.floating),i=n.map(m=>m?.item),s=w.useCallback(m=>Sd(m,n,"reference"),o),c=w.useCallback(m=>Sd(m,n,"floating"),l),f=w.useCallback(m=>Sd(m,n,"item"),i);return w.useMemo(()=>({getReferenceProps:s,getFloatingProps:c,getItemProps:f}),[s,c,f])}const T3=new Map([["select","listbox"],["combobox","listbox"],["label",!1]]);function R3(n,o){var l;o===void 0&&(o={});const{open:i,floatingId:s}=n,{enabled:c=!0,role:f="dialog"}=o,m=(l=T3.get(f))!=null?l:f,p=hb(),v=dm()!=null,y=w.useMemo(()=>m==="tooltip"||f==="label"?{["aria-"+(f==="label"?"labelledby":"describedby")]:i?s:void 0}:{"aria-expanded":i?"true":"false","aria-haspopup":m==="alertdialog"?"dialog":m,"aria-controls":i?s:void 0,...m==="listbox"&&{role:"combobox"},...m==="menu"&&{id:p},...m==="menu"&&v&&{role:"menuitem"},...f==="select"&&{"aria-autocomplete":"none"},...f==="combobox"&&{"aria-autocomplete":"list"}},[m,s,v,i,p,f]),S=w.useMemo(()=>{const C={id:s,...m&&{role:m}};return m==="tooltip"||f==="label"?C:{...C,...m==="menu"&&{"aria-labelledby":p}}},[m,s,p,f]),x=w.useCallback(C=>{let{active:E,selected:R}=C;const N={role:"option",...E&&{id:s+"-option"}};switch(f){case"select":return{...N,"aria-selected":E&&R};case"combobox":return{...N,...E&&{"aria-selected":!0}}}return{}},[s,f]);return w.useMemo(()=>c?{reference:y,floating:S,item:x}:{},[c,y,S,x])}const[_3,En]=Sa("ScrollArea.Root component was not found in tree");function Vl(n,o){const l=Do(o);Gl(()=>{let i=0;if(n){const s=new ResizeObserver(()=>{cancelAnimationFrame(i),i=window.requestAnimationFrame(l)});return s.observe(n),()=>{window.cancelAnimationFrame(i),s.unobserve(n)}}},[n,l])}const N3=w.forwardRef((n,o)=>{const{style:l,...i}=n,s=En(),[c,f]=w.useState(0),[m,p]=w.useState(0),h=!!(c&&m);return Vl(s.scrollbarX,()=>{const v=s.scrollbarX?.offsetHeight||0;s.onCornerHeightChange(v),p(v)}),Vl(s.scrollbarY,()=>{const v=s.scrollbarY?.offsetWidth||0;s.onCornerWidthChange(v),f(v)}),h?b.jsx("div",{...i,ref:o,style:{...l,width:c,height:m}}):null}),A3=w.forwardRef((n,o)=>{const l=En(),i=!!(l.scrollbarX&&l.scrollbarY);return l.type!=="scroll"&&i?b.jsx(N3,{...n,ref:o}):null}),M3={scrollHideDelay:1e3,type:"hover"},gb=w.forwardRef((n,o)=>{const{type:l,scrollHideDelay:i,scrollbars:s,getStyles:c,...f}=le("ScrollAreaRoot",M3,n),[m,p]=w.useState(null),[h,v]=w.useState(null),[y,S]=w.useState(null),[x,C]=w.useState(null),[E,R]=w.useState(null),[N,j]=w.useState(0),[M,z]=w.useState(0),[U,O]=w.useState(!1),[H,k]=w.useState(!1),Z=Ct(o,ne=>p(ne));return b.jsx(_3,{value:{type:l,scrollHideDelay:i,scrollArea:m,viewport:h,onViewportChange:v,content:y,onContentChange:S,scrollbarX:x,onScrollbarXChange:C,scrollbarXEnabled:U,onScrollbarXEnabledChange:O,scrollbarY:E,onScrollbarYChange:R,scrollbarYEnabled:H,onScrollbarYEnabledChange:k,onCornerWidthChange:j,onCornerHeightChange:z,getStyles:c},children:b.jsx(fe,{...f,ref:Z,__vars:{"--sa-corner-width":s!=="xy"?"0px":`${N}px`,"--sa-corner-height":s!=="xy"?"0px":`${M}px`}})})});gb.displayName="@mantine/core/ScrollAreaRoot";function yb(n,o){const l=n/o;return Number.isNaN(l)?0:l}function gc(n){const o=yb(n.viewport,n.content),l=n.scrollbar.paddingStart+n.scrollbar.paddingEnd,i=(n.scrollbar.size-l)*o;return Math.max(i,18)}function bb(n,o){return l=>{if(n[0]===n[1]||o[0]===o[1])return o[0];const i=(o[1]-o[0])/(n[1]-n[0]);return o[0]+i*(l-n[0])}}function O3(n,[o,l]){return Math.min(l,Math.max(o,n))}function Jy(n,o,l="ltr"){const i=gc(o),s=o.scrollbar.paddingStart+o.scrollbar.paddingEnd,c=o.scrollbar.size-s,f=o.content-o.viewport,m=c-i,p=l==="ltr"?[0,f]:[f*-1,0],h=O3(n,p);return bb([0,f],[0,m])(h)}function D3(n,o,l,i="ltr"){const s=gc(l),c=s/2,f=o||c,m=s-f,p=l.scrollbar.paddingStart+f,h=l.scrollbar.size-l.scrollbar.paddingEnd-m,v=l.content-l.viewport,y=i==="ltr"?[0,v]:[v*-1,0];return bb([p,h],y)(n)}function Sb(n,o){return n>0&&n{n?.(i),(l===!1||!i.defaultPrevented)&&o?.(i)}}const[z3,xb]=Sa("ScrollAreaScrollbar was not found in tree"),wb=w.forwardRef((n,o)=>{const{sizes:l,hasThumb:i,onThumbChange:s,onThumbPointerUp:c,onThumbPointerDown:f,onThumbPositionChange:m,onDragScroll:p,onWheelScroll:h,onResize:v,...y}=n,S=En(),[x,C]=w.useState(null),E=Ct(o,k=>C(k)),R=w.useRef(null),N=w.useRef(""),{viewport:j}=S,M=l.content-l.viewport,z=Do(h),U=Do(m),O=rc(v,10),H=k=>{if(R.current){const Z=k.clientX-R.current.left,ne=k.clientY-R.current.top;p({x:Z,y:ne})}};return w.useEffect(()=>{const k=Z=>{const ne=Z.target;x?.contains(ne)&&z(Z,M)};return document.addEventListener("wheel",k,{passive:!1}),()=>document.removeEventListener("wheel",k,{passive:!1})},[j,x,M,z]),w.useEffect(U,[l,U]),Vl(x,O),Vl(S.content,O),b.jsx(z3,{value:{scrollbar:x,hasThumb:i,onThumbChange:Do(s),onThumbPointerUp:Do(c),onThumbPositionChange:U,onThumbPointerDown:Do(f)},children:b.jsx("div",{...y,ref:E,"data-mantine-scrollbar":!0,style:{position:"absolute",...y.style},onPointerDown:$o(n.onPointerDown,k=>{k.preventDefault(),k.button===0&&(k.target.setPointerCapture(k.pointerId),R.current=x.getBoundingClientRect(),N.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",H(k))}),onPointerMove:$o(n.onPointerMove,H),onPointerUp:$o(n.onPointerUp,k=>{const Z=k.target;Z.hasPointerCapture(k.pointerId)&&(k.preventDefault(),Z.releasePointerCapture(k.pointerId))}),onLostPointerCapture:()=>{document.body.style.webkitUserSelect=N.current,R.current=null}})})}),Cb=w.forwardRef((n,o)=>{const{sizes:l,onSizesChange:i,style:s,...c}=n,f=En(),[m,p]=w.useState(),h=w.useRef(null),v=Ct(o,h,f.onScrollbarXChange);return w.useEffect(()=>{h.current&&p(getComputedStyle(h.current))},[h]),b.jsx(wb,{"data-orientation":"horizontal",...c,ref:v,sizes:l,style:{...s,"--sa-thumb-width":`${gc(l)}px`},onThumbPointerDown:y=>n.onThumbPointerDown(y.x),onDragScroll:y=>n.onDragScroll(y.x),onWheelScroll:(y,S)=>{if(f.viewport){const x=f.viewport.scrollLeft+y.deltaX;n.onWheelScroll(x),Sb(x,S)&&y.preventDefault()}},onResize:()=>{h.current&&f.viewport&&m&&i({content:f.viewport.scrollWidth,viewport:f.viewport.offsetWidth,scrollbar:{size:h.current.clientWidth,paddingStart:ac(m.paddingLeft),paddingEnd:ac(m.paddingRight)}})}})});Cb.displayName="@mantine/core/ScrollAreaScrollbarX";const Eb=w.forwardRef((n,o)=>{const{sizes:l,onSizesChange:i,style:s,...c}=n,f=En(),[m,p]=w.useState(),h=w.useRef(null),v=Ct(o,h,f.onScrollbarYChange);return w.useEffect(()=>{h.current&&p(window.getComputedStyle(h.current))},[]),b.jsx(wb,{...c,"data-orientation":"vertical",ref:v,sizes:l,style:{"--sa-thumb-height":`${gc(l)}px`,...s},onThumbPointerDown:y=>n.onThumbPointerDown(y.y),onDragScroll:y=>n.onDragScroll(y.y),onWheelScroll:(y,S)=>{if(f.viewport){const x=f.viewport.scrollTop+y.deltaY;n.onWheelScroll(x),Sb(x,S)&&y.preventDefault()}},onResize:()=>{h.current&&f.viewport&&m&&i({content:f.viewport.scrollHeight,viewport:f.viewport.offsetHeight,scrollbar:{size:h.current.clientHeight,paddingStart:ac(m.paddingTop),paddingEnd:ac(m.paddingBottom)}})}})});Eb.displayName="@mantine/core/ScrollAreaScrollbarY";const yc=w.forwardRef((n,o)=>{const{orientation:l="vertical",...i}=n,{dir:s}=Pl(),c=En(),f=w.useRef(null),m=w.useRef(0),[p,h]=w.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),v=yb(p.viewport,p.content),y={...i,sizes:p,onSizesChange:h,hasThumb:v>0&&v<1,onThumbChange:x=>{f.current=x},onThumbPointerUp:()=>{m.current=0},onThumbPointerDown:x=>{m.current=x}},S=(x,C)=>D3(x,m.current,p,C);return l==="horizontal"?b.jsx(Cb,{...y,ref:o,onThumbPositionChange:()=>{if(c.viewport&&f.current){const x=c.viewport.scrollLeft,C=Jy(x,p,s);f.current.style.transform=`translate3d(${C}px, 0, 0)`}},onWheelScroll:x=>{c.viewport&&(c.viewport.scrollLeft=x)},onDragScroll:x=>{c.viewport&&(c.viewport.scrollLeft=S(x,s))}}):l==="vertical"?b.jsx(Eb,{...y,ref:o,onThumbPositionChange:()=>{if(c.viewport&&f.current){const x=c.viewport.scrollTop,C=Jy(x,p);p.scrollbar.size===0?f.current.style.setProperty("--thumb-opacity","0"):f.current.style.setProperty("--thumb-opacity","1"),f.current.style.transform=`translate3d(0, ${C}px, 0)`}},onWheelScroll:x=>{c.viewport&&(c.viewport.scrollTop=x)},onDragScroll:x=>{c.viewport&&(c.viewport.scrollTop=S(x))}}):null});yc.displayName="@mantine/core/ScrollAreaScrollbarVisible";const vm=w.forwardRef((n,o)=>{const l=En(),{forceMount:i,...s}=n,[c,f]=w.useState(!1),m=n.orientation==="horizontal",p=rc(()=>{if(l.viewport){const h=l.viewport.offsetWidth{const{forceMount:l,...i}=n,s=En(),[c,f]=w.useState(!1);return w.useEffect(()=>{const{scrollArea:m}=s;let p=0;if(m){const h=()=>{window.clearTimeout(p),f(!0)},v=()=>{p=window.setTimeout(()=>f(!1),s.scrollHideDelay)};return m.addEventListener("pointerenter",h),m.addEventListener("pointerleave",v),()=>{window.clearTimeout(p),m.removeEventListener("pointerenter",h),m.removeEventListener("pointerleave",v)}}},[s.scrollArea,s.scrollHideDelay]),l||c?b.jsx(vm,{"data-state":c?"visible":"hidden",...i,ref:o}):null});Tb.displayName="@mantine/core/ScrollAreaScrollbarHover";const j3=w.forwardRef((n,o)=>{const{forceMount:l,...i}=n,s=En(),c=n.orientation==="horizontal",[f,m]=w.useState("hidden"),p=rc(()=>m("idle"),100);return w.useEffect(()=>{if(f==="idle"){const h=window.setTimeout(()=>m("hidden"),s.scrollHideDelay);return()=>window.clearTimeout(h)}},[f,s.scrollHideDelay]),w.useEffect(()=>{const{viewport:h}=s,v=c?"scrollLeft":"scrollTop";if(h){let y=h[v];const S=()=>{const x=h[v];y!==x&&(m("scrolling"),p()),y=x};return h.addEventListener("scroll",S),()=>h.removeEventListener("scroll",S)}},[s.viewport,c,p]),l||f!=="hidden"?b.jsx(yc,{"data-state":f==="hidden"?"hidden":"visible",...i,ref:o,onPointerEnter:$o(n.onPointerEnter,()=>m("interacting")),onPointerLeave:$o(n.onPointerLeave,()=>m("idle"))}):null}),Hd=w.forwardRef((n,o)=>{const{forceMount:l,...i}=n,s=En(),{onScrollbarXEnabledChange:c,onScrollbarYEnabledChange:f}=s,m=n.orientation==="horizontal";return w.useEffect(()=>(m?c(!0):f(!0),()=>{m?c(!1):f(!1)}),[m,c,f]),s.type==="hover"?b.jsx(Tb,{...i,ref:o,forceMount:l}):s.type==="scroll"?b.jsx(j3,{...i,ref:o,forceMount:l}):s.type==="auto"?b.jsx(vm,{...i,ref:o,forceMount:l}):s.type==="always"?b.jsx(yc,{...i,ref:o}):null});Hd.displayName="@mantine/core/ScrollAreaScrollbar";function B3(n,o=()=>{}){let l={left:n.scrollLeft,top:n.scrollTop},i=0;return(function s(){const c={left:n.scrollLeft,top:n.scrollTop},f=l.left!==c.left,m=l.top!==c.top;(f||m)&&o(),l=c,i=window.requestAnimationFrame(s)})(),()=>window.cancelAnimationFrame(i)}const Rb=w.forwardRef((n,o)=>{const{style:l,...i}=n,s=En(),c=xb(),{onThumbPositionChange:f}=c,m=Ct(o,v=>c.onThumbChange(v)),p=w.useRef(void 0),h=rc(()=>{p.current&&(p.current(),p.current=void 0)},100);return w.useEffect(()=>{const{viewport:v}=s;if(v){const y=()=>{if(h(),!p.current){const S=B3(v,f);p.current=S,f()}};return f(),v.addEventListener("scroll",y),()=>v.removeEventListener("scroll",y)}},[s.viewport,h,f]),b.jsx("div",{"data-state":c.hasThumb?"visible":"hidden",...i,ref:m,style:{width:"var(--sa-thumb-width)",height:"var(--sa-thumb-height)",...l},onPointerDownCapture:$o(n.onPointerDownCapture,v=>{const S=v.target.getBoundingClientRect(),x=v.clientX-S.left,C=v.clientY-S.top;c.onThumbPointerDown({x,y:C})}),onPointerUp:$o(n.onPointerUp,c.onThumbPointerUp)})});Rb.displayName="@mantine/core/ScrollAreaThumb";const Ud=w.forwardRef((n,o)=>{const{forceMount:l,...i}=n,s=xb();return l||s.hasThumb?b.jsx(Rb,{ref:o,...i}):null});Ud.displayName="@mantine/core/ScrollAreaThumb";const _b=w.forwardRef(({children:n,style:o,...l},i)=>{const s=En(),c=Ct(i,s.onViewportChange);return b.jsx(fe,{...l,ref:c,style:{overflowX:s.scrollbarXEnabled?"scroll":"hidden",overflowY:s.scrollbarYEnabled?"scroll":"hidden",...o},children:b.jsx("div",{...s.getStyles("content"),ref:s.onContentChange,children:n})})});_b.displayName="@mantine/core/ScrollAreaViewport";var gm={root:"m_d57069b5",viewport:"m_c0783ff9",viewportInner:"m_f8f631dd",scrollbar:"m_c44ba933",thumb:"m_d8b5e363",corner:"m_21657268",content:"m_b1336c6"};const Nb={scrollHideDelay:1e3,type:"hover",scrollbars:"xy"},$3=(n,{scrollbarSize:o,overscrollBehavior:l})=>({root:{"--scrollarea-scrollbar-size":K(o),"--scrollarea-over-scroll-behavior":l}}),Kl=ve((n,o)=>{const l=le("ScrollArea",Nb,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,scrollbarSize:p,vars:h,type:v,scrollHideDelay:y,viewportProps:S,viewportRef:x,onScrollPositionChange:C,children:E,offsetScrollbars:R,scrollbars:N,onBottomReached:j,onTopReached:M,overscrollBehavior:z,...U}=l,[O,H]=w.useState(!1),[k,Z]=w.useState(!1),[ne,ae]=w.useState(!1),te=_e({name:"ScrollArea",props:l,classes:gm,className:s,style:c,classNames:i,styles:f,unstyled:m,vars:h,varsResolver:$3}),ie=w.useRef(null),ce=l3([x,ie]);return w.useEffect(()=>{if(!ie.current||R!=="present")return;const oe=ie.current,A=new ResizeObserver(()=>{const{scrollHeight:B,clientHeight:L,scrollWidth:X,clientWidth:F}=oe;Z(B>L),ae(X>F)});return A.observe(oe),()=>A.disconnect()},[ie,R]),b.jsxs(gb,{getStyles:te,type:v==="never"?"always":v,scrollHideDelay:y,ref:o,scrollbars:N,...te("root"),...U,children:[b.jsx(_b,{...S,...te("viewport",{style:S?.style}),ref:ce,"data-offset-scrollbars":R===!0?"xy":R||void 0,"data-scrollbars":N||void 0,"data-horizontal-hidden":R==="present"&&!ne?"true":void 0,"data-vertical-hidden":R==="present"&&!k?"true":void 0,onScroll:oe=>{S?.onScroll?.(oe),C?.({x:oe.currentTarget.scrollLeft,y:oe.currentTarget.scrollTop});const{scrollTop:A,scrollHeight:B,clientHeight:L}=oe.currentTarget;A-(B-L)>=-.6&&j?.(),A===0&&M?.()},children:E}),(N==="xy"||N==="x")&&b.jsx(Hd,{...te("scrollbar"),orientation:"horizontal","data-hidden":v==="never"||R==="present"&&!ne?!0:void 0,forceMount:!0,onMouseEnter:()=>H(!0),onMouseLeave:()=>H(!1),children:b.jsx(Ud,{...te("thumb")})}),(N==="xy"||N==="y")&&b.jsx(Hd,{...te("scrollbar"),orientation:"vertical","data-hidden":v==="never"||R==="present"&&!k?!0:void 0,forceMount:!0,onMouseEnter:()=>H(!0),onMouseLeave:()=>H(!1),children:b.jsx(Ud,{...te("thumb")})}),b.jsx(A3,{...te("corner"),"data-hovered":O||void 0,"data-hidden":v==="never"||void 0})]})});Kl.displayName="@mantine/core/ScrollArea";const ym=ve((n,o)=>{const{children:l,classNames:i,styles:s,scrollbarSize:c,scrollHideDelay:f,type:m,dir:p,offsetScrollbars:h,viewportRef:v,onScrollPositionChange:y,unstyled:S,variant:x,viewportProps:C,scrollbars:E,style:R,vars:N,onBottomReached:j,onTopReached:M,...z}=le("ScrollAreaAutosize",Nb,n);return b.jsx(fe,{...z,ref:o,style:[{display:"flex",overflow:"auto"},R],children:b.jsx(fe,{style:{display:"flex",flexDirection:"column",flex:1},children:b.jsx(Kl,{classNames:i,styles:s,scrollHideDelay:f,scrollbarSize:c,type:m,dir:p,offsetScrollbars:h,viewportRef:v,onScrollPositionChange:y,unstyled:S,variant:x,viewportProps:C,vars:N,scrollbars:E,onBottomReached:j,onTopReached:M,children:l})})})});Kl.classes=gm;ym.displayName="@mantine/core/ScrollAreaAutosize";ym.classes=gm;Kl.Autosize=ym;var Ab={root:"m_87cf2631"};const L3={__staticSelector:"UnstyledButton"},dn=Bt((n,o)=>{const l=le("UnstyledButton",L3,n),{className:i,component:s="button",__staticSelector:c,unstyled:f,classNames:m,styles:p,style:h,...v}=l,y=_e({name:c,props:l,classes:Ab,className:i,style:h,classNames:m,styles:p,unstyled:f});return b.jsx(fe,{...y("root",{focusable:!0}),component:s,ref:o,type:s==="button"?"button":void 0,...v})});dn.classes=Ab;dn.displayName="@mantine/core/UnstyledButton";var Mb={root:"m_515a97f8"};const H3={},bm=ve((n,o)=>{const l=le("VisuallyHidden",H3,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,...h}=l,v=_e({name:"VisuallyHidden",classes:Mb,props:l,className:s,style:c,classNames:i,styles:f,unstyled:m});return b.jsx(fe,{component:"span",ref:o,...v("root"),...h})});bm.classes=Mb;bm.displayName="@mantine/core/VisuallyHidden";var Ob={root:"m_1b7284a3"};const U3={},V3=(n,{radius:o,shadow:l})=>({root:{"--paper-radius":o===void 0?void 0:wt(o),"--paper-shadow":Kd(l)}}),Il=Bt((n,o)=>{const l=le("Paper",U3,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,withBorder:p,vars:h,radius:v,shadow:y,variant:S,mod:x,...C}=l,E=_e({name:"Paper",props:l,classes:Ob,className:s,style:c,classNames:i,styles:f,unstyled:m,vars:h,varsResolver:V3});return b.jsx(fe,{ref:o,mod:[{"data-with-border":p},x],...E("root"),variant:S,...C})});Il.classes=Ob;Il.displayName="@mantine/core/Paper";function Db(n,o){if(n==="rtl"&&(o.includes("right")||o.includes("left"))){const[l,i]=o.split("-"),s=l==="right"?"left":"right";return i===void 0?s:`${s}-${i}`}return o}function Fy(n,o,l,i){return n==="center"||i==="center"?{top:o}:n==="end"?{bottom:l}:n==="start"?{top:l}:{}}function Wy(n,o,l,i,s){return n==="center"||i==="center"?{left:o}:n==="end"?{[s==="ltr"?"right":"left"]:l}:n==="start"?{[s==="ltr"?"left":"right"]:l}:{}}const k3={bottom:"borderTopLeftRadius",left:"borderTopRightRadius",right:"borderBottomLeftRadius",top:"borderBottomRightRadius"};function Y3({position:n,arrowSize:o,arrowOffset:l,arrowRadius:i,arrowPosition:s,arrowX:c,arrowY:f,dir:m}){const[p,h="center"]=n.split("-"),v={width:o,height:o,transform:"rotate(45deg)",position:"absolute",[k3[p]]:i},y=-o/2;return p==="left"?{...v,...Fy(h,f,l,s),right:y,borderLeftColor:"transparent",borderBottomColor:"transparent",clipPath:"polygon(100% 0, 0 0, 100% 100%)"}:p==="right"?{...v,...Fy(h,f,l,s),left:y,borderRightColor:"transparent",borderTopColor:"transparent",clipPath:"polygon(0 100%, 0 0, 100% 100%)"}:p==="top"?{...v,...Wy(h,c,l,s,m),bottom:y,borderTopColor:"transparent",borderLeftColor:"transparent",clipPath:"polygon(0 100%, 100% 100%, 100% 0)"}:p==="bottom"?{...v,...Wy(h,c,l,s,m),top:y,borderBottomColor:"transparent",borderRightColor:"transparent",clipPath:"polygon(0 100%, 0 0, 100% 0)"}:{}}const Sm=w.forwardRef(({position:n,arrowSize:o,arrowOffset:l,arrowRadius:i,arrowPosition:s,visible:c,arrowX:f,arrowY:m,style:p,...h},v)=>{const{dir:y}=Pl();return c?b.jsx("div",{...h,ref:v,style:{...p,...Y3({position:n,arrowSize:o,arrowOffset:l,arrowRadius:i,arrowPosition:s,dir:y,arrowX:f,arrowY:m})}}):null});Sm.displayName="@mantine/core/FloatingArrow";var zb={root:"m_9814e45f"};const q3={zIndex:$n("modal")},G3=(n,{gradient:o,color:l,backgroundOpacity:i,blur:s,radius:c,zIndex:f})=>({root:{"--overlay-bg":o||(l!==void 0||i!==void 0)&&qn(l||"#000",i??.6)||void 0,"--overlay-filter":s?`blur(${K(s)})`:void 0,"--overlay-radius":c===void 0?void 0:wt(c),"--overlay-z-index":f?.toString()}}),bc=Bt((n,o)=>{const l=le("Overlay",q3,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,fixed:h,center:v,children:y,radius:S,zIndex:x,gradient:C,blur:E,color:R,backgroundOpacity:N,mod:j,...M}=l,z=_e({name:"Overlay",props:l,classes:zb,className:s,style:c,classNames:i,styles:f,unstyled:m,vars:p,varsResolver:G3});return b.jsx(fe,{ref:o,...z("root"),mod:[{center:v,fixed:h},j],...M,children:y})});bc.classes=zb;bc.displayName="@mantine/core/Overlay";function xd(n){const o=document.createElement("div");return o.setAttribute("data-portal","true"),typeof n.className=="string"&&o.classList.add(...n.className.split(" ").filter(Boolean)),typeof n.style=="object"&&Object.assign(o.style,n.style),typeof n.id=="string"&&o.setAttribute("id",n.id),o}function X3({target:n,reuseTargetNode:o,...l}){if(n)return typeof n=="string"?document.querySelector(n)||xd(l):n;if(o){const i=document.querySelector("[data-mantine-shared-portal-node]");if(i)return i;const s=xd(l);return s.setAttribute("data-mantine-shared-portal-node","true"),document.body.appendChild(s),s}return xd(l)}const P3={reuseTargetNode:!0},jb=ve((n,o)=>{const{children:l,target:i,reuseTargetNode:s,...c}=le("Portal",P3,n),[f,m]=w.useState(!1),p=w.useRef(null);return Gl(()=>(m(!0),p.current=X3({target:i,reuseTargetNode:s,...c}),Js(o,p.current),!i&&!s&&p.current&&document.body.appendChild(p.current),()=>{!i&&!s&&p.current&&document.body.removeChild(p.current)}),[i]),!f||!p.current?null:uc.createPortal(b.jsx(b.Fragment,{children:l}),p.current)});jb.displayName="@mantine/core/Portal";const Vo=ve(({withinPortal:n=!0,children:o,...l},i)=>Fd()==="test"||!n?b.jsx(b.Fragment,{children:o}):b.jsx(jb,{ref:i,...l,children:o}));Vo.displayName="@mantine/core/OptionalPortal";const ni=n=>({in:{opacity:1,transform:"scale(1)"},out:{opacity:0,transform:`scale(.9) translateY(${n==="bottom"?10:-10}px)`},transitionProperty:"transform, opacity"}),Ys={fade:{in:{opacity:1},out:{opacity:0},transitionProperty:"opacity"},"fade-up":{in:{opacity:1,transform:"translateY(0)"},out:{opacity:0,transform:"translateY(30px)"},transitionProperty:"opacity, transform"},"fade-down":{in:{opacity:1,transform:"translateY(0)"},out:{opacity:0,transform:"translateY(-30px)"},transitionProperty:"opacity, transform"},"fade-left":{in:{opacity:1,transform:"translateX(0)"},out:{opacity:0,transform:"translateX(30px)"},transitionProperty:"opacity, transform"},"fade-right":{in:{opacity:1,transform:"translateX(0)"},out:{opacity:0,transform:"translateX(-30px)"},transitionProperty:"opacity, transform"},scale:{in:{opacity:1,transform:"scale(1)"},out:{opacity:0,transform:"scale(0)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"scale-y":{in:{opacity:1,transform:"scaleY(1)"},out:{opacity:0,transform:"scaleY(0)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"scale-x":{in:{opacity:1,transform:"scaleX(1)"},out:{opacity:0,transform:"scaleX(0)"},common:{transformOrigin:"left"},transitionProperty:"transform, opacity"},"skew-up":{in:{opacity:1,transform:"translateY(0) skew(0deg, 0deg)"},out:{opacity:0,transform:"translateY(-20px) skew(-10deg, -5deg)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"skew-down":{in:{opacity:1,transform:"translateY(0) skew(0deg, 0deg)"},out:{opacity:0,transform:"translateY(20px) skew(-10deg, -5deg)"},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"rotate-left":{in:{opacity:1,transform:"translateY(0) rotate(0deg)"},out:{opacity:0,transform:"translateY(20px) rotate(-5deg)"},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"rotate-right":{in:{opacity:1,transform:"translateY(0) rotate(0deg)"},out:{opacity:0,transform:"translateY(20px) rotate(5deg)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"slide-down":{in:{opacity:1,transform:"translateY(0)"},out:{opacity:0,transform:"translateY(-100%)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"slide-up":{in:{opacity:1,transform:"translateY(0)"},out:{opacity:0,transform:"translateY(100%)"},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"slide-left":{in:{opacity:1,transform:"translateX(0)"},out:{opacity:0,transform:"translateX(100%)"},common:{transformOrigin:"left"},transitionProperty:"transform, opacity"},"slide-right":{in:{opacity:1,transform:"translateX(0)"},out:{opacity:0,transform:"translateX(-100%)"},common:{transformOrigin:"right"},transitionProperty:"transform, opacity"},pop:{...ni("bottom"),common:{transformOrigin:"center center"}},"pop-bottom-left":{...ni("bottom"),common:{transformOrigin:"bottom left"}},"pop-bottom-right":{...ni("bottom"),common:{transformOrigin:"bottom right"}},"pop-top-left":{...ni("top"),common:{transformOrigin:"top left"}},"pop-top-right":{...ni("top"),common:{transformOrigin:"top right"}}},e0={entering:"in",entered:"in",exiting:"out",exited:"out","pre-exiting":"out","pre-entering":"out"};function Q3({transition:n,state:o,duration:l,timingFunction:i}){const s={WebkitBackfaceVisibility:"hidden",willChange:"transform, opacity",transitionDuration:`${l}ms`,transitionTimingFunction:i};return typeof n=="string"?n in Ys?{transitionProperty:Ys[n].transitionProperty,...s,...Ys[n].common,...Ys[n][e0[o]]}:{}:{transitionProperty:n.transitionProperty,...s,...n.common,...n[e0[o]]}}function Z3({duration:n,exitDuration:o,timingFunction:l,mounted:i,onEnter:s,onExit:c,onEntered:f,onExited:m,enterDelay:p,exitDelay:h}){const v=nn(),y=ic(),S=v.respectReducedMotion?y:!1,[x,C]=w.useState(S?0:n),[E,R]=w.useState(i?"entered":"exited"),N=w.useRef(-1),j=w.useRef(-1),M=w.useRef(-1);function z(){window.clearTimeout(N.current),window.clearTimeout(j.current),cancelAnimationFrame(M.current)}const U=H=>{z();const k=H?s:c,Z=H?f:m,ne=S?0:H?n:o;C(ne),ne===0?(typeof k=="function"&&k(),typeof Z=="function"&&Z(),R(H?"entered":"exited")):M.current=requestAnimationFrame(()=>{ai.flushSync(()=>{R(H?"pre-entering":"pre-exiting")}),M.current=requestAnimationFrame(()=>{typeof k=="function"&&k(),R(H?"entering":"exiting"),N.current=window.setTimeout(()=>{typeof Z=="function"&&Z(),R(H?"entered":"exited")},ne)})})},O=H=>{if(z(),typeof(H?p:h)!="number"){U(H);return}j.current=window.setTimeout(()=>{U(H)},H?p:h)};return ga(()=>{O(i)},[i]),w.useEffect(()=>()=>{z()},[]),{transitionDuration:x,transitionStatus:E,transitionTimingFunction:l||"ease"}}function oo({keepMounted:n,transition:o="fade",duration:l=250,exitDuration:i=l,mounted:s,children:c,timingFunction:f="ease",onExit:m,onEntered:p,onEnter:h,onExited:v,enterDelay:y,exitDelay:S}){const x=Fd(),{transitionDuration:C,transitionStatus:E,transitionTimingFunction:R}=Z3({mounted:s,exitDuration:i,duration:l,timingFunction:f,onExit:m,onEntered:p,onEnter:h,onExited:v,enterDelay:y,exitDelay:S});return C===0||x==="test"?s?b.jsx(b.Fragment,{children:c({})}):n?c({display:"none"}):null:E==="exited"?n?c({display:"none"}):null:b.jsx(b.Fragment,{children:c(Q3({transition:o,duration:C,state:E,timingFunction:R}))})}oo.displayName="@mantine/core/Transition";const[K3,Bb]=Sa("Popover component was not found in the tree");function Sc({children:n,active:o=!0,refProp:l="ref",innerRef:i}){const s=_C(o),c=Ct(s,i);return ba(n)?w.cloneElement(n,{[l]:c}):n}function $b(n){return b.jsx(bm,{tabIndex:-1,"data-autofocus":!0,...n})}Sc.displayName="@mantine/core/FocusTrap";$b.displayName="@mantine/core/FocusTrapInitialFocus";Sc.InitialFocus=$b;var Lb={dropdown:"m_38a85659",arrow:"m_a31dc6c1",overlay:"m_3d7bc908"};const I3={},xm=ve((n,o)=>{const l=le("PopoverDropdown",I3,n),{className:i,style:s,vars:c,children:f,onKeyDownCapture:m,variant:p,classNames:h,styles:v,...y}=l,S=Bb(),x=j0({opened:S.opened,shouldReturnFocus:S.returnFocus}),C=S.withRoles?{"aria-labelledby":S.getTargetId(),id:S.getDropdownId(),role:"dialog",tabIndex:-1}:{},E=Ct(o,S.floating);return S.disabled?null:b.jsx(Vo,{...S.portalProps,withinPortal:S.withinPortal,children:b.jsx(oo,{mounted:S.opened,...S.transitionProps,transition:S.transitionProps?.transition||"fade",duration:S.transitionProps?.duration??150,keepMounted:S.keepMounted,exitDuration:typeof S.transitionProps?.exitDuration=="number"?S.transitionProps.exitDuration:S.transitionProps?.duration,children:R=>b.jsx(Sc,{active:S.trapFocus&&S.opened,innerRef:E,children:b.jsxs(fe,{...C,...y,variant:p,onKeyDownCapture:hC(()=>{S.onClose?.(),S.onDismiss?.()},{active:S.closeOnEscape,onTrigger:x,onKeyDown:m}),"data-position":S.placement,"data-fixed":S.floatingStrategy==="fixed"||void 0,...S.getStyles("dropdown",{className:i,props:l,classNames:h,styles:v,style:[{...R,zIndex:S.zIndex,top:S.y??0,left:S.x??0,width:S.width==="target"?void 0:K(S.width),...S.referenceHidden?{display:"none"}:null},S.resolvedStyles.dropdown,v?.dropdown,s]}),children:[f,b.jsx(Sm,{ref:S.arrowRef,arrowX:S.arrowX,arrowY:S.arrowY,visible:S.withArrow,position:S.placement,arrowSize:S.arrowSize,arrowRadius:S.arrowRadius,arrowOffset:S.arrowOffset,arrowPosition:S.arrowPosition,...S.getStyles("arrow",{props:l,classNames:h,styles:v})})]})})})})});xm.classes=Lb;xm.displayName="@mantine/core/PopoverDropdown";const J3={refProp:"ref",popupType:"dialog"},Hb=ve((n,o)=>{const{children:l,refProp:i,popupType:s,...c}=le("PopoverTarget",J3,n);if(!ba(l))throw new Error("Popover.Target component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported");const f=c,m=Bb(),p=Ct(m.reference,sc(l),o),h=m.withRoles?{"aria-haspopup":s,"aria-expanded":m.opened,"aria-controls":m.getDropdownId(),id:m.getTargetId()}:{};return w.cloneElement(l,{...f,...h,...m.targetProps,className:yt(m.targetProps.className,f.className,l.props.className),[i]:p,...m.controlled?null:{onClick:m.onToggle}})});Hb.displayName="@mantine/core/PopoverTarget";function Ub({opened:n,floating:o,position:l,positionDependencies:i}){const[s,c]=w.useState(0);w.useEffect(()=>{if(o.refs.reference.current&&o.refs.floating.current&&n)return GE(o.refs.reference.current,o.refs.floating.current,o.update)},[o.refs.reference.current,o.refs.floating.current,n,s,l]),ga(()=>{o.update()},i),ga(()=>{c(f=>f+1)},[n])}function F3(n){if(n===void 0)return{shift:!0,flip:!0};const o={...n};return n.shift===void 0&&(o.shift=!0),n.flip===void 0&&(o.flip=!0),o}function W3(n,o){const l=F3(n.middlewares),i=[db(n.offset),o3()];return l.shift&&i.push(fm(typeof l.shift=="boolean"?{limiter:Gy(),padding:5}:{limiter:Gy(),padding:5,...l.shift})),l.flip&&i.push(typeof l.flip=="boolean"?nc():nc(l.flip)),l.inline&&i.push(typeof l.inline=="boolean"?li():li(l.inline)),i.push(mb({element:n.arrowRef,padding:n.arrowOffset})),(l.size||n.width==="target")&&i.push(a3({...typeof l.size=="boolean"?{}:l.size,apply({rects:s,availableWidth:c,availableHeight:f,...m}){const h=o().refs.floating.current?.style??{};l.size&&(typeof l.size=="object"&&l.size.apply?l.size.apply({rects:s,availableWidth:c,availableHeight:f,...m}):Object.assign(h,{maxWidth:`${c}px`,maxHeight:`${f}px`})),n.width==="target"&&Object.assign(h,{width:`${s.reference.width}px`})}})),i}function eT(n){const[o,l]=ya({value:n.opened,defaultValue:n.defaultOpened,finalValue:!1,onChange:n.onChange}),i=w.useRef(o),s=()=>{o&&!n.disabled&&l(!1)},c=()=>!n.disabled&&l(!o),f=hm({strategy:n.strategy,placement:n.position,middleware:W3(n,()=>f)});return Ub({opened:o,position:n.position,positionDependencies:n.positionDependencies||[],floating:f}),ga(()=>{n.onPositionChange?.(f.placement)},[f.placement]),ga(()=>{o!==i.current&&(o?n.onOpen?.():n.onClose?.()),i.current=o},[o,n.onClose,n.onOpen]),{floating:f,controlled:typeof n.opened=="boolean",opened:o,onClose:s,onToggle:c}}const tT={position:"bottom",offset:8,positionDependencies:[],transitionProps:{transition:"fade",duration:150},middlewares:{flip:!0,shift:!0,inline:!1},arrowSize:7,arrowOffset:5,arrowRadius:0,arrowPosition:"side",closeOnClickOutside:!0,withinPortal:!0,closeOnEscape:!0,trapFocus:!1,withRoles:!0,returnFocus:!1,withOverlay:!1,hideDetached:!0,clickOutsideEvents:["mousedown","touchstart"],zIndex:$n("popover"),__staticSelector:"Popover",width:"max-content"},nT=(n,{radius:o,shadow:l})=>({dropdown:{"--popover-radius":o===void 0?void 0:wt(o),"--popover-shadow":Kd(l)}});function an(n){const o=le("Popover",tT,n),{children:l,position:i,offset:s,onPositionChange:c,positionDependencies:f,opened:m,transitionProps:p,onExitTransitionEnd:h,onEnterTransitionEnd:v,width:y,middlewares:S,withArrow:x,arrowSize:C,arrowOffset:E,arrowRadius:R,arrowPosition:N,unstyled:j,classNames:M,styles:z,closeOnClickOutside:U,withinPortal:O,portalProps:H,closeOnEscape:k,clickOutsideEvents:Z,trapFocus:ne,onClose:ae,onDismiss:te,onOpen:ie,onChange:ce,zIndex:oe,radius:A,shadow:B,id:L,defaultOpened:X,__staticSelector:F,withRoles:_,disabled:Y,returnFocus:ee,variant:ue,keepMounted:re,vars:de,floatingStrategy:ge,withOverlay:Ee,overlayProps:Te,hideDetached:He,...st}=o,ot=_e({name:F,props:o,classes:Lb,classNames:M,styles:z,unstyled:j,rootSelector:"dropdown",vars:de,varsResolver:nT}),{resolvedStyles:St}=Xl({classNames:M,styles:z,props:o}),Je=w.useRef(null),[ct,$t]=w.useState(null),[me,pe]=w.useState(null),{dir:Se}=Pl(),Me=Fd(),Oe=Kn(L),ye=eT({middlewares:S,width:y,position:Db(Se,i),offset:typeof s=="number"?s+(x?C/2:0):s,arrowRef:Je,arrowOffset:E,onPositionChange:c,positionDependencies:f,opened:m,defaultOpened:X,onChange:ce,onOpen:ie,onClose:ae,onDismiss:te,strategy:ge,disabled:Y});yC(()=>{U&&(ye.onClose(),te?.())},Z,[ct,me]);const je=w.useCallback(ut=>{$t(ut),ye.floating.refs.setReference(ut)},[ye.floating.refs.setReference]),se=w.useCallback(ut=>{pe(ut),ye.floating.refs.setFloating(ut)},[ye.floating.refs.setFloating]),Ce=w.useCallback(()=>{p?.onExited?.(),h?.()},[p?.onExited,h]),lt=w.useCallback(()=>{p?.onEntered?.(),v?.()},[p?.onEntered,v]);return b.jsxs(K3,{value:{returnFocus:ee,disabled:Y,controlled:ye.controlled,reference:je,floating:se,x:ye.floating.x,y:ye.floating.y,arrowX:ye.floating?.middlewareData?.arrow?.x,arrowY:ye.floating?.middlewareData?.arrow?.y,opened:ye.opened,arrowRef:Je,transitionProps:{...p,onExited:Ce,onEntered:lt},width:y,withArrow:x,arrowSize:C,arrowOffset:E,arrowRadius:R,arrowPosition:N,placement:ye.floating.placement,trapFocus:ne,withinPortal:O,portalProps:H,zIndex:oe,radius:A,shadow:B,closeOnEscape:k,onDismiss:te,onClose:ye.onClose,onToggle:ye.onToggle,getTargetId:()=>`${Oe}-target`,getDropdownId:()=>`${Oe}-dropdown`,withRoles:_,targetProps:st,__staticSelector:F,classNames:M,styles:z,unstyled:j,variant:ue,keepMounted:re,getStyles:ot,resolvedStyles:St,floatingStrategy:ge,referenceHidden:He&&Me!=="test"?ye.floating.middlewareData.hide?.referenceHidden:!1},children:[l,Ee&&b.jsx(oo,{transition:"fade",mounted:ye.opened,duration:p?.duration||250,exitDuration:p?.exitDuration||250,children:ut=>b.jsx(Vo,{withinPortal:O,children:b.jsx(bc,{...Te,...ot("overlay",{className:Te?.className,style:[ut,Te?.style]})})})})]})}an.Target=Hb;an.Dropdown=xm;an.displayName="@mantine/core/Popover";an.extend=n=>n;var Dn={root:"m_5ae2e3c",barsLoader:"m_7a2bd4cd",bar:"m_870bb79","bars-loader-animation":"m_5d2b3b9d",dotsLoader:"m_4e3f22d7",dot:"m_870c4af","loader-dots-animation":"m_aac34a1",ovalLoader:"m_b34414df","oval-loader-animation":"m_f8e89c4b"};const Vb=w.forwardRef(({className:n,...o},l)=>b.jsxs(fe,{component:"span",className:yt(Dn.barsLoader,n),...o,ref:l,children:[b.jsx("span",{className:Dn.bar}),b.jsx("span",{className:Dn.bar}),b.jsx("span",{className:Dn.bar})]}));Vb.displayName="@mantine/core/Bars";const kb=w.forwardRef(({className:n,...o},l)=>b.jsxs(fe,{component:"span",className:yt(Dn.dotsLoader,n),...o,ref:l,children:[b.jsx("span",{className:Dn.dot}),b.jsx("span",{className:Dn.dot}),b.jsx("span",{className:Dn.dot})]}));kb.displayName="@mantine/core/Dots";const Yb=w.forwardRef(({className:n,...o},l)=>b.jsx(fe,{component:"span",className:yt(Dn.ovalLoader,n),...o,ref:l}));Yb.displayName="@mantine/core/Oval";const qb={bars:Vb,oval:Yb,dots:kb},aT={loaders:qb,type:"oval"},oT=(n,{size:o,color:l})=>({root:{"--loader-size":Ye(o,"loader-size"),"--loader-color":l?en(l,n):void 0}}),ko=ve((n,o)=>{const l=le("Loader",aT,n),{size:i,color:s,type:c,vars:f,className:m,style:p,classNames:h,styles:v,unstyled:y,loaders:S,variant:x,children:C,...E}=l,R=_e({name:"Loader",props:l,classes:Dn,className:m,style:p,classNames:h,styles:v,unstyled:y,vars:f,varsResolver:oT});return C?b.jsx(fe,{...R("root"),ref:o,...E,children:C}):b.jsx(fe,{...R("root"),ref:o,component:S[c],variant:x,size:i,...E})});ko.defaultLoaders=qb;ko.classes=Dn;ko.displayName="@mantine/core/Loader";var Jl={root:"m_8d3f4000",icon:"m_8d3afb97",loader:"m_302b9fb1",group:"m_1a0f1b21",groupSection:"m_437b6484"};const t0={orientation:"horizontal"},lT=(n,{borderWidth:o})=>({group:{"--ai-border-width":K(o)}}),wm=ve((n,o)=>{const l=le("ActionIconGroup",t0,n),{className:i,style:s,classNames:c,styles:f,unstyled:m,orientation:p,vars:h,borderWidth:v,variant:y,mod:S,...x}=le("ActionIconGroup",t0,n),C=_e({name:"ActionIconGroup",props:l,classes:Jl,className:i,style:s,classNames:c,styles:f,unstyled:m,vars:h,varsResolver:lT,rootSelector:"group"});return b.jsx(fe,{...C("group"),ref:o,variant:y,mod:[{"data-orientation":p},S],role:"group",...x})});wm.classes=Jl;wm.displayName="@mantine/core/ActionIconGroup";const n0={},rT=(n,{radius:o,color:l,gradient:i,variant:s,autoContrast:c,size:f})=>{const m=n.variantColorResolver({color:l||n.primaryColor,theme:n,gradient:i,variant:s||"filled",autoContrast:c});return{groupSection:{"--section-height":Ye(f,"section-height"),"--section-padding-x":Ye(f,"section-padding-x"),"--section-fz":Yt(f),"--section-radius":o===void 0?void 0:wt(o),"--section-bg":l||s?m.background:void 0,"--section-color":m.color,"--section-bd":l||s?m.border:void 0}}},Cm=ve((n,o)=>{const l=le("ActionIconGroupSection",n0,n),{className:i,style:s,classNames:c,styles:f,unstyled:m,vars:p,variant:h,gradient:v,radius:y,autoContrast:S,...x}=le("ActionIconGroupSection",n0,n),C=_e({name:"ActionIconGroupSection",props:l,classes:Jl,className:i,style:s,classNames:c,styles:f,unstyled:m,vars:p,varsResolver:rT,rootSelector:"groupSection"});return b.jsx(fe,{...C("groupSection"),ref:o,variant:h,...x})});Cm.classes=Jl;Cm.displayName="@mantine/core/ActionIconGroupSection";const iT={},sT=(n,{size:o,radius:l,variant:i,gradient:s,color:c,autoContrast:f})=>{const m=n.variantColorResolver({color:c||n.primaryColor,theme:n,gradient:s,variant:i||"filled",autoContrast:f});return{root:{"--ai-size":Ye(o,"ai-size"),"--ai-radius":l===void 0?void 0:wt(l),"--ai-bg":c||i?m.background:void 0,"--ai-hover":c||i?m.hover:void 0,"--ai-hover-color":c||i?m.hoverColor:void 0,"--ai-color":m.color,"--ai-bd":c||i?m.border:void 0}}},Yo=Bt((n,o)=>{const l=le("ActionIcon",iT,n),{className:i,unstyled:s,variant:c,classNames:f,styles:m,style:p,loading:h,loaderProps:v,size:y,color:S,radius:x,__staticSelector:C,gradient:E,vars:R,children:N,disabled:j,"data-disabled":M,autoContrast:z,mod:U,...O}=l,H=_e({name:["ActionIcon",C],props:l,className:i,style:p,classes:Jl,classNames:f,styles:m,unstyled:s,vars:R,varsResolver:sT});return b.jsxs(dn,{...H("root",{active:!j&&!h&&!M}),...O,unstyled:s,variant:c,size:y,disabled:j||h,ref:o,mod:[{loading:h,disabled:j||M},U],children:[b.jsx(oo,{mounted:!!h,transition:"slide-down",duration:150,children:k=>b.jsx(fe,{component:"span",...H("loader",{style:k}),"aria-hidden":!0,children:b.jsx(ko,{color:"var(--ai-color)",size:"calc(var(--ai-size) * 0.55)",...v})})}),b.jsx(fe,{component:"span",mod:{loading:h},...H("icon"),children:N})]})});Yo.classes=Jl;Yo.displayName="@mantine/core/ActionIcon";Yo.Group=wm;Yo.GroupSection=Cm;const Gb=w.forwardRef(({size:n="var(--cb-icon-size, 70%)",style:o,...l},i)=>b.jsx("svg",{viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{...o,width:n,height:n},ref:i,...l,children:b.jsx("path",{d:"M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"})}));Gb.displayName="@mantine/core/CloseIcon";var Xb={root:"m_86a44da5","root--subtle":"m_220c80f2"};const cT={variant:"subtle"},uT=(n,{size:o,radius:l,iconSize:i})=>({root:{"--cb-size":Ye(o,"cb-size"),"--cb-radius":l===void 0?void 0:wt(l),"--cb-icon-size":K(i)}}),Fl=Bt((n,o)=>{const l=le("CloseButton",cT,n),{iconSize:i,children:s,vars:c,radius:f,className:m,classNames:p,style:h,styles:v,unstyled:y,"data-disabled":S,disabled:x,variant:C,icon:E,mod:R,__staticSelector:N,...j}=l,M=_e({name:N||"CloseButton",props:l,className:m,style:h,classes:Xb,classNames:p,styles:v,unstyled:y,vars:c,varsResolver:uT});return b.jsxs(dn,{ref:o,...j,unstyled:y,variant:C,disabled:x,mod:[{disabled:x||S},R],...M("root",{variant:C,active:!x&&!S}),children:[E||b.jsx(Gb,{}),s]})});Fl.classes=Xb;Fl.displayName="@mantine/core/CloseButton";function fT(n){return w.Children.toArray(n).filter(Boolean)}var Pb={root:"m_4081bf90"};const dT={preventGrowOverflow:!0,gap:"md",align:"center",justify:"flex-start",wrap:"wrap"},mT=(n,{grow:o,preventGrowOverflow:l,gap:i,align:s,justify:c,wrap:f},{childWidth:m})=>({root:{"--group-child-width":o&&l?m:void 0,"--group-gap":ql(i),"--group-align":s,"--group-justify":c,"--group-wrap":f}}),Nt=ve((n,o)=>{const l=le("Group",dT,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,children:p,gap:h,align:v,justify:y,wrap:S,grow:x,preventGrowOverflow:C,vars:E,variant:R,__size:N,mod:j,...M}=l,z=fT(p),U=z.length,O=ql(h??"md"),k={childWidth:`calc(${100/U}% - (${O} - ${O} / ${U}))`},Z=_e({name:"Group",props:l,stylesCtx:k,className:s,style:c,classes:Pb,classNames:i,styles:f,unstyled:m,vars:E,varsResolver:mT});return b.jsx(fe,{...Z("root"),ref:o,variant:R,mod:[{grow:x},j],size:N,...M,children:z})});Nt.classes=Pb;Nt.displayName="@mantine/core/Group";const[pT,Ea]=Sa("ModalBase component was not found in tree");function hT({opened:n,transitionDuration:o}){const[l,i]=w.useState(n),s=w.useRef(-1),f=ic()?0:o;return w.useEffect(()=>(n?(i(!0),window.clearTimeout(s.current)):f===0?i(!1):s.current=window.setTimeout(()=>i(!1),f),()=>window.clearTimeout(s.current)),[n,f]),l}function vT({id:n,transitionProps:o,opened:l,trapFocus:i,closeOnEscape:s,onClose:c,returnFocus:f}){const m=Kn(n),[p,h]=w.useState(!1),[v,y]=w.useState(!1),S=typeof o?.duration=="number"?o?.duration:200,x=hT({opened:l,transitionDuration:S});return H0("keydown",C=>{C.key==="Escape"&&s&&!C.isComposing&&l&&C.target?.getAttribute("data-mantine-stop-propagation")!=="true"&&c()},{capture:!0}),j0({opened:l,shouldReturnFocus:i&&f}),{_id:m,titleMounted:p,bodyMounted:v,shouldLockScroll:x,setTitleMounted:h,setBodyMounted:y}}const Qb=w.forwardRef(({keepMounted:n,opened:o,onClose:l,id:i,transitionProps:s,onExitTransitionEnd:c,onEnterTransitionEnd:f,trapFocus:m,closeOnEscape:p,returnFocus:h,closeOnClickOutside:v,withinPortal:y,portalProps:S,lockScroll:x,children:C,zIndex:E,shadow:R,padding:N,__vars:j,unstyled:M,removeScrollProps:z,...U},O)=>{const{_id:H,titleMounted:k,bodyMounted:Z,shouldLockScroll:ne,setTitleMounted:ae,setBodyMounted:te}=vT({id:i,transitionProps:s,opened:o,trapFocus:m,closeOnEscape:p,onClose:l,returnFocus:h}),{key:ie,...ce}=z||{};return b.jsx(Vo,{...S,withinPortal:y,children:b.jsx(pT,{value:{opened:o,onClose:l,closeOnClickOutside:v,onExitTransitionEnd:c,onEnterTransitionEnd:f,transitionProps:{...s,keepMounted:n},getTitleId:()=>`${H}-title`,getBodyId:()=>`${H}-body`,titleMounted:k,bodyMounted:Z,setTitleMounted:ae,setBodyMounted:te,trapFocus:m,closeOnEscape:p,zIndex:E,unstyled:M},children:b.jsx(Ul,{enabled:ne&&x,...ce,children:b.jsx(fe,{ref:O,...U,__vars:{...j,"--mb-z-index":(E||$n("modal")).toString(),"--mb-shadow":Kd(R),"--mb-padding":ql(N)},children:C})},ie)})})});Qb.displayName="@mantine/core/ModalBase";function gT(){const n=Ea();return w.useEffect(()=>(n.setBodyMounted(!0),()=>n.setBodyMounted(!1)),[]),n.getBodyId()}var kl={title:"m_615af6c9",header:"m_b5489c3c",inner:"m_60c222c7",content:"m_fd1ab0aa",close:"m_606cb269",body:"m_5df29311"};const Zb=w.forwardRef(({className:n,...o},l)=>{const i=gT(),s=Ea();return b.jsx(fe,{ref:l,...o,id:i,className:yt({[kl.body]:!s.unstyled},n)})});Zb.displayName="@mantine/core/ModalBaseBody";const Kb=w.forwardRef(({className:n,onClick:o,...l},i)=>{const s=Ea();return b.jsx(Fl,{ref:i,...l,onClick:c=>{s.onClose(),o?.(c)},className:yt({[kl.close]:!s.unstyled},n),unstyled:s.unstyled})});Kb.displayName="@mantine/core/ModalBaseCloseButton";const Ib=w.forwardRef(({transitionProps:n,className:o,innerProps:l,onKeyDown:i,style:s,...c},f)=>{const m=Ea();return b.jsx(oo,{mounted:m.opened,transition:"pop",...m.transitionProps,onExited:()=>{m.onExitTransitionEnd?.(),m.transitionProps?.onExited?.()},onEntered:()=>{m.onEnterTransitionEnd?.(),m.transitionProps?.onEntered?.()},...n,children:p=>b.jsx("div",{...l,className:yt({[kl.inner]:!m.unstyled},l.className),children:b.jsx(Sc,{active:m.opened&&m.trapFocus,innerRef:f,children:b.jsx(Il,{...c,component:"section",role:"dialog",tabIndex:-1,"aria-modal":!0,"aria-describedby":m.bodyMounted?m.getBodyId():void 0,"aria-labelledby":m.titleMounted?m.getTitleId():void 0,style:[s,p],className:yt({[kl.content]:!m.unstyled},o),unstyled:m.unstyled,children:c.children})})})})});Ib.displayName="@mantine/core/ModalBaseContent";const Jb=w.forwardRef(({className:n,...o},l)=>{const i=Ea();return b.jsx(fe,{component:"header",ref:l,className:yt({[kl.header]:!i.unstyled},n),...o})});Jb.displayName="@mantine/core/ModalBaseHeader";const yT={duration:200,timingFunction:"ease",transition:"fade"};function bT(n){const o=Ea();return{...yT,...o.transitionProps,...n}}const Fb=w.forwardRef(({onClick:n,transitionProps:o,style:l,visible:i,...s},c)=>{const f=Ea(),m=bT(o);return b.jsx(oo,{mounted:i!==void 0?i:f.opened,...m,transition:"fade",children:p=>b.jsx(bc,{ref:c,fixed:!0,style:[l,p],zIndex:f.zIndex,unstyled:f.unstyled,onClick:h=>{n?.(h),f.closeOnClickOutside&&f.onClose()},...s})})});Fb.displayName="@mantine/core/ModalBaseOverlay";function ST(){const n=Ea();return w.useEffect(()=>(n.setTitleMounted(!0),()=>n.setTitleMounted(!1)),[]),n.getTitleId()}const Wb=w.forwardRef(({className:n,...o},l)=>{const i=ST(),s=Ea();return b.jsx(fe,{component:"h2",ref:l,className:yt({[kl.title]:!s.unstyled},n),...o,id:i})});Wb.displayName="@mantine/core/ModalBaseTitle";function xT({children:n}){return b.jsx(b.Fragment,{children:n})}const[wT,CT]=fi({size:"sm"}),ET={},e1=ve((n,o)=>{const l=le("InputClearButton",ET,n),{size:i,variant:s,vars:c,classNames:f,styles:m,...p}=l,h=CT(),{resolvedClassNames:v,resolvedStyles:y}=Xl({classNames:f,styles:m,props:l});return b.jsx(Fl,{variant:s||"transparent",ref:o,size:i||h?.size||"sm",classNames:v,styles:y,__staticSelector:"InputClearButton",...p})});e1.displayName="@mantine/core/InputClearButton";const[TT,mi]=fi({offsetBottom:!1,offsetTop:!1,describedBy:void 0,getStyles:null,inputId:void 0,labelId:void 0});var Tn={wrapper:"m_6c018570",input:"m_8fb7ebe7",section:"m_82577fc2",placeholder:"m_88bacfd0",root:"m_46b77525",label:"m_8fdc1311",required:"m_78a94662",error:"m_8f816625",description:"m_fe47ce59"};const a0={},RT=(n,{size:o})=>({description:{"--input-description-size":o===void 0?void 0:`calc(${Yt(o)} - ${K(2)})`}}),xc=ve((n,o)=>{const l=le("InputDescription",a0,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,size:h,__staticSelector:v,__inheritStyles:y=!0,variant:S,...x}=le("InputDescription",a0,l),C=mi(),E=_e({name:["InputWrapper",v],props:l,classes:Tn,className:s,style:c,classNames:i,styles:f,unstyled:m,rootSelector:"description",vars:p,varsResolver:RT}),R=y&&C?.getStyles||E;return b.jsx(fe,{component:"p",ref:o,variant:S,size:h,...R("description",C?.getStyles?{className:s,style:c}:void 0),...x})});xc.classes=Tn;xc.displayName="@mantine/core/InputDescription";const _T={},NT=(n,{size:o})=>({error:{"--input-error-size":o===void 0?void 0:`calc(${Yt(o)} - ${K(2)})`}}),wc=ve((n,o)=>{const l=le("InputError",_T,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,size:h,__staticSelector:v,__inheritStyles:y=!0,variant:S,...x}=l,C=_e({name:["InputWrapper",v],props:l,classes:Tn,className:s,style:c,classNames:i,styles:f,unstyled:m,rootSelector:"error",vars:p,varsResolver:NT}),E=mi(),R=y&&E?.getStyles||C;return b.jsx(fe,{component:"p",ref:o,variant:S,size:h,...R("error",E?.getStyles?{className:s,style:c}:void 0),...x})});wc.classes=Tn;wc.displayName="@mantine/core/InputError";const o0={labelElement:"label"},AT=(n,{size:o})=>({label:{"--input-label-size":Yt(o),"--input-asterisk-color":void 0}}),Cc=ve((n,o)=>{const l=le("InputLabel",o0,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,labelElement:h,size:v,required:y,htmlFor:S,onMouseDown:x,children:C,__staticSelector:E,variant:R,mod:N,...j}=le("InputLabel",o0,l),M=_e({name:["InputWrapper",E],props:l,classes:Tn,className:s,style:c,classNames:i,styles:f,unstyled:m,rootSelector:"label",vars:p,varsResolver:AT}),z=mi(),U=z?.getStyles||M;return b.jsxs(fe,{...U("label",z?.getStyles?{className:s,style:c}:void 0),component:h,variant:R,size:v,ref:o,htmlFor:h==="label"?S:void 0,mod:[{required:y},N],onMouseDown:O=>{x?.(O),!O.defaultPrevented&&O.detail>1&&O.preventDefault()},...j,children:[C,y&&b.jsx("span",{...U("required"),"aria-hidden":!0,children:" *"})]})});Cc.classes=Tn;Cc.displayName="@mantine/core/InputLabel";const l0={},Em=ve((n,o)=>{const l=le("InputPlaceholder",l0,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,__staticSelector:h,variant:v,error:y,mod:S,...x}=le("InputPlaceholder",l0,l),C=_e({name:["InputPlaceholder",h],props:l,classes:Tn,className:s,style:c,classNames:i,styles:f,unstyled:m,rootSelector:"placeholder"});return b.jsx(fe,{...C("placeholder"),mod:[{error:!!y},S],component:"span",variant:v,ref:o,...x})});Em.classes=Tn;Em.displayName="@mantine/core/InputPlaceholder";function MT(n,{hasDescription:o,hasError:l}){const i=n.findIndex(p=>p==="input"),s=n.slice(0,i),c=n.slice(i+1),f=o&&s.includes("description")||l&&s.includes("error");return{offsetBottom:o&&c.includes("description")||l&&c.includes("error"),offsetTop:f}}const OT={labelElement:"label",inputContainer:n=>n,inputWrapperOrder:["label","description","input","error"]},DT=(n,{size:o})=>({label:{"--input-label-size":Yt(o),"--input-asterisk-color":void 0},error:{"--input-error-size":o===void 0?void 0:`calc(${Yt(o)} - ${K(2)})`},description:{"--input-description-size":o===void 0?void 0:`calc(${Yt(o)} - ${K(2)})`}}),Tm=ve((n,o)=>{const l=le("InputWrapper",OT,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,size:h,variant:v,__staticSelector:y,inputContainer:S,inputWrapperOrder:x,label:C,error:E,description:R,labelProps:N,descriptionProps:j,errorProps:M,labelElement:z,children:U,withAsterisk:O,id:H,required:k,__stylesApiProps:Z,mod:ne,...ae}=l,te=_e({name:["InputWrapper",y],props:Z||l,classes:Tn,className:s,style:c,classNames:i,styles:f,unstyled:m,vars:p,varsResolver:DT}),ie={size:h,variant:v,__staticSelector:y},ce=Kn(H),oe=typeof O=="boolean"?O:k,A=M?.id||`${ce}-error`,B=j?.id||`${ce}-description`,L=ce,X=!!E&&typeof E!="boolean",F=!!R,_=`${X?A:""} ${F?B:""}`,Y=_.trim().length>0?_.trim():void 0,ee=N?.id||`${ce}-label`,ue=C&&b.jsx(Cc,{labelElement:z,id:ee,htmlFor:L,required:oe,...ie,...N,children:C},"label"),re=F&&b.jsx(xc,{...j,...ie,size:j?.size||ie.size,id:j?.id||B,children:R},"description"),de=b.jsx(w.Fragment,{children:S(U)},"input"),ge=X&&w.createElement(wc,{...M,...ie,size:M?.size||ie.size,key:"error",id:M?.id||A},E),Ee=x.map(Te=>{switch(Te){case"label":return ue;case"input":return de;case"description":return re;case"error":return ge;default:return null}});return b.jsx(TT,{value:{getStyles:te,describedBy:Y,inputId:L,labelId:ee,...MT(x,{hasDescription:F,hasError:X})},children:b.jsx(fe,{ref:o,variant:v,size:h,mod:[{error:!!E},ne],...te("root"),...ae,children:Ee})})});Tm.classes=Tn;Tm.displayName="@mantine/core/InputWrapper";const zT={variant:"default",leftSectionPointerEvents:"none",rightSectionPointerEvents:"none",withAria:!0,withErrorStyles:!0},jT=(n,o,l)=>({wrapper:{"--input-margin-top":l.offsetTop?"calc(var(--mantine-spacing-xs) / 2)":void 0,"--input-margin-bottom":l.offsetBottom?"calc(var(--mantine-spacing-xs) / 2)":void 0,"--input-height":Ye(o.size,"input-height"),"--input-fz":Yt(o.size),"--input-radius":o.radius===void 0?void 0:wt(o.radius),"--input-left-section-width":o.leftSectionWidth!==void 0?K(o.leftSectionWidth):void 0,"--input-right-section-width":o.rightSectionWidth!==void 0?K(o.rightSectionWidth):void 0,"--input-padding-y":o.multiline?Ye(o.size,"input-padding-y"):void 0,"--input-left-section-pointer-events":o.leftSectionPointerEvents,"--input-right-section-pointer-events":o.rightSectionPointerEvents}}),bt=Bt((n,o)=>{const l=le("Input",zT,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,required:p,__staticSelector:h,__stylesApiProps:v,size:y,wrapperProps:S,error:x,disabled:C,leftSection:E,leftSectionProps:R,leftSectionWidth:N,rightSection:j,rightSectionProps:M,rightSectionWidth:z,rightSectionPointerEvents:U,leftSectionPointerEvents:O,variant:H,vars:k,pointer:Z,multiline:ne,radius:ae,id:te,withAria:ie,withErrorStyles:ce,mod:oe,inputSize:A,__clearSection:B,__clearable:L,__defaultRightSection:X,...F}=l,{styleProps:_,rest:Y}=di(F),ee=mi(),ue={offsetBottom:ee?.offsetBottom,offsetTop:ee?.offsetTop},re=_e({name:["Input",h],props:v||l,classes:Tn,className:s,style:c,classNames:i,styles:f,unstyled:m,stylesCtx:ue,rootSelector:"wrapper",vars:k,varsResolver:jT}),de=ie?{required:p,disabled:C,"aria-invalid":!!x,"aria-describedby":ee?.describedBy,id:ee?.inputId||te}:{},ge=j||L&&B||X;return b.jsx(wT,{value:{size:y||"sm"},children:b.jsxs(fe,{...re("wrapper"),..._,...S,mod:[{error:!!x&&ce,pointer:Z,disabled:C,multiline:ne,"data-with-right-section":!!ge,"data-with-left-section":!!E},oe],variant:H,size:y,children:[E&&b.jsx("div",{...R,"data-position":"left",...re("section",{className:R?.className,style:R?.style}),children:E}),b.jsx(fe,{component:"input",...Y,...de,ref:o,required:p,mod:{disabled:C,error:!!x&&ce},variant:H,__size:A,...re("input")}),ge&&b.jsx("div",{...M,"data-position":"right",...re("section",{className:M?.className,style:M?.style}),children:ge})]})})});bt.classes=Tn;bt.Wrapper=Tm;bt.Label=Cc;bt.Error=wc;bt.Description=xc;bt.Placeholder=Em;bt.ClearButton=e1;bt.displayName="@mantine/core/Input";function BT(n,o,l){const i=le(n,o,l),{label:s,description:c,error:f,required:m,classNames:p,styles:h,className:v,unstyled:y,__staticSelector:S,__stylesApiProps:x,errorProps:C,labelProps:E,descriptionProps:R,wrapperProps:N,id:j,size:M,style:z,inputContainer:U,inputWrapperOrder:O,withAsterisk:H,variant:k,vars:Z,mod:ne,...ae}=i,{styleProps:te,rest:ie}=di(ae),ce={label:s,description:c,error:f,required:m,classNames:p,className:v,__staticSelector:S,__stylesApiProps:x||i,errorProps:C,labelProps:E,descriptionProps:R,unstyled:y,styles:h,size:M,style:z,inputContainer:U,inputWrapperOrder:O,withAsterisk:H,variant:k,id:j,mod:ne,...N};return{...ie,classNames:p,styles:h,unstyled:y,wrapperProps:{...ce,...te},inputProps:{required:m,classNames:p,styles:h,unstyled:y,size:M,__staticSelector:S,__stylesApiProps:x||i,error:f,variant:k,id:j}}}const $T={__staticSelector:"InputBase",withAria:!0},Ta=Bt((n,o)=>{const{inputProps:l,wrapperProps:i,...s}=BT("InputBase",$T,n);return b.jsx(bt.Wrapper,{...i,children:b.jsx(bt,{...l,...s,ref:o})})});Ta.classes={...bt.classes,...bt.Wrapper.classes};Ta.displayName="@mantine/core/InputBase";function t1({style:n,size:o=16,...l}){return b.jsx("svg",{viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{...n,width:K(o),height:K(o),display:"block"},...l,children:b.jsx("path",{d:"M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"})})}t1.displayName="@mantine/core/AccordionChevron";var n1={root:"m_66836ed3",wrapper:"m_a5d60502",body:"m_667c2793",title:"m_6a03f287",label:"m_698f4f23",icon:"m_667f2a6a",message:"m_7fa78076",closeButton:"m_87f54839"};const LT={},HT=(n,{radius:o,color:l,variant:i,autoContrast:s})=>{const c=n.variantColorResolver({color:l||n.primaryColor,theme:n,variant:i||"light",autoContrast:s});return{root:{"--alert-radius":o===void 0?void 0:wt(o),"--alert-bg":l||i?c.background:void 0,"--alert-color":c.color,"--alert-bd":l||i?c.border:void 0}}},Ec=ve((n,o)=>{const l=le("Alert",LT,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,radius:h,color:v,title:y,children:S,id:x,icon:C,withCloseButton:E,onClose:R,closeButtonLabel:N,variant:j,autoContrast:M,...z}=l,U=_e({name:"Alert",classes:n1,props:l,className:s,style:c,classNames:i,styles:f,unstyled:m,vars:p,varsResolver:HT}),O=Kn(x),H=y&&`${O}-title`||void 0,k=`${O}-body`;return b.jsx(fe,{id:O,...U("root",{variant:j}),variant:j,ref:o,...z,role:"alert","aria-describedby":k,"aria-labelledby":H,children:b.jsxs("div",{...U("wrapper"),children:[C&&b.jsx("div",{...U("icon"),children:C}),b.jsxs("div",{...U("body"),children:[y&&b.jsx("div",{...U("title"),"data-with-close-button":E||void 0,children:b.jsx("span",{id:H,...U("label"),children:y})}),S&&b.jsx("div",{id:k,...U("message"),"data-variant":j,children:S})]}),E&&b.jsx(Fl,{...U("closeButton"),onClick:R,variant:"transparent",size:16,iconSize:16,"aria-label":N,unstyled:m})]})})});Ec.classes=n1;Ec.displayName="@mantine/core/Alert";var a1={root:"m_b6d8b162"};function UT(n){if(n==="start")return"start";if(n==="end"||n)return"end"}const VT={inherit:!1},kT=(n,{variant:o,lineClamp:l,gradient:i,size:s,color:c})=>({root:{"--text-fz":Yt(s),"--text-lh":vC(s),"--text-gradient":o==="gradient"?Md(i,n):void 0,"--text-line-clamp":typeof l=="number"?l.toString():void 0,"--text-color":c?en(c,n):void 0}}),Ie=Bt((n,o)=>{const l=le("Text",VT,n),{lineClamp:i,truncate:s,inline:c,inherit:f,gradient:m,span:p,__staticSelector:h,vars:v,className:y,style:S,classNames:x,styles:C,unstyled:E,variant:R,mod:N,size:j,...M}=l,z=_e({name:["Text",h],props:l,classes:a1,className:y,style:S,classNames:x,styles:C,unstyled:E,vars:v,varsResolver:kT});return b.jsx(fe,{...z("root",{focusable:!0}),ref:o,component:p?"span":"p",variant:R,mod:[{"data-truncate":UT(s),"data-line-clamp":typeof i=="number","data-inline":c,"data-inherit":f},N],size:j,...M})});Ie.classes=a1;Ie.displayName="@mantine/core/Text";const[YT,Wl]=Sa("AppShell was not found in tree");var lo={root:"m_89ab340",navbar:"m_45252eee",aside:"m_9cdde9a",header:"m_3b16f56b",main:"m_8983817",footer:"m_3840c879",section:"m_6dcfc7c7"};const qT={},Rm=ve((n,o)=>{const l=le("AppShellAside",qT,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,withBorder:h,zIndex:v,mod:y,...S}=l,x=Wl();return x.disabled?null:b.jsx(fe,{component:"aside",ref:o,mod:[{"with-border":h??x.withBorder},y],...x.getStyles("aside",{className:s,classNames:i,styles:f,style:c}),...S,__vars:{"--app-shell-aside-z-index":`calc(${v??x.zIndex} + 1)`}})});Rm.classes=lo;Rm.displayName="@mantine/core/AppShellAside";const GT={},_m=ve((n,o)=>{const l=le("AppShellFooter",GT,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,withBorder:h,zIndex:v,mod:y,...S}=l,x=Wl();return x.disabled?null:b.jsx(fe,{component:"footer",ref:o,mod:[{"with-border":h??x.withBorder},y],...x.getStyles("footer",{className:yt({[Ul.classNames.zeroRight]:x.offsetScrollbars},s),classNames:i,styles:f,style:c}),...S,__vars:{"--app-shell-footer-z-index":(v??x.zIndex)?.toString()}})});_m.classes=lo;_m.displayName="@mantine/core/AppShellFooter";const XT={},Nm=ve((n,o)=>{const l=le("AppShellHeader",XT,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,withBorder:h,zIndex:v,mod:y,...S}=l,x=Wl();return x.disabled?null:b.jsx(fe,{component:"header",ref:o,mod:[{"with-border":h??x.withBorder},y],...x.getStyles("header",{className:yt({[Ul.classNames.zeroRight]:x.offsetScrollbars},s),classNames:i,styles:f,style:c}),...S,__vars:{"--app-shell-header-z-index":(v??x.zIndex)?.toString()}})});Nm.classes=lo;Nm.displayName="@mantine/core/AppShellHeader";const PT={},Am=ve((n,o)=>{const l=le("AppShellMain",PT,n),{classNames:i,className:s,style:c,styles:f,vars:m,...p}=l,h=Wl();return b.jsx(fe,{component:"main",ref:o,...h.getStyles("main",{className:s,style:c,classNames:i,styles:f}),...p})});Am.classes=lo;Am.displayName="@mantine/core/AppShellMain";function pi(n){return typeof n=="object"?n.base:n}function hi(n){const o=typeof n=="object"&&n!==null&&typeof n.base<"u"&&Object.keys(n).length===1;return typeof n=="number"||typeof n=="string"||o}function vi(n){return!(typeof n!="object"||n===null||Object.keys(n).length===1&&"base"in n)}function QT({baseStyles:n,minMediaStyles:o,maxMediaStyles:l,aside:i,theme:s}){const c=i?.width,f="translateX(var(--app-shell-aside-width))",m="translateX(calc(var(--app-shell-aside-width) * -1))";if(i?.breakpoint&&!i?.collapsed?.mobile&&(l[i?.breakpoint]=l[i?.breakpoint]||{},l[i?.breakpoint]["--app-shell-aside-width"]="100%",l[i?.breakpoint]["--app-shell-aside-offset"]="0px"),hi(c)){const p=K(pi(c));n["--app-shell-aside-width"]=p,n["--app-shell-aside-offset"]=p}if(vi(c)&&(typeof c.base<"u"&&(n["--app-shell-aside-width"]=K(c.base),n["--app-shell-aside-offset"]=K(c.base)),jt(c).forEach(p=>{p!=="base"&&(o[p]=o[p]||{},o[p]["--app-shell-aside-width"]=K(c[p]),o[p]["--app-shell-aside-offset"]=K(c[p]))})),i?.collapsed?.desktop){const p=i.breakpoint;o[p]=o[p]||{},o[p]["--app-shell-aside-transform"]=f,o[p]["--app-shell-aside-transform-rtl"]=m,o[p]["--app-shell-aside-offset"]="0px !important"}if(i?.collapsed?.mobile){const p=Id(i.breakpoint,s.breakpoints)-.1;l[p]=l[p]||{},l[p]["--app-shell-aside-width"]="100%",l[p]["--app-shell-aside-offset"]="0px",l[p]["--app-shell-aside-transform"]=f,l[p]["--app-shell-aside-transform-rtl"]=m}}function ZT({baseStyles:n,minMediaStyles:o,footer:l}){const i=l?.height,s="translateY(var(--app-shell-footer-height))",c=l?.offset??!0;if(hi(i)){const f=K(pi(i));n["--app-shell-footer-height"]=f,c&&(n["--app-shell-footer-offset"]=f)}vi(i)&&(typeof i.base<"u"&&(n["--app-shell-footer-height"]=K(i.base),c&&(n["--app-shell-footer-offset"]=K(i.base))),jt(i).forEach(f=>{f!=="base"&&(o[f]=o[f]||{},o[f]["--app-shell-footer-height"]=K(i[f]),c&&(o[f]["--app-shell-footer-offset"]=K(i[f])))})),l?.collapsed&&(n["--app-shell-footer-transform"]=s,n["--app-shell-footer-offset"]="0px !important")}function KT({baseStyles:n,minMediaStyles:o,header:l}){const i=l?.height,s="translateY(calc(var(--app-shell-header-height) * -1))",c=l?.offset??!0;if(hi(i)){const f=K(pi(i));n["--app-shell-header-height"]=f,c&&(n["--app-shell-header-offset"]=f)}vi(i)&&(typeof i.base<"u"&&(n["--app-shell-header-height"]=K(i.base),c&&(n["--app-shell-header-offset"]=K(i.base))),jt(i).forEach(f=>{f!=="base"&&(o[f]=o[f]||{},o[f]["--app-shell-header-height"]=K(i[f]),c&&(o[f]["--app-shell-header-offset"]=K(i[f])))})),l?.collapsed&&(n["--app-shell-header-transform"]=s,n["--app-shell-header-offset"]="0px !important")}function IT({baseStyles:n,minMediaStyles:o,maxMediaStyles:l,navbar:i,theme:s}){const c=i?.width,f="translateX(calc(var(--app-shell-navbar-width) * -1))",m="translateX(var(--app-shell-navbar-width))";if(i?.breakpoint&&!i?.collapsed?.mobile&&(l[i?.breakpoint]=l[i?.breakpoint]||{},l[i?.breakpoint]["--app-shell-navbar-width"]="100%",l[i?.breakpoint]["--app-shell-navbar-offset"]="0px"),hi(c)){const p=K(pi(c));n["--app-shell-navbar-width"]=p,n["--app-shell-navbar-offset"]=p}if(vi(c)&&(typeof c.base<"u"&&(n["--app-shell-navbar-width"]=K(c.base),n["--app-shell-navbar-offset"]=K(c.base)),jt(c).forEach(p=>{p!=="base"&&(o[p]=o[p]||{},o[p]["--app-shell-navbar-width"]=K(c[p]),o[p]["--app-shell-navbar-offset"]=K(c[p]))})),i?.collapsed?.desktop){const p=i.breakpoint;o[p]=o[p]||{},o[p]["--app-shell-navbar-transform"]=f,o[p]["--app-shell-navbar-transform-rtl"]=m,o[p]["--app-shell-navbar-offset"]="0px !important"}if(i?.collapsed?.mobile){const p=Id(i.breakpoint,s.breakpoints)-.1;l[p]=l[p]||{},l[p]["--app-shell-navbar-width"]="100%",l[p]["--app-shell-navbar-offset"]="0px",l[p]["--app-shell-navbar-transform"]=f,l[p]["--app-shell-navbar-transform-rtl"]=m}}function wd(n){return Number(n)===0?"0px":ql(n)}function JT({padding:n,baseStyles:o,minMediaStyles:l}){hi(n)&&(o["--app-shell-padding"]=wd(pi(n))),vi(n)&&(n.base&&(o["--app-shell-padding"]=wd(n.base)),jt(n).forEach(i=>{i!=="base"&&(l[i]=l[i]||{},l[i]["--app-shell-padding"]=wd(n[i]))}))}function FT({navbar:n,header:o,footer:l,aside:i,padding:s,theme:c}){const f={},m={},p={};IT({baseStyles:p,minMediaStyles:f,maxMediaStyles:m,navbar:n,theme:c}),QT({baseStyles:p,minMediaStyles:f,maxMediaStyles:m,aside:i,theme:c}),KT({baseStyles:p,minMediaStyles:f,header:o}),ZT({baseStyles:p,minMediaStyles:f,footer:l}),JT({baseStyles:p,minMediaStyles:f,padding:s});const h=Cy(jt(f),c.breakpoints).map(S=>({query:`(min-width: ${Ks(S.px)})`,styles:f[S.value]})),v=Cy(jt(m),c.breakpoints).map(S=>({query:`(max-width: ${Ks(S.px)})`,styles:m[S.value]})),y=[...h,...v];return{baseStyles:p,media:y}}function WT({navbar:n,header:o,aside:l,footer:i,padding:s}){const c=nn(),f=xa(),{media:m,baseStyles:p}=FT({navbar:n,header:o,footer:i,aside:l,padding:s,theme:c});return b.jsx(Q0,{media:m,styles:p,selector:f.cssVariablesSelector})}const eR={},Mm=ve((n,o)=>{const l=le("AppShellNavbar",eR,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,withBorder:h,zIndex:v,mod:y,...S}=l,x=Wl();return x.disabled?null:b.jsx(fe,{component:"nav",ref:o,mod:[{"with-border":h??x.withBorder},y],...x.getStyles("navbar",{className:s,classNames:i,styles:f,style:c}),...S,__vars:{"--app-shell-navbar-z-index":`calc(${v??x.zIndex} + 1)`}})});Mm.classes=lo;Mm.displayName="@mantine/core/AppShellNavbar";const tR={},Om=Bt((n,o)=>{const l=le("AppShellSection",tR,n),{classNames:i,className:s,style:c,styles:f,vars:m,grow:p,mod:h,...v}=l,y=Wl();return b.jsx(fe,{ref:o,mod:[{grow:p},h],...y.getStyles("section",{className:s,style:c,classNames:i,styles:f}),...v})});Om.classes=lo;Om.displayName="@mantine/core/AppShellSection";function nR({transitionDuration:n,disabled:o}){const[l,i]=w.useState(!0),s=w.useRef(-1),c=w.useRef(-1);return H0("resize",()=>{i(!0),clearTimeout(s.current),s.current=window.setTimeout(()=>w.startTransition(()=>{i(!1)}),200)}),Gl(()=>{i(!0),clearTimeout(c.current),c.current=window.setTimeout(()=>w.startTransition(()=>{i(!1)}),n||0)},[o,n]),l}const aR={withBorder:!0,padding:0,transitionDuration:200,transitionTimingFunction:"ease",zIndex:$n("app")},oR=(n,{transitionDuration:o,transitionTimingFunction:l})=>({root:{"--app-shell-transition-duration":`${o}ms`,"--app-shell-transition-timing-function":l}}),Bn=ve((n,o)=>{const l=le("AppShell",aR,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,navbar:h,withBorder:v,padding:y,transitionDuration:S,transitionTimingFunction:x,header:C,zIndex:E,layout:R,disabled:N,aside:j,footer:M,offsetScrollbars:z=R!=="alt",mod:U,...O}=l,H=_e({name:"AppShell",classes:lo,props:l,className:s,style:c,classNames:i,styles:f,unstyled:m,vars:p,varsResolver:oR}),k=nR({disabled:N,transitionDuration:S});return b.jsxs(YT,{value:{getStyles:H,withBorder:v,zIndex:E,disabled:N,offsetScrollbars:z},children:[b.jsx(WT,{navbar:h,header:C,aside:j,footer:M,padding:y}),b.jsx(fe,{ref:o,...H("root"),mod:[{resizing:k,layout:R,disabled:N},U],...O})]})});Bn.classes=lo;Bn.displayName="@mantine/core/AppShell";Bn.Navbar=Mm;Bn.Header=Nm;Bn.Main=Am;Bn.Aside=Rm;Bn.Footer=_m;Bn.Section=Om;function o1(n){return typeof n=="string"?{value:n,label:n}:"value"in n&&!("label"in n)?{value:n.value,label:n.value,disabled:n.disabled}:typeof n=="number"?{value:n.toString(),label:n.toString()}:"group"in n?{group:n.group,items:n.items.map(o=>o1(o))}:n}function lR(n){return n?n.map(o=>o1(o)):[]}function l1(n){return n.reduce((o,l)=>"group"in l?{...o,...l1(l.items)}:(o[l.value]=l,o),{})}var tn={dropdown:"m_88b62a41",search:"m_985517d8",options:"m_b2821a6e",option:"m_92253aa5",empty:"m_2530cd1d",header:"m_858f94bd",footer:"m_82b967cb",group:"m_254f3e4f",groupLabel:"m_2bb2e9e5",chevron:"m_2943220b",optionsDropdownOption:"m_390b5f4",optionsDropdownCheckIcon:"m_8ee53fc2"};const rR={error:null},iR=(n,{size:o,color:l})=>({chevron:{"--combobox-chevron-size":Ye(o,"combobox-chevron-size"),"--combobox-chevron-color":l?en(l,n):void 0}}),Dm=ve((n,o)=>{const l=le("ComboboxChevron",rR,n),{size:i,error:s,style:c,className:f,classNames:m,styles:p,unstyled:h,vars:v,mod:y,...S}=l,x=_e({name:"ComboboxChevron",classes:tn,props:l,style:c,className:f,classNames:m,styles:p,unstyled:h,vars:v,varsResolver:iR,rootSelector:"chevron"});return b.jsx(fe,{component:"svg",...S,...x("chevron"),size:i,viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg",mod:["combobox-chevron",{error:s},y],ref:o,children:b.jsx("path",{d:"M4.93179 5.43179C4.75605 5.60753 4.75605 5.89245 4.93179 6.06819C5.10753 6.24392 5.39245 6.24392 5.56819 6.06819L7.49999 4.13638L9.43179 6.06819C9.60753 6.24392 9.89245 6.24392 10.0682 6.06819C10.2439 5.89245 10.2439 5.60753 10.0682 5.43179L7.81819 3.18179C7.73379 3.0974 7.61933 3.04999 7.49999 3.04999C7.38064 3.04999 7.26618 3.0974 7.18179 3.18179L4.93179 5.43179ZM10.0682 9.56819C10.2439 9.39245 10.2439 9.10753 10.0682 8.93179C9.89245 8.75606 9.60753 8.75606 9.43179 8.93179L7.49999 10.8636L5.56819 8.93179C5.39245 8.75606 5.10753 8.75606 4.93179 8.93179C4.75605 9.10753 4.75605 9.39245 4.93179 9.56819L7.18179 11.8182C7.35753 11.9939 7.64245 11.9939 7.81819 11.8182L10.0682 9.56819Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"})})});Dm.classes=tn;Dm.displayName="@mantine/core/ComboboxChevron";const[sR,Rn]=Sa("Combobox component was not found in tree"),r1=w.forwardRef(({size:n,onMouseDown:o,onClick:l,onClear:i,...s},c)=>b.jsx(bt.ClearButton,{ref:c,tabIndex:-1,"aria-hidden":!0,...s,onMouseDown:f=>{f.preventDefault(),o?.(f)},onClick:f=>{i(),l?.(f)}}));r1.displayName="@mantine/core/ComboboxClearButton";const cR={},zm=ve((n,o)=>{const{classNames:l,styles:i,className:s,style:c,hidden:f,...m}=le("ComboboxDropdown",cR,n),p=Rn();return b.jsx(an.Dropdown,{...m,ref:o,role:"presentation","data-hidden":f||void 0,...p.getStyles("dropdown",{className:s,style:c,classNames:l,styles:i})})});zm.classes=tn;zm.displayName="@mantine/core/ComboboxDropdown";const uR={refProp:"ref"},i1=ve((n,o)=>{const{children:l,refProp:i}=le("ComboboxDropdownTarget",uR,n);if(Rn(),!ba(l))throw new Error("Combobox.DropdownTarget component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported");return b.jsx(an.Target,{ref:o,refProp:i,children:l})});i1.displayName="@mantine/core/ComboboxDropdownTarget";const fR={},jm=ve((n,o)=>{const{classNames:l,className:i,style:s,styles:c,vars:f,...m}=le("ComboboxEmpty",fR,n),p=Rn();return b.jsx(fe,{ref:o,...p.getStyles("empty",{className:i,classNames:l,styles:c,style:s}),...m})});jm.classes=tn;jm.displayName="@mantine/core/ComboboxEmpty";function Bm({onKeyDown:n,withKeyboardNavigation:o,withAriaAttributes:l,withExpandedAttribute:i,targetType:s,autoComplete:c}){const f=Rn(),[m,p]=w.useState(null),h=y=>{if(n?.(y),!f.readOnly&&o){if(y.nativeEvent.isComposing)return;if(y.nativeEvent.code==="ArrowDown"&&(y.preventDefault(),f.store.dropdownOpened?p(f.store.selectNextOption()):(f.store.openDropdown("keyboard"),p(f.store.selectActiveOption()),f.store.updateSelectedOptionIndex("selected",{scrollIntoView:!0}))),y.nativeEvent.code==="ArrowUp"&&(y.preventDefault(),f.store.dropdownOpened?p(f.store.selectPreviousOption()):(f.store.openDropdown("keyboard"),p(f.store.selectActiveOption()),f.store.updateSelectedOptionIndex("selected",{scrollIntoView:!0}))),y.nativeEvent.code==="Enter"||y.nativeEvent.code==="NumpadEnter"){if(y.nativeEvent.keyCode===229)return;const S=f.store.getSelectedOptionIndex();f.store.dropdownOpened&&S!==-1?(y.preventDefault(),f.store.clickSelectedOption()):s==="button"&&(y.preventDefault(),f.store.openDropdown("keyboard"))}y.key==="Escape"&&f.store.closeDropdown("keyboard"),y.nativeEvent.code==="Space"&&s==="button"&&(y.preventDefault(),f.store.toggleDropdown("keyboard"))}};return{...l?{"aria-haspopup":"listbox","aria-expanded":i&&!!(f.store.listId&&f.store.dropdownOpened)||void 0,"aria-controls":f.store.dropdownOpened?f.store.listId:void 0,"aria-activedescendant":f.store.dropdownOpened&&m||void 0,autoComplete:c,"data-expanded":f.store.dropdownOpened||void 0,"data-mantine-stop-propagation":f.store.dropdownOpened||void 0}:{},onKeyDown:h}}const dR={refProp:"ref",targetType:"input",withKeyboardNavigation:!0,withAriaAttributes:!0,withExpandedAttribute:!1,autoComplete:"off"},s1=ve((n,o)=>{const{children:l,refProp:i,withKeyboardNavigation:s,withAriaAttributes:c,withExpandedAttribute:f,targetType:m,autoComplete:p,...h}=le("ComboboxEventsTarget",dR,n);if(!ba(l))throw new Error("Combobox.EventsTarget component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported");const v=Rn(),y=Bm({targetType:m,withAriaAttributes:c,withKeyboardNavigation:s,withExpandedAttribute:f,onKeyDown:l.props.onKeyDown,autoComplete:p});return w.cloneElement(l,{...y,...h,[i]:Ct(o,v.store.targetRef,sc(l))})});s1.displayName="@mantine/core/ComboboxEventsTarget";const mR={},$m=ve((n,o)=>{const{classNames:l,className:i,style:s,styles:c,vars:f,...m}=le("ComboboxFooter",mR,n),p=Rn();return b.jsx(fe,{ref:o,...p.getStyles("footer",{className:i,classNames:l,style:s,styles:c}),...m,onMouseDown:h=>{h.preventDefault()}})});$m.classes=tn;$m.displayName="@mantine/core/ComboboxFooter";const pR={},Lm=ve((n,o)=>{const{classNames:l,className:i,style:s,styles:c,vars:f,children:m,label:p,...h}=le("ComboboxGroup",pR,n),v=Rn();return b.jsxs(fe,{ref:o,...v.getStyles("group",{className:i,classNames:l,style:s,styles:c}),...h,children:[p&&b.jsx("div",{...v.getStyles("groupLabel",{classNames:l,styles:c}),children:p}),m]})});Lm.classes=tn;Lm.displayName="@mantine/core/ComboboxGroup";const hR={},Hm=ve((n,o)=>{const{classNames:l,className:i,style:s,styles:c,vars:f,...m}=le("ComboboxHeader",hR,n),p=Rn();return b.jsx(fe,{ref:o,...p.getStyles("header",{className:i,classNames:l,style:s,styles:c}),...m,onMouseDown:h=>{h.preventDefault()}})});Hm.classes=tn;Hm.displayName="@mantine/core/ComboboxHeader";function c1({value:n,valuesDivider:o=",",...l}){return b.jsx("input",{type:"hidden",value:Array.isArray(n)?n.join(o):n||"",...l})}c1.displayName="@mantine/core/ComboboxHiddenInput";const vR={},Um=ve((n,o)=>{const l=le("ComboboxOption",vR,n),{classNames:i,className:s,style:c,styles:f,vars:m,onClick:p,id:h,active:v,onMouseDown:y,onMouseOver:S,disabled:x,selected:C,mod:E,...R}=l,N=Rn(),j=w.useId(),M=h||j;return b.jsx(fe,{...N.getStyles("option",{className:s,classNames:i,styles:f,style:c}),...R,ref:o,id:M,mod:["combobox-option",{"combobox-active":v,"combobox-disabled":x,"combobox-selected":C},E],role:"option",onClick:z=>{x?z.preventDefault():(N.onOptionSubmit?.(l.value,l),p?.(z))},onMouseDown:z=>{z.preventDefault(),y?.(z)},onMouseOver:z=>{N.resetSelectionOnOptionHover&&N.store.resetSelectedOption(),S?.(z)}})});Um.classes=tn;Um.displayName="@mantine/core/ComboboxOption";const gR={},Vm=ve((n,o)=>{const l=le("ComboboxOptions",gR,n),{classNames:i,className:s,style:c,styles:f,id:m,onMouseDown:p,labelledBy:h,...v}=l,y=Rn(),S=Kn(m);return w.useEffect(()=>{y.store.setListId(S)},[S]),b.jsx(fe,{ref:o,...y.getStyles("options",{className:s,style:c,classNames:i,styles:f}),...v,id:S,role:"listbox","aria-labelledby":h,onMouseDown:x=>{x.preventDefault(),p?.(x)}})});Vm.classes=tn;Vm.displayName="@mantine/core/ComboboxOptions";const yR={withAriaAttributes:!0,withKeyboardNavigation:!0},km=ve((n,o)=>{const l=le("ComboboxSearch",yR,n),{classNames:i,styles:s,unstyled:c,vars:f,withAriaAttributes:m,onKeyDown:p,withKeyboardNavigation:h,size:v,...y}=l,S=Rn(),x=S.getStyles("search"),C=Bm({targetType:"input",withAriaAttributes:m,withKeyboardNavigation:h,withExpandedAttribute:!1,onKeyDown:p,autoComplete:"off"});return b.jsx(bt,{ref:Ct(o,S.store.searchRef),classNames:[{input:x.className},i],styles:[{input:x.style},s],size:v||S.size,...C,...y,__staticSelector:"Combobox"})});km.classes=tn;km.displayName="@mantine/core/ComboboxSearch";const bR={refProp:"ref",targetType:"input",withKeyboardNavigation:!0,withAriaAttributes:!0,withExpandedAttribute:!1,autoComplete:"off"},u1=ve((n,o)=>{const{children:l,refProp:i,withKeyboardNavigation:s,withAriaAttributes:c,withExpandedAttribute:f,targetType:m,autoComplete:p,...h}=le("ComboboxTarget",bR,n);if(!ba(l))throw new Error("Combobox.Target component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported");const v=Rn(),y=Bm({targetType:m,withAriaAttributes:c,withKeyboardNavigation:s,withExpandedAttribute:f,onKeyDown:l.props.onKeyDown,autoComplete:p}),S=w.cloneElement(l,{...y,...h});return b.jsx(an.Target,{ref:Ct(o,v.store.targetRef),children:S})});u1.displayName="@mantine/core/ComboboxTarget";function SR(n,o,l){for(let i=n-1;i>=0;i-=1)if(!o[i].hasAttribute("data-combobox-disabled"))return i;if(l){for(let i=o.length-1;i>-1;i-=1)if(!o[i].hasAttribute("data-combobox-disabled"))return i}return n}function xR(n,o,l){for(let i=n+1;i{m||(p(!0),s?.(A))},[p,s,m]),N=w.useCallback((A="unknown")=>{m&&(p(!1),i?.(A))},[p,i,m]),j=w.useCallback((A="unknown")=>{m?N(A):R(A)},[N,R,m]),M=w.useCallback(()=>{const A=document.querySelector(`#${h.current} [data-combobox-selected]`);A?.removeAttribute("data-combobox-selected"),A?.removeAttribute("aria-selected")},[]),z=w.useCallback(A=>{const L=document.getElementById(h.current)?.querySelectorAll("[data-combobox-option]");if(!L)return null;const X=A>=L.length?0:A<0?L.length-1:A;return v.current=X,L?.[X]&&!L[X].hasAttribute("data-combobox-disabled")?(M(),L[X].setAttribute("data-combobox-selected","true"),L[X].setAttribute("aria-selected","true"),L[X].scrollIntoView({block:"nearest",behavior:f}),L[X].id):null},[f,M]),U=w.useCallback(()=>{const A=document.querySelector(`#${h.current} [data-combobox-active]`);if(A){const B=document.querySelectorAll(`#${h.current} [data-combobox-option]`),L=Array.from(B).findIndex(X=>X===A);return z(L)}return z(0)},[z]),O=w.useCallback(()=>z(xR(v.current,document.querySelectorAll(`#${h.current} [data-combobox-option]`),c)),[z,c]),H=w.useCallback(()=>z(SR(v.current,document.querySelectorAll(`#${h.current} [data-combobox-option]`),c)),[z,c]),k=w.useCallback(()=>z(wR(document.querySelectorAll(`#${h.current} [data-combobox-option]`))),[z]),Z=w.useCallback((A="selected",B)=>{E.current=window.setTimeout(()=>{const L=document.querySelectorAll(`#${h.current} [data-combobox-option]`),X=Array.from(L).findIndex(F=>F.hasAttribute(`data-combobox-${A}`));v.current=X,B?.scrollIntoView&&L[X]?.scrollIntoView({block:"nearest",behavior:f})},0)},[]),ne=w.useCallback(()=>{v.current=-1,M()},[M]),ae=w.useCallback(()=>{document.querySelectorAll(`#${h.current} [data-combobox-option]`)?.[v.current]?.click()},[]),te=w.useCallback(A=>{h.current=A},[]),ie=w.useCallback(()=>{x.current=window.setTimeout(()=>y.current.focus(),0)},[]),ce=w.useCallback(()=>{C.current=window.setTimeout(()=>S.current.focus(),0)},[]),oe=w.useCallback(()=>v.current,[]);return w.useEffect(()=>()=>{window.clearTimeout(x.current),window.clearTimeout(C.current),window.clearTimeout(E.current)},[]),{dropdownOpened:m,openDropdown:R,closeDropdown:N,toggleDropdown:j,selectedOptionIndex:v.current,getSelectedOptionIndex:oe,selectOption:z,selectFirstOption:k,selectActiveOption:U,selectNextOption:O,selectPreviousOption:H,resetSelectedOption:ne,updateSelectedOptionIndex:Z,listId:h.current,setListId:te,clickSelectedOption:ae,searchRef:y,focusSearchInput:ie,targetRef:S,focusTarget:ce}}const CR={keepMounted:!0,withinPortal:!0,resetSelectionOnOptionHover:!1,width:"target",transitionProps:{transition:"fade",duration:0}},ER=(n,{size:o,dropdownPadding:l})=>({options:{"--combobox-option-fz":Yt(o),"--combobox-option-padding":Ye(o,"combobox-option-padding")},dropdown:{"--combobox-padding":l===void 0?void 0:K(l),"--combobox-option-fz":Yt(o),"--combobox-option-padding":Ye(o,"combobox-option-padding")}});function Ze(n){const o=le("Combobox",CR,n),{classNames:l,styles:i,unstyled:s,children:c,store:f,vars:m,onOptionSubmit:p,onClose:h,size:v,dropdownPadding:y,resetSelectionOnOptionHover:S,__staticSelector:x,readOnly:C,...E}=o,R=f1(),N=f||R,j=_e({name:x||"Combobox",classes:tn,props:o,classNames:l,styles:i,unstyled:s,vars:m,varsResolver:ER}),M=()=>{h?.(),N.closeDropdown()};return b.jsx(sR,{value:{getStyles:j,store:N,onOptionSubmit:p,size:v,resetSelectionOnOptionHover:S,readOnly:C},children:b.jsx(an,{opened:N.dropdownOpened,...E,onChange:z=>!z&&M(),withRoles:!1,unstyled:s,children:c})})}const TR=n=>n;Ze.extend=TR;Ze.classes=tn;Ze.displayName="@mantine/core/Combobox";Ze.Target=u1;Ze.Dropdown=zm;Ze.Options=Vm;Ze.Option=Um;Ze.Search=km;Ze.Empty=jm;Ze.Chevron=Dm;Ze.Footer=$m;Ze.Header=Hm;Ze.EventsTarget=s1;Ze.DropdownTarget=i1;Ze.Group=Lm;Ze.ClearButton=r1;Ze.HiddenInput=c1;var d1={root:"m_5f75b09e",body:"m_5f6e695e",labelWrapper:"m_d3ea56bb",label:"m_8ee546b8",description:"m_328f68c0",error:"m_8e8a99cc"};const RR=d1,m1=w.forwardRef(({__staticSelector:n,__stylesApiProps:o,className:l,classNames:i,styles:s,unstyled:c,children:f,label:m,description:p,id:h,disabled:v,error:y,size:S,labelPosition:x="left",bodyElement:C="div",labelElement:E="label",variant:R,style:N,vars:j,mod:M,...z},U)=>{const O=_e({name:n,props:o,className:l,style:N,classes:d1,classNames:i,styles:s,unstyled:c});return b.jsx(fe,{...O("root"),ref:U,__vars:{"--label-fz":Yt(S),"--label-lh":Ye(S,"label-lh")},mod:[{"label-position":x},M],variant:R,size:S,...z,children:b.jsxs(fe,{component:C,htmlFor:C==="label"?h:void 0,...O("body"),children:[f,b.jsxs("div",{...O("labelWrapper"),"data-disabled":v||void 0,children:[m&&b.jsx(fe,{component:E,htmlFor:E==="label"?h:void 0,...O("label"),"data-disabled":v||void 0,children:m}),p&&b.jsx(bt.Description,{size:S,__inheritStyles:!1,...O("description"),children:p}),y&&typeof y!="boolean"&&b.jsx(bt.Error,{size:S,__inheritStyles:!1,...O("error"),children:y})]})]})})});m1.displayName="@mantine/core/InlineInput";const p1=w.createContext(null),_R=p1.Provider,h1=()=>w.useContext(p1),[NR,AR]=fi();var v1={card:"m_26775b0a"};const MR={withBorder:!0},OR=(n,{radius:o})=>({card:{"--card-radius":wt(o)}}),Ym=ve((n,o)=>{const l=le("CheckboxCard",MR,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,checked:h,mod:v,withBorder:y,value:S,onClick:x,defaultChecked:C,onChange:E,...R}=l,N=_e({name:"CheckboxCard",classes:v1,props:l,className:s,style:c,classNames:i,styles:f,unstyled:m,vars:p,varsResolver:OR,rootSelector:"card"}),j=h1(),M=typeof h=="boolean"?h:j?j.value.includes(S||""):void 0,[z,U]=ya({value:M,defaultValue:C,finalValue:!1,onChange:E});return b.jsx(NR,{value:{checked:z},children:b.jsx(dn,{ref:o,mod:[{"with-border":y,checked:z},v],...N("card"),...R,role:"checkbox","aria-checked":z,onClick:O=>{x?.(O),j?.onChange(S||""),U(!z)}})})});Ym.displayName="@mantine/core/CheckboxCard";Ym.classes=v1;function DR({children:n,role:o}){const l=mi();return l?b.jsx("div",{role:o,"aria-labelledby":l.labelId,"aria-describedby":l.describedBy,children:n}):b.jsx(b.Fragment,{children:n})}const zR={},qm=ve((n,o)=>{const{value:l,defaultValue:i,onChange:s,size:c,wrapperProps:f,children:m,readOnly:p,...h}=le("CheckboxGroup",zR,n),[v,y]=ya({value:l,defaultValue:i,finalValue:[],onChange:s}),S=x=>{const C=typeof x=="string"?x:x.currentTarget.value;!p&&y(v.includes(C)?v.filter(E=>E!==C):[...v,C])};return b.jsx(_R,{value:{value:v,onChange:S,size:c},children:b.jsx(bt.Wrapper,{size:c,ref:o,...f,...h,labelElement:"div",__staticSelector:"CheckboxGroup",children:b.jsx(DR,{role:"group",children:m})})})});qm.classes=bt.Wrapper.classes;qm.displayName="@mantine/core/CheckboxGroup";function g1({size:n,style:o,...l}){const i=n!==void 0?{width:K(n),height:K(n),...o}:o;return b.jsx("svg",{viewBox:"0 0 10 7",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:i,"aria-hidden":!0,...l,children:b.jsx("path",{d:"M4 4.586L1.707 2.293A1 1 0 1 0 .293 3.707l3 3a.997.997 0 0 0 1.414 0l5-5A1 1 0 1 0 8.293.293L4 4.586z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"})})}function y1({indeterminate:n,...o}){return n?b.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 32 6","aria-hidden":!0,...o,children:b.jsx("rect",{width:"32",height:"6",fill:"currentColor",rx:"3"})}):b.jsx(g1,{...o})}var b1={indicator:"m_5e5256ee",icon:"m_1b1c543a","indicator--outline":"m_76e20374"};const jR={icon:y1},BR=(n,{radius:o,color:l,size:i,iconColor:s,variant:c,autoContrast:f})=>{const m=wa({color:l||n.primaryColor,theme:n}),p=m.isThemeColor&&m.shade===void 0?`var(--mantine-color-${m.color}-outline)`:m.color;return{indicator:{"--checkbox-size":Ye(i,"checkbox-size"),"--checkbox-radius":o===void 0?void 0:wt(o),"--checkbox-color":c==="outline"?p:en(l,n),"--checkbox-icon-color":s?en(s,n):P0(f,n)?nm({color:l,theme:n,autoContrast:f}):void 0}}},Gm=ve((n,o)=>{const l=le("CheckboxIndicator",jR,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,icon:h,indeterminate:v,radius:y,color:S,iconColor:x,autoContrast:C,checked:E,mod:R,variant:N,disabled:j,...M}=l,z=h,U=_e({name:"CheckboxIndicator",classes:b1,props:l,className:s,style:c,classNames:i,styles:f,unstyled:m,vars:p,varsResolver:BR,rootSelector:"indicator"}),O=AR(),H=typeof E=="boolean"||typeof v=="boolean"?E||v:O?.checked||!1;return b.jsx(fe,{ref:o,...U("indicator",{variant:N}),variant:N,mod:[{checked:H,disabled:j},R],...M,children:b.jsx(z,{indeterminate:v,...U("icon")})})});Gm.displayName="@mantine/core/CheckboxIndicator";Gm.classes=b1;var S1={root:"m_bf2d988c",inner:"m_26062bec",input:"m_26063560",icon:"m_bf295423","input--outline":"m_215c4542"};const $R={labelPosition:"right",icon:y1},LR=(n,{radius:o,color:l,size:i,iconColor:s,variant:c,autoContrast:f})=>{const m=wa({color:l||n.primaryColor,theme:n}),p=m.isThemeColor&&m.shade===void 0?`var(--mantine-color-${m.color}-outline)`:m.color;return{root:{"--checkbox-size":Ye(i,"checkbox-size"),"--checkbox-radius":o===void 0?void 0:wt(o),"--checkbox-color":c==="outline"?p:en(l,n),"--checkbox-icon-color":s?en(s,n):P0(f,n)?nm({color:l,theme:n,autoContrast:f}):void 0}}},er=ve((n,o)=>{const l=le("Checkbox",$R,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,color:h,label:v,id:y,size:S,radius:x,wrapperProps:C,checked:E,labelPosition:R,description:N,error:j,disabled:M,variant:z,indeterminate:U,icon:O,rootRef:H,iconColor:k,onChange:Z,autoContrast:ne,mod:ae,...te}=l,ie=h1(),ce=S||ie?.size,oe=O,A=_e({name:"Checkbox",props:l,classes:S1,className:s,style:c,classNames:i,styles:f,unstyled:m,vars:p,varsResolver:LR}),{styleProps:B,rest:L}=di(te),X=Kn(y),F=ie?{checked:ie.value.includes(L.value),onChange:ee=>{ie.onChange(ee),Z?.(ee)}}:{},_=w.useRef(null),Y=o||_;return w.useEffect(()=>{Y&&"current"in Y&&Y.current&&(Y.current.indeterminate=U||!1)},[U,Y]),b.jsx(m1,{...A("root"),__staticSelector:"Checkbox",__stylesApiProps:l,id:X,size:ce,labelPosition:R,label:v,description:N,error:j,disabled:M,classNames:i,styles:f,unstyled:m,"data-checked":F.checked||E||void 0,variant:z,ref:H,mod:ae,...B,...C,children:b.jsxs(fe,{...A("inner"),mod:{"data-label-position":R},children:[b.jsx(fe,{component:"input",id:X,ref:Y,checked:E,disabled:M,mod:{error:!!j,indeterminate:U},...A("input",{focusable:!0,variant:z}),onChange:Z,...L,...F,type:"checkbox"}),b.jsx(oe,{indeterminate:U,...A("icon")})]})})});er.classes={...S1,...RR};er.displayName="@mantine/core/Checkbox";er.Group=qm;er.Indicator=Gm;er.Card=Ym;function si(n){return"group"in n}function x1({options:n,search:o,limit:l}){const i=o.trim().toLowerCase(),s=[];for(let c=0;c0)return!1;return!0}function w1(n,o=new Set){if(Array.isArray(n))for(const l of n)if(si(l))w1(l.items,o);else{if(typeof l.value>"u")throw new Error("[@mantine/core] Each option must have value property");if(typeof l.value!="string")throw new Error(`[@mantine/core] Option value must be a string, other data formats are not supported, got ${typeof l.value}`);if(o.has(l.value))throw new Error(`[@mantine/core] Duplicate options are not supported. Option with value "${l.value}" was provided more than once`);o.add(l.value)}}function UR(n,o){return Array.isArray(n)?n.includes(o):n===o}function C1({data:n,withCheckIcon:o,value:l,checkIconPosition:i,unstyled:s,renderOption:c}){if(!si(n)){const m=UR(l,n.value),p=o&&m&&b.jsx(g1,{className:tn.optionsDropdownCheckIcon}),h=b.jsxs(b.Fragment,{children:[i==="left"&&p,b.jsx("span",{children:n.label}),i==="right"&&p]});return b.jsx(Ze.Option,{value:n.value,disabled:n.disabled,className:yt({[tn.optionsDropdownOption]:!s}),"data-reverse":i==="right"||void 0,"data-checked":m||void 0,"aria-selected":m,active:m,children:typeof c=="function"?c({option:n,checked:m}):h})}const f=n.items.map(m=>b.jsx(C1,{data:m,value:l,unstyled:s,withCheckIcon:o,checkIconPosition:i,renderOption:c},m.value));return b.jsx(Ze.Group,{label:n.group,children:f})}function VR({data:n,hidden:o,hiddenWhenEmpty:l,filter:i,search:s,limit:c,maxDropdownHeight:f,withScrollArea:m=!0,filterOptions:p=!0,withCheckIcon:h=!1,value:v,checkIconPosition:y,nothingFoundMessage:S,unstyled:x,labelId:C,renderOption:E,scrollAreaProps:R,"aria-label":N}){w1(n);const M=typeof s=="string"?(i||x1)({options:n,search:p?s:"",limit:c??1/0}):n,z=HR(M),U=M.map(O=>b.jsx(C1,{data:O,withCheckIcon:h,value:v,checkIconPosition:y,unstyled:x,renderOption:E},si(O)?O.group:O.value));return b.jsx(Ze.Dropdown,{hidden:o||l&&z,"data-composed":!0,children:b.jsxs(Ze.Options,{labelledBy:C,"aria-label":N,children:[m?b.jsx(Kl.Autosize,{mah:f??220,type:"scroll",scrollbarSize:"var(--combobox-padding)",offsetScrollbars:"y",...R,children:U}):U,z&&S&&b.jsx(Ze.Empty,{children:S})]})})}var E1={root:"m_347db0ec","root--dot":"m_fbd81e3d",label:"m_5add502a",section:"m_91fdda9b"};const kR={},YR=(n,{radius:o,color:l,gradient:i,variant:s,size:c,autoContrast:f})=>{const m=n.variantColorResolver({color:l||n.primaryColor,theme:n,gradient:i,variant:s||"filled",autoContrast:f});return{root:{"--badge-height":Ye(c,"badge-height"),"--badge-padding-x":Ye(c,"badge-padding-x"),"--badge-fz":Ye(c,"badge-fz"),"--badge-radius":o===void 0?void 0:wt(o),"--badge-bg":l||s?m.background:void 0,"--badge-color":l||s?m.color:void 0,"--badge-bd":l||s?m.border:void 0,"--badge-dot-color":s==="dot"?en(l,n):void 0}}},Uo=Bt((n,o)=>{const l=le("Badge",kR,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,radius:h,color:v,gradient:y,leftSection:S,rightSection:x,children:C,variant:E,fullWidth:R,autoContrast:N,circle:j,mod:M,...z}=l,U=_e({name:"Badge",props:l,classes:E1,className:s,style:c,classNames:i,styles:f,unstyled:m,vars:p,varsResolver:YR});return b.jsxs(fe,{variant:E,mod:[{block:R,circle:j,"with-right-section":!!x,"with-left-section":!!S},M],...U("root",{variant:E}),ref:o,...z,children:[S&&b.jsx("span",{...U("section"),"data-position":"left",children:S}),b.jsx("span",{...U("label"),children:C}),x&&b.jsx("span",{...U("section"),"data-position":"right",children:x})]})});Uo.classes=E1;Uo.displayName="@mantine/core/Badge";var tr={root:"m_77c9d27d",inner:"m_80f1301b",label:"m_811560b9",section:"m_a74036a",loader:"m_a25b86ee",group:"m_80d6d844",groupSection:"m_70be2a01"};const r0={orientation:"horizontal"},qR=(n,{borderWidth:o})=>({group:{"--button-border-width":K(o)}}),Xm=ve((n,o)=>{const l=le("ButtonGroup",r0,n),{className:i,style:s,classNames:c,styles:f,unstyled:m,orientation:p,vars:h,borderWidth:v,variant:y,mod:S,...x}=le("ButtonGroup",r0,n),C=_e({name:"ButtonGroup",props:l,classes:tr,className:i,style:s,classNames:c,styles:f,unstyled:m,vars:h,varsResolver:qR,rootSelector:"group"});return b.jsx(fe,{...C("group"),ref:o,variant:y,mod:[{"data-orientation":p},S],role:"group",...x})});Xm.classes=tr;Xm.displayName="@mantine/core/ButtonGroup";const i0={},GR=(n,{radius:o,color:l,gradient:i,variant:s,autoContrast:c,size:f})=>{const m=n.variantColorResolver({color:l||n.primaryColor,theme:n,gradient:i,variant:s||"filled",autoContrast:c});return{groupSection:{"--section-height":Ye(f,"section-height"),"--section-padding-x":Ye(f,"section-padding-x"),"--section-fz":f?.includes("compact")?Yt(f.replace("compact-","")):Yt(f),"--section-radius":o===void 0?void 0:wt(o),"--section-bg":l||s?m.background:void 0,"--section-color":m.color,"--section-bd":l||s?m.border:void 0}}},Pm=ve((n,o)=>{const l=le("ButtonGroupSection",i0,n),{className:i,style:s,classNames:c,styles:f,unstyled:m,vars:p,variant:h,gradient:v,radius:y,autoContrast:S,...x}=le("ButtonGroupSection",i0,n),C=_e({name:"ButtonGroupSection",props:l,classes:tr,className:i,style:s,classNames:c,styles:f,unstyled:m,vars:p,varsResolver:GR,rootSelector:"groupSection"});return b.jsx(fe,{...C("groupSection"),ref:o,variant:h,...x})});Pm.classes=tr;Pm.displayName="@mantine/core/ButtonGroupSection";const XR={in:{opacity:1,transform:`translate(-50%, calc(-50% + ${K(1)}))`},out:{opacity:0,transform:"translate(-50%, -200%)"},common:{transformOrigin:"center"},transitionProperty:"transform, opacity"},PR={},QR=(n,{radius:o,color:l,gradient:i,variant:s,size:c,justify:f,autoContrast:m})=>{const p=n.variantColorResolver({color:l||n.primaryColor,theme:n,gradient:i,variant:s||"filled",autoContrast:m});return{root:{"--button-justify":f,"--button-height":Ye(c,"button-height"),"--button-padding-x":Ye(c,"button-padding-x"),"--button-fz":c?.includes("compact")?Yt(c.replace("compact-","")):Yt(c),"--button-radius":o===void 0?void 0:wt(o),"--button-bg":l||s?p.background:void 0,"--button-hover":l||s?p.hover:void 0,"--button-color":p.color,"--button-bd":l||s?p.border:void 0,"--button-hover-color":l||s?p.hoverColor:void 0}}},Zn=Bt((n,o)=>{const l=le("Button",PR,n),{style:i,vars:s,className:c,color:f,disabled:m,children:p,leftSection:h,rightSection:v,fullWidth:y,variant:S,radius:x,loading:C,loaderProps:E,gradient:R,classNames:N,styles:j,unstyled:M,"data-disabled":z,autoContrast:U,mod:O,...H}=l,k=_e({name:"Button",props:l,classes:tr,className:c,style:i,classNames:N,styles:j,unstyled:M,vars:s,varsResolver:QR}),Z=!!h,ne=!!v;return b.jsxs(dn,{ref:o,...k("root",{active:!m&&!C&&!z}),unstyled:M,variant:S,disabled:m||C,mod:[{disabled:m||z,loading:C,block:y,"with-left-section":Z,"with-right-section":ne},O],...H,children:[b.jsx(oo,{mounted:!!C,transition:XR,duration:150,children:ae=>b.jsx(fe,{component:"span",...k("loader",{style:ae}),"aria-hidden":!0,children:b.jsx(ko,{color:"var(--button-color)",size:"calc(var(--button-height) / 1.8)",...E})})}),b.jsxs("span",{...k("inner"),children:[h&&b.jsx(fe,{component:"span",...k("section"),mod:{position:"left"},children:h}),b.jsx(fe,{component:"span",mod:{loading:C},...k("label"),children:p}),v&&b.jsx(fe,{component:"span",...k("section"),mod:{position:"right"},children:v})]})]})});Zn.classes=tr;Zn.displayName="@mantine/core/Button";Zn.Group=Xm;Zn.GroupSection=Pm;const[ZR,KR]=Sa("Card component was not found in tree");var Qm={root:"m_e615b15f",section:"m_599a2148"};const IR={},Tc=Bt((n,o)=>{const l=le("CardSection",IR,n),{classNames:i,className:s,style:c,styles:f,vars:m,withBorder:p,inheritPadding:h,mod:v,...y}=l,S=KR();return b.jsx(fe,{ref:o,mod:[{"with-border":p,"inherit-padding":h},v],...S.getStyles("section",{className:s,style:c,styles:f,classNames:i}),...y})});Tc.classes=Qm;Tc.displayName="@mantine/core/CardSection";const JR={},FR=(n,{padding:o})=>({root:{"--card-padding":ql(o)}}),qo=Bt((n,o)=>{const l=le("Card",JR,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,children:h,padding:v,...y}=l,S=_e({name:"Card",props:l,classes:Qm,className:s,style:c,classNames:i,styles:f,unstyled:m,vars:p,varsResolver:FR}),x=w.Children.toArray(h),C=x.map((E,R)=>typeof E=="object"&&E&&"type"in E&&E.type===Tc?w.cloneElement(E,{"data-first-section":R===0||void 0,"data-last-section":R===x.length-1||void 0}):E);return b.jsx(ZR,{value:{getStyles:S},children:b.jsx(Il,{ref:o,unstyled:m,...S("root"),...y,children:C})})});qo.classes=Qm;qo.displayName="@mantine/core/Card";qo.Section=Tc;var T1={root:"m_4451eb3a"};const WR={},ci=Bt((n,o)=>{const l=le("Center",WR,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,inline:h,mod:v,...y}=l,S=_e({name:"Center",props:l,classes:T1,className:s,style:c,classNames:i,styles:f,unstyled:m,vars:p});return b.jsx(fe,{ref:o,mod:[{inline:h},v],...S("root"),...y})});ci.classes=T1;ci.displayName="@mantine/core/Center";var R1={root:"m_3eebeb36",label:"m_9e365f20"};const e5={orientation:"horizontal"},t5=(n,{color:o,variant:l,size:i})=>({root:{"--divider-color":o?en(o,n):void 0,"--divider-border-style":l,"--divider-size":Ye(i,"divider-size")}}),Zm=ve((n,o)=>{const l=le("Divider",e5,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,color:h,orientation:v,label:y,labelPosition:S,mod:x,...C}=l,E=_e({name:"Divider",classes:R1,props:l,className:s,style:c,classNames:i,styles:f,unstyled:m,vars:p,varsResolver:t5});return b.jsx(fe,{ref:o,mod:[{orientation:v,"with-label":!!y},x],...E("root"),...C,role:"separator",children:y&&b.jsx(fe,{component:"span",mod:{position:S},...E("label"),children:y})})});Zm.classes=R1;Zm.displayName="@mantine/core/Divider";function _1({open:n,close:o,openDelay:l,closeDelay:i}){const s=w.useRef(-1),c=w.useRef(-1),f=()=>{window.clearTimeout(s.current),window.clearTimeout(c.current)},m=()=>{f(),l===0||l===void 0?n():s.current=window.setTimeout(n,l)},p=()=>{f(),i===0||i===void 0?o():c.current=window.setTimeout(o,i)};return w.useEffect(()=>f,[]),{openDropdown:m,closeDropdown:p}}var N1={root:"m_9e117634"};const n5={},a5=(n,{radius:o,fit:l})=>({root:{"--image-radius":o===void 0?void 0:wt(o),"--image-object-fit":l}}),Km=Bt((n,o)=>{const l=le("Image",n5,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,onError:h,src:v,radius:y,fit:S,fallbackSrc:x,mod:C,...E}=l,[R,N]=w.useState(!v);w.useEffect(()=>N(!v),[v]);const j=_e({name:"Image",classes:N1,props:l,className:s,style:c,classNames:i,styles:f,unstyled:m,vars:p,varsResolver:a5});return R&&x?b.jsx(fe,{component:"img",ref:o,src:x,...j("root"),onError:h,mod:["fallback",C],...E}):b.jsx(fe,{component:"img",ref:o,...j("root"),src:v,onError:M=>{h?.(M),N(!0)},mod:C,...E})});Km.classes=N1;Km.displayName="@mantine/core/Image";function Vd(){return Vd=Object.assign?Object.assign.bind():function(n){for(var o=1;o{const{classNames:l,className:i,style:s,styles:c,vars:f,...m}=le("MenuDivider",l5,n),p=ro();return b.jsx(fe,{ref:o,...p.getStyles("divider",{className:i,style:s,styles:c,classNames:l}),...m})});Im.classes=io;Im.displayName="@mantine/core/MenuDivider";const r5={},Jm=ve((n,o)=>{const{classNames:l,className:i,style:s,styles:c,vars:f,onMouseEnter:m,onMouseLeave:p,onKeyDown:h,children:v,...y}=le("MenuDropdown",r5,n),S=w.useRef(null),x=ro(),C=Ft(h,N=>{(N.key==="ArrowUp"||N.key==="ArrowDown")&&(N.preventDefault(),S.current?.querySelectorAll("[data-menu-item]:not(:disabled)")[0]?.focus())}),E=Ft(m,()=>(x.trigger==="hover"||x.trigger==="click-hover")&&x.openDropdown()),R=Ft(p,()=>(x.trigger==="hover"||x.trigger==="click-hover")&&x.closeDropdown());return b.jsxs(an.Dropdown,{...y,onMouseEnter:E,onMouseLeave:R,role:"menu","aria-orientation":"vertical",ref:Ct(o,S),...x.getStyles("dropdown",{className:i,style:s,styles:c,classNames:l,withStaticClass:!1}),tabIndex:-1,"data-menu-dropdown":!0,onKeyDown:C,children:[x.withInitialFocusPlaceholder&&b.jsx("div",{tabIndex:-1,"data-autofocus":!0,"data-mantine-stop-propagation":!0,style:{outline:0}}),v]})});Jm.classes=io;Jm.displayName="@mantine/core/MenuDropdown";const[i5,Rc]=fi(),s5={},Fm=Bt((n,o)=>{const{classNames:l,className:i,style:s,styles:c,vars:f,color:m,closeMenuOnClick:p,leftSection:h,rightSection:v,children:y,disabled:S,"data-disabled":x,...C}=le("MenuItem",s5,n),E=ro(),R=Rc(),N=nn(),{dir:j}=Pl(),M=w.useRef(null),z=C,U=Ft(z.onClick,()=>{x||(typeof p=="boolean"?p&&E.closeDropdownImmediately():E.closeOnItemClick&&E.closeDropdownImmediately())}),O=m?N.variantColorResolver({color:m,theme:N,variant:"light"}):void 0,H=m?wa({color:m,theme:N}):null,k=Ft(z.onKeyDown,Z=>{Z.key==="ArrowLeft"&&R&&(R.close(),R.focusParentItem())});return b.jsxs(dn,{onMouseDown:Z=>Z.preventDefault(),...C,unstyled:E.unstyled,tabIndex:E.menuItemTabIndex,...E.getStyles("item",{className:i,style:s,styles:c,classNames:l}),ref:Ct(M,o),role:"menuitem",disabled:S,"data-menu-item":!0,"data-disabled":S||x||void 0,"data-mantine-stop-propagation":!0,onClick:U,onKeyDown:D0({siblingSelector:"[data-menu-item]:not([data-disabled])",parentSelector:"[data-menu-dropdown]",activateOnFocus:!1,loop:E.loop,dir:j,orientation:"vertical",onKeyDown:k}),__vars:{"--menu-item-color":H?.isThemeColor&&H?.shade===void 0?`var(--mantine-color-${H.color}-6)`:O?.color,"--menu-item-hover":O?.hover},children:[h&&b.jsx("div",{...E.getStyles("itemSection",{styles:c,classNames:l}),"data-position":"left",children:h}),y&&b.jsx("div",{...E.getStyles("itemLabel",{styles:c,classNames:l}),children:y}),v&&b.jsx("div",{...E.getStyles("itemSection",{styles:c,classNames:l}),"data-position":"right",children:v})]})});Fm.classes=io;Fm.displayName="@mantine/core/MenuItem";const c5={},Wm=ve((n,o)=>{const{classNames:l,className:i,style:s,styles:c,vars:f,...m}=le("MenuLabel",c5,n),p=ro();return b.jsx(fe,{ref:o,...p.getStyles("label",{className:i,style:s,styles:c,classNames:l}),...m})});Wm.classes=io;Wm.displayName="@mantine/core/MenuLabel";const u5={},ep=ve((n,o)=>{const{classNames:l,className:i,style:s,styles:c,vars:f,onMouseEnter:m,onMouseLeave:p,onKeyDown:h,children:v,...y}=le("MenuSubDropdown",u5,n),S=w.useRef(null),x=ro(),C=Rc(),E=Ft(m,C?.open),R=Ft(p,C?.close);return b.jsx(an.Dropdown,{...y,onMouseEnter:E,onMouseLeave:R,role:"menu","aria-orientation":"vertical",ref:Ct(o,S),...x.getStyles("dropdown",{className:i,style:s,styles:c,classNames:l,withStaticClass:!1}),tabIndex:-1,"data-menu-dropdown":!0,children:v})});ep.classes=io;ep.displayName="@mantine/core/MenuSubDropdown";const f5={},tp=Bt((n,o)=>{const{classNames:l,className:i,style:s,styles:c,vars:f,color:m,leftSection:p,rightSection:h,children:v,disabled:y,"data-disabled":S,closeMenuOnClick:x,...C}=le("MenuSubItem",f5,n),E=ro(),R=Rc(),N=nn(),{dir:j}=Pl(),M=w.useRef(null),z=C,U=m?N.variantColorResolver({color:m,theme:N,variant:"light"}):void 0,O=m?wa({color:m,theme:N}):null,H=Ft(z.onKeyDown,ae=>{ae.key==="ArrowRight"&&(R?.open(),R?.focusFirstItem()),ae.key==="ArrowLeft"&&R?.parentContext&&(R.parentContext.close(),R.parentContext.focusParentItem())}),k=Ft(z.onClick,()=>{!S&&x&&E.closeDropdownImmediately()}),Z=Ft(z.onMouseEnter,R?.open),ne=Ft(z.onMouseLeave,R?.close);return b.jsxs(dn,{onMouseDown:ae=>ae.preventDefault(),...C,unstyled:E.unstyled,tabIndex:E.menuItemTabIndex,...E.getStyles("item",{className:i,style:s,styles:c,classNames:l}),ref:Ct(M,o),role:"menuitem",disabled:y,"data-menu-item":!0,"data-sub-menu-item":!0,"data-disabled":y||S||void 0,"data-mantine-stop-propagation":!0,onMouseEnter:Z,onMouseLeave:ne,onClick:k,onKeyDown:D0({siblingSelector:"[data-menu-item]:not([data-disabled])",parentSelector:"[data-menu-dropdown]",activateOnFocus:!1,loop:E.loop,dir:j,orientation:"vertical",onKeyDown:H}),__vars:{"--menu-item-color":O?.isThemeColor&&O?.shade===void 0?`var(--mantine-color-${O.color}-6)`:U?.color,"--menu-item-hover":U?.hover},children:[p&&b.jsx("div",{...E.getStyles("itemSection",{styles:c,classNames:l}),"data-position":"left",children:p}),v&&b.jsx("div",{...E.getStyles("itemLabel",{styles:c,classNames:l}),children:v}),b.jsx("div",{...E.getStyles("itemSection",{styles:c,classNames:l}),"data-position":"right",children:h||b.jsx(t1,{...E.getStyles("chevron"),size:14})})]})});tp.classes=io;tp.displayName="@mantine/core/MenuSubItem";function M1({children:n,refProp:o}){if(!ba(n))throw new Error("Menu.Sub.Target component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported");return ro(),b.jsx(an.Target,{refProp:o,popupType:"menu",children:n})}M1.displayName="@mantine/core/MenuSubTarget";const d5={offset:0,position:"right-start",transitionProps:{duration:0}};function nr(n){const{children:o,closeDelay:l,...i}=le("MenuSub",d5,n),s=Kn(),[c,{open:f,close:m}]=DC(!1),p=Rc(),{openDropdown:h,closeDropdown:v}=_1({open:f,close:m,closeDelay:l,openDelay:0}),y=()=>window.setTimeout(()=>{document.getElementById(`${s}-dropdown`)?.querySelectorAll("[data-menu-item]:not([data-disabled])")[0]?.focus()},16),S=()=>window.setTimeout(()=>{document.getElementById(`${s}-target`)?.focus()},16);return b.jsx(i5,{value:{opened:c,close:v,open:h,focusFirstItem:y,focusParentItem:S,parentContext:p},children:b.jsx(an,{opened:c,...i,withinPortal:!1,id:s,children:o})})}nr.extend=n=>n;nr.displayName="@mantine/core/MenuSub";nr.Target=M1;nr.Dropdown=ep;nr.Item=tp;const m5={refProp:"ref"},O1=w.forwardRef((n,o)=>{const{children:l,refProp:i,...s}=le("MenuTarget",m5,n);if(!ba(l))throw new Error("Menu.Target component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported");const c=ro(),f=l.props,m=Ft(f.onClick,()=>{c.trigger==="click"?c.toggleDropdown():c.trigger==="click-hover"&&(c.setOpenedViaClick(!0),c.opened||c.openDropdown())}),p=Ft(f.onMouseEnter,()=>(c.trigger==="hover"||c.trigger==="click-hover")&&c.openDropdown()),h=Ft(f.onMouseLeave,()=>{(c.trigger==="hover"||c.trigger==="click-hover"&&!c.openedViaClick)&&c.closeDropdown()});return b.jsx(an.Target,{refProp:i,popupType:"menu",ref:o,...s,children:w.cloneElement(l,{onClick:m,onMouseEnter:p,onMouseLeave:h,"data-expanded":c.opened?!0:void 0})})});O1.displayName="@mantine/core/MenuTarget";const p5={trapFocus:!0,closeOnItemClick:!0,withInitialFocusPlaceholder:!0,clickOutsideEvents:["mousedown","touchstart","keydown"],loop:!0,trigger:"click",openDelay:0,closeDelay:100,menuItemTabIndex:-1};function kt(n){const o=le("Menu",p5,n),{children:l,onOpen:i,onClose:s,opened:c,defaultOpened:f,trapFocus:m,onChange:p,closeOnItemClick:h,loop:v,closeOnEscape:y,trigger:S,openDelay:x,closeDelay:C,classNames:E,styles:R,unstyled:N,variant:j,vars:M,menuItemTabIndex:z,keepMounted:U,withInitialFocusPlaceholder:O,...H}=o,k=_e({name:"Menu",classes:io,props:o,classNames:E,styles:R,unstyled:N}),[Z,ne]=ya({value:c,defaultValue:f,finalValue:!1,onChange:p}),[ae,te]=w.useState(!1),ie=()=>{ne(!1),te(!1),Z&&s?.()},ce=()=>{ne(!0),!Z&&i?.()},oe=()=>{Z?ie():ce()},{openDropdown:A,closeDropdown:B}=_1({open:ce,close:ie,closeDelay:C,openDelay:x}),L=_=>gC("[data-menu-item]","[data-menu-dropdown]",_),{resolvedClassNames:X,resolvedStyles:F}=Xl({classNames:E,styles:R,props:o});return b.jsx(o5,{value:{getStyles:k,opened:Z,toggleDropdown:oe,getItemIndex:L,openedViaClick:ae,setOpenedViaClick:te,closeOnItemClick:h,closeDropdown:S==="click"?ie:B,openDropdown:S==="click"?ce:A,closeDropdownImmediately:ie,loop:v,trigger:S,unstyled:N,menuItemTabIndex:z,withInitialFocusPlaceholder:O},children:b.jsx(an,{...H,opened:Z,onChange:oe,defaultOpened:f,trapFocus:U?!1:m,closeOnEscape:y,__staticSelector:"Menu",classNames:X,styles:F,unstyled:N,variant:j,keepMounted:U,children:l})})}kt.extend=n=>n;kt.withProps=q2(kt);kt.classes=io;kt.displayName="@mantine/core/Menu";kt.Item=Fm;kt.Label=Wm;kt.Dropdown=Jm;kt.Target=O1;kt.Divider=Im;kt.Sub=nr;const[h5,ar]=Sa("Modal component was not found in tree");var Ra={root:"m_9df02822",content:"m_54c44539",inner:"m_1f958f16",header:"m_d0e2b9cd"};const v5={},_c=ve((n,o)=>{const l=le("ModalBody",v5,n),{classNames:i,className:s,style:c,styles:f,vars:m,...p}=l,h=ar();return b.jsx(Zb,{ref:o,...h.getStyles("body",{classNames:i,style:c,styles:f,className:s}),...p})});_c.classes=Ra;_c.displayName="@mantine/core/ModalBody";const g5={},Nc=ve((n,o)=>{const l=le("ModalCloseButton",g5,n),{classNames:i,className:s,style:c,styles:f,vars:m,...p}=l,h=ar();return b.jsx(Kb,{ref:o,...h.getStyles("close",{classNames:i,style:c,styles:f,className:s}),...p})});Nc.classes=Ra;Nc.displayName="@mantine/core/ModalCloseButton";const y5={},Ac=ve((n,o)=>{const l=le("ModalContent",y5,n),{classNames:i,className:s,style:c,styles:f,vars:m,children:p,__hidden:h,...v}=l,y=ar(),S=y.scrollAreaComponent||xT;return b.jsx(Ib,{...y.getStyles("content",{className:s,style:c,styles:f,classNames:i}),innerProps:y.getStyles("inner",{className:s,style:c,styles:f,classNames:i}),"data-full-screen":y.fullScreen||void 0,"data-modal-content":!0,"data-hidden":h||void 0,ref:o,...v,children:b.jsx(S,{style:{maxHeight:y.fullScreen?"100dvh":`calc(100dvh - (${K(y.yOffset)} * 2))`},children:p})})});Ac.classes=Ra;Ac.displayName="@mantine/core/ModalContent";const b5={},Mc=ve((n,o)=>{const l=le("ModalHeader",b5,n),{classNames:i,className:s,style:c,styles:f,vars:m,...p}=l,h=ar();return b.jsx(Jb,{ref:o,...h.getStyles("header",{classNames:i,style:c,styles:f,className:s}),...p})});Mc.classes=Ra;Mc.displayName="@mantine/core/ModalHeader";const S5={},Oc=ve((n,o)=>{const l=le("ModalOverlay",S5,n),{classNames:i,className:s,style:c,styles:f,vars:m,...p}=l,h=ar();return b.jsx(Fb,{ref:o,...h.getStyles("overlay",{classNames:i,style:c,styles:f,className:s}),...p})});Oc.classes=Ra;Oc.displayName="@mantine/core/ModalOverlay";const x5={__staticSelector:"Modal",closeOnClickOutside:!0,withinPortal:!0,lockScroll:!0,trapFocus:!0,returnFocus:!0,closeOnEscape:!0,keepMounted:!1,zIndex:$n("modal"),transitionProps:{duration:200,transition:"fade-down"},yOffset:"5dvh"},w5=(n,{radius:o,size:l,yOffset:i,xOffset:s})=>({root:{"--modal-radius":o===void 0?void 0:wt(o),"--modal-size":Ye(l,"modal-size"),"--modal-y-offset":K(i),"--modal-x-offset":K(s)}}),Dc=ve((n,o)=>{const l=le("ModalRoot",x5,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,yOffset:h,scrollAreaComponent:v,radius:y,fullScreen:S,centered:x,xOffset:C,__staticSelector:E,...R}=l,N=_e({name:E,classes:Ra,props:l,className:s,style:c,classNames:i,styles:f,unstyled:m,vars:p,varsResolver:w5});return b.jsx(h5,{value:{yOffset:h,scrollAreaComponent:v,getStyles:N,fullScreen:S},children:b.jsx(Qb,{ref:o,...N("root"),"data-full-screen":S||void 0,"data-centered":x||void 0,"data-offset-scrollbars":v===Kl.Autosize||void 0,unstyled:m,...R})})});Dc.classes=Ra;Dc.displayName="@mantine/core/ModalRoot";const[C5,E5]=fi();function D1({children:n}){const[o,l]=w.useState([]),[i,s]=w.useState($n("modal"));return b.jsx(C5,{value:{stack:o,addModal:(c,f)=>{l(m=>[...new Set([...m,c])]),s(m=>typeof f=="number"&&typeof m=="number"?Math.max(m,f):m)},removeModal:c=>l(f=>f.filter(m=>m!==c)),getZIndex:c=>`calc(${i} + ${o.indexOf(c)} + 1)`,currentId:o[o.length-1],maxZIndex:i},children:n})}D1.displayName="@mantine/core/ModalStack";const T5={},zc=ve((n,o)=>{const l=le("ModalTitle",T5,n),{classNames:i,className:s,style:c,styles:f,vars:m,...p}=l,h=ar();return b.jsx(Wb,{ref:o,...h.getStyles("title",{classNames:i,style:c,styles:f,className:s}),...p})});zc.classes=Ra;zc.displayName="@mantine/core/ModalTitle";const R5={closeOnClickOutside:!0,withinPortal:!0,lockScroll:!0,trapFocus:!0,returnFocus:!0,closeOnEscape:!0,keepMounted:!1,zIndex:$n("modal"),transitionProps:{duration:200,transition:"fade-down"},withOverlay:!0,withCloseButton:!0},Hn=ve((n,o)=>{const{title:l,withOverlay:i,overlayProps:s,withCloseButton:c,closeButtonProps:f,children:m,radius:p,opened:h,stackId:v,zIndex:y,...S}=le("Modal",R5,n),x=E5(),C=!!l||c,E=x&&v?{closeOnEscape:x.currentId===v,trapFocus:x.currentId===v,zIndex:x.getZIndex(v)}:{},R=i===!1?!1:v&&x?x.currentId===v:h;return w.useEffect(()=>{x&&v&&(h?x.addModal(v,y||$n("modal")):x.removeModal(v))},[h,v,y]),b.jsxs(Dc,{ref:o,radius:p,opened:h,zIndex:x&&v?x.getZIndex(v):y,...S,...E,children:[i&&b.jsx(Oc,{visible:R,transitionProps:x&&v?{duration:0}:void 0,...s}),b.jsxs(Ac,{radius:p,__hidden:x&&v&&h?v!==x.currentId:!1,children:[C&&b.jsxs(Mc,{children:[l&&b.jsx(zc,{children:l}),c&&b.jsx(Nc,{...f})]}),b.jsx(_c,{children:m})]})]})});Hn.classes=Ra;Hn.displayName="@mantine/core/Modal";Hn.Root=Dc;Hn.Overlay=Oc;Hn.Content=Ac;Hn.Body=_c;Hn.Header=Mc;Hn.Title=zc;Hn.CloseButton=Nc;Hn.Stack=D1;var z1={root:"m_a513464",icon:"m_a4ceffb",loader:"m_b0920b15",body:"m_a49ed24",title:"m_3feedf16",description:"m_3d733a3a",closeButton:"m_919a4d88"};const _5={withCloseButton:!0},N5=(n,{radius:o,color:l})=>({root:{"--notification-radius":o===void 0?void 0:wt(o),"--notification-color":l?en(l,n):void 0}}),np=ve((n,o)=>{const l=le("Notification",_5,n),{className:i,color:s,radius:c,loading:f,withCloseButton:m,withBorder:p,title:h,icon:v,children:y,onClose:S,closeButtonProps:x,classNames:C,style:E,styles:R,unstyled:N,variant:j,vars:M,mod:z,loaderProps:U,role:O,...H}=l,k=_e({name:"Notification",classes:z1,props:l,className:i,style:E,classNames:C,styles:R,unstyled:N,vars:M,varsResolver:N5});return b.jsxs(fe,{...k("root"),mod:[{"data-with-icon":!!v||f,"data-with-border":p},z],ref:o,variant:j,role:O||"alert",...H,children:[v&&!f&&b.jsx("div",{...k("icon"),children:v}),f&&b.jsx(ko,{size:28,color:s,...U,...k("loader")}),b.jsxs("div",{...k("body"),children:[h&&b.jsx("div",{...k("title"),children:h}),b.jsx(fe,{...k("description"),mod:{"data-with-title":!!h},children:y})]}),m&&b.jsx(Fl,{iconSize:16,color:"gray",...x,unstyled:N,onClick:S,...k("closeButton")})]})});np.classes=z1;np.displayName="@mantine/core/Notification";function j1(n,o){var l={};for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&o.indexOf(i)<0&&(l[i]=n[i]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,i=Object.getOwnPropertySymbols(n);s=m?s=s+c0("0",f-m):s=(s.substring(0,f)||"0")+"."+s.substring(f),l+s}function u0(n,o,l){if(["","-"].indexOf(n)!==-1)return n;var i=(n.indexOf(".")!==-1||l)&&o,s=ap(n),c=s.beforeDecimal,f=s.afterDecimal,m=s.hasNegation,p=parseFloat("0."+(f||"0")),h=f.length<=o?"0."+f:p.toFixed(o),v=h.split("."),y=c;c&&Number(v[0])&&(y=c.split("").reverse().reduce(function(E,R,N){return E.length>N?(Number(E[0])+Number(R)).toString()+E.substring(1,E.length):R+E},v[0]));var S=L1(v[1]||"",o,l),x=m?"-":"",C=i?".":"";return""+x+y+C+S}function zo(n,o){if(n.value=n.value,n!==null){if(n.createTextRange){var l=n.createTextRange();return l.move("character",o),l.select(),!0}return n.selectionStart||n.selectionStart===0?(n.focus(),n.setSelectionRange(o,o),!0):(n.focus(),!1)}}var U1=A5(function(n,o){for(var l=0,i=0,s=n.length,c=o.length;n[l]===o[l]&&ll&&s-i>l;)i++;return{from:{start:l,end:s-i},to:{start:l,end:c-i}}}),j5=function(n,o){var l=Math.min(n.selectionStart,o);return{from:{start:l,end:n.selectionEnd},to:{start:l,end:o}}};function B5(n,o,l){return Math.min(Math.max(n,o),l)}function Cd(n){return Math.max(n.selectionStart,n.selectionEnd)}function $5(){return typeof navigator<"u"&&!(navigator.platform&&/iPhone|iPod/.test(navigator.platform))}function L5(n){return{from:{start:0,end:0},to:{start:0,end:n.length},lastValue:""}}function H5(n){var o=n.currentValue,l=n.formattedValue,i=n.currentValueIndex,s=n.formattedValueIndex;return o[i]===l[s]}function U5(n,o,l,i,s,c,f){f===void 0&&(f=H5);var m=s.findIndex(function(z){return z}),p=n.slice(0,m);!o&&!l.startsWith(p)&&(o=p,l=p+l,i=i+p.length);for(var h=l.length,v=n.length,y={},S=new Array(h),x=0;x0&&S[N]===-1;)N--;var M=N===-1||S[N]===-1?0:S[N]+1;return M>j?j:i-M=0&&!l[o];)o--;o===-1&&(o=l.indexOf(!0))}else{for(;o<=s&&!l[o];)o++;o>s&&(o=l.lastIndexOf(!0))}return o===-1&&(o=s),o}function V5(n){for(var o=Array.from({length:n.length+1}).map(function(){return!0}),l=0,i=o.length;lH.length-f.length||Oae||y>n.length-f.length)&&(ne=y),n=n.substring(0,ne),n=G5(M?"-"+n:n,s),n=(n.match(X5(C))||[]).join("");var te=n.indexOf(C);n=n.replace(new RegExp($1(C),"g"),function(B,L){return L===te?".":""});var ie=ap(n,s),ce=ie.beforeDecimal,oe=ie.afterDecimal,A=ie.addNegation;return h.end-h.start_?!1:F>=re.start&&F=o,s=l===void 0||n<=l;return i&&s}const n_={step:1,clampBehavior:"blur",allowDecimal:!0,allowNegative:!0,withKeyboardEvents:!0,allowLeadingZeros:!0,trimLeadingZeroesOnBlur:!0,startValue:0},a_=(n,{size:o})=>({controls:{"--ni-chevron-size":Ye(o,"ni-chevron-size")}});function o_(n,o,l){const i=n.toString().replace(/^0+/,""),s=parseFloat(i);return Number.isNaN(s)?i:s>Number.MAX_SAFE_INTEGER?o!==void 0?String(o):i:Xs(s,l,o)}const op=ve((n,o)=>{const l=le("NumberInput",n_,n),{className:i,classNames:s,styles:c,unstyled:f,vars:m,onChange:p,onValueChange:h,value:v,defaultValue:y,max:S,min:x,step:C,hideControls:E,rightSection:R,isAllowed:N,clampBehavior:j,onBlur:M,allowDecimal:z,decimalScale:U,onKeyDown:O,onKeyDownCapture:H,handlersRef:k,startValue:Z,disabled:ne,rightSectionPointerEvents:ae,allowNegative:te,readOnly:ie,size:ce,rightSectionWidth:oe,stepHoldInterval:A,stepHoldDelay:B,allowLeadingZeros:L,withKeyboardEvents:X,trimLeadingZeroesOnBlur:F,..._}=l,Y=_e({name:"NumberInput",classes:kd,props:l,classNames:s,styles:c,unstyled:f,vars:m,varsResolver:a_}),{resolvedClassNames:ee,resolvedStyles:ue}=Xl({classNames:s,styles:c,props:l}),[re,de]=ya({value:v,defaultValue:y,finalValue:"",onChange:p}),ge=B!==void 0&&A!==void 0,Ee=w.useRef(null),Te=w.useRef(null),He=w.useRef(0),st=(se,Ce)=>{Ce.source==="event"&&de(t_(se.floatValue,se.value)&&!F5.test(se.value)&&!(L&&W5.test(se.value))?se.floatValue:se.value),h?.(se,Ce)},ot=se=>{const Ce=String(se).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);return Ce?Math.max(0,(Ce[1]?Ce[1].length:0)-(Ce[2]?+Ce[2]:0)):0},St=se=>{Ee.current&&typeof se<"u"&&Ee.current.setSelectionRange(se,se)},Je=w.useRef(Nd);Je.current=()=>{if(!Ed(re))return;let se;const Ce=ot(re),lt=ot(C),ut=Math.max(Ce,lt),Lt=10**ut;if(!Yd(re)&&(typeof re!="number"||Number.isNaN(re)))se=Xs(Z,x,S);else if(S!==void 0){const Et=(Math.round(Number(re)*Lt)+Math.round(C*Lt))/Lt;se=Et<=S?Et:S}else se=(Math.round(Number(re)*Lt)+Math.round(C*Lt))/Lt;const nt=se.toFixed(ut);de(parseFloat(nt)),h?.({floatValue:parseFloat(nt),formattedValue:nt,value:nt},{source:"increment"}),setTimeout(()=>St(Ee.current?.value.length),0)};const ct=w.useRef(Nd);ct.current=()=>{if(!Ed(re))return;let se;const Ce=x!==void 0?x:te?Number.MIN_SAFE_INTEGER:0,lt=ot(re),ut=ot(C),Lt=Math.max(lt,ut),nt=10**Lt;if(!Yd(re)&&typeof re!="number"||Number.isNaN(re))se=Xs(Z,Ce,S);else{const so=(Math.round(Number(re)*nt)-Math.round(C*nt))/nt;se=Ce!==void 0&&soSt(Ee.current?.value.length),0)};const $t=se=>{O?.(se),!(ie||!X)&&(se.key==="ArrowUp"&&(se.preventDefault(),Je.current()),se.key==="ArrowDown"&&(se.preventDefault(),ct.current()))},me=se=>{if(H?.(se),se.key==="Backspace"){const Ce=Ee.current;Ce.selectionStart===0&&Ce.selectionStart===Ce.selectionEnd&&(se.preventDefault(),window.setTimeout(()=>St(0),0))}},pe=se=>{let Ce=re;j==="blur"&&typeof Ce=="number"&&(Ce=Xs(Ce,x,S)),F&&typeof Ce=="string"&&ot(Ce)<15&&(Ce=o_(Ce,S,x)),re!==Ce&&de(Ce),M?.(se)};Js(k,{increment:Je.current,decrement:ct.current});const Se=se=>{se?Je.current():ct.current(),He.current+=1},Me=se=>{if(Se(se),ge){const Ce=typeof A=="number"?A:A(He.current);Te.current=window.setTimeout(()=>Me(se),Ce)}},Oe=(se,Ce)=>{se.preventDefault(),Ee.current?.focus(),Se(Ce),ge&&(Te.current=window.setTimeout(()=>Me(Ce),B))},ye=()=>{Te.current&&window.clearTimeout(Te.current),Te.current=null,He.current=0},je=b.jsxs("div",{...Y("controls"),children:[b.jsx(dn,{...Y("control"),tabIndex:-1,"aria-hidden":!0,disabled:ne||typeof re=="number"&&S!==void 0&&re>=S,mod:{direction:"up"},onMouseDown:se=>se.preventDefault(),onPointerDown:se=>{Oe(se,!0)},onPointerUp:ye,onPointerLeave:ye,children:b.jsx(m0,{direction:"up"})}),b.jsx(dn,{...Y("control"),tabIndex:-1,"aria-hidden":!0,disabled:ne||typeof re=="number"&&x!==void 0&&re<=x,mod:{direction:"down"},onMouseDown:se=>se.preventDefault(),onPointerDown:se=>{Oe(se,!1)},onPointerUp:ye,onPointerLeave:ye,children:b.jsx(m0,{direction:"down"})})]});return b.jsx(Ta,{component:J5,allowNegative:te,className:yt(kd.root,i),size:ce,..._,readOnly:ie,disabled:ne,value:re,getInputRef:Ct(o,Ee),onValueChange:st,rightSection:E||ie||!Ed(re)?R:R||je,classNames:ee,styles:ue,unstyled:f,__staticSelector:"NumberInput",decimalScale:z?U:0,onKeyDown:$t,onKeyDownCapture:me,rightSectionPointerEvents:ae??(ne?"none":void 0),rightSectionWidth:oe??`var(--ni-right-section-width-${ce||"sm"})`,allowLeadingZeros:L,onBlur:pe,isAllowed:se=>j==="strict"?N?N(se)&&p0(se.floatValue,x,S):p0(se.floatValue,x,S):N?N(se):!0})});op.classes={...Ta.classes,...kd};op.displayName="@mantine/core/NumberInput";const l_=({reveal:n})=>b.jsx("svg",{viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{width:"var(--psi-icon-size)",height:"var(--psi-icon-size)"},children:b.jsx("path",{d:n?"M13.3536 2.35355C13.5488 2.15829 13.5488 1.84171 13.3536 1.64645C13.1583 1.45118 12.8417 1.45118 12.6464 1.64645L10.6828 3.61012C9.70652 3.21671 8.63759 3 7.5 3C4.30786 3 1.65639 4.70638 0.0760002 7.23501C-0.0253338 7.39715 -0.0253334 7.60288 0.0760014 7.76501C0.902945 9.08812 2.02314 10.1861 3.36061 10.9323L1.64645 12.6464C1.45118 12.8417 1.45118 13.1583 1.64645 13.3536C1.84171 13.5488 2.15829 13.5488 2.35355 13.3536L4.31723 11.3899C5.29348 11.7833 6.36241 12 7.5 12C10.6921 12 13.3436 10.2936 14.924 7.76501C15.0253 7.60288 15.0253 7.39715 14.924 7.23501C14.0971 5.9119 12.9769 4.81391 11.6394 4.06771L13.3536 2.35355ZM9.90428 4.38861C9.15332 4.1361 8.34759 4 7.5 4C4.80285 4 2.52952 5.37816 1.09622 7.50001C1.87284 8.6497 2.89609 9.58106 4.09974 10.1931L9.90428 4.38861ZM5.09572 10.6114L10.9003 4.80685C12.1039 5.41894 13.1272 6.35031 13.9038 7.50001C12.4705 9.62183 10.1971 11 7.5 11C6.65241 11 5.84668 10.8639 5.09572 10.6114Z":"M7.5 11C4.80285 11 2.52952 9.62184 1.09622 7.50001C2.52952 5.37816 4.80285 4 7.5 4C10.1971 4 12.4705 5.37816 13.9038 7.50001C12.4705 9.62183 10.1971 11 7.5 11ZM7.5 3C4.30786 3 1.65639 4.70638 0.0760002 7.23501C-0.0253338 7.39715 -0.0253334 7.60288 0.0760014 7.76501C1.65639 10.2936 4.30786 12 7.5 12C10.6921 12 13.3436 10.2936 14.924 7.76501C15.0253 7.60288 15.0253 7.39715 14.924 7.23501C13.3436 4.70638 10.6921 3 7.5 3ZM7.5 9.5C8.60457 9.5 9.5 8.60457 9.5 7.5C9.5 6.39543 8.60457 5.5 7.5 5.5C6.39543 5.5 5.5 6.39543 5.5 7.5C5.5 8.60457 6.39543 9.5 7.5 9.5Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"})});var qd={root:"m_f61ca620",input:"m_ccf8da4c",innerInput:"m_f2d85dd2",visibilityToggle:"m_b1072d44"};const r_={visibilityToggleIcon:l_},i_=(n,{size:o})=>({root:{"--psi-icon-size":Ye(o,"psi-icon-size"),"--psi-button-size":Ye(o,"psi-button-size")}}),Bc=ve((n,o)=>{const l=le("PasswordInput",r_,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,required:h,error:v,leftSection:y,disabled:S,id:x,variant:C,inputContainer:E,description:R,label:N,size:j,errorProps:M,descriptionProps:z,labelProps:U,withAsterisk:O,inputWrapperOrder:H,wrapperProps:k,radius:Z,rightSection:ne,rightSectionWidth:ae,rightSectionPointerEvents:te,leftSectionWidth:ie,visible:ce,defaultVisible:oe,onVisibilityChange:A,visibilityToggleIcon:B,visibilityToggleButtonProps:L,rightSectionProps:X,leftSectionProps:F,leftSectionPointerEvents:_,withErrorStyles:Y,mod:ee,...ue}=l,re=Kn(x),[de,ge]=ya({value:ce,defaultValue:oe,finalValue:!1,onChange:A}),Ee=()=>ge(!de),Te=_e({name:"PasswordInput",classes:qd,props:l,className:s,style:c,classNames:i,styles:f,unstyled:m,vars:p,varsResolver:i_}),{resolvedClassNames:He,resolvedStyles:st}=Xl({classNames:i,styles:f,props:l}),{styleProps:ot,rest:St}=di(ue),Je=B,ct=M?.id||`${re}-error`,$t=z?.id||`${re}-description`,Se=`${!!v&&typeof v!="boolean"?ct:""} ${!!R?$t:""}`,Me=Se.trim().length>0?Se.trim():void 0,Oe=b.jsx(Yo,{...Te("visibilityToggle"),disabled:S,radius:Z,"aria-hidden":!L,tabIndex:-1,...L,variant:L?.variant??"subtle",color:"gray",unstyled:m,onTouchEnd:ye=>{ye.preventDefault(),L?.onTouchEnd?.(ye),Ee()},onMouseDown:ye=>{ye.preventDefault(),L?.onMouseDown?.(ye),Ee()},onKeyDown:ye=>{L?.onKeyDown?.(ye),ye.key===" "&&(ye.preventDefault(),Ee())},children:b.jsx(Je,{reveal:de})});return b.jsx(bt.Wrapper,{required:h,id:re,label:N,error:v,description:R,size:j,classNames:He,styles:st,__staticSelector:"PasswordInput",unstyled:m,withAsterisk:O,inputWrapperOrder:H,inputContainer:E,variant:C,labelProps:{...U,htmlFor:re},descriptionProps:{...z,id:$t},errorProps:{...M,id:ct},mod:ee,...Te("root"),...ot,...k,children:b.jsx(bt,{component:"div",error:v,leftSection:y,size:j,classNames:{...He,input:yt(qd.input,He.input)},styles:st,radius:Z,disabled:S,__staticSelector:"PasswordInput",rightSectionWidth:ae,rightSection:ne??Oe,variant:C,unstyled:m,leftSectionWidth:ie,rightSectionPointerEvents:te||"all",rightSectionProps:X,leftSectionProps:F,leftSectionPointerEvents:_,withAria:!1,withErrorStyles:Y,children:b.jsx("input",{required:h,"data-invalid":!!v||void 0,"data-with-left-section":!!y||void 0,...Te("innerInput"),disabled:S,id:re,ref:o,...St,"aria-describedby":Me,autoComplete:St.autoComplete||"off",type:de?"text":"password"})})})});Bc.classes={...Ta.classes,...qd};Bc.displayName="@mantine/core/PasswordInput";const s_={duration:100,transition:"fade"};function c_(n,o){return{...s_,...o,...n}}function u_({offset:n,position:o,defaultOpened:l}){const[i,s]=w.useState(l),c=w.useRef(null),{x:f,y:m,elements:p,refs:h,update:v,placement:y}=hm({placement:o,middleware:[fm({crossAxis:!0,padding:5,rootBoundary:"document"})]}),S=y.includes("right")?n:o.includes("left")?n*-1:0,x=y.includes("bottom")?n:o.includes("top")?n*-1:0,C=w.useCallback(({clientX:E,clientY:R})=>{h.setPositionReference({getBoundingClientRect(){return{width:0,height:0,x:E,y:R,left:E+S,top:R+x,right:E,bottom:R}}})},[p.reference]);return w.useEffect(()=>{if(h.floating.current){const E=c.current;E.addEventListener("mousemove",C);const R=ha(h.floating.current);return R.forEach(N=>{N.addEventListener("scroll",v)}),()=>{E.removeEventListener("mousemove",C),R.forEach(N=>{N.removeEventListener("scroll",v)})}}},[p.reference,h.floating.current,v,C,i]),{handleMouseMove:C,x:f,y:m,opened:i,setOpened:s,boundaryRef:c,floating:h.setFloating}}var $c={tooltip:"m_1b3c8819",arrow:"m_f898399f"};const f_={refProp:"ref",withinPortal:!0,offset:10,defaultOpened:!1,position:"right",zIndex:$n("popover")},d_=(n,{radius:o,color:l})=>({tooltip:{"--tooltip-radius":o===void 0?void 0:wt(o),"--tooltip-bg":l?en(l,n):void 0,"--tooltip-color":l?"var(--mantine-color-white)":void 0}}),lp=ve((n,o)=>{const l=le("TooltipFloating",f_,n),{children:i,refProp:s,withinPortal:c,style:f,className:m,classNames:p,styles:h,unstyled:v,radius:y,color:S,label:x,offset:C,position:E,multiline:R,zIndex:N,disabled:j,defaultOpened:M,variant:z,vars:U,portalProps:O,...H}=l,k=nn(),Z=_e({name:"TooltipFloating",props:l,classes:$c,className:m,style:f,classNames:p,styles:h,unstyled:v,rootSelector:"tooltip",vars:U,varsResolver:d_}),{handleMouseMove:ne,x:ae,y:te,opened:ie,boundaryRef:ce,floating:oe,setOpened:A}=u_({offset:C,position:E,defaultOpened:M});if(!ba(i))throw new Error("[@mantine/core] Tooltip.Floating component children should be an element or a component that accepts ref, fragments, strings, numbers and other primitive values are not supported");const B=Ct(ce,sc(i),o),L=i.props,X=_=>{L.onMouseEnter?.(_),ne(_),A(!0)},F=_=>{L.onMouseLeave?.(_),A(!1)};return b.jsxs(b.Fragment,{children:[b.jsx(Vo,{...O,withinPortal:c,children:b.jsx(fe,{...H,...Z("tooltip",{style:{...om(f,k),zIndex:N,display:!j&&ie?"block":"none",top:(te&&Math.round(te))??"",left:(ae&&Math.round(ae))??""}}),variant:z,ref:oe,mod:{multiline:R},children:x})}),w.cloneElement(i,{...L,[s]:B,onMouseEnter:X,onMouseLeave:F})]})});lp.classes=$c;lp.displayName="@mantine/core/TooltipFloating";const k1=w.createContext(!1),m_=k1.Provider,p_=()=>w.useContext(k1),h_={openDelay:0,closeDelay:0};function rp(n){const{openDelay:o,closeDelay:l,children:i}=le("TooltipGroup",h_,n);return b.jsx(m_,{value:!0,children:b.jsx(v3,{delay:{open:o,close:l},children:i})})}rp.displayName="@mantine/core/TooltipGroup";rp.extend=n=>n;function v_(n){if(n===void 0)return{shift:!0,flip:!0};const o={...n};return n.shift===void 0&&(o.shift=!0),n.flip===void 0&&(o.flip=!0),o}function g_(n){const o=v_(n.middlewares),l=[db(n.offset)];return o.shift&&l.push(fm(typeof o.shift=="boolean"?{padding:8}:{padding:8,...o.shift})),o.flip&&l.push(typeof o.flip=="boolean"?nc():nc(o.flip)),l.push(mb({element:n.arrowRef,padding:n.arrowOffset})),o.inline?l.push(typeof o.inline=="boolean"?li():li(o.inline)):n.inline&&l.push(li()),l}function y_(n){const[o,l]=w.useState(n.defaultOpened),s=typeof n.opened=="boolean"?n.opened:o,c=p_(),f=Kn(),m=w.useCallback(O=>{l(O),O&&j(f)},[f]),{x:p,y:h,context:v,refs:y,update:S,placement:x,middlewareData:{arrow:{x:C,y:E}={}}}=hm({strategy:n.strategy,placement:n.position,open:s,onOpenChange:m,middleware:g_(n)}),{delay:R,currentId:N,setCurrentId:j}=g3(v,{id:f}),{getReferenceProps:M,getFloatingProps:z}=E3([p3(v,{enabled:n.events?.hover,delay:c?R:{open:n.openDelay,close:n.closeDelay},mouseOnly:!n.events?.touch}),C3(v,{enabled:n.events?.focus,visibleOnly:!0}),R3(v,{role:"tooltip"}),x3(v,{enabled:typeof n.opened>"u"})]);Ub({opened:s,position:n.position,positionDependencies:n.positionDependencies,floating:{refs:y,update:S}}),ga(()=>{n.onPositionChange?.(x)},[x]);const U=s&&N&&N!==f;return{x:p,y:h,arrowX:C,arrowY:E,reference:y.setReference,floating:y.setFloating,getFloatingProps:z,getReferenceProps:M,isGroupPhase:U,opened:s,placement:x}}const h0={position:"top",refProp:"ref",withinPortal:!0,inline:!1,defaultOpened:!1,arrowSize:4,arrowOffset:5,arrowRadius:0,arrowPosition:"side",offset:5,transitionProps:{duration:100,transition:"fade"},events:{hover:!0,focus:!1,touch:!1},zIndex:$n("popover"),positionDependencies:[],middlewares:{flip:!0,shift:!0,inline:!1}},b_=(n,{radius:o,color:l})=>({tooltip:{"--tooltip-radius":o===void 0?void 0:wt(o),"--tooltip-bg":l?en(l,n):void 0,"--tooltip-color":l?"var(--mantine-color-white)":void 0}}),gi=ve((n,o)=>{const l=le("Tooltip",h0,n),{children:i,position:s,refProp:c,label:f,openDelay:m,closeDelay:p,onPositionChange:h,opened:v,defaultOpened:y,withinPortal:S,radius:x,color:C,classNames:E,styles:R,unstyled:N,style:j,className:M,withArrow:z,arrowSize:U,arrowOffset:O,arrowRadius:H,arrowPosition:k,offset:Z,transitionProps:ne,multiline:ae,events:te,zIndex:ie,disabled:ce,positionDependencies:oe,onClick:A,onMouseEnter:B,onMouseLeave:L,inline:X,variant:F,keepMounted:_,vars:Y,portalProps:ee,mod:ue,floatingStrategy:re,middlewares:de,...ge}=le("Tooltip",h0,l),{dir:Ee}=Pl(),Te=w.useRef(null),He=y_({position:Db(Ee,s),closeDelay:p,openDelay:m,onPositionChange:h,opened:v,defaultOpened:y,events:te,arrowRef:Te,arrowOffset:O,offset:typeof Z=="number"?Z+(z?U/2:0):Z,positionDependencies:[...oe,i],inline:X,strategy:re,middlewares:de}),st=_e({name:"Tooltip",props:l,classes:$c,className:M,style:j,classNames:E,styles:R,unstyled:N,rootSelector:"tooltip",vars:Y,varsResolver:b_});if(!ba(i))throw new Error("[@mantine/core] Tooltip component children should be an element or a component that accepts ref, fragments, strings, numbers and other primitive values are not supported");const ot=Ct(He.reference,sc(i),o),St=c_(ne,{duration:100,transition:"fade"}),Je=i.props;return b.jsxs(b.Fragment,{children:[b.jsx(Vo,{...ee,withinPortal:S,children:b.jsx(oo,{...St,keepMounted:_,mounted:!ce&&!!He.opened,duration:He.isGroupPhase?10:St.duration,children:ct=>b.jsxs(fe,{...ge,"data-fixed":re==="fixed"||void 0,variant:F,mod:[{multiline:ae},ue],...He.getFloatingProps({ref:He.floating,className:st("tooltip").className,style:{...st("tooltip").style,...ct,zIndex:ie,top:He.y??0,left:He.x??0}}),children:[f,b.jsx(Sm,{ref:Te,arrowX:He.arrowX,arrowY:He.arrowY,visible:z,position:He.placement,arrowSize:U,arrowOffset:O,arrowRadius:H,arrowPosition:k,...st("arrow")})]})})}),w.cloneElement(i,He.getReferenceProps({onClick:A,onMouseEnter:B,onMouseLeave:L,onMouseMove:l.onMouseMove,onPointerDown:l.onPointerDown,onPointerEnter:l.onPointerEnter,className:yt(M,Je.className),...Je,[c]:ot}))]})});gi.classes=$c;gi.displayName="@mantine/core/Tooltip";gi.Floating=lp;gi.Group=rp;const S_={searchable:!1,withCheckIcon:!0,allowDeselect:!0,checkIconPosition:"left"},ip=ve((n,o)=>{const l=le("Select",S_,n),{classNames:i,styles:s,unstyled:c,vars:f,dropdownOpened:m,defaultDropdownOpened:p,onDropdownClose:h,onDropdownOpen:v,onFocus:y,onBlur:S,onClick:x,onChange:C,data:E,value:R,defaultValue:N,selectFirstOptionOnChange:j,onOptionSubmit:M,comboboxProps:z,readOnly:U,disabled:O,filter:H,limit:k,withScrollArea:Z,maxDropdownHeight:ne,size:ae,searchable:te,rightSection:ie,checkIconPosition:ce,withCheckIcon:oe,nothingFoundMessage:A,name:B,form:L,searchValue:X,defaultSearchValue:F,onSearchChange:_,allowDeselect:Y,error:ee,rightSectionPointerEvents:ue,id:re,clearable:de,clearButtonProps:ge,hiddenInputProps:Ee,renderOption:Te,onClear:He,autoComplete:st,scrollAreaProps:ot,__defaultRightSection:St,__clearSection:Je,__clearable:ct,chevronColor:$t,...me}=l,pe=w.useMemo(()=>lR(E),[E]),Se=w.useMemo(()=>l1(pe),[pe]),Me=Kn(re),[Oe,ye,je]=ya({value:R,defaultValue:N,finalValue:null,onChange:C}),se=typeof Oe=="string"?Se[Oe]:void 0,Ce=zC(se),[lt,ut,Lt]=ya({value:X,defaultValue:F,finalValue:se?se.label:"",onChange:_}),nt=f1({opened:m,defaultOpened:p,onDropdownOpen:()=>{v?.(),nt.updateSelectedOptionIndex("active",{scrollIntoView:!0})},onDropdownClose:()=>{h?.(),nt.resetSelectedOption()}}),Et=at=>{ut(at),nt.resetSelectedOption()},{resolvedClassNames:so,resolvedStyles:Si}=Xl({props:l,styles:s,classNames:i});w.useEffect(()=>{j&&nt.selectFirstOption()},[j,lt]),w.useEffect(()=>{R===null&&Et(""),typeof R=="string"&&se&&(Ce?.value!==se.value||Ce?.label!==se.label)&&Et(se.label)},[R,se]),w.useEffect(()=>{!je&&!Lt&&Et(typeof Oe=="string"&&Se[Oe]?.label||"")},[E,Oe]);const co=b.jsx(Ze.ClearButton,{...ge,onClear:()=>{ye(null,null),Et(""),He?.()}}),Ht=de&&!!Oe&&!O&&!U;return b.jsxs(b.Fragment,{children:[b.jsxs(Ze,{store:nt,__staticSelector:"Select",classNames:so,styles:Si,unstyled:c,readOnly:U,onOptionSubmit:at=>{M?.(at);const Tt=Y&&Se[at].value===Oe?null:Se[at],lr=Tt?Tt.value:null;lr!==Oe&&ye(lr,Tt),!je&&Et(typeof lr=="string"&&Tt?.label||""),nt.closeDropdown()},size:ae,...z,children:[b.jsx(Ze.Target,{targetType:te?"input":"button",autoComplete:st,children:b.jsx(Ta,{id:Me,ref:o,__defaultRightSection:b.jsx(Ze.Chevron,{size:ae,error:ee,unstyled:c,color:$t}),__clearSection:co,__clearable:Ht,rightSection:ie,rightSectionPointerEvents:ue||(Ht?"all":"none"),...me,size:ae,__staticSelector:"Select",disabled:O,readOnly:U||!te,value:lt,onChange:at=>{Et(at.currentTarget.value),nt.openDropdown(),j&&nt.selectFirstOption()},onFocus:at=>{te&&nt.openDropdown(),y?.(at)},onBlur:at=>{te&&nt.closeDropdown(),Et(Oe!=null&&Se[Oe]?.label||""),S?.(at)},onClick:at=>{te?nt.openDropdown():nt.toggleDropdown(),x?.(at)},classNames:so,styles:Si,unstyled:c,pointer:!te,error:ee})}),b.jsx(VR,{data:pe,hidden:U||O,filter:H,search:lt,limit:k,hiddenWhenEmpty:!A,withScrollArea:Z,maxDropdownHeight:ne,filterOptions:te&&se?.label!==lt,value:Oe,checkIconPosition:ce,withCheckIcon:oe,nothingFoundMessage:A,unstyled:c,labelId:me.label?`${Me}-label`:void 0,"aria-label":me.label?void 0:me["aria-label"],renderOption:Te,scrollAreaProps:ot})]}),b.jsx(Ze.HiddenInput,{value:Oe,name:B,form:L,disabled:O,...Ee})]})});ip.classes={...Ta.classes,...Ze.classes};ip.displayName="@mantine/core/Select";var Y1={root:"m_6d731127"};const x_={gap:"md",align:"stretch",justify:"flex-start"},w_=(n,{gap:o,align:l,justify:i})=>({root:{"--stack-gap":ql(o),"--stack-align":l,"--stack-justify":i}}),Wt=ve((n,o)=>{const l=le("Stack",x_,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,align:h,justify:v,gap:y,variant:S,...x}=l,C=_e({name:"Stack",props:l,classes:Y1,className:s,style:c,classNames:i,styles:f,unstyled:m,vars:p,varsResolver:w_});return b.jsx(fe,{ref:o,...C("root"),variant:S,...x})});Wt.classes=Y1;Wt.displayName="@mantine/core/Stack";const C_={},Lc=ve((n,o)=>{const l=le("TextInput",C_,n);return b.jsx(Ta,{component:"input",ref:o,...l,__staticSelector:"TextInput"})});Lc.classes=Ta.classes;Lc.displayName="@mantine/core/TextInput";function E_(n){let o=n,l=!1;const i=new Set;return{getState(){return o},updateState(s){o=typeof s=="function"?s(o):s},setState(s){this.updateState(s),i.forEach(c=>c(o))},initialize(s){l||(o=s,l=!0)},subscribe(s){return i.add(s),()=>i.delete(s)}}}function T_(n){return w.useSyncExternalStore(n.subscribe,()=>n.getState(),()=>n.getState())}function R_(n,o,l){const i=[],s=[],c={};for(const f of n){const m=f.position||o;c[m]=c[m]||0,c[m]+=1,c[m]<=l?s.push(f):i.push(f)}return{notifications:s,queue:i}}const __=()=>E_({notifications:[],queue:[],defaultPosition:"bottom-right",limit:5}),Go=__(),N_=(n=Go)=>T_(n);function or(n,o){const l=n.getState(),i=o([...l.notifications,...l.queue]),s=R_(i,l.defaultPosition,l.limit);n.setState({notifications:s.notifications,queue:s.queue,limit:l.limit,defaultPosition:l.defaultPosition})}function A_(n,o=Go){const l=n.id||z0();return or(o,i=>n.id&&i.some(s=>s.id===n.id)?i:[...i,{...n,id:l}]),l}function q1(n,o=Go){return or(o,l=>l.filter(i=>i.id===n?(i.onClose?.(i),!1):!0)),n}function M_(n,o=Go){return or(o,l=>l.map(i=>i.id===n.id?{...i,...n}:i)),n.id}function O_(n=Go){or(n,()=>[])}function D_(n=Go){or(n,o=>o.slice(0,n.getState().limit))}const Vt={show:A_,hide:q1,update:M_,clean:O_,cleanQueue:D_,updateState:or};function Gd(n,o){return Gd=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(l,i){return l.__proto__=i,l},Gd(n,o)}function G1(n,o){n.prototype=Object.create(o.prototype),n.prototype.constructor=n,Gd(n,o)}const v0={disabled:!1},oc=gt.createContext(null);var z_=function(o){return o.scrollTop},oi="unmounted",Mo="exited",Oo="entering",$l="entered",Xd="exiting",_a=(function(n){G1(o,n);function o(i,s){var c;c=n.call(this,i,s)||this;var f=s,m=f&&!f.isMounting?i.enter:i.appear,p;return c.appearStatus=null,i.in?m?(p=Mo,c.appearStatus=Oo):p=$l:i.unmountOnExit||i.mountOnEnter?p=oi:p=Mo,c.state={status:p},c.nextCallback=null,c}o.getDerivedStateFromProps=function(s,c){var f=s.in;return f&&c.status===oi?{status:Mo}:null};var l=o.prototype;return l.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},l.componentDidUpdate=function(s){var c=null;if(s!==this.props){var f=this.state.status;this.props.in?f!==Oo&&f!==$l&&(c=Oo):(f===Oo||f===$l)&&(c=Xd)}this.updateStatus(!1,c)},l.componentWillUnmount=function(){this.cancelNextCallback()},l.getTimeouts=function(){var s=this.props.timeout,c,f,m;return c=f=m=s,s!=null&&typeof s!="number"&&(c=s.exit,f=s.enter,m=s.appear!==void 0?s.appear:f),{exit:c,enter:f,appear:m}},l.updateStatus=function(s,c){if(s===void 0&&(s=!1),c!==null)if(this.cancelNextCallback(),c===Oo){if(this.props.unmountOnExit||this.props.mountOnEnter){var f=this.props.nodeRef?this.props.nodeRef.current:ai.findDOMNode(this);f&&z_(f)}this.performEnter(s)}else this.performExit();else this.props.unmountOnExit&&this.state.status===Mo&&this.setState({status:oi})},l.performEnter=function(s){var c=this,f=this.props.enter,m=this.context?this.context.isMounting:s,p=this.props.nodeRef?[m]:[ai.findDOMNode(this),m],h=p[0],v=p[1],y=this.getTimeouts(),S=m?y.appear:y.enter;if(!s&&!f||v0.disabled){this.safeSetState({status:$l},function(){c.props.onEntered(h)});return}this.props.onEnter(h,v),this.safeSetState({status:Oo},function(){c.props.onEntering(h,v),c.onTransitionEnd(S,function(){c.safeSetState({status:$l},function(){c.props.onEntered(h,v)})})})},l.performExit=function(){var s=this,c=this.props.exit,f=this.getTimeouts(),m=this.props.nodeRef?void 0:ai.findDOMNode(this);if(!c||v0.disabled){this.safeSetState({status:Mo},function(){s.props.onExited(m)});return}this.props.onExit(m),this.safeSetState({status:Xd},function(){s.props.onExiting(m),s.onTransitionEnd(f.exit,function(){s.safeSetState({status:Mo},function(){s.props.onExited(m)})})})},l.cancelNextCallback=function(){this.nextCallback!==null&&(this.nextCallback.cancel(),this.nextCallback=null)},l.safeSetState=function(s,c){c=this.setNextCallback(c),this.setState(s,c)},l.setNextCallback=function(s){var c=this,f=!0;return this.nextCallback=function(m){f&&(f=!1,c.nextCallback=null,s(m))},this.nextCallback.cancel=function(){f=!1},this.nextCallback},l.onTransitionEnd=function(s,c){this.setNextCallback(c);var f=this.props.nodeRef?this.props.nodeRef.current:ai.findDOMNode(this),m=s==null&&!this.props.addEndListener;if(!f||m){setTimeout(this.nextCallback,0);return}if(this.props.addEndListener){var p=this.props.nodeRef?[this.nextCallback]:[f,this.nextCallback],h=p[0],v=p[1];this.props.addEndListener(h,v)}s!=null&&setTimeout(this.nextCallback,s)},l.render=function(){var s=this.state.status;if(s===oi)return null;var c=this.props,f=c.children;c.in,c.mountOnEnter,c.unmountOnExit,c.appear,c.enter,c.exit,c.timeout,c.addEndListener,c.onEnter,c.onEntering,c.onEntered,c.onExit,c.onExiting,c.onExited,c.nodeRef;var m=A1(c,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]);return gt.createElement(oc.Provider,{value:null},typeof f=="function"?f(s,m):gt.cloneElement(gt.Children.only(f),m))},o})(gt.Component);_a.contextType=oc;_a.propTypes={};function jl(){}_a.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:jl,onEntering:jl,onEntered:jl,onExit:jl,onExiting:jl,onExited:jl};_a.UNMOUNTED=oi;_a.EXITED=Mo;_a.ENTERING=Oo;_a.ENTERED=$l;_a.EXITING=Xd;function j_(n){if(n===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return n}function sp(n,o){var l=function(c){return o&&w.isValidElement(c)?o(c):c},i=Object.create(null);return n&&w.Children.map(n,function(s){return s}).forEach(function(s){i[s.key]=l(s)}),i}function B_(n,o){n=n||{},o=o||{};function l(v){return v in o?o[v]:n[v]}var i=Object.create(null),s=[];for(var c in n)c in o?s.length&&(i[c]=s,s=[]):s.push(c);var f,m={};for(var p in o){if(i[p])for(f=0;f(l[i.position||o].push(i),l),X1.reduce((l,i)=>(l[i]=[],l),{}))}const g0={left:"translateX(-100%)",right:"translateX(100%)","top-center":"translateY(-100%)","bottom-center":"translateY(100%)"},k_={left:"translateX(0)",right:"translateX(0)","top-center":"translateY(0)","bottom-center":"translateY(0)"};function Y_({state:n,maxHeight:o,position:l,transitionDuration:i}){const[s,c]=l.split("-"),f=c==="center"?`${s}-center`:c,m={opacity:0,maxHeight:o,transform:g0[f],transitionDuration:`${i}ms, ${i}ms, ${i}ms`,transitionTimingFunction:"cubic-bezier(.51,.3,0,1.21), cubic-bezier(.51,.3,0,1.21), linear",transitionProperty:"opacity, transform, max-height"},p={opacity:1,transform:k_[f]},h={opacity:0,maxHeight:0,transform:g0[f]};return{...m,...{entering:p,entered:p,exiting:h,exited:h}[n]}}function q_(n,o){return typeof o=="number"?o:o===!1||n===!1?!1:n}const P1=w.forwardRef(({data:n,onHide:o,autoClose:l,...i},s)=>{const{autoClose:c,message:f,...m}=n,p=q_(l,n.autoClose),h=w.useRef(-1),v=()=>window.clearTimeout(h.current),y=()=>{o(n.id),v()},S=()=>{typeof p=="number"&&(h.current=window.setTimeout(y,p))};return w.useEffect(()=>{n.onOpen?.(n)},[]),w.useEffect(()=>(S(),v),[p]),b.jsx(np,{...i,...m,onClose:y,ref:s,onMouseEnter:v,onMouseLeave:S,children:f})});P1.displayName="@mantine/notifications/NotificationContainer";var Q1={root:"m_b37d9ac7",notification:"m_5ed0edd0"};const G_=_a,X_={position:"bottom-right",autoClose:4e3,transitionDuration:250,containerWidth:440,notificationMaxHeight:200,limit:5,zIndex:$n("overlay"),store:Go,withinPortal:!0},P_=(n,{zIndex:o,containerWidth:l})=>({root:{"--notifications-z-index":o?.toString(),"--notifications-container-width":K(l)}}),Na=ve((n,o)=>{const l=le("Notifications",X_,n),{classNames:i,className:s,style:c,styles:f,unstyled:m,vars:p,position:h,autoClose:v,transitionDuration:y,containerWidth:S,notificationMaxHeight:x,limit:C,zIndex:E,store:R,portalProps:N,withinPortal:j,...M}=l,z=nn(),U=N_(R),O=AC(),H=ic(),k=w.useRef({}),Z=w.useRef(0),ae=(z.respectReducedMotion?H:!1)?1:y,te=_e({name:"Notifications",classes:Q1,props:l,className:s,style:c,classNames:i,styles:f,unstyled:m,vars:p,varsResolver:P_});w.useEffect(()=>{R?.updateState(oe=>({...oe,limit:C||5,defaultPosition:h}))},[C,h]),ga(()=>{U.notifications.length>Z.current&&setTimeout(()=>O(),0),Z.current=U.notifications.length},[U.notifications]);const ie=V_(U.notifications,h),ce=X1.reduce((oe,A)=>(oe[A]=ie[A].map(({style:B,...L})=>b.jsx(G_,{timeout:ae,onEnter:()=>k.current[L.id].offsetHeight,nodeRef:{current:k.current[L.id]},children:X=>b.jsx(P1,{ref:F=>{k.current[L.id]=F},data:L,onHide:F=>q1(F,R),autoClose:v,...te("notification",{style:{...Y_({state:X,position:A,transitionDuration:ae,maxHeight:x}),...B}})})},L.id)),oe),{});return b.jsxs(Vo,{withinPortal:j,...N,children:[b.jsx(fe,{...te("root"),"data-position":"top-center",ref:o,...M,children:b.jsx(Wa,{children:ce["top-center"]})}),b.jsx(fe,{...te("root"),"data-position":"top-left",...M,children:b.jsx(Wa,{children:ce["top-left"]})}),b.jsx(fe,{...te("root",{className:Ul.classNames.fullWidth}),"data-position":"top-right",...M,children:b.jsx(Wa,{children:ce["top-right"]})}),b.jsx(fe,{...te("root",{className:Ul.classNames.fullWidth}),"data-position":"bottom-right",...M,children:b.jsx(Wa,{children:ce["bottom-right"]})}),b.jsx(fe,{...te("root"),"data-position":"bottom-left",...M,children:b.jsx(Wa,{children:ce["bottom-left"]})}),b.jsx(fe,{...te("root"),"data-position":"bottom-center",...M,children:b.jsx(Wa,{children:ce["bottom-center"]})})]})});Na.classes=Q1;Na.displayName="@mantine/notifications/Notifications";Na.show=Vt.show;Na.hide=Vt.hide;Na.update=Vt.update;Na.clean=Vt.clean;Na.cleanQueue=Vt.cleanQueue;Na.updateState=Vt.updateState;var Q_={outline:{xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"},filled:{xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"currentColor",stroke:"none"}};const _n=(n,o,l,i)=>{const s=w.forwardRef(({color:c="currentColor",size:f=24,stroke:m=2,title:p,className:h,children:v,...y},S)=>w.createElement("svg",{ref:S,...Q_[n],width:f,height:f,className:["tabler-icon",`tabler-icon-${o}`,h].join(" "),strokeWidth:m,stroke:c,...y},[p&&w.createElement("title",{key:"svg-title"},p),...i.map(([x,C])=>w.createElement(x,C)),...Array.isArray(v)?v:[v]]));return s.displayName=`${l}`,s};const Z_=[["path",{d:"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0",key:"svg-0"}],["path",{d:"M12 8v4",key:"svg-1"}],["path",{d:"M12 16h.01",key:"svg-2"}]],Z1=_n("outline","alert-circle","AlertCircle",Z_);const K_=[["path",{d:"M12 9v4",key:"svg-0"}],["path",{d:"M10.363 3.591l-8.106 13.534a1.914 1.914 0 0 0 1.636 2.871h16.214a1.914 1.914 0 0 0 1.636 -2.87l-8.106 -13.536a1.914 1.914 0 0 0 -3.274 0",key:"svg-1"}],["path",{d:"M12 16h.01",key:"svg-2"}]],I_=_n("outline","alert-triangle","AlertTriangle",K_);const J_=[["path",{d:"M3 12a9 9 0 1 0 18 0a9 9 0 1 0 -18 0",key:"svg-0"}],["path",{d:"M5.7 5.7l12.6 12.6",key:"svg-1"}]],F_=_n("outline","ban","Ban",J_);const W_=[["path",{d:"M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5",key:"svg-0"}]],e6=_n("outline","brand-github","BrandGithub",W_);const t6=[["path",{d:"M6 9l6 6l6 -6",key:"svg-0"}]],n6=_n("outline","chevron-down","ChevronDown",t6);const a6=[["path",{d:"M9 6l6 6l-6 6",key:"svg-0"}]],o6=_n("outline","chevron-right","ChevronRight",a6);const l6=[["path",{d:"M3 12a9 9 0 1 0 18 0a9 9 0 1 0 -18 0",key:"svg-0"}],["path",{d:"M9 12l2 2l4 -4",key:"svg-1"}]],r6=_n("outline","circle-check","CircleCheck",l6);const i6=[["path",{d:"M3 14c.83 .642 2.077 1.017 3.5 1c1.423 .017 2.67 -.358 3.5 -1c.83 -.642 2.077 -1.017 3.5 -1c1.423 -.017 2.67 .358 3.5 1",key:"svg-0"}],["path",{d:"M8 3a2.4 2.4 0 0 0 -1 2a2.4 2.4 0 0 0 1 2",key:"svg-1"}],["path",{d:"M12 3a2.4 2.4 0 0 0 -1 2a2.4 2.4 0 0 0 1 2",key:"svg-2"}],["path",{d:"M3 10h14v5a6 6 0 0 1 -6 6h-2a6 6 0 0 1 -6 -6v-5",key:"svg-3"}],["path",{d:"M16.746 16.726a3 3 0 1 0 .252 -5.555",key:"svg-4"}]],s6=_n("outline","coffee","Coffee",i6);const c6=[["path",{d:"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0",key:"svg-0"}],["path",{d:"M12 9h.01",key:"svg-1"}],["path",{d:"M11 12h1v4h1",key:"svg-2"}]],K1=_n("outline","info-circle","InfoCircle",c6);const u6=[["path",{d:"M6 6a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v12a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1l0 -12",key:"svg-0"}],["path",{d:"M14 6a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v12a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1l0 -12",key:"svg-1"}]],f6=_n("outline","player-pause","PlayerPause",u6);const d6=[["path",{d:"M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4",key:"svg-0"}],["path",{d:"M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4",key:"svg-1"}]],m6=_n("outline","refresh","Refresh",d6);const p6=[["path",{d:"M4 7l16 0",key:"svg-0"}],["path",{d:"M10 11l0 6",key:"svg-1"}],["path",{d:"M14 11l0 6",key:"svg-2"}],["path",{d:"M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12",key:"svg-3"}],["path",{d:"M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3",key:"svg-4"}]],h6=_n("outline","trash","Trash",p6),v6={};function g6({children:n,defaultColorScheme:o="dark",notificationsPosition:l="bottom-right"}){return b.jsxs(X0,{theme:v6,defaultColorScheme:o,children:[b.jsx(Na,{position:l}),n]})}function y0(n){return n?{color:"teal",variant:"filled",styles:{root:{"--button-bg":"var(--mantine-color-teal-9)","--button-hover":"var(--mantine-color-teal-8)"}}}:{}}function y6({logoUrl:n,appName:o,version:l,actions:i=[],extra:s,onLogout:c,githubUrl:f,kofiUrl:m="https://ko-fi.com/sethwv",username:p}){const h=b.jsx(Km,{src:n,h:32,w:"auto"}),v=!!(f||m);return b.jsx(Bn.Header,{children:b.jsxs(Nt,{h:"100%",px:"md",justify:"space-between",wrap:"nowrap",children:[b.jsxs(Nt,{gap:"xs",wrap:"nowrap",style:{flexShrink:0},children:[v?b.jsxs(kt,{shadow:"md",width:300,position:"bottom-start",children:[b.jsx(kt.Target,{children:b.jsx(dn,{style:{display:"flex",alignItems:"center"},"aria-label":"Plugin links",children:h})}),b.jsxs(kt.Dropdown,{children:[f&&b.jsxs(kt.Item,{component:"a",href:f,target:"_blank",rel:"noopener noreferrer",leftSection:b.jsx(e6,{size:16}),children:[o," on GitHub"]}),m&&b.jsx(kt.Item,{component:"a",href:m,target:"_blank",rel:"noopener noreferrer",leftSection:b.jsx(s6,{size:16}),children:"Buy me a Coffee"})]})]}):h,b.jsxs(Wt,{gap:0,children:[o&&b.jsx(Ie,{size:"xs",lh:1,children:o}),l&&b.jsxs(Ie,{size:"xs",c:"dimmed",lh:1,children:["v",l]})]})]}),b.jsxs(Nt,{gap:"xs",wrap:"nowrap",children:[i.map(({key:y,label:S,icon:x,onClick:C,loading:E,active:R,count:N,variant:j,color:M})=>b.jsxs(w.Fragment,{children:[b.jsxs(Zn,{size:"sm",variant:j,color:M,leftSection:b.jsx(x,{size:16}),loading:E,onClick:C,visibleFrom:"xs",...y0(R),children:[S,N>0?` (${N})`:""]}),b.jsx(Yo,{size:"lg",variant:"default",loading:E,hiddenFrom:"xs","aria-label":S,onClick:C,...y0(R),children:b.jsx(x,{size:18})})]},y)),s,c&&b.jsxs(Wt,{gap:0,align:"flex-end",children:[p&&b.jsx(Ie,{size:"xs",lh:1,children:p}),b.jsx(dn,{onClick:c,children:b.jsx(Ie,{size:"xs",c:"dimmed",lh:1,children:"Logout"})})]})]})]})})}const Td="dispatch_ui_kit_last_username";function b6({logoUrl:n,appName:o,description:l,onLogin:i,onLoggedIn:s}){const c=localStorage.getItem(Td)??"",[f,m]=w.useState(c),[p,h]=w.useState(""),[v,y]=w.useState(!!c),[S,x]=w.useState(""),[C,E]=w.useState(!1);async function R(N){N.preventDefault(),E(!0),x("");try{await i(f,p),v?localStorage.setItem(Td,f):localStorage.removeItem(Td),s()}catch(j){x(j.message||"Login failed")}finally{E(!1)}}return b.jsx(ci,{mih:"100dvh",bg:"dark.8",children:b.jsxs(Wt,{align:"center",gap:"lg",w:340,px:"md",children:[b.jsx("img",{src:n,style:{height:40,width:"auto"},alt:o}),l&&b.jsx(Ie,{size:"sm",c:"dimmed",ta:"center",children:l}),b.jsx(Il,{withBorder:!0,p:"xl",radius:"md",w:"100%",children:b.jsx("form",{onSubmit:R,children:b.jsxs(Wt,{gap:"sm",children:[S&&b.jsx(Ec,{icon:b.jsx(Z1,{size:16}),color:"red",variant:"light",py:"xs",children:S}),b.jsx(Lc,{label:"Username",autoComplete:"username",value:f,onChange:N=>m(N.currentTarget.value),required:!0}),b.jsx(Bc,{label:"Password",autoComplete:"current-password",value:p,onChange:N=>h(N.currentTarget.value),required:!0}),b.jsx(er,{label:"Remember me",checked:v,onChange:N=>y(N.currentTarget.checked)}),b.jsx(Zn,{type:"submit",loading:C,fullWidth:!0,mt:"xs",children:"Sign in"})]})})})]})})}function S6({action:n,onClose:o}){return n?b.jsxs(Hn,{opened:!!n,onClose:o,title:n.title,size:"sm",centered:!0,children:[b.jsx(Ie,{size:"sm",children:n.message}),b.jsxs(Nt,{mt:"md",justify:"flex-end",children:[b.jsx(Zn,{variant:"default",onClick:o,children:"Cancel"}),b.jsx(Zn,{color:n.color??"blue",loading:n.loading,onClick:()=>{o(),n.onConfirm()},children:n.confirmLabel??"Confirm"})]})]}):null}function x6({tokenKey:n,basePath:o,onUnauthorized:l,refreshTokenKey:i=`${n}_refresh`,refreshPath:s="/auth/refresh",usernameKey:c=`${n}_username`}={}){const f=o??(typeof window<"u"&&window.__BASE_PATH__||"/");function m(){return localStorage.getItem(n)}function p(z){z?localStorage.setItem(n,z):localStorage.removeItem(n)}function h(){return localStorage.getItem(i)}function v(z){z?localStorage.setItem(i,z):localStorage.removeItem(i)}function y(){return localStorage.getItem(c)}function S(z){z?localStorage.setItem(c,z):localStorage.removeItem(c)}async function x(z,U={}){const O=m(),H={"Content-Type":"application/json",...U.headers||{}};O&&(H.Authorization=`Bearer ${O}`);const k=await fetch(`${f}api${z}`,{...U,headers:H});if(k.status===401){const Z=new Error("Session expired, please log in again");throw Z.status=401,Z}if(!k.ok){let Z=`Request failed (${k.status})`;try{Z=(await k.json()).error||Z}catch{}throw new Error(Z)}return k.status===204?null:k.json()}let C=null;function E(){return C||(C=(async()=>{const z=h();if(!z)throw new Error("No refresh token");const U=await fetch(`${f}api${s}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refresh:z})});if(!U.ok)throw new Error("Refresh failed");const O=await U.json();p(O.access)})().finally(()=>{C=null})),C}async function R(z,U={}){try{return await x(z,U)}catch(O){if(O.status!==401)throw O;if(h())try{return await E(),await x(z,U)}catch{}throw p(null),v(null),S(null),l?.(O),O}}async function N(z,U,O="/auth/token"){const H=await x(O,{method:"POST",body:JSON.stringify({username:z,password:U})});return p(H.access),H.refresh&&v(H.refresh),S(z),H}function j(){p(null),v(null),S(null)}function M(){return!!m()}return{request:R,login:N,logout:j,isAuthenticated:M,getToken:m,getUsername:y,basePath:f}}const w6={active:"green",ok:"green",success:"green",buffering:"yellow",connecting:"yellow",initializing:"yellow",warning:"yellow",waiting:"blue",info:"blue",error:"red",failed:"red",stopped:"gray",stopping:"gray",idle:"gray",inactive:"gray"};function cp(n,o={}){return o[n]??w6[n]??"gray"}function I1(n,{onOptimisticChange:o,shouldReload:l,onReload:i,onSaved:s,onError:c,delayMs:f=700}={}){const m=w.useRef({});return w.useCallback((p,h,v)=>{o?.({[p]:h});const y={[p]:h},S=async()=>{try{await n(y),s?.(y),l?.(p)&&await i?.()}catch(x){c?.(x)}};return clearTimeout(m.current[p]),v?S():(m.current[p]=setTimeout(S,f),Promise.resolve())},[n,o,l,i,s,c,f])}function C6({label:n,description:o}){return o?b.jsxs(Nt,{gap:4,align:"center",wrap:"nowrap",children:[b.jsx("span",{children:n}),b.jsx(gi,{label:o,multiline:!0,maw:260,withArrow:!0,position:"top-start",events:{hover:!0,focus:!0,touch:!0},children:b.jsx(Yo,{size:"xs",variant:"transparent",c:"dimmed",tabIndex:-1,style:{cursor:"default",flexShrink:0},children:b.jsx(K1,{size:13})})})]}):n}function J1({field:n,value:o,onChange:l}){const i={label:b.jsx(C6,{label:n.label,description:n.description})};switch(n.type){case"select":{const s=new Set,c=(n.options??[]).reduce((f,m)=>{const p=String(m.value);return s.has(p)||(s.add(p),f.push({value:p,label:m.label})),f},[]);return b.jsx(ip,{...i,data:c,value:String(o??n.default??""),onChange:l,allowDeselect:!1})}case"number":return b.jsx(op,{...i,value:o??n.default??0,min:n.min,max:n.max,placeholder:n.placeholder,onChange:l});case"string":{const s=n.input_type==="password"?Bc:Lc;return b.jsx(s,{...i,value:o??n.default??"",placeholder:n.placeholder,onChange:c=>l(c.currentTarget.value)})}default:return null}}function F1({title:n,defaultOpened:o=!1,trailingAction:l,as:i="Paper",children:s}){const[c,f]=w.useState(o);return b.jsxs(i==="Card"?qo:Il,{withBorder:!0,radius:"md",p:i==="Card"?0:void 0,children:[b.jsx(dn,{w:"100%",p:"md",onClick:()=>f(m=>!m),children:b.jsxs(Nt,{justify:"space-between",children:[b.jsxs(Nt,{gap:"xs",children:[c?b.jsx(n6,{size:16}):b.jsx(o6,{size:16}),b.jsx(Ie,{size:"sm",fw:600,children:n})]}),l]})}),b.jsx(F0,{in:c,children:s})]})}function E6({fields:n,warnings:o=[],values:l,onSave:i,onOptimisticChange:s,shouldReload:c,onReload:f,onSaved:m,onError:p,title:h="Global Settings"}){const v=I1(i,{onOptimisticChange:s,shouldReload:c,onReload:f,onSaved:m,onError:p});return b.jsxs(Wt,{gap:"xs",children:[o.map(y=>b.jsxs(Ec,{icon:b.jsx(Z1,{size:16}),color:"yellow",variant:"light",children:[b.jsx(Ie,{size:"sm",fw:500,children:y.label}),y.description&&b.jsx(Ie,{size:"xs",c:"dimmed",mt:2,children:y.description})]},y.id)),b.jsx(F1,{title:h,children:b.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(280px, 1fr))",gap:"var(--mantine-spacing-sm)",padding:"var(--mantine-spacing-md)",paddingTop:0},children:n.map(y=>b.jsx(J1,{field:y,value:l[y.id],onChange:S=>v(y.id,S,y.type!=="string")},y.id))})})]})}const W1=""+new URL("../logo.png",import.meta.url).href;let eS=()=>{};function b0(n){eS=n}const yi=x6({tokenKey:"esc_token",onUnauthorized:n=>eS(n)}),T6=yi.login,R6=yi.logout,_6=yi.isAuthenticated,N6=yi.getUsername,{request:bi}=yi;function A6(){return bi("/status")}function M6(){return bi("/fields")}function O6(){return bi("/config")}function Zs(n){return bi("/config",{method:"PATCH",body:JSON.stringify(n)})}function D6(){return bi("/restart",{method:"POST"})}function z6({n,fields:o,settings:l,isLast:i,onSettingsChange:s,onRemove:c}){const f=I1(Zs,{onOptimisticChange:s,onSaved:()=>Vt.show({message:"Saved",color:"green",autoClose:1500}),onError:y=>Vt.show({title:"Save failed",message:y.message,color:"red",autoClose:4e3})}),m=o.find(y=>y.id.startsWith("media_server_url")),p=m?l[m.id]:"",h=p?`Media Server ${n} (${p})`:`Media Server ${n}`,v=n>1&&i?b.jsx(Zn,{size:"xs",color:"red",variant:"subtle",leftSection:b.jsx(h6,{size:14}),onClick:y=>{y.stopPropagation(),c()},children:"Remove"}):null;return b.jsx(F1,{as:"Card",title:h,trailingAction:v,children:b.jsx(Wt,{gap:"md",p:"md",pt:0,children:o.map(y=>b.jsx(J1,{field:y,value:l[y.id],onChange:S=>f(y.id,S,y.type!=="string")},y.id))})})}const up={streaming:"green",compliant:"green",pending:"yellow",grace:"blue",orphan:"red",unmonitored:"gray",idle:"gray"},j6={Emby:"#52b54b",Jellyfin:"#aa5cc3"};function B6(){const[n,o]=w.useState(()=>Date.now()/1e3);return w.useEffect(()=>{const l=setInterval(()=>o(Date.now()/1e3),1e3);return()=>clearInterval(l)},[]),n}function S0(n,o){return n?`${Math.max(0,Math.round(o-n))}s ago`:"never"}function $6(n,o,l){const i=n.idle_seconds,s=i!=null&&i>=l,c=n.pool_absent_seconds;return n.is_orphan?{key:"orphan",label:`Orphan: ${n.match_reason} (no active media server session, will terminate)`}:n.in_grace&&s&&i>=o?{key:"grace",label:`Grace period: ${n.match_reason} (idle ${Math.round(i)}s, termination paused)`}:i!=null&&i>=o?{key:"pending",label:`Will terminate: ${n.match_reason} (idle ${Math.round(i)}s / ${o}s)`}:c!=null&&c>=o?{key:"pending",label:`Will terminate: ${n.match_reason} (absent from pool ${Math.round(c)}s / ${o}s)`}:c!=null?{key:"compliant",label:`Monitored: ${n.match_reason} (absent from pool ${Math.round(c)}s)`}:s?{key:"compliant",label:`Monitored: ${n.match_reason} (idle ${Math.round(i)}s)`}:{key:"streaming",label:n.match_reason||"Streaming"}}function L6(n,o){const l=(n.clients||[]).filter(s=>s.is_target_match),i=l.some(s=>(s.idle_seconds||0)>=o);return n.in_grace?{key:"grace",label:`Grace period (${n.channel_state||""})`}:i?{key:"pending",label:"Idle matched clients detected"}:l.length>0?{key:"compliant",label:`${l.length} matched client(s) active`}:{key:"idle",label:"No matched clients"}}function H6({client:n,timeout:o,pollInterval:l}){const i=$6(n,o,l);return b.jsxs(Nt,{gap:"xs",wrap:"nowrap",py:2,children:[b.jsx(Uo,{size:"xs",color:cp(i.key,up),variant:"light",style:{flexShrink:0},children:i.key}),b.jsxs(Ie,{size:"xs",c:"dimmed",style:{minWidth:0,flex:1},truncate:!0,children:[n.ip,n.username?` (${n.username})`:"",", ",i.label]})]})}function U6({channel:n,timeout:o,pollInterval:l,isRecording:i}){const s=L6(n,l),c=(n.clients||[]).filter(m=>m.is_target_match),f=(n.clients||[]).filter(m=>!m.is_target_match);return b.jsxs(qo,{withBorder:!0,radius:"md",p:"md",children:[b.jsxs(Nt,{justify:"space-between",mb:4,children:[b.jsxs(Nt,{gap:6,children:[b.jsxs(Ie,{fw:600,size:"sm",children:["CH ",n.channel_number,n.channel_name?` ${n.channel_name}`:""]}),i&&b.jsx(Uo,{size:"xs",color:"red",variant:"light",children:"DVR"})]}),b.jsx(Uo,{size:"sm",color:cp(s.key,up),variant:"light",children:s.label})]}),c.length>0&&b.jsx(Wt,{gap:2,mt:"xs",children:c.map((m,p)=>b.jsx(H6,{client:m,timeout:o,pollInterval:l},p))}),f.length>0&&b.jsxs(Ie,{size:"xs",c:"dimmed",mt:"xs",children:[f.length," unmonitored client(s)"]})]})}function V6({server:n,recordingCount:o}){const l=!!n.error,i=l?"error":n.active!=null?"streaming":"idle",s=(n.active||0)+(o||0),c=j6[n.type];return b.jsxs(qo,{withBorder:!0,radius:"md",p:"sm",style:c?{borderLeft:`4px solid ${c}`}:void 0,children:[b.jsxs(Nt,{justify:"space-between",children:[b.jsxs(Nt,{gap:6,children:[c&&b.jsx("div",{style:{width:8,height:8,borderRadius:"50%",background:c,flexShrink:0}}),b.jsxs(Ie,{fw:600,size:"sm",children:[n.name||`Server ${n.num}`,n.type&&b.jsx(Ie,{component:"span",size:"xs",fw:500,ml:6,style:{color:c},children:n.type})]})]}),b.jsx(Uo,{size:"sm",color:cp(i,up),variant:"light",children:l?"Error":n.active!=null?`${s} session(s)`:"Connecting"})]}),l&&b.jsx(Ie,{size:"xs",c:"red",mt:4,children:n.error}),!l&&b.jsx(Ie,{size:"xs",c:"dimmed",mt:4,children:n.url})]})}function k6({status:n}){const o=B6(),l=w.useMemo(()=>{const s=n.scan||{};return Object.values(s).sort((c,f)=>(c.channel_number??0)-(f.channel_number??0))},[n.scan]),i=w.useMemo(()=>new Set(n.recording_channels||[]),[n.recording_channels]);return b.jsxs(Wt,{gap:"md",children:[b.jsxs(Nt,{gap:"xs",children:[b.jsxs(Uo,{size:"lg",variant:"light",color:n.running?"green":"gray",leftSection:n.running?b.jsx(r6,{size:14}):b.jsx(f6,{size:14}),children:["Monitor ",n.running?"running":"stopped"]}),b.jsxs(Ie,{size:"xs",c:"dimmed",children:["Last scan: ",S0(n.scan_time,o)]})]}),!n.identifier_configured&&b.jsx(qo,{withBorder:!0,radius:"md",p:"sm",children:b.jsxs(Nt,{gap:"xs",wrap:"nowrap",children:[b.jsx(I_,{size:16,color:"var(--mantine-color-yellow-6)",style:{flexShrink:0}}),b.jsx(Ie,{size:"sm",children:n.running?b.jsxs(b.Fragment,{children:["Settings changed since the monitor last refreshed. This clears on its own within one poll cycle (",n.poll_interval??10,`s), or use the header's "Restart Monitor" action for it to take effect immediately.`]}):b.jsxs(b.Fragment,{children:[b.jsx("strong",{children:"Monitor is not running"}),`, so saved settings aren't being picked up yet. Use the header's "Restart Monitor" action to start it with your current configuration. (This is expected right after first setup: it only auto-starts once a server is already fully configured.)`]})})]})}),(n.media_servers||[]).length>0&&b.jsxs(Wt,{gap:"xs",children:[b.jsx(Ie,{size:"xs",tt:"uppercase",fw:700,c:"dimmed",children:"Media Servers"}),n.media_servers.map(s=>b.jsx(V6,{server:s,recordingCount:(n.recording_count_by_url||{})[s.url]},s.num))]}),b.jsxs(Wt,{gap:"xs",children:[b.jsx(Ie,{size:"xs",tt:"uppercase",fw:700,c:"dimmed",children:"Active Channels"}),l.length===0?b.jsx(Ie,{size:"sm",c:"dimmed",children:"No active channels with clients found."}):l.map(s=>b.jsx(U6,{channel:s,timeout:n.timeout,pollInterval:n.poll_interval,isRecording:i.has(s.channel_number)},s.channel_number))]}),(n.stopped_log||[]).length>0&&b.jsxs(Wt,{gap:4,children:[b.jsx(Zm,{label:"Recent Terminations",labelPosition:"left"}),[...n.stopped_log].reverse().slice(0,10).map((s,c)=>b.jsxs(Nt,{gap:"xs",wrap:"nowrap",children:[b.jsx(F_,{size:12,color:"var(--mantine-color-red-6)",style:{flexShrink:0}}),b.jsxs(Ie,{size:"xs",c:"dimmed",truncate:!0,children:[S0(s.time,o),", ",s.channel,", ip=",s.ip," user=",s.username||"?"," (",s.reason,")"]})]},c))]})]})}const Y6=5e3;function q6({onLoggedOut:n}){const[o,l]=w.useState(null),[i,s]=w.useState({}),[c,f]=w.useState(null),[m,p]=w.useState(""),[h,v]=w.useState(!1),[y,S]=w.useState(null),x=w.useCallback(async()=>{try{const[O,H]=await Promise.all([M6(),O6()]);l(O);const k=H.settings??{},Z=[...O.global??[],...(O.media_servers??[]).flatMap(ae=>ae.fields)],ne={...k};for(const ae of Z)!(ae.id in ne)&&ae.default!==void 0&&(ne[ae.id]=ae.default);s(ne)}catch(O){O.status!==401&&p(O.message)}},[]),C=w.useCallback(async()=>{try{const O=await A6();f(O)}catch{}},[]);w.useEffect(()=>{x()},[x]),w.useEffect(()=>{C();const O=setInterval(C,Y6);return()=>clearInterval(O)},[C]),w.useEffect(()=>(b0(n),()=>b0(()=>{})),[n]);const E=w.useCallback(O=>s(H=>({...H,...O})),[]);async function R(){const O=(o?.media_server_count??1)+1;try{await Zs({media_server_count:O}),await x(),Vt.show({message:`Media Server ${O} added`,color:"green",autoClose:2e3})}catch(H){Vt.show({title:"Failed",message:H.message,color:"red",autoClose:4e3})}}async function N(O){const H=o?.media_server_count??1;if(H<=1)return;const k=O>1?`_${O}`:"",Z={[`media_server_url${k}`]:null,[`media_server_api_key${k}`]:null,[`media_server_identifier${k}`]:null,media_server_count:H-1};try{await Zs(Z),await x(),Vt.show({message:`Media Server ${O} removed`,color:"green",autoClose:2e3})}catch(ne){Vt.show({title:"Failed",message:ne.message,color:"red",autoClose:4e3})}}async function j(){v(!0);try{const O=await D6();Vt.show({message:O.message||"Monitor restarted",color:O.status==="success"?"green":"red",autoClose:4e3}),await C()}catch(O){Vt.show({title:"Restart failed",message:O.message,color:"red",autoClose:4e3})}finally{v(!1)}}if(m)return b.jsx(ci,{mih:"100dvh",children:b.jsx(Ie,{c:"red",children:m})});if(!o)return b.jsx(ci,{mih:"100dvh",children:b.jsx(ko,{})});const{global:M=[],media_servers:z=[],media_server_count:U}=o;return b.jsxs(Bn,{header:{height:56},children:[b.jsx(y6,{logoUrl:W1,appName:"Embyfin Stream Cleanup",version:"1.3.0",githubUrl:"https://github.com/swvn-dispatch/embyfin-stream-cleanup",username:N6(),onLogout:n,actions:[{key:"restart",label:"Restart Monitor",icon:m6,loading:h,onClick:()=>S({title:"Restart Monitor",confirmLabel:"Restart",color:"orange",message:"Restart the stream monitor (and dashboard server, if enabled) with the current settings?",onConfirm:j})}]}),b.jsx(Bn.Main,{children:b.jsxs(Wt,{p:"md",maw:860,mx:"auto",children:[c&&b.jsx(k6,{status:c}),b.jsx(E6,{fields:M,values:i,onSave:Zs,onOptimisticChange:E,onSaved:()=>Vt.show({message:"Saved",color:"green",autoClose:1500}),onError:O=>Vt.show({title:"Save failed",message:O.message,color:"red",autoClose:4e3})}),b.jsx(Ie,{size:"xs",tt:"uppercase",fw:700,c:"dimmed",mt:"sm",children:"Media Servers"}),b.jsxs(Nt,{gap:6,wrap:"nowrap",mt:-8,children:[b.jsx(K1,{size:13,color:"var(--mantine-color-dimmed)",style:{flexShrink:0}}),b.jsx(Ie,{size:"xs",c:"dimmed",children:`Changes to a server's URL, API key, or identifier are picked up automatically within one poll cycle, or immediately if you use "Restart Monitor" above.`})]}),z.map(({n:O,fields:H})=>b.jsx(z6,{n:O,fields:H,settings:i,isLast:O===U,onSettingsChange:E,onRemove:()=>N(O)},O)),b.jsx(Zn,{variant:"default",onClick:R,children:"+ Add Media Server"})]})}),b.jsx(S6,{action:y,onClose:()=>S(null)})]})}function G6(){const[n,o]=w.useState(_6());return n?b.jsx(q6,{onLoggedOut:()=>{R6(),o(!1)}}):b.jsx(b6,{logoUrl:W1,appName:"Embyfin Stream Cleanup",description:"Sign in with your Dispatcharr credentials to view live status and edit settings.",onLogin:T6,onLoggedIn:()=>o(!0)})}Rw.createRoot(document.getElementById("root")).render(b.jsx(w.StrictMode,{children:b.jsx(g6,{children:b.jsx(G6,{})})})); diff --git a/plugins/embyfin-stream-cleanup/dash/static/icon-192.png b/plugins/embyfin-stream-cleanup/dash/static/icon-192.png new file mode 100644 index 0000000..b5590d1 Binary files /dev/null and b/plugins/embyfin-stream-cleanup/dash/static/icon-192.png differ diff --git a/plugins/embyfin-stream-cleanup/dash/static/icon-512.png b/plugins/embyfin-stream-cleanup/dash/static/icon-512.png new file mode 100644 index 0000000..3a88b35 Binary files /dev/null and b/plugins/embyfin-stream-cleanup/dash/static/icon-512.png differ diff --git a/plugins/embyfin-stream-cleanup/dash/static/index.html b/plugins/embyfin-stream-cleanup/dash/static/index.html new file mode 100644 index 0000000..57ac4b0 --- /dev/null +++ b/plugins/embyfin-stream-cleanup/dash/static/index.html @@ -0,0 +1,19 @@ + + + + + + + + + + + + Embyfin Stream Cleanup + + + + +
+ + diff --git a/plugins/embyfin-stream-cleanup/dash/static/logo.png b/plugins/embyfin-stream-cleanup/dash/static/logo.png new file mode 100644 index 0000000..5ac4dff Binary files /dev/null and b/plugins/embyfin-stream-cleanup/dash/static/logo.png differ diff --git a/plugins/embyfin-stream-cleanup/dash/static/manifest.json b/plugins/embyfin-stream-cleanup/dash/static/manifest.json new file mode 100644 index 0000000..64f1e79 --- /dev/null +++ b/plugins/embyfin-stream-cleanup/dash/static/manifest.json @@ -0,0 +1,12 @@ +{ + "name": "Embyfin Stream Cleanup", + "short_name": "Embyfin Cleanup", + "start_url": ".", + "display": "standalone", + "theme_color": "#1971c2", + "background_color": "#1a1b1e", + "icons": [ + { "src": "icon-192.png", "sizes": "192x192", "type": "image/png", "purpose": "any maskable" }, + { "src": "icon-512.png", "sizes": "512x512", "type": "image/png", "purpose": "any maskable" } + ] +} diff --git a/plugins/embyfin-stream-cleanup/dashboard.py b/plugins/embyfin-stream-cleanup/dashboard.py deleted file mode 100644 index acbe264..0000000 --- a/plugins/embyfin-stream-cleanup/dashboard.py +++ /dev/null @@ -1,657 +0,0 @@ -"""Debug dashboard HTML rendering. - -All page generation for the debug server lives here. The server module -(server.py) handles lifecycle and WSGI plumbing and delegates to these -functions for actual content. -""" - -import re -import time - -from .config import PLUGIN_CONFIG - -# ── Masking helpers ────────────────────────────────────────────────────────── - -_IP_RE = re.compile(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}') - - -def _mask_ip(ip): - """Mask an IP address, keeping the first octet: 192.168.1.50 → 192.*.*.*""" - parts = ip.split(".") - if len(parts) == 4: - return f"{parts[0]}.*.*.*" - return "***" - - -def _mask_url(url): - """Mask the host portion of a URL: http://192.168.1.50:8096 → http://192.*.*.*:8096""" - if not url or url == "?": - return url - m = re.match(r'(https?://)(.+?)(\:\d+)?(/.*)?\s*$', url, re.IGNORECASE) - if m: - scheme, host, port, path = m.group(1), m.group(2), m.group(3) or "", m.group(4) or "" - if _IP_RE.fullmatch(host): - host = _mask_ip(host) - else: - host = "***" - return f"{scheme}{host}{port}{path}" - return "***" - - -def _mask_username(username): - """Mask a username: alice → a***e, ab → a*""" - if not username: - return username - if len(username) <= 2: - return username[0] + "*" - return username[0] + "***" + username[-1] - - -# ── Server type registry ──────────────────────────────────────────────────── -# Each instance defines visual attributes for a media server type. -# To add a new server type, add an instance here. Everything else adapts. - - -def _svg(inner, css_class, suffix=""): - """Wrap SVG inner content in a sized element.""" - return ( - f'' - f'{inner.format(suffix=suffix)}' - ) - - -class ServerType: - """Visual attributes for a media server type.""" - - def __init__(self, color, css_class, icon_paths=""): - self.color = color - self.css_class = css_class - self._icon_paths = icon_paths - - @property - def icon_lg(self): - if not self._icon_paths: - return "" - return _svg(self._icon_paths, "srv-icon", suffix="l") + " " - - @property - def icon_sm(self): - if not self._icon_paths: - return "" - return _svg(self._icon_paths, "srv-icon-sm", suffix="s") - - -EMBY = ServerType( - color="#52b54b", - css_class="srv-emby", - icon_paths=( - '' - '' - ), -) - -JELLYFIN = ServerType( - color="#aa5cc3", - css_class="srv-jellyfin", - icon_paths=( - '' - '' - '' - '' - '' - '' - '' - '' - ), -) - -UNKNOWN = ServerType( - color="#888", - css_class="srv-unknown", -) - -SERVER_TYPES = { - "Emby": EMBY, - "Jellyfin": JELLYFIN, -} - - -def _get_server_type(type_name): - """Look up server type by name, falling back to UNKNOWN.""" - return SERVER_TYPES.get(type_name, UNKNOWN) - - -def _server_badge(match_server): - """Build inline server icon + name HTML for match labels.""" - if not match_server: - return "" - srv_type = match_server.get("type") - srv_name = match_server.get("name") - if not srv_name and not srv_type: - return "" - st = _get_server_type(srv_type) - icon = (st.icon_sm + " ") if st.icon_sm else "" - label = srv_name or srv_type - return f'{icon}{label} - ' - - -# ── Client row rendering ──────────────────────────────────────────────────── - -def render_client_row(client, is_match, timeout=30, poll_interval=10, mask=False): - """Render a single Dispatcharr client as an HTML row.""" - row_class = "match" if is_match else "unmonitored" - ip = client.get("ip", "?") - username = client.get("username", "") - if mask: - ip = _mask_ip(ip) if ip != "?" else ip - username = _mask_username(username) if username else username - user_agent = client.get("user_agent", "") - duration = client.get("connected_duration", "") - match_reason = client.get("match_reason", "") - match_server = client.get("match_server") - idle_seconds = client.get("idle_seconds") - in_grace = client.get("in_grace", False) - # Don't consider a client idle unless it has been inactive - # longer than the poll interval; anything below that is just - # normal jitter between data chunks. - is_idle = idle_seconds is not None and idle_seconds >= poll_interval - - if mask and match_reason: - def _mask_match_reason(m): - val = m.group(1) - if _IP_RE.fullmatch(val): - return f"({_mask_ip(val)})" - return f"({_mask_username(val)})" - match_reason = re.sub(r'\(([^)]+)\)', _mask_match_reason, match_reason) - - label_html = "" - srv_badge = _server_badge(match_server) if is_match else "" - if is_match: - pool_absent = client.get("pool_absent_seconds") - if client.get("is_orphan"): - label_html = f'ORPHAN - {srv_badge}{match_reason} (no active media server session - will terminate)' - elif in_grace and is_idle and idle_seconds >= timeout: - label_html = f'GRACE PERIOD - {srv_badge}{match_reason} (idle {int(idle_seconds)}s - termination paused)' - elif idle_seconds is not None and idle_seconds >= timeout: - label_html = f'WILL TERMINATE - {srv_badge}{match_reason} (idle {int(idle_seconds)}s / {timeout}s timeout)' - elif pool_absent is not None and pool_absent >= timeout: - label_html = f'WILL TERMINATE - {srv_badge}{match_reason} (absent from pool {int(pool_absent)}s / {timeout}s timeout)' - elif pool_absent is not None: - label_html = f'MONITORED - {srv_badge}{match_reason} - absent from pool {int(pool_absent)}s' - elif is_idle: - label_html = f'MONITORED - {srv_badge}{match_reason} - idle {int(idle_seconds)}s' - else: - row_class = "compliant" - label_html = f'{srv_badge}{match_reason}' - else: - label_html = 'UNMONITORED' - - fields = [f'IP: {ip}'] - if username: - fields.append(f'User: {username}') - if duration: - fields.append(f'Connected: {duration}') - - return f'''
- {label_html} -
{"".join(fields)}
-
''' - - -# ── Debug page ─────────────────────────────────────────────────────────────── - -def render_debug_page(debug_state, settings): - """Build the full debug dashboard HTML from monitor state. - - Returns the HTML as a string. - """ - now = time.time() - plugin_name = PLUGIN_CONFIG.get('name', 'Emby Stream Cleanup') - mask = settings.get("mask_sensitive_data", False) - timeout = debug_state.get("timeout", 30) - poll_interval = debug_state.get("poll_interval", 10) - monitor_running = debug_state.get("running", False) - - # Monitor status - monitor_badge = ( - 'Running' if monitor_running - else 'Stopped' - ) - - # Media server status - emby_configured = debug_state.get("emby_configured", False) - emby_active_count = debug_state.get("emby_active_count") - emby_error = debug_state.get("emby_error") - media_servers = debug_state.get("media_servers", []) - recording_count_by_url = debug_state.get("recording_count_by_url", {}) - total_recordings = sum(recording_count_by_url.values()) - emby_html = "" - media_server_cards = "" - if emby_configured: - if emby_error: - emby_html = 'Media Server PoolError (see below)' - elif emby_active_count is not None: - total_pool = emby_active_count + total_recordings - emby_html = f'Media Server Pool{total_pool} session(s)' - else: - emby_html = 'Media Server PoolConnecting...' - - # Build per-server cards - if media_servers: - media_server_cards = '

Media Servers

' - server_identifiers = debug_state.get("server_identifiers", {}) - for srv in media_servers: - srv_num = srv.get("num", "?") - srv_type = srv.get("type") - srv_name = srv.get("name") - srv_url = srv.get("url", "") - st = _get_server_type(srv_type) - srv_label = srv_name or f'Server {srv_num}' - srv_icon = st.icon_lg - if not srv_name and srv_type: - srv_label += f' ({srv_type})' - srv_url_display = _mask_url(srv_url) if mask else srv_url - srv_idents = server_identifiers.get(srv_num, []) - idents_display = ", ".join( - (_mask_ip(i) if _IP_RE.fullmatch(i) else _mask_username(i)) if mask else i - for i in srv_idents - ).upper() if srv_idents else "(no identifier)" - srv_active = srv.get("active") - srv_error = srv.get("error") - srv_rec_count = recording_count_by_url.get(srv_url, 0) - if srv_error: - srv_class = "srv-unknown" - srv_badge = 'Error' - err_display = _mask_url(srv_error) if mask else srv_error - srv_detail = f'{err_display}' - elif srv_active is not None: - srv_class = st.css_class - srv_total = srv_active + srv_rec_count - srv_badge = f'{srv_total} session(s)' - rec_detail = f' ({srv_active} live, {srv_rec_count} DVR)' if srv_rec_count else "" - srv_detail = f'{srv_total} active stream(s) detected{rec_detail}' - else: - srv_class = "srv-unknown" - srv_badge = 'Connecting' - srv_detail = 'Waiting for first poll...' - media_server_cards += ( - f'
' - f'
' - f'{srv_icon}{srv_label}' - f'{srv_badge}' - f'
' - f'
{srv_url_display} - {srv_detail}
' - f'
Identifier: {idents_display}
' - f'
' - ) - - # Build channel cards from last scan - scan = debug_state.get("scan", {}) - recording_channels = debug_state.get("recording_channels", set()) - channels_html = "" - if scan: - for ch_uuid, ch_data in sorted(scan.items(), key=lambda x: x[1].get("channel_number", "")): - channel_name = ch_data.get("channel_name", "") - channel_number = ch_data.get("channel_number", "?") - ch_in_grace = ch_data.get("in_grace", False) - ch_state = ch_data.get("channel_state", "") - clients = ch_data.get("clients", []) - - matched_clients = [c for c in clients if c.get("is_target_match")] - other_clients = [c for c in clients if not c.get("is_target_match")] - - # Determine card status based on idle state of matched clients - has_idle = any( - (c.get("idle_seconds") or 0) >= poll_interval - for c in matched_clients - ) - - if ch_in_grace: - status_class = "grace" - status_label = f"Grace period ({ch_state})" - status_desc = "Channel is buffering or switching streams - terminations paused" - elif has_idle: - status_class = "pending" - status_label = "Idle matched clients detected" - status_desc = "Matching clients will be terminated when timeout expires" - elif matched_clients: - status_class = "active" - status_label = f"{len(matched_clients)} matched client(s) active" - status_desc = "Clients are streaming data normally" - else: - status_class = "idle" - status_label = "No matched clients" - status_desc = "No clients on this channel match the configured identifier" - - name_html = f' {channel_name}' if channel_name else "" - is_recording = channel_number in recording_channels - rec_badge = ' ● DVR' if is_recording else "" - card_html = f''' -
-
- CH {channel_number}{name_html}{rec_badge} - {status_label} -
-
{status_desc}
''' - - if matched_clients: - card_html += f'' - if ch_in_grace: - card_html += '
Terminations PAUSED during failover/buffering
' - elif has_idle: - card_html += '
Idle clients WILL be terminated after timeout
' - for c in matched_clients: - card_html += render_client_row(c, is_match=True, timeout=timeout, poll_interval=poll_interval, mask=mask) - - if other_clients: - card_html += f'' - card_html += '
These connections are not monitored
' - for c in other_clients: - card_html += render_client_row(c, is_match=False, timeout=timeout, mask=mask) - - card_html += '
' - channels_html += card_html - else: - channels_html = '
No active channels with clients found.
' - - # Recent terminations - stopped_log = debug_state.get("stopped_log", []) - log_html = "" - if stopped_log: - log_html = '

Recent Terminations

' - for entry in reversed(stopped_log): - from datetime import datetime, timezone - ts = entry.get("time", 0) - ts_str = datetime.fromtimestamp(ts, tz=timezone.utc).strftime('%H:%M:%S UTC') - ago = int(now - ts) - reason = entry.get("reason", "idle") - is_orphan = reason.startswith("orphan") - reason_label = '[ORPHAN] ' if is_orphan else "" - log_ip = _mask_ip(entry.get("ip", "?")) if mask else entry.get("ip", "?") - log_user = _mask_username(entry.get("username", "?")) if mask else entry.get("username", "?") - log_html += ( - f'
' - f'{ts_str} ({ago}s ago) ' - f'{reason_label}' - f'{entry.get("channel", "?")} ' - f'ip={log_ip} ' - f'user={log_user} ' - f'{reason}' - f'
' - ) - - # Last scan time - scan_time = debug_state.get("scan_time", 0) - scan_ago = f"{int(now - scan_time)}s ago" if scan_time > 0 else "never" - - refresh_interval = min(poll_interval, 5) - - return _debug_html( - plugin_name, monitor_badge, - timeout, poll_interval, scan_ago, channels_html, log_html, - refresh_interval, emby_html, media_server_cards - ) - - -def _debug_html(plugin_name, monitor_badge, - timeout, poll_interval, scan_ago, channels_html, log_html, - refresh_interval, emby_html, media_server_cards): - return f""" - - - {plugin_name} - Debug - - - - -
- -

Debug {monitor_badge}

- - - - - - {emby_html} -
Timeout{timeout}s
Poll Interval{poll_interval}s
Last Scan{scan_ago}
- -
- How it works: - The monitor polls all active Dispatcharr channels every {poll_interval}s. - Each configured media server has client identifiers that link its session pool to - Dispatcharr connections. When a connection's channel is no longer in its server's - active session pool for {timeout}s, the connection is terminated. - Connections with no data flowing are terminated after {timeout * 2}s. - Orphaned connections (no matching media server session) are also cleaned up. - Non-matching clients are never affected. -
- - {media_server_cards} - -

Active Channels

- {channels_html} - {log_html} -
Auto-refreshes every {refresh_interval} seconds
-
- -""" - - -# ── Landing page ───────────────────────────────────────────────────────────── - -def render_landing_page(monitor): - """Build the landing page HTML. - - Returns the HTML as a string. - """ - plugin_name = PLUGIN_CONFIG.get('name', 'Emby Stream Cleanup') - plugin_version = PLUGIN_CONFIG.get('version', 'unknown version').lstrip('-') - plugin_description = PLUGIN_CONFIG.get('description', '') - repo_url = PLUGIN_CONFIG.get('repo_url', 'https://github.com/swvn-dispatch/embyfin-stream-cleanup') - - monitor_status = "Running" if monitor.is_running() else "Stopped" - - return f""" - - - {plugin_name} - - - -
-

{plugin_name}

-
{plugin_version}
-

{plugin_description}

-

Monitor: {monitor_status}

- -
- -""" diff --git a/plugins/embyfin-stream-cleanup/handler.py b/plugins/embyfin-stream-cleanup/handler.py index 0d75a09..2fe1275 100644 --- a/plugins/embyfin-stream-cleanup/handler.py +++ b/plugins/embyfin-stream-cleanup/handler.py @@ -62,6 +62,29 @@ def _get_failover_grace(): return 35 # safe default: 20 + 15 +def _ensure_dashboard(monitor, settings_dict): + """Self-healing dashboard-up check, run from the poll loop every cycle. + + Cheap and idempotent once the dashboard is up (see ensure_dashboard's + docstring in autostart.py). Unlike the Plugin()-construction-triggered + attempt in autostart.py, this runs inside a thread that's proven alive + for as long as the monitor itself is running in this process, so a + transient first-attempt failure (port not free yet, brief Redis hiccup) + gets retried automatically every poll_interval seconds without needing + Dispatcharr to reconstruct Plugin() again. + """ + try: + from .autostart import ensure_dashboard + ensure_dashboard(monitor, settings_dict) + monitor._dash_ensure_warned = False + except Exception as e: # noqa: BLE001 + if not monitor._dash_ensure_warned: + logger.warning(f"Emby stream cleanup: dashboard auto-start check failed, will keep retrying each poll cycle: {e}") + monitor._dash_ensure_warned = True + else: + logger.debug(f"Emby stream cleanup: dashboard auto-start check failed again (already warned): {e}") + + def _resolve_username(user_id_str, cache): """Resolve a Redis user_id string to a Django username. @@ -87,6 +110,10 @@ def __init__(self): self._thread = None self._running = False self._settings = {} + # Tracks whether we've already logged a dashboard-ensure failure at + # `warning` for the current run, so the poll loop's every-cycle + # retry doesn't spam the log -- see _poll_loop. + self._dash_ensure_warned = False # Per-client tracking: {(channel_uuid, client_id): first_idle_ts} # Records when we first noticed a client was idle so we can # measure idle duration across poll cycles. @@ -220,7 +247,7 @@ def _get_media_server_configs(self): # Note identifiers shared with lower-numbered servers (allowed — pools are unioned) dupes = idents & seen_idents if dupes: - logger.info( + logger.debug( f"Server {n}: identifier(s) {', '.join(sorted(dupes))} also on a " "lower-numbered server — pools will be combined for those identifiers" ) @@ -565,6 +592,7 @@ def start(self, settings=None): self._emby_error = None self._active_recording_channels = set() self._recording_count_by_url = {} + self._dash_ensure_warned = False # Mark as running in Redis (with heartbeat TTL so the key expires # if this process dies without cleaning up). @@ -653,6 +681,9 @@ def _poll_loop(self): # Re-read settings from DB so UI changes take effect self._refresh_settings() + # Self-healing dashboard check -- see _ensure_dashboard docstring. + _ensure_dashboard(self, self._settings) + self._poll_once() except Exception as e: logger.error(f"Stream monitor poll error: {e}", exc_info=True) diff --git a/plugins/embyfin-stream-cleanup/logo.png b/plugins/embyfin-stream-cleanup/logo.png index 84ad589..2cac1a3 100644 Binary files a/plugins/embyfin-stream-cleanup/logo.png and b/plugins/embyfin-stream-cleanup/logo.png differ diff --git a/plugins/embyfin-stream-cleanup/plugin.json b/plugins/embyfin-stream-cleanup/plugin.json index 375c8d2..a9de1e7 100644 --- a/plugins/embyfin-stream-cleanup/plugin.json +++ b/plugins/embyfin-stream-cleanup/plugin.json @@ -1,6 +1,6 @@ { "name": "Embyfin Stream Cleanup", - "version": "1.2.0", + "version": "1.3.0", "description": "Monitors Dispatcharr client activity and terminates idle Emby/Jellyfin connections", "license": "MIT", "discord_thread": "https://discord.com/channels/1340492560220684331/1491487318832447668", diff --git a/plugins/embyfin-stream-cleanup/server.py b/plugins/embyfin-stream-cleanup/server.py index e6f61c9..57fb9ef 100644 --- a/plugins/embyfin-stream-cleanup/server.py +++ b/plugins/embyfin-stream-cleanup/server.py @@ -1,12 +1,20 @@ -"""Debug HTTP server (optional). +"""Embyfin Stream Cleanup dashboard server. -Manages the gevent WSGI server lifecycle for the debug dashboard. -All HTML rendering is handled by the dashboard module. +Embeds a gevent WSGI server (own port) inside the Dispatcharr plugin process, +since Dispatcharr's plugin system has no route/static-serving hook of its own. +Serves: -Routes: - GET / Landing page - GET /debug Live debug dashboard (auto-refreshes) - GET /health Health check + GET /health Health check + * {dash_path}/api/* JSON API (see dash/api.py) + GET {dash_path}[/*] Static SPA (see dash/api.py::serve_static) + +`dash_path` (default "/dash") is read from plugin settings on every request +rather than baked in at build/start time, so it can be reconfigured live. + +Singleton lifecycle is local-process-only (matching force-fallback/multiview, +not this plugin's old Redis-coordinated approach) — see config.py and +CLAUDE.md for the reasoning. `get_current_server()`/`set_current_server()` +track only what's running in *this* worker process. """ import logging @@ -14,267 +22,231 @@ import threading import time -from .config import ( - PLUGIN_CONFIG, REDIS_KEY_RUNNING, REDIS_KEY_HOST, REDIS_KEY_PORT, - REDIS_KEY_STOP, DEFAULT_PORT, DEFAULT_HOST, - HEARTBEAT_TTL, -) -from .dashboard import render_debug_page, render_landing_page -from .utils import get_redis_client, read_redis_flag, normalize_host - logger = logging.getLogger(__name__) -# Module-level reference to the currently running server instance (per process). -_debug_server = None +_server_instance = None +_dash_api = None + + +def _load_dash_api(): + """Load src/dash/api.py using the same file-path loader as other submodules.""" + global _dash_api + if _dash_api is not None: + return _dash_api + import importlib.util + import os + import sys + parent = __name__.rsplit(".", 1)[0] if "." in __name__ else __name__ + mod_name = f"{parent}.dash_api" + if mod_name in sys.modules: + _dash_api = sys.modules[mod_name] + return _dash_api + api_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "dash", "api.py") + spec = importlib.util.spec_from_file_location(mod_name, api_path) + mod = importlib.util.module_from_spec(spec) + sys.modules[mod_name] = mod + spec.loader.exec_module(mod) + _dash_api = mod + return _dash_api def get_current_server(): """Return the active DebugServer instance for this process, or None.""" - return _debug_server + return _server_instance def set_current_server(server): """Set the active DebugServer instance for this process.""" - global _debug_server - _debug_server = server + global _server_instance + _server_instance = server + + +def _settings() -> dict: + try: + from apps.plugins.models import PluginConfig + return PluginConfig.objects.get(key="embyfin_stream_cleanup").settings + except Exception: + return {} + + +def _normalized_dash_path() -> str: + """Return the configured mount path, normalized to e.g. '/dash' (no trailing slash), or '' for root.""" + raw = (_settings().get("dash_path") or "/dash").strip() + if not raw.startswith("/"): + raw = "/" + raw + raw = raw.rstrip("/") + return raw # "" means mounted at server root class DebugServer: - """Lightweight gevent WSGI server for the debug dashboard.""" + """Embedded gevent WSGI server for the dashboard.""" def __init__(self, monitor, port=None, host=None): + from .config import DEFAULT_PORT, DEFAULT_HOST + from .utils import normalize_host self.monitor = monitor self.port = port if port is not None else DEFAULT_PORT self.host = normalize_host(host, DEFAULT_HOST) - logger.info(f"DebugServer initialised with host='{self.host}', port={self.port}") - self.server_thread = None - self.server = None + self._server = None + self._greenlet = None + self._thread = None self.running = False - self.settings = {} - - # -- Port verification ---------------------------------------------------- - - def _verify_stopped(self, timeout=3): - """Block until the server port is confirmed free (up to *timeout* seconds).""" - deadline = time.time() + timeout - while time.time() < deadline: - try: - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - sock.settimeout(0.5) - sock.bind((self.host, self.port)) - sock.close() - logger.info(f"Verified port {self.port} is free after server stop") - return True - except OSError: - try: - sock.close() - except Exception: - pass - time.sleep(0.2) - - logger.warning( - f"Port {self.port} still in use after {timeout}s - server may not have stopped cleanly" - ) - return False - # -- WSGI application ----------------------------------------------------- + # ------------------------------------------------------------------ WSGI def wsgi_app(self, environ, start_response): - """Handle a single HTTP request.""" - path = environ.get('PATH_INFO', '/') + path = environ.get("PATH_INFO", "") - if path == '/health': - start_response('200 OK', [('Content-Type', 'text/plain')]) + if path == "/health": + start_response("200 OK", [("Content-Type", "text/plain")]) return [b"OK\n"] - elif path == '/debug': - return self._serve_debug_page(start_response) + try: + return self._route(path, environ, start_response) + finally: + # Everything below here can touch Django's ORM (settings, auth) + # outside of Django's own request cycle, which never runs + # Django's usual request_finished cleanup. Do it ourselves so + # connections don't accumulate and eventually go stale. + try: + from django.db import close_old_connections + close_old_connections() + except Exception: + pass - elif path == '/': - return self._serve_landing_page(start_response) + def _route(self, path, environ, start_response): + dash_path = _normalized_dash_path() - else: - start_response('404 Not Found', [('Content-Type', 'text/plain')]) + if _settings().get("dash_enabled") != "enabled": + start_response("404 Not Found", [("Content-Type", "text/plain")]) return [b"Not Found\n"] - # -- Debug page ------------------------------------------------------------ - - def _serve_debug_page(self, start_response): - try: - debug_state = self.monitor.get_debug_state() - html = render_debug_page(debug_state, self.settings) - start_response('200 OK', [('Content-Type', 'text/html; charset=utf-8')]) - return [html.encode('utf-8')] - except Exception as e: - logger.error(f"Error generating debug page: {e}", exc_info=True) - start_response('500 Internal Server Error', [('Content-Type', 'text/plain')]) - return [b"Error generating debug page\n"] - - # -- Landing page ---------------------------------------------------------- - - def _serve_landing_page(self, start_response): - html = render_landing_page(self.monitor) - start_response('200 OK', [('Content-Type', 'text/html; charset=utf-8')]) - return [html.encode('utf-8')] - - # -- Lifecycle ------------------------------------------------------------- - - def start(self, settings=None) -> bool: - """Start the debug server in a background thread.""" + # Redirect the bare mount root (no trailing slash) so the browser's + # location bar ends in "/" -- the SPA build uses relative asset paths, + # which resolve against the current document's directory. + if dash_path and path == dash_path: + start_response("302 Found", [("Location", dash_path + "/")]) + return [b""] + + prefix = dash_path if dash_path else "" + if path == prefix or path.startswith(prefix + "/"): + sub = path[len(prefix):] or "/" + if sub.startswith("/api/"): + return self._handle_api(sub, environ, start_response) + return _load_dash_api().serve_static(dash_path, sub, start_response) + + start_response("404 Not Found", [("Content-Type", "text/plain")]) + return [b"Not Found\n"] + + def _handle_api(self, sub_path, environ, start_response): + api = _load_dash_api() + + if sub_path == "/api/auth/token": + return api.handle_auth_token(environ, start_response) + if sub_path == "/api/auth/refresh": + return api.handle_auth_refresh(environ, start_response) + if sub_path == "/api/status": + return api.handle_status(environ, start_response) + if sub_path == "/api/config": + return api.handle_config(environ, start_response) + if sub_path == "/api/fields": + return api.handle_fields(environ, start_response) + if sub_path == "/api/restart": + return api.handle_restart(environ, start_response) + + start_response("404 Not Found", [("Content-Type", "text/plain")]) + return [b"Not Found\n"] + + # ------------------------------------------------------------- lifecycle + + def start(self) -> bool: + """Start the dashboard server in a dedicated native thread. + + A gevent WSGI server's ``serve_forever`` greenlet only actually runs + if *something* keeps pumping the hub on whatever OS thread it was + spawned on. Fire-and-forget ``gevent.spawn()`` from an arbitrary + caller thread (the old approach here) only happened to work when + called from a thread that was already continuously pumped by other + gevent activity (e.g. the request-handling context ``Plugin()`` + construction runs on) -- it silently never binds when called from a + thread with no other gevent activity, like the monitor's own poll + loop thread. Matches dispatcharr-exporter's ``MetricsServer.start()`` + pattern: a dedicated thread creates the server, spawns its + ``serve_forever`` greenlet, then loops on ``gevent.sleep()`` forever + to keep that thread's hub alive for as long as the server should run. + ``start()`` blocks briefly to confirm the bind actually happened + before reporting success/failure, instead of assuming it will. + """ if self.running: - logger.warning("Debug server is already running") + logger.warning("Dashboard server is already running") return False - # Guard against duplicate servers across workers via Redis - redis_client = get_redis_client() - if redis_client and read_redis_flag(redis_client, REDIS_KEY_RUNNING): - logger.warning("Another debug server instance is already running (detected via Redis)") - return False - - current = get_current_server() - if current and current.is_running(): - logger.warning("Another debug server instance is already running in this process") - return False - - # Validate host / port binding - logger.info(f"Attempting to bind debug server to host='{self.host}', port={self.port}") try: - try: - socket.getaddrinfo(self.host, self.port, socket.AF_INET, socket.SOCK_STREAM) - except socket.gaierror as e: - logger.error( - f"Cannot resolve host '{self.host}': {e}. " - f"In Docker, use '0.0.0.0' to bind to all interfaces." - ) - return False - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind((self.host, self.port)) sock.close() except OSError as e: - if e.errno == -2 or 'Name or service not known' in str(e): - logger.error( - f"Cannot resolve host '{self.host}': {e}. " - f"In Docker, use '0.0.0.0' to bind to all interfaces." - ) - else: - logger.error(f"Cannot bind to {self.host}:{self.port}: {e}") + logger.warning(f"Embyfin dashboard: port {self.port} already taken, skipping ({e})") return False - self.settings = settings or {} - try: from gevent import pywsgi + except ImportError: + logger.error("gevent is not installed; cannot start the dashboard server") + return False - def run_server(): - try: - server_kwargs = { - 'listener': (self.host, self.port), - 'application': self.wsgi_app, - 'log': None, - } - - self.server = pywsgi.WSGIServer(**server_kwargs) - self.running = True - set_current_server(self) - - # Announce via Redis (with heartbeat TTL) - _rc = get_redis_client() - if _rc: - try: - _rc.set(REDIS_KEY_RUNNING, "1", ex=HEARTBEAT_TTL) - _rc.set(REDIS_KEY_HOST, self.host, ex=HEARTBEAT_TTL) - _rc.set(REDIS_KEY_PORT, str(self.port), ex=HEARTBEAT_TTL) - except Exception as e: - logger.warning(f"Could not set Redis running flags: {e}") - - logger.info(f"Debug server started on http://{self.host}:{self.port}/") - - from gevent import spawn, sleep - spawn(self.server.serve_forever) - - # Monitor for Redis stop signal - monitor_redis = get_redis_client() - while self.running: - try: - if monitor_redis and read_redis_flag(monitor_redis, REDIS_KEY_STOP): - logger.info("Debug server stop signal detected via Redis") - self.running = False - try: - self.server.stop(timeout=5) - except Exception as e: - logger.warning(f"Error during server.stop(): {e}") - self._verify_stopped(timeout=3) - break - elif not monitor_redis: - monitor_redis = get_redis_client() - except Exception as e: - logger.warning(f"Error checking stop signal: {e}") - monitor_redis = get_redis_client() - - # Refresh heartbeat so keys don't expire while alive - if monitor_redis: - try: - monitor_redis.set(REDIS_KEY_RUNNING, "1", ex=HEARTBEAT_TTL) - monitor_redis.expire(REDIS_KEY_HOST, HEARTBEAT_TTL) - monitor_redis.expire(REDIS_KEY_PORT, HEARTBEAT_TTL) - except Exception: - pass - - sleep(1) - - # Cleanup Redis flags - _rc = get_redis_client() - if _rc: - try: - _rc.delete(REDIS_KEY_RUNNING, REDIS_KEY_HOST, REDIS_KEY_PORT, REDIS_KEY_STOP) - except Exception as e: - logger.warning(f"Could not clear Redis flags on shutdown: {e}") + def _run(): + try: + from gevent import spawn, sleep as gsleep + self._server = pywsgi.WSGIServer( + (self.host, self.port), self.wsgi_app, log=None, + ) + self.running = True + set_current_server(self) + self._greenlet = spawn(self._server.serve_forever) + + # Keep this thread's gevent hub alive for as long as the + # server should run -- nothing else pumps it otherwise. + while self.running: + gsleep(1) + except OSError as e: + # EADDRINUSE here means a concurrent worker won the race between + # our test-bind above and this re-bind -- expected on multi-worker + # startup, not an error. + logger.info(f"Embyfin dashboard: port {self.port} taken by concurrent worker ({e})") + except Exception as e: # noqa: BLE001 + logger.error(f"Dashboard server crashed: {e}", exc_info=True) + finally: + self.running = False + if get_current_server() is self: set_current_server(None) - logger.info("Debug server stopped and cleaned up") - except Exception as e: - logger.error(f"Error running debug server: {e}", exc_info=True) - self.running = False + self._thread = threading.Thread( + target=_run, daemon=True, name="embyfin-dashboard-server", + ) + self._thread.start() - self.server_thread = threading.Thread(target=run_server, daemon=True) - self.server_thread.start() + # Brief wait for the server thread to actually bind and confirm. + deadline = time.time() + 2.0 + while time.time() < deadline and not self.running and self._thread.is_alive(): + time.sleep(0.05) - time.sleep(0.5) - return self.running - - except ImportError: - logger.error("gevent is not installed") - return False + return self.running def stop(self) -> bool: - """Stop the debug server.""" if not self.running: return False - - logger.info("Stopping debug server...") - - if self.server: + if self._server: try: - self.server.stop(timeout=5) + self._server.stop(timeout=5) except Exception as e: logger.warning(f"Error during server.stop(): {e}") - self._verify_stopped(timeout=3) - self.running = False set_current_server(None) - - redis_client = get_redis_client() - if redis_client: - try: - redis_client.delete(REDIS_KEY_RUNNING, REDIS_KEY_HOST, REDIS_KEY_PORT) - except Exception as e: - logger.warning(f"Could not clear Redis flags: {e}") - + logger.info("Dashboard server stopped") return True def is_running(self) -> bool: - return self.running and self.server_thread is not None and self.server_thread.is_alive() + return self.running and self._thread is not None and self._thread.is_alive()